class GemfileArranger::Traverse::SortBlock

Public Class Methods

new(keys) click to toggle source
# File lib/gemfile_arranger/traverse/sort_block.rb, line 4
def initialize(keys)
  @keys = Array(keys).dup.map(&:to_sym)
end

Public Instance Methods

on_begin(node) click to toggle source
# 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) click to toggle source
# 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