geomotion 0.1 → 0.5

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.
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # Geomotion
1
+ # Geomotion for [RubyMotion](http://rubymotion.com)
2
2
 
3
3
  iOS Geometry in idiomatic Ruby. Exhaustively tested. What's not to love?
4
4
 
@@ -26,35 +26,38 @@ rect.center(true)
26
26
  => CGPoint(35, 110) # center as frame
27
27
 
28
28
  # Operator Overloading
29
+ -rect
30
+ => CGRect(-10, -100, -50, -20)
31
+
29
32
  rect + CGRect.make(x: 9, y: 99, width: 10, height: 10)
30
33
  => CGRect(9, 99, 50, 20) # == union of rects
31
34
 
32
- rect + CGSize.new(11, 1)
35
+ rect + CGSize.make(width: 11, height: 1)
33
36
  => CGRect(10, 100, 61, 21) # == increases the size, but keeps the origin
34
37
 
35
- rect + CGPoint.new(10, 10)
36
- => CGRect.new(20, 110, 50, 20)
38
+ rect + CGPoint.make(x: 10, y: 10)
39
+ => CGRect(20, 110, 50, 20)
37
40
 
38
41
  rect + UIOffsetMake(10, 10)
39
- => CGRect.new(20, 110, 50, 20)
42
+ => CGRect(20, 110, 50, 20)
40
43
 
41
44
  a_point + a_size
42
45
  => CGRect # a point and a size make a rectangle. makes sense, right?
43
46
 
44
47
  # Union and Intersection
45
- rect.union_with CGRect.new(9, 99, 10, 10)
48
+ rect.union_with CGRect.make(x: 9, y: 99, width: 10, height: 10)
46
49
  => CGRect(9, 99, 50, 20)
47
50
 
48
- rect.intersection_with CGRect.new(9, 99, 10, 10)
49
- => CGRect.new(10, 100, 10, 10)
51
+ rect.intersection_with CGRect.make(x: 9, y: 99, width: 10, height: 10)
52
+ => CGRect(10, 100, 10, 10)
50
53
 
51
54
  # Growing and shrinking
52
55
  # The center stays the same. Think margins!
53
- rect.grow(CGSize.new(10, 20))
54
- => CGRect.new(5, 90, 60, 40)
56
+ rect.grow(CGSize.make(width: 10, height: 20))
57
+ => CGRect(5, 90, 60, 40)
55
58
 
56
59
  rect.shrink(10)
57
- => CGRect.new(15, 105, 40, 10)
60
+ => CGRect(15, 105, 40, 10)
58
61
 
59
62
  # Powerful layout adjustments with chainable methods
60
63
  view = UIView.alloc.initWithFrame rect.below.width(100).height(10)
@@ -73,14 +76,14 @@ rect = CGRect.make(x: 10, y: 100, width: 50, height: 20)
73
76
  # Layout "above" and "before" rectangles
74
77
  # (default offset is the rectangle's width or height)
75
78
  rect.before(5)
76
- => CGRect.new(-45, 100, 50, 20)
79
+ => CGRect(-45, 100, 50, 20)
77
80
  rect.before(5, width:20)
78
- => CGRect.new(-15, 100, 20, 20)
81
+ => CGRect(-15, 100, 20, 20)
79
82
 
80
83
  rect.above(5)
81
- => CGRect.new(10, 75, 50, 20)
84
+ => CGRect(10, 75, 50, 20)
82
85
  rect.above(5, height:10)
83
- => CGRect.new(10, 85, 50, 10)
86
+ => CGRect(10, 85, 50, 10)
84
87
 
85
88
  # Layout a rect relative to others
86
89
  rect2 = CGRect.make(x: 50, y: 50, width: 100, height: 100)
@@ -108,6 +111,9 @@ size_zero.empty?
108
111
  => true
109
112
 
110
113
  # Operator Overloading
114
+ -size
115
+ => CGSize(-50, -20)
116
+
111
117
  size + CGSize.make(width: 100, height: 50)
112
118
  => CGSize(150, 70)
113
119
 
@@ -126,6 +132,9 @@ size.rect_at_point CGPoint.make(x: 10, y: 30)
126
132
  point = CGPoint.make(x: 10, y: 100)
127
133
 
128
134
  # Operator Overloading
135
+ -point
136
+ => CGPoint(-10, -100)
137
+
129
138
  point + CGPoint.make(x: 20, y: 40)
130
139
  => CGPoint(30, 140)
131
140
 
@@ -6,7 +6,7 @@ class CGPoint
6
6
 
7
7
  # size = CGSize.make width: 100, height: 100
8
8
  # point = CPPoint.make x:0, y:10
9
- # point.rect_of_size(point) # => CGRect([0, 10], [100, 100])
9
+ # point.rect_of_size(size) # => CGRect([0, 10], [100, 100])
10
10
  # point.rect_of_size([10, 20]) # => CGRect([10, 20], [100, 100])
11
11
  def rect_of_size(size)
12
12
  CGRect.new([self.x, self.y], size)
@@ -33,4 +33,16 @@ class CGPoint
33
33
  point.is_a?(CGPoint) && CGPointEqualToPoint(self, point)
34
34
  end
35
35
 
36
+ def -@
37
+ CGPoint.new(-self.x, -self.y)
38
+ end
39
+
40
+ def -(other)
41
+ self.+(-other)
42
+ end
43
+
44
+ def inspect
45
+ "#{self.class.name}(#{self.x}, #{self.y})"
46
+ end
47
+
36
48
  end
@@ -1,29 +1,48 @@
1
1
  class CGRect
2
- # CGRect.make(x: 10, y: 30)
2
+ # CGRect.make # default rect: {origin: {x: 0, y: 0}, size: {width:0, height:0}}
3
+ # # aka CGRectZero
4
+ # CGRect.make(x: 10, y: 30) # default size: [0, 0]
3
5
  # CGRect.make(x: 10, y: 30, width:100, height: 20)
6
+ #
7
+ # point = CGPoint.make(x: 10, y: 30)
8
+ # size = CGSize.make(width: 100, height: 20)
9
+ # CGRect.make(origin: point, size: size)
4
10
  def self.make(options = {})
5
11
  if options[:origin]
6
- options[:x] = options[:origin].x
7
- options[:y] = options[:origin].y
12
+ x = options[:origin].x
13
+ y = options[:origin].y
14
+ else
15
+ x = options[:x] || 0
16
+ y = options[:y] || 0
8
17
  end
9
18
  if options[:size]
10
- options[:width] = options[:size].width
11
- options[:height] = options[:size].height
19
+ w = options[:size].width
20
+ h = options[:size].height
21
+ else
22
+ w = options[:width] || 0
23
+ h = options[:height] || 0
12
24
  end
13
- CGRect.new([options[:x] || 0, options[:y] || 0], [options[:width] || 0, options[:height] || 0])
25
+ self.new([x, y], [w, h])
14
26
  end
15
27
 
16
28
  def self.empty
17
- # Don't return CGRectZero; can be mutated
18
- CGRect.make
29
+ # Don't just return CGRectZero; can be mutated
30
+ CGRectZero.dup
19
31
  end
20
32
 
21
33
  def self.null
22
- CGRectNull
34
+ # Don't just return CGRectNull; can be mutated
35
+ CGRectNull.dup
23
36
  end
24
37
 
25
38
  def self.infinite
26
- self.new([0, 0], CGSize.infinite)
39
+ # This actually returns the not-very-infinite value of:
40
+ # [[-1.7014114289565e+38, -1.7014114289565e+38], [3.402822857913e+38, 3.402822857913e+38]]
41
+ # originally this method returned [[-Infinity, -Infinity], [Infinity, Infinity]],
42
+ # but that rect ended up returning `false` for any point in the method
43
+ # CGRect.infinite.contains?(point). CGRectInfinite returns `true` for any
44
+ # (sensible) point, so we'll go with that instead
45
+ CGRectInfinite.dup
27
46
  end
28
47
 
29
48
  # OPTIONS: [:above, :below, :left_of, :right_of, :margins]
@@ -31,11 +50,11 @@ class CGRect
31
50
  # EX CGRect.layout(rect1, above: rect2, left_of: rect3, margins: [0, 10, 20, 0])
32
51
  def self.layout(rect1, options)
33
52
  if options.empty?
34
- p "No options provided in CGRect.layout"
53
+ p "No options provided in #{self.class}.layout"
35
54
  return rect1
36
55
  end
37
56
 
38
- rect = CGRect.new
57
+ rect = self.new
39
58
  rect.size = rect1.size
40
59
 
41
60
  options[:margins] ||= []
@@ -53,11 +72,29 @@ class CGRect
53
72
  rect
54
73
  end
55
74
 
75
+ # bounds
76
+ def min_x
77
+ CGRectGetMinX(self)
78
+ end
79
+
80
+ def max_x
81
+ CGRectGetMaxX(self)
82
+ end
83
+
84
+ def min_y
85
+ CGRectGetMinY(self)
86
+ end
87
+
88
+ def max_y
89
+ CGRectGetMaxY(self)
90
+ end
91
+
92
+ # getters/setters
56
93
  def x(setter = nil)
57
94
  if setter
58
95
  return CGRect.new([setter, self.y], self.size)
59
96
  end
60
- self.origin.x
97
+ min_x
61
98
  end
62
99
 
63
100
  def x=(_x)
@@ -68,7 +105,7 @@ class CGRect
68
105
  if setter
69
106
  return CGRect.new([self.x, setter], self.size)
70
107
  end
71
- self.origin.y
108
+ min_y
72
109
  end
73
110
 
74
111
  def y=(_y)
@@ -79,7 +116,7 @@ class CGRect
79
116
  if setter
80
117
  return CGRect.new(self.origin, [setter, self.height])
81
118
  end
82
- self.size.width
119
+ CGRectGetWidth(self)
83
120
  end
84
121
 
85
122
  def width=(_width)
@@ -90,13 +127,14 @@ class CGRect
90
127
  if setter
91
128
  return CGRect.new(self.origin, [self.width, setter])
92
129
  end
93
- self.size.height
130
+ CGRectGetHeight(self)
94
131
  end
95
132
 
96
133
  def height=(_height)
97
134
  self.size.height = _height
98
135
  end
99
136
 
137
+ # modified rects
100
138
  def left(dist = 0)
101
139
  CGRect.new([self.x - dist, self.y], self.size)
102
140
  end
@@ -113,6 +151,23 @@ class CGRect
113
151
  CGRect.new([self.x, self.y + dist], self.size)
114
152
  end
115
153
 
154
+ def wider(dist)
155
+ CGRect.new(self.origin, [self.width + dist, self.height])
156
+ end
157
+
158
+ def thinner(dist)
159
+ CGRect.new(self.origin, [self.width - dist, self.height])
160
+ end
161
+
162
+ def taller(dist)
163
+ CGRect.new(self.origin, [self.width, self.height + dist])
164
+ end
165
+
166
+ def shorter(dist)
167
+ CGRect.new(self.origin, [self.width, self.height - dist])
168
+ end
169
+
170
+ # adjacent rects
116
171
  def above(margin = 0)
117
172
  self.above(margin, height:self.height)
118
173
  end
@@ -134,24 +189,43 @@ class CGRect
134
189
  end
135
190
 
136
191
  def beside(margin = 0)
137
- CGRect.new([self.x + self.width + margin, self.y], self.size)
192
+ self.beside(margin, width: self.width)
138
193
  end
139
194
 
140
- def center(relative = false)
141
- offset_x = relative ? self.x : 0
142
- offset_y = relative ? self.y : 0
195
+ def beside(margin, width:width)
196
+ CGRect.new([self.x + self.width + margin, self.y], [width, self.height])
197
+ end
198
+
199
+ # locations
200
+ def center(absolute = false)
201
+ offset_x = absolute ? self.x : 0
202
+ offset_y = absolute ? self.y : 0
143
203
  CGPoint.new(offset_x + self.width / 2, offset_y + self.height / 2)
144
204
  end
145
205
 
206
+ def top_left
207
+ CGPoint.new(CGRectGetMinX(self), CGRectGetMinY(self))
208
+ end
209
+
210
+ def top_right
211
+ CGPoint.new(CGRectGetMaxX(self), CGRectGetMinY(self))
212
+ end
213
+
214
+ def bottom_left
215
+ CGPoint.new(CGRectGetMinX(self), CGRectGetMaxY(self))
216
+ end
217
+
218
+ def bottom_right
219
+ CGPoint.new(CGRectGetMaxX(self), CGRectGetMaxY(self))
220
+ end
221
+
222
+ # others
146
223
  def round
147
224
  CGRect.new([self.x.round, self.y.round], [self.width.round, self.height.round])
148
225
  end
149
226
 
150
- def centered_in(rect, relative = false)
151
- offset_x = relative ? rect.x : 0
152
- offset_y = relative ? rect.y : 0
153
- CGRect.new([offset_x + ((rect.width - self.width) / 2),
154
- offset_y + ((rect.height - self.height) / 2)], self.size)
227
+ def centered_in(rect, absolute = false)
228
+ self.size.centered_in(rect, absolute)
155
229
  end
156
230
 
157
231
  def +(other)
@@ -196,7 +270,7 @@ class CGRect
196
270
  end
197
271
 
198
272
  def infinite?
199
- self.size.infinite?
273
+ self.size.infinite? || CGRectEqualToRect(self, CGRectInfinite)
200
274
  end
201
275
 
202
276
  def null?
@@ -208,7 +282,7 @@ class CGRect
208
282
  when CGRect
209
283
  CGRectIntersectsRect(self, rect)
210
284
  else
211
- super
285
+ super # raises an error
212
286
  end
213
287
  end
214
288
 
@@ -219,11 +293,24 @@ class CGRect
219
293
  when CGRect
220
294
  CGRectContainsRect(self, rect_or_point)
221
295
  else
222
- super
296
+ super # raises an error
223
297
  end
224
298
  end
225
299
 
226
300
  def ==(rect)
227
301
  rect.is_a?(CGRect) && CGRectEqualToRect(self, rect)
228
302
  end
303
+
304
+ def -@
305
+ CGRect.new(-self.origin, -self.size)
306
+ end
307
+
308
+ def -(other)
309
+ self.+(-other)
310
+ end
311
+
312
+ def inspect
313
+ "#{self.class.name}([#{self.origin.x}, #{self.origin.y}], [#{self.size.width}, #{self.size.height}])"
314
+ end
315
+
229
316
  end
@@ -9,6 +9,10 @@ class CGSize
9
9
  CGSizeMake(infinity, infinity)
10
10
  end
11
11
 
12
+ def self.empty
13
+ CGSizeZero.dup
14
+ end
15
+
12
16
  # size = CGSize.make width: 100, height: 100
13
17
  # point = CPPoint.make x:0, y:10
14
18
  # size.rect_at_point(point) # => CGRect([0, 10], [100, 100])
@@ -17,6 +21,13 @@ class CGSize
17
21
  CGRect.new(point, [self.width, self.height])
18
22
  end
19
23
 
24
+ def centered_in(rect, absolute = false)
25
+ offset_x = absolute ? rect.x : 0
26
+ offset_y = absolute ? rect.y : 0
27
+ CGRect.new([offset_x + ((rect.width - self.width) / 2),
28
+ offset_y + ((rect.height - self.height) / 2)], self)
29
+ end
30
+
20
31
  def +(other)
21
32
  case other
22
33
  when CGSize
@@ -38,4 +49,17 @@ class CGSize
38
49
  def ==(size)
39
50
  size.is_a?(CGSize) && CGSizeEqualToSize(self, size)
40
51
  end
52
+
53
+ def -@
54
+ CGSize.new(-self.width, -self.height)
55
+ end
56
+
57
+ def -(other)
58
+ self.+(-other)
59
+ end
60
+
61
+ def inspect
62
+ "#{self.class.name}(#{self.width}, #{self.height})"
63
+ end
64
+
41
65
  end
@@ -1,3 +1,3 @@
1
1
  module Geomotion
2
- VERSION = "0.1"
2
+ VERSION = "0.5"
3
3
  end
@@ -32,6 +32,20 @@ describe "CGPoint" do
32
32
  end
33
33
  end
34
34
 
35
+ describe "#- (unary)" do
36
+ it "should work" do
37
+ point = CGPoint.make(x: 100, y: 200)
38
+ (-point).should == CGPoint.new(-100, -200)
39
+ end
40
+ end
41
+
42
+ describe "#- (binary)" do
43
+ it "should work" do
44
+ point = CGPoint.make(x: 100, y: 200)
45
+ (point - point).should == CGPoint.new(0, 0)
46
+ end
47
+ end
48
+
35
49
  describe "#inside?" do
36
50
  it "should return true" do
37
51
  rect = CGRectMake(0, 0, 100, 100)
data/spec/cg_rect_spec.rb CHANGED
@@ -24,11 +24,19 @@ describe "CGRect" do
24
24
  it "should work" do
25
25
  CGRectIsEmpty(CGRect.empty).should == true
26
26
  end
27
+
28
+ it "should not be mutable" do
29
+ f = CGRect.empty
30
+ f.width = 10
31
+ f.height = 10
32
+ f.x = 10
33
+ f.y = 10
34
+ CGRectIsEmpty(CGRect.empty).should == true
35
+ end
27
36
  end
28
37
 
29
38
  describe "#empty?" do
30
39
  it "should work" do
31
- p "ZERO1 #{CGRectZero.inspect}"
32
40
  CGRectZero.empty?.should == true
33
41
  end
34
42
  end
@@ -37,26 +45,44 @@ describe "CGRect" do
37
45
  it "should work" do
38
46
  CGRectIsNull(CGRect.null).should == true
39
47
  end
48
+
49
+ it "should not be mutable" do
50
+ f = CGRect.null
51
+ f.width = 10
52
+ f.height = 10
53
+ f.x = 10
54
+ f.y = 10
55
+ CGRectIsNull(CGRect.null).should == true
56
+ end
40
57
  end
41
58
 
42
59
  describe "#null?" do
43
60
  it "should work" do
44
61
  CGRectNull.null?.should == true
62
+ CGRect.null.null?.should == true
45
63
  end
46
64
  end
47
65
 
48
66
  # Currently does NOT work due to some strange RM bug?
49
- =begin
50
67
  describe ".infinite" do
51
68
  it "should work" do
52
- CGRectIsInfinite(CGRect.infinite).should == true
69
+ CGRect.infinite.infinite?.should == true
70
+ end
71
+
72
+ it "should not be mutable" do
73
+ f = CGRect.infinite
74
+ f.width = 10
75
+ f.height = 10
76
+ f.x = 10
77
+ f.y = 10
78
+ CGRect.infinite.infinite?.should == true
53
79
  end
54
80
  end
55
- =end
56
81
 
57
82
  describe "#infinite?" do
58
83
  it "should work" do
59
84
  CGRect.infinite.infinite?.should == true
85
+ CGRectInfinite.infinite?.should == true
60
86
  end
61
87
  end
62
88
 
@@ -221,6 +247,34 @@ describe "CGRect" do
221
247
  end
222
248
  end
223
249
 
250
+ describe "#wider" do
251
+ it "works" do
252
+ rect = CGRect.empty.wider(20)
253
+ rect.size.width.should == 20
254
+ end
255
+ end
256
+
257
+ describe "#thinner" do
258
+ it "works" do
259
+ rect = CGRect.empty.thinner(20)
260
+ rect.size.width.should == -20
261
+ end
262
+ end
263
+
264
+ describe "#taller" do
265
+ it "works" do
266
+ rect = CGRect.empty.taller(20)
267
+ rect.size.height.should == 20
268
+ end
269
+ end
270
+
271
+ describe "#shorter" do
272
+ it "works" do
273
+ rect = CGRect.empty.shorter(20)
274
+ rect.size.height.should == -20
275
+ end
276
+ end
277
+
224
278
  describe "#above" do
225
279
  it "works with margins" do
226
280
  rect = CGRect.make(height: 50).above(20)
@@ -266,6 +320,50 @@ describe "CGRect" do
266
320
  end
267
321
  end
268
322
 
323
+ describe "#beside:width:" do
324
+ it "works" do
325
+ rect = CGRect.make(x: 50, width: 20).beside(10, width: 30)
326
+ rect.origin.x.should == 80
327
+ rect.size.width.should == 30
328
+ end
329
+ end
330
+
331
+ describe "#top_left" do
332
+ it "works" do
333
+ rect = CGRect.make(x: 10, y: 20, width: 100, height: 200)
334
+ point = rect.top_left
335
+ point.is_a?(CGPoint).should == true
336
+ CGPointEqualToPoint(point, CGPointMake(10, 20)).should == true
337
+ end
338
+ end
339
+
340
+ describe "#bottom_left" do
341
+ it "works" do
342
+ rect = CGRect.make(x: 10, y: 20, width: 100, height: 200)
343
+ point = rect.bottom_left
344
+ point.is_a?(CGPoint).should == true
345
+ CGPointEqualToPoint(point, CGPointMake(10, 220)).should == true
346
+ end
347
+ end
348
+
349
+ describe "#top_right" do
350
+ it "works" do
351
+ rect = CGRect.make(x: 10, y: 20, width: 100, height: 200)
352
+ point = rect.top_right
353
+ point.is_a?(CGPoint).should == true
354
+ CGPointEqualToPoint(point, CGPointMake(110, 20)).should == true
355
+ end
356
+ end
357
+
358
+ describe "#bottom_right" do
359
+ it "works" do
360
+ rect = CGRect.make(x: 10, y: 20, width: 100, height: 200)
361
+ point = rect.bottom_right
362
+ point.is_a?(CGPoint).should == true
363
+ CGPointEqualToPoint(point, CGPointMake(110, 220)).should == true
364
+ end
365
+ end
366
+
269
367
  describe "#center" do
270
368
  it "works" do
271
369
  point = CGRect.make(width: 100, height: 100).center
@@ -305,6 +403,20 @@ describe "CGRect" do
305
403
  end
306
404
  end
307
405
 
406
+ describe "#- (unary)" do
407
+ it "should work" do
408
+ rect = CGRect.make(x: 10, y:10, width: 100, height: 200)
409
+ (-rect).should == CGRect.new([-10, -10], [-100, -200])
410
+ end
411
+ end
412
+
413
+ describe "#- (binary)" do
414
+ it "should work" do
415
+ rect = CGRect.make(x: 10, y:10, width: 100, height: 200)
416
+ (rect - rect).should == CGRect.new([-110, -210], [220, 420])
417
+ end
418
+ end
419
+
308
420
  describe "#+" do
309
421
  it "works with CGRect" do
310
422
  _rect = CGRectMake(10, 100, 50, 20)
data/spec/cg_size_spec.rb CHANGED
@@ -20,6 +20,20 @@ describe "CGSize" do
20
20
  end
21
21
  end
22
22
 
23
+ describe "#- (unary)" do
24
+ it "should work" do
25
+ size = CGSize.make(width: 100, height: 200)
26
+ (-size).should == CGSize.new(-100, -200)
27
+ end
28
+ end
29
+
30
+ describe "#- (binary)" do
31
+ it "should work" do
32
+ size = CGSize.make(width: 100, height: 200)
33
+ (size - size).should == CGSize.new(0, 0)
34
+ end
35
+ end
36
+
23
37
  describe "#+" do
24
38
  it "should work with CGSize" do
25
39
  size = CGSizeMake(20, 30)
@@ -39,6 +53,19 @@ describe "CGSize" do
39
53
  end
40
54
  end
41
55
 
56
+ describe ".empty" do
57
+ it "should work" do
58
+ CGRectIsEmpty(CGSize.empty.rect_at_point([0, 0])).should == true
59
+ end
60
+
61
+ it "should not be mutable" do
62
+ f = CGSize.empty
63
+ f.width = 10
64
+ f.height = 10
65
+ CGRectIsEmpty(CGSize.empty.rect_at_point([0, 0])).should == true
66
+ end
67
+ end
68
+
42
69
  describe "#empty?" do
43
70
  it "should return true" do
44
71
  empty = CGSizeMake(0, 0)
@@ -57,4 +84,23 @@ describe "CGSize" do
57
84
  @size.should != size
58
85
  end
59
86
  end
87
+
88
+ describe "#centered_in" do
89
+ it "works" do
90
+ outer_rect = CGRect.make(width: 100, height: 100)
91
+ inner_size = CGSize.make(width: 50, height: 50)
92
+
93
+ centered_rect = inner_size.centered_in(outer_rect)
94
+ CGRectEqualToRect(centered_rect, CGRectMake(25, 25, 50, 50)).should == true
95
+ end
96
+
97
+ it "works as relative" do
98
+ outer_rect = CGRect.make(x: 20, y: 30, width: 100, height: 100)
99
+ inner_size = CGSize.make(width: 50, height: 50)
100
+
101
+ centered_rect = inner_size.centered_in(outer_rect, true)
102
+ CGRectEqualToRect(centered_rect, CGRectMake(45, 55, 50, 50)).should == true
103
+ end
104
+ end
105
+
60
106
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: geomotion
3
3
  version: !ruby/object:Gem::Version
4
- version: '0.1'
4
+ version: '0.5'
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-10-27 00:00:00.000000000 Z
12
+ date: 2012-12-27 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rake