Class: Babl::Nodes::Object

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

Constant Summary collapse

EMPTY =
new(Utils::Hash::EMPTY)

Instance Method Summary collapse

Instance Method Details

#dependenciesObject



11
12
13
# File 'lib/babl/nodes/object.rb', line 11

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

#optimizeObject



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

def optimize
    optimized_nodes = nodes.map { |k, v| [k, v.optimize] }.to_h
    optimized_object = Object.new(optimized_nodes)
    return optimized_object unless optimized_nodes.values.all? { |node| Constant === node }
    Constant.new(optimized_object.nodes.map { |k, v| [k, v.value] }.to_h.freeze, optimized_object.schema)
end

#pinned_dependenciesObject



15
16
17
18
# File 'lib/babl/nodes/object.rb', line 15

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

#render(ctx) ⇒ Object



25
26
27
28
29
# File 'lib/babl/nodes/object.rb', line 25

def render(ctx)
    out = {}
    nodes.each { |k, v| out[k] = v.render(ctx) }
    out
end

#schemaObject



20
21
22
23
# File 'lib/babl/nodes/object.rb', line 20

def schema
    properties = nodes.map { |k, v| Schema::Object::Property.new(k, v.schema, true) }
    Schema::Object.new(properties, false)
end