Class: UIC::Asset
- Inherits:
-
Object
- Object
- UIC::Asset
- Defined in:
- lib/ruic/assets.rb
Defined Under Namespace
Classes: Root
Constant Summary collapse
- HIER =
{}
Instance Attribute Summary collapse
-
#by_name ⇒ Object
readonly
Returns the value of attribute by_name.
Instance Method Summary collapse
-
#create_class(el, parent_class, name = 'CustomAsset') ⇒ Object
Creates a class from MetaData.xml with accessors for the <Property> listed.
- #hack_in_slide_names!(doc) ⇒ Object
-
#initialize(xml) ⇒ Asset
constructor
A new instance of Asset.
- #new_instance(presentation, el) ⇒ Object
Constructor Details
#initialize(xml) ⇒ Asset
Returns a new instance of Asset.
142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 |
# File 'lib/ruic/assets.rb', line 142 def initialize(xml) @by_name = {'Root'=>Root} doc = Nokogiri.XML(xml) (doc) HIER.each do |class_name,parent_class_name| parent_class = @by_name[parent_class_name] el = doc.root.at(class_name) @by_name[class_name] = create_class(el,parent_class,el.name) UIC::Asset.const_set( el.name, @by_name[class_name] ) # give the class instance a name by pointing a constant to it :/ end # Extend well-known classes with script interfaces after they are created @by_name['State'] = @by_name['Slide'] @by_name['Slide'].instance_eval do attr_accessor :index, :name define_method :inspect do "<slide ##{index} of #{@el['component'] || @el.parent['component']}>" end define_method(:slide?){ true } end refmat = @by_name['ReferencedMaterial'] @by_name['MaterialBase'].instance_eval do define_method :replace_with_referenced_material do type=='ReferencedMaterial' ? self : presentation.replace_asset( self, 'ReferencedMaterial', name:name ) end end end |
Instance Attribute Details
#by_name ⇒ Object (readonly)
Returns the value of attribute by_name.
134 135 136 |
# File 'lib/ruic/assets.rb', line 134 def by_name @by_name end |
Instance Method Details
#create_class(el, parent_class, name = 'CustomAsset') ⇒ Object
Creates a class from MetaData.xml with accessors for the <Property> listed. Instances of the class are associated with a presentation and know how to get/set values in that XML based on value types, slides, defaults. Also used to create classes from effects, materials, and behavior preambles.
177 178 179 180 181 182 183 184 185 186 187 |
# File 'lib/ruic/assets.rb', line 177 def create_class(el,parent_class,name='CustomAsset') Class.new(parent_class) do @name = name @properties = Hash[ el.css("Property").map do |e| type = e['type'] || (e['list'] ? 'String' : 'Float') type = "Float" if type=="float" property = UIC::Property.const_get(type).new(e) [ property.name, UIC::Property.const_get(type).new(e) ] end ] end end |
#hack_in_slide_names!(doc) ⇒ Object
193 194 195 |
# File 'lib/ruic/assets.rb', line 193 def (doc) doc.at('Slide') << '<Property name="name" formalName="Name" type="String" default="Slide" hidden="True" />' end |
#new_instance(presentation, el) ⇒ Object
189 190 191 |
# File 'lib/ruic/assets.rb', line 189 def new_instance(presentation,el) @by_name[el.name].new(presentation,el) end |