class GemfileArranger::Traverse::SortPriorityGemsInGroup
Public Class Methods
new(keys)
click to toggle source
# File lib/gemfile_arranger/traverse/sort_priority_gems_in_group.rb, line 4 def initialize(keys) @keys = Array(keys).dup.map(&:to_s) end
Public Instance Methods
on_block(node)
click to toggle source
# File lib/gemfile_arranger/traverse/sort_priority_gems_in_group.rb, line 8 def on_block(node) sorted_block = sort_gems_in_group_with_keys(node, @keys) node.updated(:block, sorted_block) if node != sorted_block end
sort_gems_in_group_with_keys(node, keys)
click to toggle source
# File lib/gemfile_arranger/traverse/sort_priority_gems_in_group.rb, line 13 def sort_gems_in_group_with_keys(node, keys) 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] key_index = keys.index(gem_name) || keys.length [key_index, 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