class RuboCop::Cop::Rails::EnvironmentComparison

This cop checks that Rails.env is compared using `.production?`-like methods instead of equality against a string or symbol.

@example

# bad
Rails.env == 'production'

# bad, always returns false
Rails.env == :test

# good
Rails.env.production?

Constants

MSG
RESTRICT_ON_SEND
SYM_MSG

Public Instance Methods

on_send(node) click to toggle source
# File lib/rubocop/cop/rails/environment_comparison.rb, line 63
def on_send(node)
  if (env_node = comparing_str_env_with_rails_env_on_lhs?(node) ||
                 comparing_str_env_with_rails_env_on_rhs?(node))
    env, = *env_node
    bang = node.method?(:!=) ? '!' : ''
    message = format(MSG, bang: bang, env: env, source: node.source)

    add_offense(node, message: message) do |corrector|
      autocorrect(corrector, node)
    end
  end

  return unless comparing_sym_env_with_rails_env_on_lhs?(node) || comparing_sym_env_with_rails_env_on_rhs?(node)

  add_offense(node, message: SYM_MSG) do |corrector|
    autocorrect(corrector, node)
  end
end

Private Instance Methods

autocorrect(corrector, node) click to toggle source
# File lib/rubocop/cop/rails/environment_comparison.rb, line 84
def autocorrect(corrector, node)
  replacement = build_predicate_method(node)

  corrector.replace(node.source_range, replacement)
end
build_predicate_method(node) click to toggle source
# File lib/rubocop/cop/rails/environment_comparison.rb, line 90
def build_predicate_method(node)
  if rails_env_on_lhs?(node)
    build_predicate_method_for_rails_env_on_lhs(node)
  else
    build_predicate_method_for_rails_env_on_rhs(node)
  end
end
build_predicate_method_for_rails_env_on_lhs(node) click to toggle source
# File lib/rubocop/cop/rails/environment_comparison.rb, line 103
def build_predicate_method_for_rails_env_on_lhs(node)
  bang = node.method?(:!=) ? '!' : ''

  "#{bang}#{node.receiver.source}.#{content(node.first_argument)}?"
end
build_predicate_method_for_rails_env_on_rhs(node) click to toggle source
# File lib/rubocop/cop/rails/environment_comparison.rb, line 109
def build_predicate_method_for_rails_env_on_rhs(node)
  bang = node.method?(:!=) ? '!' : ''

  "#{bang}#{node.first_argument.source}.#{content(node.receiver)}?"
end
rails_env_on_lhs?(node) click to toggle source
# File lib/rubocop/cop/rails/environment_comparison.rb, line 98
def rails_env_on_lhs?(node)
  comparing_str_env_with_rails_env_on_lhs?(node) ||
    comparing_sym_env_with_rails_env_on_lhs?(node)
end