class RuboCop::Cop::Performance::CompareWithBlock

array.min_by(&:foo)
array.max_by(&:foo)
end
var.foo
array.sort_by do |var|
array.sort_by { |v| v.foo }
array.sort_by(&:foo)
@good
array.min { |a, b| a.foo <=> b.foo }
array.max { |a, b| a.foo <=> b.foo }
array.sort { |a, b| a.foo <=> b.foo }
@bad
@example
This cop also checks ‘max` and `min` methods.
can be replaced by `sort_by(&:foo)`.
This cop identifies places where `sort { |a, b| a.foo <=> b.foo }`

def autocorrect(node)

def autocorrect(node)
  send, = *node
  lambda do |corrector|
    method = node.children.last.children.last.children.last
    corrector.replace(compare_range(send, node),
                      "#{send.method_name}_by(&:#{method})")
  end
end

def compare_range(send, node)

def compare_range(send, node)
  range_between(send.loc.selector.begin_pos, node.loc.end.end_pos)
end

def on_block(node)

def on_block(node)
  compare?(node) do |send, var_a, var_b, method|
    range = compare_range(send, node)
    compare_method = send.method_name
    add_offense(node, range,
                format(MSG, compare_method, method,
                       compare_method, var_a, var_b,
                       var_a, method, var_b, method))
  end
end