class RuboCop::Cop::Rails::EnvironmentComparison

Rails.env.production?
# good
Rails.env == :test
# bad, always returns false
Rails.env == ‘production’
# bad
@example
methods instead of equality against a string or symbol.
Checks that Rails.env is compared using ‘.production?`-like

def autocorrect(corrector, node)

def autocorrect(corrector, node)
  replacement = build_predicate_method(node)
  corrector.replace(node, replacement)
end

def build_predicate_method(node)

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

def build_predicate_method_for_rails_env_on_lhs(node)

def build_predicate_method_for_rails_env_on_lhs(node)
  bang = node.method?(:!=) ? '!' : ''
  "#{bang}#{node.receiver.source}.#{content(node.first_argument)}?"
end

def build_predicate_method_for_rails_env_on_rhs(node)

def build_predicate_method_for_rails_env_on_rhs(node)
  bang = node.method?(:!=) ? '!' : ''
  "#{bang}#{node.first_argument.source}.#{content(node.receiver)}?"
end

def on_send(node)

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

def rails_env_on_lhs?(node)

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