Sha256: f1861c17610820837b1772b3f411e5bef458d6f8dcce2e3a76b89f1ad9dbbfc4
Contents?: true
Size: 908 Bytes
Versions: 4
Compression:
Stored size: 908 Bytes
Contents
require 'set' module Perforated class Rebuilder attr_reader :parser, :strings def initialize(strings, parser = Perforated.json) @strings = strings @parser = parser end def rebuild(rooted: false) if rooted parser.dump(merge(parser.load(concatenated))) else concatenated end end def concatenated "[#{strings.join(',')}]" end private 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 def sets_to_arrays(merged) merged.each do |key, value| merged[key] = value.to_a end merged end end end
Version data entries
4 entries across 4 versions & 1 rubygems
Version | Path |
---|---|
perforated-0.10.1 | lib/perforated/rebuilder.rb |
perforated-0.10.0 | lib/perforated/rebuilder.rb |
perforated-0.9.1 | lib/perforated/rebuilder.rb |
perforated-0.9.0 | lib/perforated/rebuilder.rb |