class RuboCop::Cop::Style::PreferredHashMethods

This cop (by default) checks for uses of methods Hash#has_key? and Hash#has_value? where it enforces Hash#key? and Hash#value? It is configurable to enforce the inverse, using `verbose` method names also.

@example

# EnforcedStyle: short (default)

# bad
Hash#has_key?
Hash#has_value?

# good
Hash#key?
Hash#value?

@example

# EnforcedStyle: verbose

# bad
Hash#key?
Hash#value?

# good
Hash#has_key?
Hash#has_value?

Constants

MSG
OFFENDING_SELECTORS

Public Instance Methods

autocorrect(node) click to toggle source
# File lib/rubocop/cop/style/preferred_hash_methods.rb, line 50
def autocorrect(node)
  lambda do |corrector|
    corrector.replace(node.loc.selector,
                      proper_method_name(node.loc.selector.source))
  end
end
on_send(node) click to toggle source
# File lib/rubocop/cop/style/preferred_hash_methods.rb, line 43
def on_send(node)
  return unless node.arguments.one? &&
                offending_selector?(node.method_name)

  add_offense(node, location: :selector)
end

Private Instance Methods

message(node) click to toggle source
# File lib/rubocop/cop/style/preferred_hash_methods.rb, line 59
def message(node)
  format(MSG, proper_method_name(node.method_name), node.method_name)
end
offending_selector?(method_name) click to toggle source
# File lib/rubocop/cop/style/preferred_hash_methods.rb, line 71
def offending_selector?(method_name)
  OFFENDING_SELECTORS[style].include?(method_name)
end
proper_method_name(method_name) click to toggle source
# File lib/rubocop/cop/style/preferred_hash_methods.rb, line 63
def proper_method_name(method_name)
  if style == :verbose
    "has_#{method_name}"
  else
    method_name.to_s.sub(/has_/, '')
  end
end