motion-kit 0.13.0 → 0.14.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 2b2b7891f4a764ec64a5a015e75cb609f161d744
4
- data.tar.gz: ca6b9958b22c9dbc6d78efe6eaf9281878e1db98
3
+ metadata.gz: c1de6fcc1bebb1578ad6110741b7d5edb084c307
4
+ data.tar.gz: 2b21fc0a39cae00452ed4ef9fd709cfea10d51e1
5
5
  SHA512:
6
- metadata.gz: 904f76837a3321502bccc36587931301d48d500ab597482df30d5541b218cb4de7cd7d21df78b3e4fa7d7e98b6d7e876e2926439ca4e761fa2345db9c258f419
7
- data.tar.gz: c905dcff79b15598662c7cd2055ae8121cb763db31df07bca51d32002643b92ca942455242f514ddbdb14872a59c5326d73bb935fb11bea481a711bd392291bc
6
+ metadata.gz: ac2fd44e427fa6c0d91706b0243e4902ad66a402a1974e655e2e1cd2c6f882f083426f49ab8334d771748bb3e726d07eb25f3cd20a2b534bb8bc651dbfda1cd2
7
+ data.tar.gz: bc6d0928ca21a6af0b7876b882c5b704b40a41e2f04e8e1784835cd3e100deade600360268240a367aa2f7b9a05d8cd3f9d8817d65a3ccfc942576da620471a4
data/README.md CHANGED
@@ -109,7 +109,7 @@ class SimpleLayout < MotionKit::Layout
109
109
 
110
110
  # note: there are better ways to set the center, see the frame helpers below
111
111
  center [CGRectGetMidX(superview.bounds), CGRectGetMidY(superview.bounds)]
112
- text_alignment UITextAlignmentCenter
112
+ text_alignment NSTextAlignmentCenter
113
113
  text_color UIColor.whiteColor
114
114
 
115
115
  # if you prefer to use shorthands from another gem, you certainly can!
@@ -706,6 +706,47 @@ add UIView, :bar do
706
706
  end
707
707
  ```
708
708
 
709
+ One common use case is to use a child layout to create many instances of the
710
+ same layout that repeat, for instance a "row" of content. In this case you will
711
+ probably have many views with the same id, and you will not know the index of
712
+ the container view that you want to add constraints to. In this situation, use
713
+ the `nearest`, `previous` or `next` method to find a container, sibling, or
714
+ child view.
715
+
716
+ `previous` and `next` are easy; they just search for a sibling view. No
717
+ superviews or subviews are searched.
718
+
719
+ `nearest` will search child views, siblings, and superviews, in that order. The
720
+ "distance" is calculated as such:
721
+
722
+ - the current view
723
+ - subviews
724
+ - siblings
725
+ - superview
726
+ - superview's siblings, or a child of the sibling (depth-first search)
727
+ - continue up the tree
728
+
729
+ See the AutoLayout sample app for an example of this usage.
730
+
731
+ ```ruby
732
+ items.each do |item|
733
+ add UIView, :row do
734
+ add UIImageView, :avatar
735
+ add UILabel, :title
736
+ end
737
+ end
738
+
739
+ def title_style
740
+ constraints do
741
+ # center the view vertically
742
+ center.equals(nearest(:row))
743
+ # and place it to the right of the :avatar
744
+ left.equals(nearest(:avatar), :right).plus(8)
745
+ right.equals(nearest(:row)).minus(8)
746
+ end
747
+ end
748
+ ```
749
+
709
750
  One pain point in working with constraints is determining when to add them to
710
751
  your views. We tried really hard to figure out a way to automatically add them,
711
752
  but it's just an untenable problem (Teacup suffers from a similar conundrum).
@@ -731,8 +772,10 @@ class MainLayout < MK::Layout
731
772
  end
732
773
  end
733
774
 
734
- # this method will be called from `UIViewController#updateViewConstraints`
775
+ # You should call this method from `UIViewController#updateViewConstraints`
776
+ # and pass in your controller
735
777
  def add_constraints(controller)
778
+ # guard against adding these constraints more than once
736
779
  unless @layout_constraints_added
737
780
  @layout_constraints_added = true
738
781
  constraints(:label) do
@@ -0,0 +1,74 @@
1
+ module MotionKit
2
+ module_function
3
+
4
+ def siblings(view)
5
+ case view
6
+ when CALayer
7
+ view.superlayer ? view.superlayer.sublayers : []
8
+ else
9
+ view.superview ? view.superview.subviews : []
10
+ end
11
+ end
12
+
13
+ def children(view)
14
+ case view
15
+ when CALayer
16
+ view.sublayers
17
+ else
18
+ view.subviews
19
+ end
20
+ end
21
+
22
+ def parent(view)
23
+ case view
24
+ when CALayer
25
+ view.superlayer
26
+ else
27
+ view.superview
28
+ end
29
+ end
30
+
31
+ # - check view
32
+ # - check subviews (unless 'skip' is provided)
33
+ # - check siblings (skipping 'view')
34
+ # - go up to parent and repeat, skipping children
35
+ def nearest(view, skip=nil, &test)
36
+ return nil if view.nil?
37
+
38
+ if test.call(view)
39
+ return view
40
+ end
41
+
42
+ children = MotionKit.children(view)
43
+ siblings = MotionKit.siblings(view)
44
+ parent = MotionKit.parent(view)
45
+
46
+ found = nil
47
+
48
+ # only check the children starting at the "root", e.g. nearest hasn't been
49
+ # called recursively.
50
+ if !skip || skip == parent
51
+ children.each do |child|
52
+ found = nearest(child, &test)
53
+ break if found
54
+ end
55
+ return found if found
56
+ end
57
+
58
+ # siblings are closer than parents
59
+ # passing 'parent' means only check self and children
60
+ unless skip == parent
61
+ siblings.each do |sibling|
62
+ found = (sibling != view && nearest(sibling, parent, &test))
63
+ break if found
64
+ end
65
+ end
66
+
67
+ if found
68
+ found
69
+ elsif skip != parent
70
+ nearest(parent, true, &test)
71
+ end
72
+ end
73
+
74
+ end
@@ -303,8 +303,6 @@ module MotionKit
303
303
  def view_lookup(layout, view, target)
304
304
  if ! target || target.is_a?(MotionKit.base_view_class)
305
305
  target
306
- elsif target.is_a?(ConstraintPlaceholder)
307
- target.resolve(layout)
308
306
  elsif target == :self
309
307
  view
310
308
  elsif target == :superview
@@ -10,32 +10,20 @@ module MotionKit
10
10
  target
11
11
  end
12
12
 
13
- def first(name)
14
- ConstraintPlaceholder.new(:first, name)
15
- end
16
-
17
- def last(name)
18
- ConstraintPlaceholder.new(:last, name)
19
- end
20
-
21
- def nth(name, value)
22
- ConstraintPlaceholder.new(:nth, name, value)
23
- end
24
-
25
- def x(value=nil, rel=nil)
13
+ def left(value=nil, rel=nil)
26
14
  target_constraint(:left, rel, value)
27
15
  end
28
- alias left x
16
+ alias x left
29
17
 
30
- def min_x(value=nil)
31
- x(value, :gte)
18
+ def min_left(value=nil)
19
+ left(value, :gte)
32
20
  end
33
- alias min_left min_x
21
+ alias min_x min_left
34
22
 
35
- def max_x(value=nil)
36
- x(value, :lte)
23
+ def max_left(value=nil)
24
+ left(value, :lte)
37
25
  end
38
- alias max_left max_x
26
+ alias max_x max_left
39
27
 
40
28
  def leading(value=nil, rel=nil)
41
29
  target_constraint(:leading, rel, value)
@@ -85,20 +73,20 @@ module MotionKit
85
73
  trailing(value, :lte)
86
74
  end
87
75
 
88
- def y(value=nil, rel=nil)
76
+ def top(value=nil, rel=nil)
89
77
  target_constraint(:top, rel, value)
90
78
  end
91
- alias top y
79
+ alias y top
92
80
 
93
- def min_y(value=nil)
94
- y(value, :gte)
81
+ def min_top(value=nil)
82
+ top(value, :gte)
95
83
  end
96
- alias min_top min_y
84
+ alias min_y min_top
97
85
 
98
- def max_y(value=nil)
99
- y(value, :lte)
86
+ def max_top(value=nil)
87
+ top(value, :lte)
100
88
  end
101
- alias max_top max_y
89
+ alias max_y max_top
102
90
 
103
91
  def center_y(value=nil, rel=nil)
104
92
  target_constraint(:center_y, rel, value)
@@ -238,6 +226,9 @@ module MotionKit
238
226
  end
239
227
 
240
228
  def above(view)
229
+ unless view
230
+ raise ArgumentError.new("`#{view.inspect}` is not a valid target for making a `above` constraint.")
231
+ end
241
232
  constraint = Constraint.new(constraint_target.view, :bottom, :equal)
242
233
  constraint.equals(view, :top)
243
234
 
@@ -246,6 +237,9 @@ module MotionKit
246
237
  end
247
238
 
248
239
  def below(view)
240
+ unless view
241
+ raise ArgumentError.new("`#{view.inspect}` is not a valid target for making a `below` constraint.")
242
+ end
249
243
  constraint = Constraint.new(constraint_target.view, :top, :equal)
250
244
  constraint.equals(view, :bottom)
251
245
 
@@ -254,6 +248,9 @@ module MotionKit
254
248
  end
255
249
 
256
250
  def before(view)
251
+ unless view
252
+ raise ArgumentError.new("`#{view.inspect}` is not a valid target for making a `before` constraint.")
253
+ end
257
254
  constraint = Constraint.new(constraint_target.view, :right, :equal)
258
255
  constraint.equals(view, :left)
259
256
 
@@ -263,6 +260,9 @@ module MotionKit
263
260
  alias left_of before
264
261
 
265
262
  def after(view)
263
+ unless view
264
+ raise ArgumentError.new("`#{view.inspect}` is not a valid target for making a `after` constraint.")
265
+ end
266
266
  constraint = Constraint.new(constraint_target.view, :left, :equal)
267
267
  constraint.equals(view, :right)
268
268
 
@@ -12,6 +12,14 @@ module MotionKit
12
12
  @constraints.concat(constraints)
13
13
  end
14
14
 
15
+ def ==(value)
16
+ if value.is_a?(ConstraintsTarget)
17
+ super
18
+ else
19
+ @view == value
20
+ end
21
+ end
22
+
15
23
  def apply_all_constraints(layout, target)
16
24
  @constraints.map do |mk_constraint|
17
25
  mk_constraint.resolve_all(layout, target).map do |constraint|
@@ -276,6 +276,7 @@ module MotionKit
276
276
  objc_method_name, objc_method_args = objc_version(method_name, args)
277
277
  ruby_method_name, ruby_method_args = ruby_version(method_name, args)
278
278
 
279
+ objc_setter = objc_method_name && MotionKit.setter(objc_method_name)
279
280
  setter = MotionKit.setter(ruby_method_name)
280
281
  assign = "#{ruby_method_name}="
281
282
 
@@ -290,6 +291,8 @@ module MotionKit
290
291
  target.send(objc_method_name, *objc_method_args, &block)
291
292
  elsif args.empty? && target.respond_to?(ruby_method_name)
292
293
  target.send(ruby_method_name, *ruby_method_args, &block)
294
+ elsif objc_setter && target.respond_to?(objc_setter)
295
+ target.send(objc_setter, *objc_method_args, &block)
293
296
  elsif target.respond_to?(setter)
294
297
  target.send(setter, *args, &block)
295
298
  elsif target.respond_to?(assign)
@@ -287,6 +287,112 @@ module MotionKit
287
287
  element
288
288
  end
289
289
 
290
+ # Search for a sibling: the next sibling that has the given id
291
+ def next(element_id)
292
+ self.next(element_id, from: target)
293
+ end
294
+
295
+ def next(element_id, from: from_view)
296
+ unless is_parent_layout?
297
+ return parent_layout.next(element_id, from: from_view)
298
+ end
299
+ search = @elements[element_id]
300
+ if search.nil? || search.empty?
301
+ return nil
302
+ end
303
+
304
+ if from_view.is_a?(NSString)
305
+ from_view = self.get(from_view)
306
+ end
307
+
308
+ if from_view.is_a?(ConstraintsTarget)
309
+ from_view = from_view.view
310
+ end
311
+
312
+ searching = false
313
+ found = nil
314
+ MotionKit.siblings(from_view).each do |sibling|
315
+ if sibling == from_view
316
+ searching = true
317
+ elsif searching && search.include?(sibling)
318
+ found = sibling
319
+ break
320
+ end
321
+ end
322
+ return found
323
+ end
324
+
325
+ # Search for a sibling: the previous sibling that has the given id
326
+ def prev(element_id)
327
+ prev(element_id, from: target)
328
+ end
329
+
330
+ def prev(element_id, from: from_view)
331
+ unless is_parent_layout?
332
+ return parent_layout.prev(element_id, from: from_view)
333
+ end
334
+
335
+ search = @elements[element_id]
336
+ if search.nil? || search.empty?
337
+ return nil
338
+ end
339
+
340
+ if from_view.is_a?(NSString)
341
+ from_view = self.get(from_view)
342
+ end
343
+
344
+ if from_view.is_a?(ConstraintsTarget)
345
+ from_view = from_view.view
346
+ end
347
+
348
+ found = nil
349
+ MotionKit.siblings(from_view).each do |sibling|
350
+ if sibling == from_view
351
+ break
352
+ elsif search.include?(sibling)
353
+ # keep searching; prev should find the *closest* matching view
354
+ found = sibling
355
+ end
356
+ end
357
+ return found
358
+ end
359
+
360
+ # This searches for the "nearest" view with a given id. First, all child
361
+ # views are checked. Then the search goes up to the parent view, and its
362
+ # child views are checked. This means *any* view that is in the parent
363
+ # view's hierarchy is considered closer than a view in a grandparent's
364
+ # hierarchy. This is a "depth-first" search, so any subview that contains
365
+ # a view with the element id
366
+ #
367
+ # A--B--C--D* Starting at D, E is closer than F, because D&E are siblings.
368
+ # \ \ \-E But F, G and H are closer than A or I, because they share a
369
+ # \ \-F--G closer *parent* (B). The logic is, "B" is a container, and
370
+ # \-I \-H all views in that container are in a closer family.
371
+ def nearest(element_id)
372
+ nearest(element_id, from: target)
373
+ end
374
+
375
+ def nearest(element_id, from: from_view)
376
+ unless is_parent_layout?
377
+ return parent_layout.nearest(element_id, from: from_view)
378
+ end
379
+
380
+ search = @elements[element_id]
381
+ if search.nil? || search.empty?
382
+ return nil
383
+ end
384
+
385
+ if from_view.is_a?(NSString)
386
+ from_view = self.get(from_view)
387
+ end
388
+
389
+ if from_view.is_a?(ConstraintsTarget)
390
+ from_view = from_view.view
391
+ end
392
+
393
+ MotionKit.nearest(from_view) { |test_view| search.include?(test_view) }
394
+ end
395
+
290
396
  # Removes a view (or several with the same name) from the hierarchy
291
397
  # and forgets it entirely. Returns the views that were removed.
292
398
  def remove(element_id)
@@ -10,7 +10,11 @@ module MotionKit
10
10
  end
11
11
 
12
12
  def setter(method_name)
13
- "set#{method_name[0].capitalize}#{method_name[1..-1]}:"
13
+ setter = "set#{method_name[0].capitalize}#{method_name[1..-1]}"
14
+ unless setter.end_with?(':')
15
+ setter << ':'
16
+ end
17
+ setter
14
18
  end
15
19
 
16
20
  def appearance_class
@@ -1,3 +1,3 @@
1
1
  module MotionKit
2
- VERSION = '0.13.0'
2
+ VERSION = '0.14.0'
3
3
  end
@@ -0,0 +1,80 @@
1
+ describe 'MotionKit nearest element logic' do
2
+
3
+ before do
4
+ @subject = TestNearestLayout.new.build
5
+ end
6
+
7
+ it 'should support self_search' do
8
+ found = nil
9
+ @subject.self_search
10
+ @subject.context(@subject.start_here) do
11
+ found = @subject.nearest(:self_search)
12
+ end
13
+ found.should == @subject.expected_to_find
14
+ end
15
+
16
+ it 'should support child_search' do
17
+ found = nil
18
+ @subject.child_search
19
+ @subject.context(@subject.start_here) do
20
+ found = @subject.nearest(:child_search)
21
+ end
22
+ found.should == @subject.expected_to_find
23
+ end
24
+
25
+ it 'should support sibling_search' do
26
+ found = nil
27
+ @subject.sibling_search
28
+ @subject.context(@subject.start_here) do
29
+ found = @subject.nearest(:sibling_search)
30
+ end
31
+ found.should == @subject.expected_to_find
32
+ end
33
+
34
+ it 'should support siblings_child_search' do
35
+ found = nil
36
+ @subject.siblings_child_search
37
+ @subject.context(@subject.start_here) do
38
+ found = @subject.nearest(:siblings_child_search)
39
+ end
40
+ found.should == @subject.expected_to_find
41
+ end
42
+
43
+ it 'should support parent_search' do
44
+ found = nil
45
+ @subject.parent_search
46
+ @subject.context(@subject.start_here) do
47
+ found = @subject.nearest(:parent_search)
48
+ end
49
+ found.should == @subject.expected_to_find
50
+ end
51
+
52
+ it 'should support distant_search' do
53
+ found = nil
54
+ @subject.distant_search
55
+ @subject.context(@subject.start_here) do
56
+ found = @subject.nearest(:distant_search)
57
+ end
58
+ found.should == @subject.expected_to_find
59
+ end
60
+
61
+ it 'should support nearest(id, from: view)' do
62
+ found = nil
63
+ @subject.nearest_from_search
64
+ @subject.context(@subject.start_here) do
65
+ from_here = @subject.get(:from_here)
66
+ found = @subject.nearest(:nearest_from_search, from: from_here)
67
+ end
68
+ found.should == @subject.expected_to_find
69
+ end
70
+
71
+ it 'should support nearest(id, from: id)' do
72
+ found = nil
73
+ @subject.nearest_from_search
74
+ @subject.context(@subject.start_here) do
75
+ found = @subject.nearest(:nearest_from_search, from: :from_here)
76
+ end
77
+ found.should == @subject.expected_to_find
78
+ end
79
+
80
+ end
@@ -0,0 +1,153 @@
1
+ describe 'MotionKit prev/next element logic' do
2
+
3
+ before do
4
+ @subject = TestPrevNextLayout.new.build
5
+ end
6
+
7
+ it 'should find "nil" before "first"' do
8
+ found = nil
9
+ @subject.context(@subject.first_row) do
10
+ found = @subject.prev(:row)
11
+ end
12
+ found.should == nil
13
+ end
14
+
15
+ it 'should find "first" before "second"' do
16
+ found = nil
17
+ @subject.context(@subject.second_row) do
18
+ found = @subject.prev(:row)
19
+ end
20
+ found.should == @subject.first_row
21
+ end
22
+
23
+ it 'should find "second" before "third"' do
24
+ found = nil
25
+ @subject.context(@subject.third_row) do
26
+ found = @subject.prev(:row)
27
+ end
28
+ found.should == @subject.second_row
29
+ end
30
+
31
+ it 'should find "second" after "first"' do
32
+ found = nil
33
+ @subject.context(@subject.first_row) do
34
+ found = @subject.next(:row)
35
+ end
36
+ found.should == @subject.second_row
37
+ end
38
+
39
+ it 'should find "third" after "second"' do
40
+ found = nil
41
+ @subject.context(@subject.second_row) do
42
+ found = @subject.next(:row)
43
+ end
44
+ found.should == @subject.third_row
45
+ end
46
+
47
+ it 'should find "nil" after "third"' do
48
+ found = nil
49
+ @subject.context(@subject.third_row) do
50
+ found = @subject.next(:row)
51
+ end
52
+ found.should == nil
53
+ end
54
+
55
+ describe 'Using :from option' do
56
+
57
+ before do
58
+ @subject.from_search
59
+ @start_here = @subject.get(:start_here)
60
+ end
61
+
62
+ it 'should find "nil" before "first"' do
63
+ found = nil
64
+ @subject.context(@start_here) do
65
+ found = @subject.prev(:row, from: @subject.first_row)
66
+ end
67
+ found.should == nil
68
+ end
69
+
70
+ it 'should find "first" before "second"' do
71
+ found = nil
72
+ @subject.context(@start_here) do
73
+ found = @subject.prev(:row, from: @subject.second_row)
74
+ end
75
+ found.should == @subject.first_row
76
+ end
77
+
78
+ it 'should find "second" before "third"' do
79
+ found = nil
80
+ @subject.context(@start_here) do
81
+ found = @subject.prev(:row, from: @subject.third_row)
82
+ end
83
+ found.should == @subject.second_row
84
+ end
85
+
86
+ it 'should find "second" after "first"' do
87
+ found = nil
88
+ @subject.context(@start_here) do
89
+ found = @subject.next(:row, from: @subject.first_row)
90
+ end
91
+ found.should == @subject.second_row
92
+ end
93
+
94
+ it 'should find "third" after "second"' do
95
+ found = nil
96
+ @subject.context(@start_here) do
97
+ found = @subject.next(:row, from: @subject.second_row)
98
+ end
99
+ found.should == @subject.third_row
100
+ end
101
+
102
+ it 'should find "nil" after "third"' do
103
+ found = nil
104
+ @subject.context(@start_here) do
105
+ found = @subject.next(:row, from: @subject.third_row)
106
+ end
107
+ found.should == nil
108
+ end
109
+
110
+ end
111
+
112
+ describe 'Using :from option and symbols' do
113
+
114
+ before do
115
+ @subject.from_symbol_search
116
+ @start_here = @subject.get(:start_here)
117
+ end
118
+
119
+ it 'should find prev(:first_row, from: :second_row)' do
120
+ found = nil
121
+ @subject.context(@start_here) do
122
+ found = @subject.prev(:first_row, from: :second_row)
123
+ end
124
+ found.should == @subject.first_row
125
+ end
126
+
127
+ it 'should find next(:third_row, from: :second_row)' do
128
+ found = nil
129
+ @subject.context(@start_here) do
130
+ found = @subject.next(:third_row, from: :second_row)
131
+ end
132
+ found.should == @subject.third_row
133
+ end
134
+
135
+ it 'should find prev(:first_row, from: :third_row)' do
136
+ found = nil
137
+ @subject.context(@start_here) do
138
+ found = @subject.prev(:first_row, from: :third_row)
139
+ end
140
+ found.should == @subject.first_row
141
+ end
142
+
143
+ it 'should find next(:third_row, from: :first_row)' do
144
+ found = nil
145
+ @subject.context(@start_here) do
146
+ found = @subject.next(:third_row, from: :first_row)
147
+ end
148
+ found.should == @subject.third_row
149
+ end
150
+
151
+ end
152
+
153
+ 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.13.0
4
+ version: 0.14.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Colin T.A. Gray
@@ -48,8 +48,8 @@ files:
48
48
  - lib/motion-kit/util.rb
49
49
  - lib/motion-kit/version.rb
50
50
  - lib/motion-kit-cocoa/calculator/view_calculator.rb
51
+ - lib/motion-kit-cocoa/cocoa_util.rb
51
52
  - lib/motion-kit-cocoa/constraints/constraint.rb
52
- - lib/motion-kit-cocoa/constraints/constraint_placeholder.rb
53
53
  - lib/motion-kit-cocoa/constraints/constraints_helpers.rb
54
54
  - lib/motion-kit-cocoa/constraints/constraints_target.rb
55
55
  - lib/motion-kit-cocoa/helpers/accessibility_compat.rb
@@ -116,10 +116,12 @@ files:
116
116
  - spec/ios/memory_leak_spec.rb
117
117
  - spec/ios/motion_kit_id_spec.rb
118
118
  - spec/ios/motionkit_util_spec.rb
119
+ - spec/ios/nearest_spec.rb
119
120
  - spec/ios/objc_selectors_spec.rb
120
121
  - spec/ios/orientation_helper_specs.rb
121
122
  - spec/ios/parent_layout_spec.rb
122
123
  - spec/ios/parent_spec.rb
124
+ - spec/ios/prev_next_spec.rb
123
125
  - spec/ios/reapply_frame.rb
124
126
  - spec/ios/relative_layout.spec.rb
125
127
  - spec/ios/remove_layout_spec.rb
@@ -200,10 +202,12 @@ test_files:
200
202
  - spec/ios/memory_leak_spec.rb
201
203
  - spec/ios/motion_kit_id_spec.rb
202
204
  - spec/ios/motionkit_util_spec.rb
205
+ - spec/ios/nearest_spec.rb
203
206
  - spec/ios/objc_selectors_spec.rb
204
207
  - spec/ios/orientation_helper_specs.rb
205
208
  - spec/ios/parent_layout_spec.rb
206
209
  - spec/ios/parent_spec.rb
210
+ - spec/ios/prev_next_spec.rb
207
211
  - spec/ios/reapply_frame.rb
208
212
  - spec/ios/relative_layout.spec.rb
209
213
  - spec/ios/remove_layout_spec.rb
@@ -1,22 +0,0 @@
1
- module MotionKit
2
- class ConstraintPlaceholder
3
-
4
- def initialize(type, name, value=nil)
5
- @type = type
6
- @name = name
7
- @value = value
8
- end
9
-
10
- def resolve(layout)
11
- case @type
12
- when :first
13
- layout.get_view(@name)
14
- when :last
15
- layout.last_view(@name)
16
- when :nth
17
- layout.nth_view(@name, @value)
18
- end
19
- end
20
-
21
- end
22
- end