Class: GemfileArranger::Traverse::SortBlock

Inherits:
Parser::AST::Processor
  • Object
show all
Defined in:
lib/gemfile_arranger/traverse/sort_block.rb

Instance Method Summary collapse

Constructor Details

#initialize(keys) ⇒ SortBlock

Returns a new instance of SortBlock.



4
5
6
# File 'lib/gemfile_arranger/traverse/sort_block.rb', line 4

def initialize(keys)
  @keys = Array(keys).dup.map(&:to_sym)
end

Instance Method Details

#on_begin(node) ⇒ Object



8
9
10
11
# File 'lib/gemfile_arranger/traverse/sort_block.rb', line 8

def on_begin(node)
  sorted_block = sort_block_with_keys(node, @keys)
  node.updated(:begin, sorted_block) if node != sorted_block
end

#sort_block_with_keys(node, keys) ⇒ Object



13
14
15
16
17
18
19
# File 'lib/gemfile_arranger/traverse/sort_block.rb', line 13

def sort_block_with_keys(node, keys)
  node.children.sort_by.with_index do |child, i|
    _, gem_name, *_ = child.children
    key_index = keys.index(gem_name) || keys.length
    [key_index, i]
  end
end