Class: Babl::Nodes::Merge

Inherits:
Object
  • Object
show all
Defined in:
lib/babl/nodes/merge.rb

Instance Method Summary collapse

Instance Method Details

#dependenciesObject



10
11
12
# File 'lib/babl/nodes/merge.rb', line 10

def dependencies
    nodes.map(&:dependencies).reduce(Utils::Hash::EMPTY) { |a, b| Babl::Utils::Hash.deep_merge(a, b) }
end

#optimizeObject



29
30
31
32
33
34
35
36
# File 'lib/babl/nodes/merge.rb', line 29

def optimize
    optimize_empty ||
        optimize_single ||
        optimize_merged_objects ||
        optimize_nested_merges ||
        optimize_premergeable_objects ||
        self
end

#pinned_dependenciesObject



14
15
16
# File 'lib/babl/nodes/merge.rb', line 14

def pinned_dependencies
    nodes.map(&:pinned_dependencies).reduce(Utils::Hash::EMPTY) { |a, b| Babl::Utils::Hash.deep_merge(a, b) }
end

#render(ctx) ⇒ Object



22
23
24
25
26
27
# File 'lib/babl/nodes/merge.rb', line 22

def render(ctx)
    nodes.map { |node| node.render(ctx) }.compact.reduce({}) { |acc, val|
        raise Errors::RenderingError, "Only objects can be merged\n" + ctx.formatted_stack unless ::Hash === val
        acc.merge!(val)
    }
end

#schemaObject



18
19
20
# File 'lib/babl/nodes/merge.rb', line 18

def schema
    nodes.map(&:schema).reduce(Schema::Object::EMPTY) { |a, b| merge_doc(a, b) }
end