class RuboCop::Cop::Primer::DeprecatedArguments

Component.new(foo: :bar)
good
Component.new(foo: :deprecated)
bad
This cop ensures that components don’t use deprecated arguments

def autocorrect(node)

def autocorrect(node)
  lambda do |corrector|
    key, value = extract_kv_from(node)
    replacement = DEPRECATED[key][value]
    corrector.replace(node, replacement) if replacement.present?
  end
end

def extract_kv_from(pair)

def extract_kv_from(pair)
  key = pair.key.value
  value = case pair.value.type
          when :sym, :str
            pair.value.value.to_sym
          when :false, :true
            pair.value.type == :true
          else
            return []
          end
  [key, value]
end

def on_send(node)

def on_send(node)
  return unless valid_node?(node)
  return unless node.arguments?
  # we are looking for hash arguments and they are always last
  kwargs = node.arguments.last
  return unless kwargs.type == :hash
  kwargs.pairs.each do |pair|
    # Skip if we're not dealing with a symbol key
    next if pair.key.type != :sym
    key, value = extract_kv_from(pair)
    next unless DEPRECATED.key?(key) && DEPRECATED[key].key?(value)
    add_offense(pair, message: INVALID_MESSAGE)
  end
end