class Geminabox::GemListMerge

Attributes

list[RW]

Public Class Methods

from(*lists) click to toggle source
# File lib/geminabox/gem_list_merge.rb, line 5
def self.from(*lists)
  lists.map{|list| new(list)}.inject(:merge)
end
new(list) click to toggle source
# File lib/geminabox/gem_list_merge.rb, line 9
def initialize(list)
  @list = list
end

Public Instance Methods

collection() click to toggle source
# File lib/geminabox/gem_list_merge.rb, line 29
def collection
  @collection ||= {}
end
combine_hashes(other) click to toggle source
# File lib/geminabox/gem_list_merge.rb, line 33
def combine_hashes(other)
  hash.merge(other.hash) do |key, value, other_value|
    (value + other_value).uniq{|v| v.values[ignore_dependencies]}
  end
end
ensure_symbols_as_keys(item) click to toggle source
# File lib/geminabox/gem_list_merge.rb, line 43
def ensure_symbols_as_keys(item)
  item.keys.each do |key|
    next if key.kind_of? Symbol
    item[key.to_sym] = item.delete(key)
  end
end
hash() click to toggle source
# File lib/geminabox/gem_list_merge.rb, line 19
def hash
  list.each do |item|
    ensure_symbols_as_keys(item)
    name = item[:name].to_sym
    collection[name] ||= []
    collection[name] << item unless collection[name].include?(item)
  end
  collection
end
ignore_dependencies() click to toggle source
# File lib/geminabox/gem_list_merge.rb, line 39
def ignore_dependencies
  0..-2
end
merge(other) click to toggle source
# File lib/geminabox/gem_list_merge.rb, line 13
def merge(other)
  combine_hashes(other).values.flatten.sort do |x, y|
    x.values[ignore_dependencies] <=> y.values[ignore_dependencies]
  end
end