Class: UIC::MetaData
- Inherits:
-
Object
- Object
- UIC::MetaData
- Defined in:
- lib/ruic/assets.rb
Defined Under Namespace
Classes: AssetBase
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
listed. - #hack_in_slide_names!(doc) ⇒ Object
-
#initialize(xml) ⇒ MetaData
constructor
A new instance of MetaData.
- #new_instance(presentation, el) ⇒ Object
Constructor Details
#initialize(xml) ⇒ MetaData
Returns a new instance of MetaData.
272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 |
# File 'lib/ruic/assets.rb', line 272 def initialize(xml) @by_name = {'AssetBase'=>AssetBase} 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) 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 @by_name['Path'].instance_eval do define_method(:anchors){ find _type:'PathAnchorPoint' } end end |
Instance Attribute Details
#by_name ⇒ Object (readonly)
Returns the value of attribute by_name.
263 264 265 |
# File 'lib/ruic/assets.rb', line 263 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
312 313 314 315 316 317 318 319 320 321 322 323 324 325 |
# File 'lib/ruic/assets.rb', line 312 def create_class(el,parent_class,name='CustomAsset') Class.new(parent_class) do @name = name.to_s @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 ] def self.inspect @name end end end |
#hack_in_slide_names!(doc) ⇒ Object
332 333 334 |
# File 'lib/ruic/assets.rb', line 332 def (doc) doc.at('Slide') << '<Property name="name" formalName="Name" type="String" default="Slide" hidden="True" />' end |
#new_instance(presentation, el) ⇒ Object
327 328 329 330 |
# File 'lib/ruic/assets.rb', line 327 def new_instance(presentation,el) klass = @by_name[el.name] || create_class(el,@by_name['Asset'],el.name) klass.new(presentation,el) end |