class Perforated::Rebuilder

Attributes

parser[R]
strings[R]

Public Class Methods

new(strings, parser = Perforated.json) click to toggle source
# File lib/perforated/rebuilder.rb, line 7
def initialize(strings, parser = Perforated.json)
  @strings = strings
  @parser  = parser
end

Public Instance Methods

concatenated() click to toggle source
# File lib/perforated/rebuilder.rb, line 20
def concatenated
  "[#{strings.join(',')}]"
end
rebuild(rooted: false) click to toggle source
# File lib/perforated/rebuilder.rb, line 12
def rebuild(rooted: false)
  if rooted
    parser.dump(merge(parser.load(concatenated)))
  else
    concatenated
  end
end

Private Instance Methods

merge(objects) click to toggle source
# File lib/perforated/rebuilder.rb, line 26
def merge(objects)
  merged = objects.each_with_object({}) do |object, memo|
    object.each do |key, value|
      memo[key] ||= Set.new

      if value.is_a?(Array)
        memo[key].merge(value)
      else
        memo[key].add(value)
      end
    end
  end

  sets_to_arrays(merged)
end
sets_to_arrays(merged) click to toggle source
# File lib/perforated/rebuilder.rb, line 42
def sets_to_arrays(merged)
  merged.each do |key, value|
    merged[key] = value.to_a
  end

  merged
end