RUIC 0.4.3 → 0.4.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 0f88b39bad10863d43c14c6cc303416a786229a8
4
- data.tar.gz: 25e776627d2205f34de467708ced0998491000a7
3
+ metadata.gz: 3cd982f65f8cae25edc67f0619f9a5f11d36fd89
4
+ data.tar.gz: 5600614882179d970952c0d67bc428a8e7f8ee73
5
5
  SHA512:
6
- metadata.gz: afc0a558732656717910d510eabd5cc2befca05e875177a797d04e51528a1b16636144a4308a1038a9ca4006161712a287d8eb6c8e343808a23649fa10347df8
7
- data.tar.gz: b81d44122d54f693ef1044749e5cb84ddff25a6b3812b2885569ec5a222aa5c14d4e6c52d2b793c9cfade150f89693d36955234e327a874c3a84495f3c9e0326
6
+ metadata.gz: 4aa749d218b876a2a13261063989ca02ee57dace463b291f80328673d7207622b49bd5e93ceb21c010f7b443230d0f31079e6d85779f41e2d8ba0d2bcd5aaaf7
7
+ data.tar.gz: 97fdefc32b8356d2c8ca48d40c1cc19a3fc954564810677e64d331151077a1e3f66cce981d19ae26179a10ab578f4c4f53e3602793b1ed28564bf9642c6416d4
@@ -47,76 +47,164 @@ class UIC::MetaData
47
47
  end
48
48
  alias_method :/, :at
49
49
 
50
- attr_accessor :presentation, :el
50
+ # @return [Presentation] the presentation that this asset is part of.
51
+ attr_accessor :presentation
52
+
53
+ # @return [Nokogiri::XML::Element] the internal XML element in the scene graph of the presentation.
54
+ attr_accessor :el
55
+
56
+ # Create a new asset. This is called for you automatically; you likely should not be using it.
57
+ # @param presentation [Presentation] the presentation owning this asset.
58
+ # @param element [Nokogiri::XML::Element] the internal XML element in the scene graph of the presentation.
51
59
  def initialize( presentation, element )
52
60
  @presentation = presentation
53
61
  @el = element
54
62
  end
55
63
 
64
+ # @return [String] the type of this asset. For example: `"Model"`, `"Material"`, `"ReferencedMaterial"`, `"PathAnchorPoint"`, etc.
56
65
  def type
57
66
  self.class.name
58
- # self.class.name.split('::').last
59
67
  end
60
68
 
69
+ # @return [AssetBase] the parent of this asset in the scene graph.
70
+ # @see Presentation#parent_asset
61
71
  def parent
62
72
  presentation.parent_asset(self)
63
73
  end
64
74
 
75
+ # @return [Array<AssetBase>] array of child assets in the scene graph. Children are in scene graph order.
76
+ # @see Presentation#child_assets
65
77
  def children
66
78
  presentation.child_assets(self)
67
79
  end
68
80
 
81
+ # Find descendant assets matching criteria.
82
+ # This method is the same as (but more convenient than) {Presentation#find} using the `:_under` criteria.
83
+ # See that method for documentation of the `criteria`.
84
+ #
85
+ # @example
86
+ # preso = app.main
87
+ # group = preso/"Scene.Layer.Vehicle"
88
+ # tires = group.find name:/^Tire/
89
+ #
90
+ # # alternative
91
+ # tires = preso.find name:/^Tire/, _under:group
92
+ #
93
+ # @return [Array<AssetBase>]
94
+ #
95
+ # @see Presentation#find
69
96
  def find(criteria={},&block)
70
97
  criteria[:_under] ||= self
71
98
  presentation.find(criteria,&block)
72
99
  end
73
100
 
74
- # Find the owning component (even if you are a component)
101
+ # @return [AssetBase] the component or scene that owns this asset.
102
+ # If this asset is a component, does not return itself.
103
+ # @see Presentation#owning_component
75
104
  def component
76
105
  presentation.owning_component(self)
77
106
  end
78
107
 
108
+ # @return [Boolean] `true` if this asset is a component or Scene.
79
109
  def component?
80
- @el.name == 'Component'
110
+ @el.name=='Component' || @el.name=='Scene'
81
111
  end
82
112
 
113
+ # @return [Boolean] `true` if this asset is on the master slide.
114
+ # @see Presentation#master?
83
115
  def master?
84
116
  presentation.master?(self)
85
117
  end
86
118
 
119
+ # @return [Boolean] `true` if this asset is a Slide.
87
120
  def slide?
88
121
  false
89
122
  end
90
123
 
124
+ # @param slide_name_or_index [Integer,String] the slide number of name to check for presence on.
125
+ # @return [Boolean] `true` if this asset is present on the specified slide.
126
+ # @see Presentation#has_slide?
91
127
  def has_slide?(slide_name_or_index)
92
128
  presentation.has_slide?(self,slide_name_or_index)
93
129
  end
94
130
 
131
+ # @return [SlideCollection] an array-like collection of all slides that the asset is available on.
132
+ # @see Presentation#slides_for
95
133
  def slides
96
134
  presentation.slides_for(self)
97
135
  end
98
136
 
137
+ # @example
138
+ # logo = app/"main:Scene.UI.Logo"
139
+ # assert logo.master? # It's a master object
140
+ #
141
+ # show logo['endtime'].values #=> [10000,500,1000,750]
142
+ # show logo['opacity'].values #=> [100,0,0,100]
143
+ # logo1 = logo.on_slide(1)
144
+ # logo2 = logo.on_slide(2)
145
+ # show logo1['endtime'] #=> 500
146
+ # show logo2['endtime'] #=> 1000
147
+ # show logo1['opacity'] #=> 0
148
+ # show logo2['opacity'] #=> 0
149
+ #
150
+ # logo2['opacity'] = 66
151
+ # show logo['opacity'].values #=> [100,0,66,100]
152
+ #
153
+ # @param slide_name_or_index [Integer,String] the slide number or name to create the proxy for.
154
+ # @return [SlideValues] a proxy that yields attribute values for a specific slide.
99
155
  def on_slide(slide_name_or_index)
100
156
  if has_slide?(slide_name_or_index)
101
157
  UIC::SlideValues.new( self, slide_name_or_index )
102
158
  end
103
159
  end
104
160
 
161
+ # @return [String] the script path to this asset.
162
+ # @see #path_to
163
+ # @see Presentation#path_to
105
164
  def path
106
165
  @path ||= @presentation.path_to(self)
107
166
  end
108
167
 
168
+ # @param other_asset [AssetBase] the asset to find the relative path to.
169
+ # @return [String] the script path to another asset, relative to this one.
170
+ # @see #path
171
+ # @see Presentation#path_to
172
+ def path_to(other_asset)
173
+ @presentation.path_to(other_asset,self)
174
+ end
175
+
176
+ # @return [String] the name of this asset in the scene graph.
109
177
  def name
110
178
  properties['name'].get( self, presentation.slide_index(self) )
111
179
  end
112
180
 
181
+ # Change the name of the asset in the scene graph.
182
+ # @param new_name [String] the new name for this asset.
183
+ # @return [String] the new name.
113
184
  def name=( new_name )
185
+ @path = nil # invalidate the memoization
114
186
  properties['name'].set( self, new_name, presentation.slide_index(self) )
115
187
  end
116
188
 
117
- # Get the value(s) of an attribute
189
+ # Get the value(s) of an attribute.
190
+ # If `slide_name_or_index` is omitted, creates a ValuesPerSlide proxy for the specified attribute.
191
+ # @example
192
+ # logo = app/"main:Scene.UI.Logo"
193
+ # show logo.master? #=> true (it's a master object)
194
+ # show logo['endtime'].linked? #=> false (the endtime property is unlinked)
195
+ # show logo['endtime'].values #=> [10000,500,1000,750]
196
+ # show logo['endtime',0] #=> 10000 (the master slide value)
197
+ # show logo['endtime',"Slide 1"] #=> 500
198
+ # show logo['endtime',2] #=> 1000
199
+ #
200
+ # @param attribute_name [String,Symbol] the name of the attribute.
201
+ # @param slide_name_or_index [Integer,String] the slide number or name to find the value on.
202
+ # @return [Object] the value of the property on the given slide.
203
+ # @return [ValuesPerSlide] if no slide is specified.
204
+ # @see #on_slide
205
+ # @see Presentation#get_attribute
118
206
  def [](attribute_name, slide_name_or_index=nil)
119
- if property = properties[attribute_name]
207
+ if property = properties[attribute_name.to_s]
120
208
  if slide_name_or_index
121
209
  property.get( self, slide_name_or_index ) if has_slide?(slide_name_or_index)
122
210
  else
@@ -125,26 +213,47 @@ class UIC::MetaData
125
213
  end
126
214
  end
127
215
 
128
- # Set the value of an attribute, either across all slides, or on a particular slide
129
- # el['foo'] = 42
130
- # el['foo',0] = 42
216
+ # Set the value of an attribute, either across all slides, or on a particular slide.
217
+ #
218
+ # @example
219
+ # logo = app/"main:Scene.UI.Logo"
220
+ # show logo.master? #=> true (it's a master object)
221
+ # show logo['endtime'].linked? #=> false (the endtime property is unlinked)
222
+ # show logo['endtime'].values #=> [10000,500,1000,750]
223
+ #
224
+ # logo['endtime',1] = 99
225
+ # show logo['endtime'].values #=> [10000,99,1000,750]
226
+ #
227
+ # logo['endtime'] = 42
228
+ # show logo['endtime'].values #=> [42,42,42,42]
229
+ # show logo['endtime'].linked? #=> false (the endtime property is still unlinked)
230
+ #
231
+ # @param attribute_name [String,Symbol] the name of the attribute.
232
+ # @param slide_name_or_index [Integer,String] the slide number or name to set the value on.
233
+ # @param new_value [Numeric,String] the new value for the attribute.
234
+ # @see Presentation#set_attribute
131
235
  def []=( attribute_name, slide_name_or_index=nil, new_value )
132
- if property = properties[attribute_name] then
236
+ if property = properties[attribute_name.to_s] then
133
237
  property.set(self,new_value,slide_name_or_index)
134
238
  end
135
239
  end
136
240
 
241
+ # @return [String] the XML representation of the scene graph element.
137
242
  def to_xml
138
243
  @el.to_xml
139
244
  end
245
+
246
+ # @private no need to document this
140
247
  def inspect
141
248
  "<asset #{@el.name}##{@el['id']}>"
142
249
  end
143
250
 
251
+ # @private no need to document this
144
252
  def to_s
145
253
  "<#{type} #{path}>"
146
254
  end
147
255
 
256
+ # @private no need to document this
148
257
  def ==(other)
149
258
  (self.class==other.class) && (el==other.el)
150
259
  end
@@ -103,6 +103,7 @@ class UIC::Presentation
103
103
 
104
104
  # @param child_asset [MetaData::AssetBase] an asset in the presentation.
105
105
  # @return [MetaData::AssetBase] the scene graph parent of the child asset, or `nil` for the Scene.
106
+ # @see MetaData::AssetBase#parent
106
107
  def parent_asset( child_asset )
107
108
  child_graph_el = child_asset.el
108
109
  unless child_graph_el==@scene || child_graph_el.parent.nil?
@@ -112,6 +113,7 @@ class UIC::Presentation
112
113
 
113
114
  # @param parent_asset [MetaData::AssetBase] an asset in the presentation.
114
115
  # @return [Array<MetaData::AssetBase>] array of scene graph children of the specified asset.
116
+ # @see MetaData::AssetBase#children
115
117
  def child_assets( parent_asset )
116
118
  parent_asset.el.element_children.map{ |child| asset_for_el(child) }
117
119
  end
@@ -181,9 +183,23 @@ class UIC::Presentation
181
183
  # * If `from_asset` is supplied the path will be relative to that asset (e.g. `"parent.parent.Group.Model"`).
182
184
  # * If `from_asset` is omitted the path will be absolute (e.g. `"Scene.Layer.Group.Model"`).
183
185
  #
186
+ # This is used internally by {MetaData::AssetBase#path} and {MetaData::AssetBase#path_to};
187
+ # those methods are usually more convenient to use.
188
+ #
189
+ # @example
190
+ # preso = app.main
191
+ # preso.scene.children.each{ |child| show preso.path_to(child) }
192
+ # #=> "main:Scene.MyAppBehavior"
193
+ # #=> "main:Scene.UILayer"
194
+ # #=> "main:Scene.ContentLayer"
195
+ # #=> "main:Scene.BGLayer"
196
+ #
184
197
  # @param asset [MetaData::AssetBase] the asset to find the path to.
185
198
  # @param from_asset [MetaData::AssetBase] the asset to find the path relative to.
186
199
  # @return [String] the script path to the element.
200
+ #
201
+ # @see MetaData::AssetBase#path
202
+ # @see MetaData::AssetBase#path_to
187
203
  def path_to( asset, from_asset=nil )
188
204
  el = asset.el
189
205
 
@@ -269,6 +285,8 @@ class UIC::Presentation
269
285
  # @param asset [MetaData::AssetBase] the asset to fetch the attribute for.
270
286
  # @param attr_name [String] the name of the attribute to get the value of.
271
287
  # @param slide_name_or_index [String,Integer] the string name or integer index of the slide.
288
+ # @return [Object] the value of the asset on the slide
289
+ # @see MetaData::AssetBase#[]
272
290
  def get_attribute( asset, attr_name, slide_name_or_index )
273
291
  graph_element = asset.el
274
292
  ((addsets=@addsets_by_graph[graph_element]) && ( # State (slide) don't have any addsets
@@ -295,6 +313,7 @@ class UIC::Presentation
295
313
  # @param asset [MetaData::AssetBase] the asset to fetch the attribute for.
296
314
  # @param attr_name [String] the name of the attribute to get the value of.
297
315
  # @param slide_name_or_index [String,Integer] the string name or integer index of the slide.
316
+ # @see MetaData::AssetBase#[]=
298
317
  def set_attribute( asset, property_name, slide_name_or_index, str )
299
318
  graph_element = asset.el
300
319
  if attribute_linked?( asset, property_name )
@@ -325,13 +344,18 @@ class UIC::Presentation
325
344
  end
326
345
 
327
346
  # @return [MetaData::AssetBase] the component asset that owns the supplied asset.
328
- # @see MetaData::AssetBase#component
347
+ # If the graph_element **is** a component this will return its parent component or Scene.
348
+ # @see owning_or_self_component_element
349
+ # @api private
329
350
  def owning_component_element( graph_element )
330
351
  graph_element.at_xpath('(ancestor::Component[1] | ancestor::Scene[1])[last()]')
331
352
  end
332
353
  private :owning_component_element
333
354
 
334
355
  # @return [Nokogiri::XML::Element] the "time context" scene graph element that owns the supplied element.
356
+ # If the graph_element **is** a component this will return the element itself.
357
+ # @see owning_component_element
358
+ # @api private
335
359
  def owning_or_self_component_element( graph_element )
336
360
  graph_element.at_xpath('(ancestor-or-self::Component[1] | ancestor-or-self::Scene[1])[last()]')
337
361
  end
@@ -425,6 +449,7 @@ class UIC::Presentation
425
449
  end
426
450
 
427
451
  # @return [Boolean] `true` if the asset is added on the master slide.
452
+ # @see MetaData::AssetBase#master?
428
453
  def master?(asset)
429
454
  graph_element = asset.el
430
455
  (graph_element == @scene) || !!(@addsets_by_graph[graph_element] && @addsets_by_graph[graph_element][0])
@@ -517,16 +542,20 @@ class UIC::Presentation
517
542
  end
518
543
  end
519
544
 
520
- def UIC.Presentation( uip_path )
545
+ # @param uip_path [String] Path to the `.uip` presentation file on disk to load.
546
+ # @return [Presentation] Shortcut for `UIC::Presentation.new`
547
+ def UIC.Presentation( uip_path=nil )
521
548
  UIC::Presentation.new( uip_path )
522
549
  end
523
550
 
551
+ # An {Application::Presentation} is a {Presentation} that is associated with a specific `.uia` application.
552
+ # In addition to normal {Presentation} methods it has additional methods related to its presense in the application.
524
553
  class UIC::Application::Presentation < UIC::Presentation
525
554
  include UIC::ElementBacked
526
555
  # @!parse extend UIC::ElementBacked::ClassMethods
527
556
 
528
557
  # @!attribute [rw] id
529
- # @return [String] the id of the presentation asset
558
+ # @return [String] the id of the presentation asset in the `.uia`
530
559
  xmlattribute :id do |new_id|
531
560
  main_preso = app.main_presentation
532
561
  super(new_id)
@@ -538,11 +567,13 @@ class UIC::Application::Presentation < UIC::Presentation
538
567
  xmlattribute :src
539
568
 
540
569
  # @!attribute active
541
- # @return [Boolean] is the presentation initially active?
542
- xmlattribute :active, ->(val){ val=="True" } do |new_val|
570
+ # @return [Boolean] Is the presentation initially active in the application?
571
+ xmlattribute :active, ->(val){ val=="True" || val=="" } do |new_val|
543
572
  new_val ? 'True' : 'False'
544
573
  end
545
574
 
575
+ # @param application [Application] the {Application} object owning this presentation.
576
+ # @param el [Nokogiri::XML::Element] the XML element in the `.uia` representing this presentation.
546
577
  def initialize(application,el)
547
578
  self.owner = application
548
579
  self.el = el
@@ -550,8 +581,9 @@ class UIC::Application::Presentation < UIC::Presentation
550
581
  end
551
582
  alias_method :app, :owner
552
583
 
584
+ # Overrides {UIC::Presentation#path_to} to prefix all absolute paths with the {#id}
553
585
  def path_to( el, from=nil )
554
- "#{id}:#{super}"
586
+ from ? super : "#{id}:#{super}"
555
587
  end
556
588
  end
557
589
 
@@ -1,3 +1,3 @@
1
1
  class RUIC
2
- VERSION = '0.4.3'
2
+ VERSION = '0.4.4'
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: RUIC
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.3
4
+ version: 0.4.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Gavin Kistner