ruby-on-railsrubocopruby-style-guide

Rails 4 api default limit params do not pass cops


This seems a bit crazy here. Is there another way to write this function to get the cops to pass on it, or should I just make it exempt?

Code

  def set_default_limit
    params[:limit]  = params[:limit].to_i > 0 ? params[:limit] : AppSettings.api[:default_limit]
    params[:limit]  = AppSettings.api[:max_limit] if params[:limit].to_i > AppSettings.api[:max_limit]
  end

Cop Error

app/controllers/application_controller.rb:66:3: C: Assignment Branch Condition size for set_default_limit is too high. [18.22/15]
  def set_default_limit
  ^^^

Solution

  • What you want to do with this method is:

    1. if params[:limit] exceeds max limit, set it to max limit
    2. if params[:limit] is less or equal to 0, set it to default limit

    Code:

    def set_default_limit
      api_settings = AppSettings.api
    
      if params[:limit].to_i > api_settings[:max_limit]
        params[:limit] = api_settings[:max_limit]
      elsif params[:limit].to_i <= 0
        params[:limit] = api_settings[:default_limit]
      end
    end
    

    Rubocop result:

    $ cat test.rb
    def set_default_limit
      api_settings = AppSettings.api
    
      if params[:limit].to_i > api_settings[:max_limit]
        params[:limit] = api_settings[:max_limit]
      elsif params[:limit].to_i <= 0
        params[:limit] = api_settings[:default_limit]
      end
    end
    
    $ rubocop test.rb
    Inspecting 1 file
    .
    
    1 file inspected, no offenses detected