Class: GemfileArranger::Traverse::SortGemsInGroup

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

Instance Method Summary collapse

Instance Method Details

#on_block(node) ⇒ Object



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

def on_block(node)
  sorted_block = sort_gems_in_group(node)
  node.updated(:block, sorted_block) if node != sorted_block
end

#sort_gems_in_group(node) ⇒ Object



9
10
11
12
13
14
15
16
17
18
19
20
21
22
# File 'lib/gemfile_arranger/traverse/sort_gems_in_group.rb', line 9

def sort_gems_in_group(node)
  send_node, args_node, body_node = node.children

  return node if send_node.children[1] != :group
  return node if body_node.type != :begin
  gems = body_node.children.sort_by.with_index do |child, i|
    gem_name = child.children[2].children[0]
    [gem_name, i]
  end
  return node if body_node.children == gems

  sorted_body_node = body_node.updated(:begin, gems)
  [send_node, args_node, sorted_body_node]
end