module Jekyll::Favicon::Utils::Configuration::Merge

Favicon configuration merge logic

Public Class Methods

included(klass) click to toggle source
# File lib/jekyll/favicon/utils/configuration/merge.rb, line 9
def self.included(klass)
  klass.extend(ClassMethods)
end
merge_collect(group, values) click to toggle source
# File lib/jekyll/favicon/utils/configuration/merge.rb, line 50
def self.merge_collect(group, values)
  group.first ? merge_multiple(*values) : values
end
merge_group(map, keys = %w[name dir]) click to toggle source
# File lib/jekyll/favicon/utils/configuration/merge.rb, line 46
def self.merge_group(map, keys = %w[name dir])
  map.is_a?(Hash) ? map.values_at(*keys) : []
end
merge_multiple(left = nil, *right_and_or_rest) click to toggle source
# File lib/jekyll/favicon/utils/configuration/merge.rb, line 13
def self.merge_multiple(left = nil, *right_and_or_rest)
  return left if right_and_or_rest.empty?

  right, *rest = right_and_or_rest
  merged = merge_pair left, right
  return merged if rest.empty?

  merge_multiple(merged, *rest)
end
merge_pair(left, right) click to toggle source
# File lib/jekyll/favicon/utils/configuration/merge.rb, line 23
def self.merge_pair(left, right)
  return right if !left || !right || !left.instance_of?(right.class)

  case right
  when Hash then merge_pair_hash left, right
  when Array then merge_pair_array left, right
  else right
  end
end
merge_pair_array(left_array, right_array) click to toggle source
# File lib/jekyll/favicon/utils/configuration/merge.rb, line 39
def self.merge_pair_array(left_array, right_array)
  joint_array = left_array + right_array
  joint_array.group_by { |map| merge_group map }
    .collect { |group, values| merge_collect group, values }
    .flatten
end
merge_pair_hash(left_hash, right_hash) click to toggle source
# File lib/jekyll/favicon/utils/configuration/merge.rb, line 33
def self.merge_pair_hash(left_hash, right_hash)
  left_hash.merge(right_hash) do |_, left_value, right_value|
    merge_multiple left_value, right_value
  end
end