Class: Babl::Nodes::Object
- Inherits:
-
Object
- Object
- Babl::Nodes::Object
- Defined in:
- lib/babl/nodes/object.rb
Constant Summary collapse
- EMPTY =
new({})
Instance Method Summary collapse
- #dependencies ⇒ Object
- #optimize ⇒ Object
- #pinned_dependencies ⇒ Object
- #render(ctx) ⇒ Object
- #schema ⇒ Object
Instance Method Details
#dependencies ⇒ Object
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 |
#optimize ⇒ Object
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.render(nil), optimized_object.schema) end |
#pinned_dependencies ⇒ Object
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 |
#schema ⇒ Object
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 |