Class | Limelight::DSL::PropBuilder |
In: |
lib/limelight/dsl/prop_builder.rb
|
Parent: | Object |
The basis of the DSL for building Limelight::Prop objects.
Sample usage:
builder = Limelight::PropBuilder.new(a_prop) builder.instance_eval(&block)
The prop passed into the constructor will be the root of the contructed Prop tree. The block passed into instance_eval contains the DSL for building props.
Example block/DSL:
parent :id => "the_parent" do child_one do grand_child_one :id => "gc_1", :styles => "grand_child" grand_child_two :id => "gc_2", :styles => "grand_child" end child_two end
The above example will create a Limelight::Prop named ‘parent’ and add it to the root prop passed into the builder. The ‘parent’ prop will contain two props named ‘child_one’ and ‘child_two’. ‘child_one’ will contain two props named ‘grand_child_one’ and ‘grand_child_two’. ‘child_two’ has no child props nor do ‘grand_child_one’ or ‘grand_child_two’.
An options Hash may be passed into each prop. The key, value pairs in the hash will be used to set properties on the prop when it is added to a Limelight::Scene.
See Limelight::Prop
instance_variables | -> | __instance_variables |
instance_variable_get | -> | __instance_variable_get |
instance_variable_set | -> | __instance_variable_set |
__loader__ | [RW] | |
__prop__ | [R] | Returns the root prop either passed in or created by this builder. |
Creates a new builder. If a prop is passed it, it will be the root on which props are created. If the paramter is a Hash, the Hash will be used to construct a prop that will be used as the root.
# File lib/limelight/dsl/prop_builder.rb, line 73 73: def initialize(options) 74: if options.is_a?(Prop) 75: @__prop__ = options 76: else 77: @__prop__ = Prop.new(options) 78: end 79: end
Add extra initialization options to the prop currently under construction.
tree :id => "stump" do __ :height => "100%", :width => "30", :background_color => :brown branch :height => "100", :width => "20" branch do __ :height => "100", :width => "20" end end
In the above example, the ‘tree’ prop has the following initialization options: id, height, width, background_color. The two ‘branch’ child props are identical.
# File lib/limelight/dsl/prop_builder.rb, line 94 94: def __(options) 95: @__prop__.add_options(options) 96: end
Installs props from another file using the prop DSL. The path will be relative to the root directory of the current production.
# File lib/limelight/dsl/prop_builder.rb, line 101 101: def __install(file, instance_variables = {}) 102: raise "Cannot install external props because no loader was provided" if @__loader__.nil? 103: raise "External prop file: '#{file}' doesn't exist" if !@__loader__.exists?(file) 104: content = @__loader__.load(file) 105: begin 106: self.__install_instance_variables(instance_variables) 107: self.instance_eval(content) 108: rescue Exception => e 109: raise BuildException.new(file, content, e) 110: end 111: end
Installs instance variables, specified by the passed hash, into the PropBuilder instance. The following call…
__install_instance_variables :one => "1", "two" => "two", :three => 3
…will result in the following instance variables.
@one = "1" @two = "2" @three = 3
Instance variables are propogated to nested builders so that they need only be defined on the top level builder and all children will have access to them.
# File lib/limelight/dsl/prop_builder.rb, line 127 127: def __install_instance_variables(instance_variables) 128: return if instance_variables.nil? 129: instance_variables.each_pair do |key, value| 130: name = "@#{key}" 131: __instance_variable_set(name, value) 132: end 133: end