Class: Vizcore::DSL::SceneBuilder
- Inherits:
-
Object
- Object
- Vizcore::DSL::SceneBuilder
- Defined in:
- lib/vizcore/dsl/scene_builder.rb
Overview
Collects layer definitions inside a single scene block.
Instance Method Summary collapse
-
#evaluate { ... } ⇒ Vizcore::DSL::SceneBuilder
Evaluate a scene block.
-
#group(name) { ... } ⇒ void
Define a related group of layers with shared params.
-
#initialize(name:, styles: {}, themes: {}, layers: []) ⇒ SceneBuilder
constructor
A new instance of SceneBuilder.
-
#layer(name) { ... } ⇒ void
Define one layer in this scene.
-
#to_h ⇒ Hash
Serialized scene payload.
-
#use_theme(name) ⇒ Hash
Apply a named theme as default params for all layers in this scene.
Constructor Details
#initialize(name:, styles: {}, themes: {}, layers: []) ⇒ SceneBuilder
Returns a new instance of SceneBuilder.
14 15 16 17 18 19 20 21 |
# File 'lib/vizcore/dsl/scene_builder.rb', line 14 def initialize(name:, styles: {}, themes: {}, layers: []) @name = name.to_sym @styles = styles @themes = themes @theme_name = nil @theme_params = {} @layers = layers.map { |layer| deep_dup(layer) } end |
Instance Method Details
#evaluate { ... } ⇒ Vizcore::DSL::SceneBuilder
Evaluate a scene block.
27 28 29 30 |
# File 'lib/vizcore/dsl/scene_builder.rb', line 27 def evaluate(&block) instance_eval(&block) if block self end |
#group(name) { ... } ⇒ void
This method returns an undefined value.
Define a related group of layers with shared params.
48 49 50 51 52 |
# File 'lib/vizcore/dsl/scene_builder.rb', line 48 def group(name, &block) builder = LayerGroupBuilder.new(name: name, styles: @styles, defaults: @theme_params) builder.evaluate(&block) @layers.concat(builder.to_a) end |
#layer(name) { ... } ⇒ void
This method returns an undefined value.
Define one layer in this scene.
37 38 39 40 41 |
# File 'lib/vizcore/dsl/scene_builder.rb', line 37 def layer(name, &block) builder = LayerBuilder.new(name: name, styles: @styles, defaults: @theme_params) builder.evaluate(&block) @layers << builder.to_h end |
#to_h ⇒ Hash
Returns serialized scene payload.
69 70 71 72 73 74 75 76 |
# File 'lib/vizcore/dsl/scene_builder.rb', line 69 def to_h scene = { name: @name, layers: @layers.map { |layer| deep_dup(layer) } } scene[:theme] = @theme_name if @theme_name scene end |
#use_theme(name) ⇒ Hash
Apply a named theme as default params for all layers in this scene.
59 60 61 62 63 64 65 66 |
# File 'lib/vizcore/dsl/scene_builder.rb', line 59 def use_theme(name) theme_name = name.to_sym theme_params = @themes.fetch(theme_name) { raise ArgumentError, "unknown theme: #{theme_name}" } @theme_name = theme_name @theme_params = deep_dup(theme_params) @layers = @layers.map { |layer| apply_theme_defaults(layer, @theme_params) } deep_dup(@theme_params) end |