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