motion-kit 0.9.4 → 0.9.6

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: ff9ff05dc542edf1cf722b6959a0d52d4a16d34c
4
- data.tar.gz: f9afc6aa8839fb471bfe7dcb8ac44766260b4ddd
3
+ metadata.gz: ca8bcc4c3162610c0090bb119ed03e2c1ebf5484
4
+ data.tar.gz: 002fd919664672e8b07fc6a56ac8103e4d61b75b
5
5
  SHA512:
6
- metadata.gz: aabf1ad8ebf3a7a231d314823048c9b87d08e5a1b06a87a8c3fe60f7f87398073a136bbdd58985d974276b3b1f0d2e66d669125a158f0d87a675c76c64eb0cd3
7
- data.tar.gz: 58c9e0bcf282924128803765e8cf2fede6620f6bf2360bc643429e1704fa4abfb2fd4e9b71683294badb1042004b0fc8e0f3b858771546375baef47103f26165
6
+ metadata.gz: 125fd67fafeeccbed6778c15281a9bdd4f1e4cb48d28f57edd18dec56089345cec1069a3a7b2c407e194efe8241d9c6285179fff28354078467810027e1239b5
7
+ data.tar.gz: 85d2bf979800eee4f63d2114fc0cda48a2a2918ee0b2a8f9f2a38828e97f482b571ef6e4702930ddc2d17ddecdd0f22368a35a79c99e817fd6f3c829a1764bb2
data/README.md CHANGED
@@ -43,6 +43,12 @@ be replaced with a new project, rather than upgraded or refactored.
43
43
 
44
44
  ## Usage
45
45
 
46
+ Install:
47
+
48
+ ```ruby
49
+ gem install 'motion-kit'
50
+ ```
51
+
46
52
  From your controller you will instantiate a `MotionKit::Layout` instance, and
47
53
  request views from it. `layout.view` is the root view, and it's common to
48
54
  assign this to `self.view` in your `loadView` method. You'll also want to hook
@@ -346,8 +352,9 @@ module MotionKit
346
352
  end
347
353
  ```
348
354
 
349
- For your own custom classes, you can provide a Layout class by calling the
350
- `targets` method in your class body.
355
+ For your own custom classes, or built-in classes that don't already have a
356
+ `Layout` class defined, you can provide a Layout class by calling the `targets`
357
+ method in your class body.
351
358
 
352
359
  ```ruby
353
360
  # Be sure to extend an existing Layout class, otherwise you'll lose a lot of
@@ -494,59 +501,7 @@ be using Cocoa's Auto Layout system instead. This is the recommended way to set
494
501
  your frames, now that Apple is introducing multiple display sizes. But beware,
495
502
  Auto Layout can be frustrating... :-/
496
503
 
497
- One pain point in working with constraints is determining when to add them to
498
- your views. We tried really hard to figure out a way to automatically add them,
499
- but it's just an untenable problem (Teacup suffers from a similar conundrum).
500
-
501
- Essentially, the problem comes down to this: you will often want to set
502
- constraints that are related to the view controller's `view`, but those must be
503
- created/set *after* `controller.view = @layout.view`. Without doing some crazy
504
- method mangling on NS/UIView we just can't do this automatically
505
-
506
- Long story short: If you need to create constraints that refer to the controller
507
- view, you need to use a separate method that is called after the view hierarchy
508
- is created.
509
-
510
- ```ruby
511
- class MainLayout < UIViewLayout
512
-
513
- def layout
514
- add UILabel, :label do
515
- constraints do
516
- x 0
517
- width('100%')
518
- end
519
- end
520
- end
521
-
522
- def add_constraints(controller)
523
- unless @layout_constraints_added
524
- @layout_constraints_added = true
525
- constraints(:label) do
526
- top.equals(controller.topLayoutGuide)
527
- end
528
- end
529
- end
530
-
531
- end
532
-
533
- class MainController < UIViewController
534
-
535
- def loadView
536
- @layout = MainLayout.new
537
- self.view = @layout
538
- end
539
-
540
- # for the constraints to work reliably they should be added in this method:
541
- def updateViewConstraints
542
- @layout.add_constraints(self) # !!!
543
- super
544
- end
545
-
546
- end
547
- ```
548
-
549
- OK, with that hack out of the way, on to the examples!
504
+ Here are some examples to get started:
550
505
 
551
506
  ```ruby
552
507
  constraints do
@@ -633,50 +588,61 @@ add UIView, :bar do
633
588
  end
634
589
  ```
635
590
 
636
- ### Frames
591
+ One pain point in working with constraints is determining when to add them to
592
+ your views. We tried really hard to figure out a way to automatically add them,
593
+ but it's just an untenable problem (Teacup suffers from a similar conundrum).
594
+
595
+ Essentially, the problem comes down to this: you will often want to set
596
+ constraints that are related to the view controller's `view`, but those must be
597
+ created/set *after* `controller.view = @layout.view`. Without doing some crazy
598
+ method mangling on NS/UIView we just can't do this automatically
637
599
 
638
- There are lots of frame helpers for NSView and UIView subclasses:
600
+ Long story short: If you need to create constraints that refer to the controller
601
+ view, you need to use a separate method that is called after the view hierarchy
602
+ is created.
639
603
 
640
604
  ```ruby
641
- # most direct
642
- frame [[0, 0], [320, 568]]
643
- # using relative sizes (relative to superview)
644
- frame [[5, 5], ['100% - 10', '100% - 10']]
605
+ class MainLayout < UIViewLayout
645
606
 
646
- # same, but using separate methods
647
- origin [5, 5]
648
- x 5
649
- y 5
650
- size ['100% - 10', '100% - 10']
651
- width '100% - 10'
652
- height '100% - 10'
607
+ def layout
608
+ add UILabel, :label do
609
+ constraints do
610
+ x 0
611
+ width('100%')
612
+ end
613
+ end
614
+ end
653
615
 
654
- size ['90%', '90%']
655
- center ['50%', '50%']
616
+ # this method will be called from `UIViewController#updateViewConstraints`
617
+ def add_constraints(controller)
618
+ unless @layout_constraints_added
619
+ @layout_constraints_added = true
620
+ constraints(:label) do
621
+ top.equals(controller.topLayoutGuide)
622
+ end
623
+ end
624
+ end
656
625
 
657
- # you can position the view *relative to other views*, either the superview or
658
- # *any* other view.
659
- from_bottom_right size: [100, 100] # 100x100pt in the BR corner
660
- from_bottom size: ['100%', 32] # full width, 32pt height
661
- from_top_right left: 5
626
+ end
662
627
 
663
- # from_top_left from_top from_top_right
664
- # from_left from_center from_right
665
- # from_bottom_left from_bottom from_bottom_right
628
+ class MainController < UIViewController
666
629
 
667
- # these require another view
668
- foo = self.get(:foo)
669
- above foo, up: 8
670
- # above
671
- # before after
672
- # left_of right_of
673
- # below
674
- relative_to foo, down: 5, right: 5
675
- from_bottom_left foo, up: 5, left: 5
630
+ def loadView
631
+ @layout = MainLayout.new
632
+ self.view = @layout
633
+ end
634
+
635
+ # for the constraints to work reliably they should be added in this method:
636
+ def updateViewConstraints
637
+ @layout.add_constraints(self)
638
+ super
639
+ end
640
+
641
+ end
676
642
  ```
677
643
 
678
644
 
679
- ### Some handy tricks
645
+ ### Some handy tricks and Features
680
646
 
681
647
  #### Orientation specific styles
682
648
 
@@ -731,6 +697,7 @@ def login_button_style
731
697
  end
732
698
  ```
733
699
 
700
+
734
701
  #### Apply styles via module
735
702
 
736
703
  ```ruby
@@ -760,6 +727,22 @@ class LoginLayout < MotionKit::Layout
760
727
  end
761
728
  ```
762
729
 
730
+
731
+ #### Setting a custom root view
732
+
733
+ If you need to use a custom root view, you can use the `root` method from within
734
+ the `layout` method. When you create or assign the root view this way, you must
735
+ assign subviews and styles *inside* a block that you pass to `root`.
736
+
737
+ ```ruby
738
+ def layout
739
+ root(SomeOtherViewclass) do
740
+ add UILabel
741
+ end
742
+ end
743
+ ```
744
+
745
+
763
746
  # Contributing
764
747
 
765
748
  We welcome your contributions! Please be sure to run the specs before you do,
@@ -57,7 +57,7 @@ module MotionKit
57
57
  y_offset = 0
58
58
 
59
59
  if amount.is_a?(Hash)
60
- if amount.fetch(:relative, false)
60
+ if amount[:relative]
61
61
  if amount.key?(:x)
62
62
  x = amount[:x]
63
63
  else
@@ -91,7 +91,7 @@ module MotionKit
91
91
  else
92
92
  if amount.key?(:right)
93
93
  x_offset = -my_size.width
94
- x = amount.fetch(:right, view.frame.origin.x)
94
+ x = amount[:right]
95
95
  elsif amount.key?(:x) || amount.key?(:left)
96
96
  x = amount[:x] || amount[:left]
97
97
  elsif dimension == :center
@@ -103,7 +103,7 @@ module MotionKit
103
103
 
104
104
  if amount.key?(:bottom)
105
105
  y_offset = -my_size.height
106
- y = amount.fetch(:bottom, view.frame.origin.y)
106
+ y = amount[:bottom]
107
107
  elsif amount.key?(:y) || amount.key?(:top)
108
108
  y = amount[:y] || amount[:top]
109
109
  elsif dimension == :center
@@ -8,7 +8,7 @@ module MotionKit
8
8
  # delegated to the 'apply' method, which accepts a method name, arguments, and
9
9
  # an optional block to set the new context.
10
10
  #
11
- # The ViewLayout subclass defines methods that are appropriate for adding and
11
+ # The TreeLayout subclass defines methods that are appropriate for adding and
12
12
  # removing views to a view hierarchy.
13
13
  class BaseLayout
14
14
  # Class methods reside in base_layout_class_methods.rb
@@ -167,7 +167,7 @@ module MotionKit
167
167
  begin
168
168
  target = self.target
169
169
  rescue NoContextError => e
170
- raise NoMethodError.new(method_name)
170
+ raise NoMethodError.new("undefined method `#{method_name}' for #{self}:#{self.class}", method_name)
171
171
  end
172
172
 
173
173
  if args.length == 2 && args[1].is_a?(Hash) && !args[1].empty?
@@ -188,7 +188,7 @@ module MotionKit
188
188
  if block
189
189
  apply_with_context(method_name, *args, &block)
190
190
  else
191
- apply_with_target(method_name, *args)
191
+ apply_with_target(method_name, *args, &block)
192
192
  end
193
193
  end
194
194
 
@@ -215,7 +215,7 @@ module MotionKit
215
215
  end
216
216
  end
217
217
 
218
- def apply_with_target(method_name, *args)
218
+ def apply_with_target(method_name, *args, &block)
219
219
  setter = MotionKit.setter(method_name)
220
220
  assign = "#{method_name}="
221
221
  if args.length == 2 && args[1].is_a?(Hash) && !args[1].empty?
@@ -234,24 +234,24 @@ module MotionKit
234
234
  # combined getter/setter (`layer(val)`)
235
235
  # - lastly, try again after converting to camelCase
236
236
  if long_method_name && target.respond_to?(long_method_name)
237
- target.send(long_method_name, *long_method_args)
237
+ target.send(long_method_name, *long_method_args, &block)
238
238
  elsif args.empty? && target.respond_to?(method_name)
239
- target.send(method_name, *args)
239
+ target.send(method_name, *args, &block)
240
240
  elsif target.respond_to?(setter)
241
- target.send(setter, *args)
241
+ target.send(setter, *args, &block)
242
242
  elsif target.respond_to?(assign)
243
- target.send(assign, *args)
243
+ target.send(assign, *args, &block)
244
244
  elsif target.respond_to?(method_name)
245
- target.send(method_name, *args)
245
+ target.send(method_name, *args, &block)
246
246
  # UIAppearance classes are a whole OTHER thing; they never return 'true'
247
247
  elsif target.is_a?(MotionKit.appearance_class)
248
- target.send(setter, *args)
248
+ target.send(setter, *args, &block)
249
249
  # Finally, try again with camel case if there's an underscore.
250
250
  elsif method_name.include?('_')
251
251
  objc_name = MotionKit.objective_c_method_name(method_name)
252
252
  self.apply(objc_name, *args)
253
253
  else
254
- target.send(setter, *args)
254
+ target.send(setter, *args, &block)
255
255
  # raise ApplyError.new("Cannot apply #{method_name.inspect} to instance of #{target.class.name} (from #{@layout_delegate && @layout_delegate.class})")
256
256
  end
257
257
  end
@@ -1,14 +1,12 @@
1
- # @provides MotionKit::ViewLayout
1
+ # @provides MotionKit::TreeLayout
2
2
  # @requires MotionKit::BaseLayout
3
3
  module MotionKit
4
- # A sensible parent class for any View-like layout class. Platform agnostic.
5
- # Any platform-specific tasks are offloaded to child views (add_child,
6
- # remove_child).
7
- # Actually, "view like" is misleading, since technically it only assumes "tree
8
- # like". You could use a ViewLayout subclass to construct a hierarchy
4
+ # A sensible parent class for any Tree-like layout class. Platform agnostic.
5
+ # Any platform-specific tasks are offloaded to child elements (add_child,
6
+ # remove_child). You could use a TreeLayout subclass to construct a hierarchy
9
7
  # representing a family tree, for instance. But that would be a silly use of
10
8
  # MotionKit.
11
- class ViewLayout < BaseLayout
9
+ class TreeLayout < BaseLayout
12
10
 
13
11
  class << self
14
12
 
@@ -159,9 +157,9 @@ module MotionKit
159
157
  return self
160
158
  end
161
159
 
162
- # Delegates to `create` to instantiate a view and run a layout block, and
163
- # adds the view to the current view on the view stack. If no view exists on
164
- # the stack, a default root view can be created if that has been enabled.
160
+ # Instantiates a view via `create` and adds the view to the current target.
161
+ # If no view exists on the stack, a default root view can be created if that
162
+ # has been enabled. The block is run in the context of the new view.
165
163
  def add(element, element_id=nil, &block)
166
164
  # make sure we have a target - raises NoContextError if none exists
167
165
  self.target
@@ -171,7 +169,11 @@ module MotionKit
171
169
  create_default_root_context
172
170
  end
173
171
  self.apply(:add_child, element)
174
- create(element, element_id, &block)
172
+ create(element, element_id)
173
+
174
+ if block
175
+ context(element, &block)
176
+ end
175
177
 
176
178
  element
177
179
  end
@@ -278,7 +280,7 @@ module MotionKit
278
280
  if @assign_root
279
281
  create_default_root_context
280
282
  else
281
- NSLog('Warning! No root view was set in ViewLayout#layout. Did you mean to call `root`?')
283
+ NSLog('Warning! No root view was set in TreeLayout#layout. Did you mean to call `root`?')
282
284
  end
283
285
  end
284
286
  run_deferred(@view)
@@ -311,11 +313,11 @@ module MotionKit
311
313
  # Accepts a view instance, a class (which is instantiated with 'new') or a
312
314
  # `ViewLayout`, which returns the root view.
313
315
  def initialize_view(elem)
314
- if elem.is_a?(Class) && elem < ViewLayout
316
+ if elem.is_a?(Class) && elem < TreeLayout
315
317
  elem = elem.new_child(@layout, nil, self).view
316
318
  elsif elem.is_a?(Class)
317
319
  elem = elem.new
318
- elsif elem.is_a?(ViewLayout)
320
+ elsif elem.is_a?(TreeLayout)
319
321
  elem = elem.view
320
322
  end
321
323
 
@@ -1,3 +1,3 @@
1
1
  module MotionKit
2
- VERSION = '0.9.4'
2
+ VERSION = '0.9.6'
3
3
  end
@@ -395,11 +395,11 @@ module MotionKit
395
395
  end
396
396
 
397
397
  def attribute=(value)
398
- raise NoMethodError.new('attribute=')
398
+ raise NoMethodError.new("undefined method `#{:attribute=}' for #{self}:#{self.class}", :attribute=)
399
399
  end
400
400
 
401
401
  def attribute2=(value)
402
- raise NoMethodError.new('attribute2=')
402
+ raise NoMethodError.new("undefined method `#{:attribute2=}' for #{self}:#{self.class}", :attribute2=)
403
403
  end
404
404
 
405
405
  def constant=(constant)
@@ -1,12 +1,12 @@
1
1
  # @provides MotionKit::CAGradientLayerLayout
2
2
  # @requires MotionKit::CALayerLayout
3
- # @requires MotionKit::ViewLayout
3
+ # @requires MotionKit::TreeLayout
4
4
  module MotionKit
5
5
  class CAGradientLayerLayout < CALayerLayout
6
6
  targets CAGradientLayer
7
7
 
8
8
  def colors(values)
9
- target.colors = values.map { |color| color.is_a?(UIColor) ? color.CGColor : color }
9
+ target.colors = values.map { |color| color.is_a?(MotionKit.color_class) ? color.CGColor : color }
10
10
  end
11
11
 
12
12
  end
@@ -1,7 +1,7 @@
1
1
  # @provides MotionKit::CALayerLayout
2
- # @requires MotionKit::ViewLayout
2
+ # @requires MotionKit::TreeLayout
3
3
  module MotionKit
4
- class CALayerLayout < ViewLayout
4
+ class CALayerLayout < TreeLayout
5
5
  targets CALayer
6
6
 
7
7
  # platform specific default root view
@@ -13,6 +13,10 @@ module MotionKit
13
13
  UIView
14
14
  end
15
15
 
16
+ def color_class
17
+ UIColor
18
+ end
19
+
16
20
  def no_intrinsic_metric
17
21
  UIViewNoIntrinsicMetric
18
22
  end
@@ -1,8 +1,8 @@
1
1
  # @provides MotionKit::Layout
2
2
  # @provides MotionKit::UIViewLayout
3
- # @requires MotionKit::ViewLayout
3
+ # @requires MotionKit::TreeLayout
4
4
  module MotionKit
5
- class Layout < ViewLayout
5
+ class Layout < TreeLayout
6
6
 
7
7
  # platform specific default root view
8
8
  def default_root
@@ -107,7 +107,7 @@ module MotionKit
107
107
  if f.is_a?(Hash)
108
108
  f = f.merge(relative: true)
109
109
  end
110
- f = MotionKit.calculate(calculate_view, :frame, f, from_view)
110
+ f = MotionKit.calculate(calculate_view, :frame, f, target.superview)
111
111
  f.origin.x += o.x
112
112
  f.origin.y += o.y
113
113
 
@@ -272,18 +272,27 @@ module MotionKit
272
272
 
273
273
  # The first arg can be a view or a frame
274
274
  # @example
275
+ # frame above(view, [[0, 0], [100, 20]])
276
+ # frame above(:view, x: 0, y: 0, width: 100, height: 20)
277
+ # frame above(:view, down: 0, right: 0, width: 100, height: 20)
275
278
  def above(from_view, f={})
276
279
  _calculate_frame(f, from: from_view, relative_to: { x: :reset, y: :above })
277
280
  end
278
281
 
279
282
  # The first arg can be a view or a frame
280
283
  # @example
284
+ # frame below(view, [[0, 0], [100, 20]])
285
+ # frame below(:view, x: 0, y: 0, width: 100, height: 20)
286
+ # frame below(:view, down: 0, right: 0, width: 100, height: 20)
281
287
  def below(from_view, f={})
282
288
  _calculate_frame(f, from: from_view, relative_to: { x: :reset, y: :below })
283
289
  end
284
290
 
285
291
  # The first arg can be a view or a frame
286
292
  # @example
293
+ # frame before(view, [[0, 0], [100, 20]])
294
+ # frame before(:view, x: 0, y: 0, width: 100, height: 20)
295
+ # frame before(:view, down: 0, right: 0, width: 100, height: 20)
287
296
  def before(from_view, f={})
288
297
  _calculate_frame(f, from: from_view, relative_to: { x: :before, y: :reset })
289
298
  end
@@ -291,6 +300,9 @@ module MotionKit
291
300
 
292
301
  # The first arg can be a view or a frame
293
302
  # @example
303
+ # frame after(view, [[0, 0], [100, 20]])
304
+ # frame after(:view, x: 0, y: 0, width: 100, height: 20)
305
+ # frame after(:view, down: 0, right: 0, width: 100, height: 20)
294
306
  def after(from_view, f={})
295
307
  _calculate_frame(f, from: from_view, relative_to: { x: :after, y: :reset })
296
308
  end
@@ -298,6 +310,9 @@ module MotionKit
298
310
 
299
311
  # The first arg must be a view
300
312
  # @example
313
+ # frame relative_to(view, [[0, 0], [100, 20]])
314
+ # frame relative_to(:view, x: 0, y: 0, width: 100, height: 20)
315
+ # frame relative_to(:view, down: 0, right: 0, width: 100, height: 20)
301
316
  def relative_to(from_view, f)
302
317
  _calculate_frame(f, from: from_view, relative_to: { x: :reset, y: :reset })
303
318
  end
@@ -1,8 +1,8 @@
1
1
  # @provides MotionKit::MenuLayout
2
2
  # @provides MotionKit::NSMenuLayout
3
- # @requires MotionKit::ViewLayout
3
+ # @requires MotionKit::TreeLayout
4
4
  module MotionKit
5
- class MenuLayout < ViewLayout
5
+ class MenuLayout < TreeLayout
6
6
 
7
7
  # A more sensible name for the menu that is created.
8
8
  def menu
@@ -1,8 +1,8 @@
1
1
  # @provides MotionKit::Layout
2
2
  # @provides MotionKit::NSViewLayout
3
- # @requires MotionKit::ViewLayout
3
+ # @requires MotionKit::TreeLayout
4
4
  module MotionKit
5
- class Layout < ViewLayout
5
+ class Layout < TreeLayout
6
6
 
7
7
  # platform specific default root view
8
8
  def default_root
@@ -1,8 +1,8 @@
1
1
  # @provides MotionKit::WindowLayout
2
2
  # @provides MotionKit::NSWindowLayout
3
- # @requires MotionKit::ViewLayout
3
+ # @requires MotionKit::TreeLayout
4
4
  module MotionKit
5
- class WindowLayout < ViewLayout
5
+ class WindowLayout < TreeLayout
6
6
 
7
7
  # A more sensible name for the window that is created.
8
8
  def window
@@ -9,6 +9,10 @@ module MotionKit
9
9
  NSView
10
10
  end
11
11
 
12
+ def color_class
13
+ NSColor
14
+ end
15
+
12
16
  def no_intrinsic_metric
13
17
  NSViewNoInstrinsicMetric
14
18
  end
data/lib/motion-kit.rb CHANGED
@@ -5,6 +5,7 @@ end
5
5
 
6
6
  require 'dbt'
7
7
 
8
+
8
9
  Motion::Project::App.setup do |app|
9
10
  core_lib = File.join(File.dirname(__FILE__), 'motion-kit')
10
11
  cocoa_lib = File.join(File.dirname(__FILE__), 'motion-kit-cocoa')
@@ -14,6 +14,7 @@ describe "Layouts automatically apply styles" do
14
14
  it "should apply all styles" do
15
15
  @subject.get(:logo).text.should == 'MK'
16
16
  @subject.get(:label).text.should == ':label'
17
+ @subject.get(:label).numberOfLines.should == 2
17
18
  @subject.get(:label).font.pointSize.should == 16
18
19
  @subject.get(:label).textColor.should == UIColor.blackColor
19
20
  end
@@ -524,6 +524,17 @@ describe 'Frame helpers' do
524
524
  @view.frame.size.height.should == @view_size.height
525
525
  end
526
526
 
527
+ it 'should support setting the frame via `from_top(view, width: "100%")`' do
528
+ @layout.context(@view) do
529
+ retval = @layout.frame @layout.from_top(@another_view, x: 1, y: 1, width: '100%')
530
+ retval.should == @view.frame
531
+ end
532
+ @view.frame.origin.x.should == @another_view.frame.origin.x + (@another_view.frame.size.width - @view.frame.size.width) / 2 + 1
533
+ @view.frame.origin.y.should == @another_view.frame.origin.y + 1
534
+ @view.frame.size.width.should == @superview_size.width
535
+ @view.frame.size.height.should == @view_size.height
536
+ end
537
+
527
538
  it 'should support setting the frame via `from_top_right`' do
528
539
  @layout.context(@view) do
529
540
  retval = @layout.frame @layout.from_top_right()
@@ -21,4 +21,17 @@ describe 'UIButton Layout and objc-style selectors' do
21
21
  @layout.get(:button).imageForState(UIControlStateHighlighted).should == TestButtonLayout::HIGHLIGHTED_IMAGE
22
22
  end
23
23
 
24
+ it 'should set the titleLabel font' do
25
+ font = @layout.get(:button).titleLabel.font
26
+ should_be_font = UIFont.fontWithName(TestButtonLayout::FONT, size: TestButtonLayout::SIZE)
27
+
28
+ font.familyName.should == should_be_font.familyName
29
+ font.pointSize.should == should_be_font.pointSize
30
+ end
31
+
32
+ it 'should set the titleLabel textAlignment' do
33
+ alignment = @layout.get(:button).titleLabel.textAlignment
34
+ alignment.should == NSTextAlignmentCenter
35
+ end
36
+
24
37
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: motion-kit
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.4
4
+ version: 0.9.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Colin T.A. Gray
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2014-05-08 00:00:00.000000000 Z
12
+ date: 2014-05-18 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: dbt
@@ -38,7 +38,7 @@ files:
38
38
  - lib/motion-kit/layouts/base_layout.rb
39
39
  - lib/motion-kit/layouts/base_layout_class_methods.rb
40
40
  - lib/motion-kit/layouts/parent.rb
41
- - lib/motion-kit/layouts/view_layout.rb
41
+ - lib/motion-kit/layouts/tree_layout.rb
42
42
  - lib/motion-kit/motion-kit.rb
43
43
  - lib/motion-kit/object.rb
44
44
  - lib/motion-kit/util.rb