class RuboCopMethodOrder::MethodNodeCollection

Hold collection of public instance methods that has custom sorted order.

Attributes

nodes[R]

Public Class Methods

new() click to toggle source
# File lib/rubocop_method_order/method_node_collection.rb, line 8
def initialize
  @nodes = []
end

Public Instance Methods

offenses() click to toggle source
# File lib/rubocop_method_order/method_node_collection.rb, line 12
def offenses
  nodes.reject { |node| definition_order_correct?(node) }.map do |node|
    {
      node: node,
      other_node: previous_node_from_definition_order(node)
    }
  end
end
push(method_node) click to toggle source
# File lib/rubocop_method_order/method_node_collection.rb, line 21
def push(method_node)
  @nodes << method_node
  self
end
replacements() click to toggle source

Build a hash for every node that is not at the correct, final position which includes any nodes that need to be moved. Used for autocorrecting.

# File lib/rubocop_method_order/method_node_collection.rb, line 28
def replacements
  nodes.reject { |node| method_order_correct?(node) }.each_with_object({}) do |node, obj|
    node_to_replace = nodes[expected_method_index(node)]

    obj[node] = {
      node => node_to_replace,
      node_to_replace => nodes[expected_method_index(node_to_replace)]
    }
  end
end

Private Instance Methods

definition_order_correct?(method_node) click to toggle source
# File lib/rubocop_method_order/method_node_collection.rb, line 41
def definition_order_correct?(method_node)
  previous_node_from_definition_order(method_node).nil?
end
expected_method_index(method_node) click to toggle source
# File lib/rubocop_method_order/method_node_collection.rb, line 45
def expected_method_index(method_node)
  ordered_nodes.index(method_node)
end
method_order_correct?(method_node) click to toggle source
# File lib/rubocop_method_order/method_node_collection.rb, line 49
def method_order_correct?(method_node)
  nodes.index(method_node) == ordered_nodes.index(method_node)
end
ordered_nodes() click to toggle source
# File lib/rubocop_method_order/method_node_collection.rb, line 53
def ordered_nodes
  nodes.sort(&method(:sort))
end
previous_node_from_definition_order(method_node) click to toggle source
# File lib/rubocop_method_order/method_node_collection.rb, line 57
def previous_node_from_definition_order(method_node)
  index = nodes.index(method_node)
  nodes[0..index].find { |comp_node| sort(comp_node, method_node).positive? }
end
sort(one, two) click to toggle source
# File lib/rubocop_method_order/method_node_collection.rb, line 62
def sort(one, two)
  one.method_name <=> two.method_name
end