class RuboCop::Cop::Rails::UnknownEnv

This cop checks that environments called with `Rails.env` predicates exist. By default the cop allows three environments which Rails ships with: `development`, `test`, and `production`. More can be added to the `Environments` config parameter.

@example

# bad
Rails.env.proudction?
Rails.env == 'proudction'

# good
Rails.env.production?
Rails.env == 'production'

Constants

MSG
MSG_SIMILAR

Public Instance Methods

on_send(node) click to toggle source
# File lib/rubocop/cop/rails/unknown_env.rb, line 42
def on_send(node)
  unknown_environment_predicate?(node) do |name|
    add_offense(node.loc.selector, message: message(name))
  end

  unknown_environment_equal?(node) do |str_node|
    name = str_node.value
    add_offense(str_node, message: message(name))
  end
end

Private Instance Methods

collect_variable_like_names(_scope) click to toggle source
# File lib/rubocop/cop/rails/unknown_env.rb, line 55
def collect_variable_like_names(_scope)
  environments
end
environments() click to toggle source
# File lib/rubocop/cop/rails/unknown_env.rb, line 90
def environments
  cop_config['Environments']
end
message(name) click to toggle source
# File lib/rubocop/cop/rails/unknown_env.rb, line 59
def message(name)
  name = name.to_s.chomp('?')

  # DidYouMean::SpellChecker is not available in all versions of Ruby,
  # and even on versions where it *is* available (>= 2.3), it is not
  # always required correctly. So we do a feature check first. See:
  # https://github.com/rubocop/rubocop/issues/7979
  similar_names = if defined?(DidYouMean::SpellChecker)
                    spell_checker = DidYouMean::SpellChecker.new(dictionary: environments)
                    spell_checker.correct(name)
                  else
                    []
                  end

  if similar_names.empty?
    format(MSG, name: name)
  else
    format(MSG_SIMILAR, name: name, similar: similar_names.join(', '))
  end
end
unknown_env_name?(name) click to toggle source
# File lib/rubocop/cop/rails/unknown_env.rb, line 86
def unknown_env_name?(name)
  !environments.include?(name)
end
unknown_env_predicate?(name) click to toggle source
# File lib/rubocop/cop/rails/unknown_env.rb, line 80
def unknown_env_predicate?(name)
  name = name.to_s
  name.end_with?('?') &&
    !environments.include?(name[0..-2])
end