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