sugarcube 0.18.21 → 0.19.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.
data/README.md CHANGED
@@ -240,7 +240,7 @@ recurring events)
240
240
  `start_of_day` and `end_of_day` methods help
241
241
  you here. They are akin to `floor` and `ceil`; if you consider the time to
242
242
  be the "floating" component, and the date to be the nearest "integer".
243
- 4. Formatting is made easier with `NSDate#string_with_style(NSDateStyleConstant or Symbol)`
243
+ 4. Formatting is made easier with `NSDate#string_with_style(NSDateStyleConstant or Symbol for date, time)`
244
244
  and `NSDate#string_with_format(format_string)`. See
245
245
  <http://www.unicode.org/reports/tr35/tr35-25.html#Date_Format_Patterns> for
246
246
  the formatters, they take getting used to, coming from `strftime`, but they
@@ -302,13 +302,23 @@ recurring events)
302
302
  => [9, 19, 6]
303
303
  (main)> now.datetime_array
304
304
  => [2012, 9, 13, 9, 19, 6]
305
+ ```
306
+
307
+ Use `NSDate#string_with_style` to generate date and/or time strings.
305
308
 
309
+ ```ruby
306
310
  (main)> now.string_with_style
307
311
  => "January 29, 2013"
308
312
  (main)> now.string_with_style(NSDateFormatterShortStyle)
309
313
  => "1/29/13"
310
314
  (main)> now.string_with_style(:short)
311
315
  => "1/29/13"
316
+ (main)> now.string_with_style(NSDateFormatterMediumStyle, NSDateFormatterShortStyle)
317
+ => "Jan 29, 2013, 9:19 AM"
318
+ (main)> now.string_with_style(:short, :medium)
319
+ => "1/29/13, 9:19:06 AM"
320
+ (main)> now.string_with_style(:none, :long)
321
+ => "9:19:06 AM GMT+01:00"
312
322
  ```
313
323
 
314
324
  It is easy to add seconds to the date using the time-related methods added to
@@ -491,6 +501,9 @@ NSError.new('Error Message', code: 404, userInfo: { warnings: ['blabla'] })
491
501
 
492
502
  # NSURL
493
503
  "https://github.com".nsurl # => NSURL.URLWithString("https://github.com")
504
+
505
+ # check if string is not a number
506
+ "pi".nan? # => NSNumberFormatter.alloc.init.numberFromString("pi").nil?
494
507
  ```
495
508
 
496
509
  NSIndexPath
@@ -671,6 +684,30 @@ UIActionSheet.alert 'I mean, is this cool?', buttons: ['Nah', 'With fire!', 'Sur
671
684
  success: proc { |pressed| self.proceed if pressed == 'Sure' }
672
685
  ```
673
686
 
687
+ UIColor
688
+ ---------
689
+
690
+ Methods to merge or manipulate a color, or to get information about a color.
691
+ Works best on RGB colors, but HSB will work well, too. `UIColor`s based on
692
+ image patterns can't easily be inverted or mixed.
693
+
694
+ ```ruby
695
+ :red.uicolor.invert # => UIColor.cyanColor
696
+ :blue.uicolor.invert # => UIColor.yellowColor
697
+ :green.uicolor.invert # => UIColor.magentaColor
698
+ :red.uicolor + :blue.uicolor # => UIColor.purpleColor
699
+ :red.uicolor + :green.uicolor # => :olive.uicolor
700
+ # (I didn't know that until I tried it in the REPL, but it was pretty cool to
701
+ # see the UIColor#to_s method match that mixture to olive!)
702
+
703
+ # a more generic color mixing method (`+` delegates to this method):
704
+ :white.uicolor.mix_with(:black.uicolor, 0) # => :white
705
+ :white.uicolor.mix_with(:black.uicolor, 0.25) # => 0x404040.uicolor
706
+ :white.uicolor.mix_with(:black.uicolor, 0.5) # => :gray, same as :white + :black
707
+ :white.uicolor.mix_with(:black.uicolor, 0.75) # => 0xbfbfbf.uicolor
708
+ :white.uicolor.mix_with(:black.uicolor, 1) # => :black
709
+ ```
710
+
674
711
  UIView
675
712
  --------
676
713
 
@@ -684,6 +721,10 @@ self.view.hide # => self.hidden = true
684
721
 
685
722
  # convert to UIImage. retina-ready.
686
723
  my_view.uiimage
724
+ # that will use the `bounds` property to size the image. but if you want a
725
+ # screen shot of the contents of a scroll view, pass in `true` or `:all` to this
726
+ # method.
727
+ my_scroll_view.uiimage(:all)
687
728
  ```
688
729
 
689
730
  When defining a UIView subclass, you often have attributes that affect your
@@ -973,16 +1014,22 @@ controller.present_modal(other_controller) { puts "presented" }
973
1014
  ------------------------
974
1015
 
975
1016
  `push`, `<<` and `pop` instead of `pushViewController` and `popViewController`.
976
- `!` and `!(view)` instead of `popToRootViewController` and `popToViewController`
977
1017
 
978
1018
  animated is `true` for all these.
979
1019
 
1020
+ `pop` accepts an argument: either a view controller to pop to, or the symbol
1021
+ `:root` which does what you might expect
1022
+
980
1023
  ```ruby
981
- nav_ctlr.push(new_ctlr)
1024
+ nav_ctlr << root_ctlr
1025
+ # or nav_ctlr.push(root_ctlr)
982
1026
  nav_ctlr << new_ctlr
983
- nav_ctlr.pop
984
- nav_ctlr.!
985
- nav_ctlr.!(another_view_ctlr)
1027
+ # ... imagine we push on a ton of controllers ...
1028
+ nav_ctlr << another_ctlr
1029
+ nav_ctlr << last_ctlr
1030
+ nav_ctlr.pop # => pops to another_ctlr, because it's next on the stack
1031
+ nav_ctlr.pop new_ctlr # => pops to new_ctlr
1032
+ nav_ctlr.pop :root # => pops to root_ctlr, because it's on the bottom
986
1033
  ```
987
1034
 
988
1035
  UITabBarController
@@ -9,12 +9,12 @@ class NSDate
9
9
  return calendar.dateFromComponents(date_components)
10
10
  end
11
11
 
12
- def string_with_style(style=NSDateFormatterMediumStyle)
12
+ def string_with_style(date_style=NSDateFormatterMediumStyle,time_style=NSDateFormatterNoStyle)
13
13
  date_formatter = NSDateFormatter.new
14
- if style.is_a? Symbol
15
- style = style.nsdatestyle
16
- end
17
- date_formatter.setDateStyle(style)
14
+ date_style = date_style.nsdatestyle if date_style.is_a? Symbol
15
+ time_style = time_style.nsdatestyle if time_style.is_a? Symbol
16
+ date_formatter.setDateStyle(date_style)
17
+ date_formatter.setTimeStyle(time_style)
18
18
  date_formatter.stringFromDate(self)
19
19
  end
20
20
 
@@ -71,6 +71,12 @@ class NSString
71
71
  )
72
72
  end
73
73
 
74
+ # @return boolean
75
+ def nan?
76
+ number_formatter = NSNumberFormatter.new
77
+ number = number_formatter.numberFromString(self)
78
+ number.nil?
79
+ end
74
80
  # This can be called as `"Hello".localized` or `"Hello"._`. The `str._`
75
81
  # syntax is meant to be reminiscent of gettext-style `_(str)`.
76
82
  def localized(value=nil, table=nil)
@@ -24,54 +24,54 @@ You can extend the defaults by adding entries:
24
24
  =end
25
25
  class Symbol
26
26
  class << self
27
- attr_accessor :devices
28
- attr_accessor :device_orientations
29
- attr_accessor :interface_orientations
30
- attr_accessor :interface_masks
31
- attr_accessor :orientations
32
- attr_accessor :returnkeys
33
- attr_accessor :statusbar_styles
34
- attr_accessor :barmetrics
35
- attr_accessor :barbuttonitems
36
- attr_accessor :barbuttonstyles
37
- attr_accessor :keyboardtypes
38
- attr_accessor :autoresizemasks
39
-
40
- attr_accessor :textalignments
41
- attr_accessor :linebreakmodes
42
- attr_accessor :baselineadjustments
43
- attr_accessor :system_fonts
44
- attr_accessor :font_sizes
45
- attr_accessor :date_styles
46
- attr_accessor :number_styles
47
-
48
- attr_accessor :buttontypes
49
- attr_accessor :border_types
50
- attr_accessor :control_states
51
- attr_accessor :control_events
52
- attr_accessor :activityindicator_styles
53
- attr_accessor :segmented_styles
54
- attr_accessor :datepicker_modes
55
- attr_accessor :content_modes
56
-
57
- attr_accessor :tableview_styles
58
- attr_accessor :tableview_rowanimation
59
- attr_accessor :tableview_cellstyles
60
- attr_accessor :tableview_cellaccessorytype
61
- attr_accessor :tableview_cellselectionstyle
62
- attr_accessor :tableview_cellseparatorstyle
63
-
64
- attr_accessor :image_sourcetypes
65
- attr_accessor :image_capturemode
66
- attr_accessor :image_cameradevice
67
- attr_accessor :image_quality
68
-
69
- attr_accessor :ca_timingfunctions
70
-
71
- attr_accessor :cg_linecapstyles
72
- attr_accessor :cg_linejoinstyles
73
-
74
- attr_accessor :gesture_recognizer_states
27
+ attr :devices
28
+ attr :device_orientations
29
+ attr :interface_orientations
30
+ attr :interface_masks
31
+ attr :orientations
32
+ attr :returnkeys
33
+ attr :statusbar_styles
34
+ attr :barmetrics
35
+ attr :barbuttonitems
36
+ attr :barbuttonstyles
37
+ attr :keyboardtypes
38
+ attr :autoresizemasks
39
+
40
+ attr :textalignments
41
+ attr :linebreakmodes
42
+ attr :baselineadjustments
43
+ attr :system_fonts
44
+ attr :font_sizes
45
+ attr :date_styles
46
+ attr :number_styles
47
+
48
+ attr :buttontypes
49
+ attr :border_types
50
+ attr :control_states
51
+ attr :control_events
52
+ attr :activityindicator_styles
53
+ attr :segmented_styles
54
+ attr :datepicker_modes
55
+ attr :content_modes
56
+
57
+ attr :tableview_styles
58
+ attr :tableview_rowanimation
59
+ attr :tableview_cellstyles
60
+ attr :tableview_cellaccessorytype
61
+ attr :tableview_cellselectionstyle
62
+ attr :tableview_cellseparatorstyle
63
+
64
+ attr :image_sourcetypes
65
+ attr :image_capturemode
66
+ attr :image_cameradevice
67
+ attr :image_quality
68
+
69
+ attr :ca_timingfunctions
70
+
71
+ attr :cg_linecapstyles
72
+ attr :cg_linejoinstyles
73
+
74
+ attr :gesture_recognizer_states
75
75
  end
76
76
 
77
77
  @devices = {
@@ -52,6 +52,7 @@ class Symbol
52
52
  aqua: 0x00ffff,
53
53
  aquamarine: 0x7fffd4,
54
54
  azure: 0xf0ffff,
55
+ babygray: 0x576077,
55
56
  beige: 0xf5f5dc,
56
57
  bisque: 0xffe4c4,
57
58
  blanchedalmond: 0xffebcd,
@@ -60,6 +61,7 @@ class Symbol
60
61
  cadetblue: 0x5f9ea0,
61
62
  chartreuse: 0x7fff00,
62
63
  chocolate: 0xd2691e,
64
+ colingray: 0x526691,
63
65
  coral: 0xff7f50,
64
66
  cornflowerblue: 0x6495ed,
65
67
  cornsilk: 0xfff8dc,
@@ -168,6 +170,7 @@ class Symbol
168
170
  teal: 0x008080,
169
171
  thistle: 0xd8bfd8,
170
172
  tomato: 0xff6347,
173
+ torygray: 0x5c5a5d,
171
174
  turquoise: 0x40e0d0,
172
175
  violet: 0xee82ee,
173
176
  wheat: 0xf5deb3,
@@ -14,12 +14,45 @@ class UIColor
14
14
 
15
15
  # blends two colors by averaging the RGB and alpha components.
16
16
  # @example
17
- # :white.uicolor + :black.uicolor == :gray.uicolor
17
+ # :white.uicolor + :black.uicolor == :gray.uicolor
18
18
  def +(color)
19
- r = (self.red + color.red) / 2
20
- g = (self.green + color.green) / 2
21
- b = (self.blue + color.blue) / 2
22
- a = (self.alpha + color.alpha) / 2
19
+ mix_with(color, 0.5)
20
+ end
21
+
22
+ # a more generic color mixing method. mixes two colors, but a second
23
+ # parameter determines how much of each. 0.5 means equal parts, 0.0 means use
24
+ # all of the first, and 1.0 means use all of the second
25
+ def mix_with(color, amount)
26
+ # make amount between 0 and 1
27
+ amount = [[0, amount].max, 1].min
28
+ # start with precise amounts: 0, 0.5, and 1.
29
+ if amount == 0
30
+ self
31
+ elsif amount == 1
32
+ color
33
+ elsif amount == 0.5
34
+ r = (self.red + color.red) / 2
35
+ g = (self.green + color.green) / 2
36
+ b = (self.blue + color.blue) / 2
37
+ a = (self.alpha + color.alpha) / 2
38
+ UIColor.colorWithRed(r, green:g, blue:b, alpha:a)
39
+ else
40
+ r = (color.red - self.red) * amount + self.red
41
+ g = (color.green - self.green) * amount + self.green
42
+ b = (color.blue - self.blue) * amount + self.blue
43
+ a = (color.alpha - self.alpha) * amount + self.alpha
44
+ UIColor.colorWithRed(r, green:g, blue:b, alpha:a)
45
+ end
46
+ end
47
+
48
+ # inverts the RGB channel. keeps the alpha channel unchanged
49
+ # @example
50
+ # :white.uicolor.invert == :black.uicolor
51
+ def invert
52
+ r = 1.0 - self.red
53
+ g = 1.0 - self.green
54
+ b = 1.0 - self.blue
55
+ a = self.alpha
23
56
  UIColor.colorWithRed(r, green:g, blue:b, alpha:a)
24
57
  end
25
58
 
@@ -358,13 +358,39 @@ class UIView
358
358
  }
359
359
  end
360
360
 
361
- # Easily take a snapshot of a UIView
362
- def uiimage
361
+ # Easily take a snapshot of a `UIView`.
362
+ #
363
+ # Calling `uiimage` with no arguments will return the image based on the
364
+ # `bounds` of the image. In the case of container views (notably
365
+ # `UIScrollView` and its children) this does not include the entire contents,
366
+ # which is something you probably want.
367
+ #
368
+ # If you pass a truthy value to this method, it will use the `contentSize` of
369
+ # the view instead of the `bounds`, and it will draw all the child views, not
370
+ # just those that are visible in the viewport.
371
+ #
372
+ # It is guaranteed that `true` and `:all` will always have this behavior. In
373
+ # the future, if this argument becomes something that accepts multiple values,
374
+ # those two are sacred.
375
+ def uiimage(use_content_size=false)
363
376
  scale = UIScreen.mainScreen.scale
364
- UIGraphicsBeginImageContextWithOptions(bounds.size, false, scale)
365
- layer.renderInContext(UIGraphicsGetCurrentContext())
366
- image = UIGraphicsGetImageFromCurrentImageContext()
367
- UIGraphicsEndImageContext()
377
+ if use_content_size
378
+ UIGraphicsBeginImageContextWithOptions(contentSize, false, scale)
379
+ context = UIGraphicsGetCurrentContext()
380
+ subviews.each do |subview|
381
+ CGContextSaveGState(context)
382
+ CGContextTranslateCTM(context, subview.frame.origin.x, subview.frame.origin.y)
383
+ subview.layer.renderInContext(context)
384
+ CGContextRestoreGState(context)
385
+ end
386
+ image = UIGraphicsGetImageFromCurrentImageContext()
387
+ UIGraphicsEndImageContext()
388
+ else
389
+ UIGraphicsBeginImageContextWithOptions(bounds.size, false, scale)
390
+ layer.renderInContext(UIGraphicsGetCurrentContext())
391
+ image = UIGraphicsGetImageFromCurrentImageContext()
392
+ UIGraphicsEndImageContext()
393
+ end
368
394
  return image
369
395
  end
370
396
 
@@ -23,7 +23,9 @@ class UINavigationController
23
23
  end
24
24
 
25
25
  def pop(to_view=nil)
26
- if to_view
26
+ if to_view == :root
27
+ self.popToRootViewControllerAnimated(true)
28
+ elsif to_view
27
29
  self.popToViewController(to_view, animated: true)
28
30
  else
29
31
  self.popViewControllerAnimated(true)
@@ -36,7 +38,10 @@ end
36
38
  class UITabBarController
37
39
 
38
40
  def push(view_controller)
39
- view_controllers = [] + self.viewControllers
41
+ view_controllers = []
42
+ if self.viewControllers
43
+ view_controllers += self.viewControllers
44
+ end
40
45
  view_controllers << view_controller
41
46
  self.setViewControllers(view_controllers, animated: true)
42
47
  self
@@ -1,3 +1,3 @@
1
1
  module SugarCube
2
- Version = '0.18.21'
2
+ Version = '0.19.0'
3
3
  end
@@ -26,6 +26,12 @@ describe 'NSAttributeString' do
26
26
  subject.attributesAtIndex(0, effectiveRange:nil).should == {'NSUnderline' => NSUnderlineStyleSingle}
27
27
  end
28
28
 
29
+ it 'should be chainable' do
30
+ subject = 'test'.bold.underline
31
+ NSAttributedString.should === subject
32
+ subject.attributesAtIndex(0, effectiveRange:nil).should == {'NSFont' => :bold.uifont, 'NSUnderline' => NSUnderlineStyleSingle}
33
+ end
34
+
29
35
  end
30
36
 
31
37
  describe "should support all attribute names" do
data/spec/nsdate_spec.rb CHANGED
@@ -11,16 +11,22 @@ describe "NSDate" do
11
11
  @date = NSDate.from_components(year: 2013, month: 1, day: 2, hour:12, minute: 15, second: 30)
12
12
  end
13
13
 
14
- it "should have an NSDate#string_with_style(style) method that accepts symbols" do
14
+ it "should have an NSDate#string_with_style(date_style, time_style) method that accepts symbols" do
15
15
  @date.string_with_style(:medium).should == 'Jan 2, 2013'
16
+ @date.string_with_style(:medium, :none).should == 'Jan 2, 2013'
17
+ @date.string_with_style(:short, :medium).should == '1/2/13, 12:15:30 PM'
18
+ @date.string_with_style(:none, :short).should == '12:15 PM'
16
19
  end
17
20
 
18
- it "should have an NSDate#string_with_style(style) method that has default" do
21
+ it "should have an NSDate#string_with_style(date_style, time_style) method that has default" do
19
22
  @date.string_with_style.should == 'Jan 2, 2013'
20
23
  end
21
24
 
22
- it "should have an NSDate#string_with_style(style) method that accepts NSDateStyle constants" do
23
- @date.string_with_style(NSDateFormatterShortStyle).should == '1/2/13'
25
+ it "should have an NSDate#string_with_style(date_style, time_style) method that accepts NSDateStyle constants" do
26
+ @date.string_with_style(NSDateFormatterMediumStyle).should == 'Jan 2, 2013'
27
+ @date.string_with_style(NSDateFormatterMediumStyle, NSDateFormatterNoStyle).should == 'Jan 2, 2013'
28
+ @date.string_with_style(NSDateFormatterShortStyle, NSDateFormatterMediumStyle).should == '1/2/13, 12:15:30 PM'
29
+ @date.string_with_style(NSDateFormatterNoStyle, NSDateFormatterShortStyle).should == '12:15 PM'
24
30
  end
25
31
 
26
32
  it "should have an NSDate#string_with_format method (1)" do
@@ -93,4 +93,9 @@ describe "NSString" do
93
93
  'hello'._.should == 'howdy'
94
94
  end
95
95
 
96
+ it "should have a #nan? method" do
97
+ "pi".nan?.should.equal true
98
+ "3.12159".nan?.should.equal false
99
+ end
100
+
96
101
  end
data/spec/uicolor_spec.rb CHANGED
@@ -15,4 +15,43 @@ describe 'UIColor' do
15
15
  new_color.blue.should == 0.5
16
16
  end
17
17
 
18
+ it "should have a #invert method" do
19
+ :red.uicolor.invert.should == UIColor.cyanColor
20
+ :green.uicolor.invert.should == UIColor.magentaColor
21
+ :blue.uicolor.invert.should == UIColor.yellowColor
22
+
23
+ :white.uicolor.invert.red.should == 0
24
+ :white.uicolor.invert.green.should == 0
25
+ :white.uicolor.invert.blue.should == 0
26
+
27
+ :black.uicolor.invert.red.should == 1
28
+ :black.uicolor.invert.green.should == 1
29
+ :black.uicolor.invert.blue.should == 1
30
+ end
31
+
32
+ it "should have a #mix_with method" do
33
+ white = :white.uicolor
34
+ black = :black.uicolor
35
+ gray = :gray.uicolor
36
+ white.mix_with(black, 0).red.should == 1
37
+ white.mix_with(black, 0).green.should == 1
38
+ white.mix_with(black, 0).blue.should == 1
39
+
40
+ white.mix_with(black, 1).red.should == 0
41
+ white.mix_with(black, 1).green.should == 0
42
+ white.mix_with(black, 1).blue.should == 0
43
+
44
+ white.mix_with(black, 0.5).red.should == 0.5
45
+ white.mix_with(black, 0.5).green.should == 0.5
46
+ white.mix_with(black, 0.5).blue.should == 0.5
47
+
48
+ white.mix_with(black, 0.25).red.should == 0.75
49
+ white.mix_with(black, 0.25).green.should == 0.75
50
+ white.mix_with(black, 0.25).blue.should == 0.75
51
+
52
+ white.mix_with(black, 0.75).red.should == 0.25
53
+ white.mix_with(black, 0.75).green.should == 0.25
54
+ white.mix_with(black, 0.75).blue.should == 0.25
55
+ end
56
+
18
57
  end
data/spec/uiview_spec.rb CHANGED
@@ -8,4 +8,24 @@ describe "UIView" do
8
8
  image.scale.should == UIScreen.mainScreen.scale
9
9
  end
10
10
 
11
+ it "should convert a UIScrollView to a UIImage" do
12
+ test = UIScrollView.alloc.initWithFrame([[0, 0], [10, 10]])
13
+ test.contentSize = [20, 20]
14
+
15
+ image = test.uiimage
16
+ image.class.should == UIImage
17
+ CGSizeEqualToSize(image.size, [10, 10]).should == true
18
+ image.scale.should == UIScreen.mainScreen.scale
19
+
20
+ image = test.uiimage(:all)
21
+ image.class.should == UIImage
22
+ CGSizeEqualToSize(image.size, [20, 20]).should == true
23
+ image.scale.should == UIScreen.mainScreen.scale
24
+
25
+ image = test.uiimage(true)
26
+ image.class.should == UIImage
27
+ CGSizeEqualToSize(image.size, [20, 20]).should == true
28
+ image.scale.should == UIScreen.mainScreen.scale
29
+ end
30
+
11
31
  end
@@ -0,0 +1,87 @@
1
+ describe 'UIViewController' do
2
+
3
+ it 'should have `push` method' do
4
+ controller = UIViewController.new
5
+ controller.push UIViewController.new
6
+ controller.childViewControllers.length.should == 1
7
+ controller.push UIViewController.new
8
+ controller.childViewControllers.length.should == 2
9
+ end
10
+
11
+ it 'should have `<<` method' do
12
+ controller = UIViewController.new
13
+ controller << UIViewController.new
14
+ controller.childViewControllers.length.should == 1
15
+ controller << UIViewController.new
16
+ controller.childViewControllers.length.should == 2
17
+ end
18
+
19
+ end
20
+
21
+
22
+ describe 'UINavigationViewController' do
23
+
24
+ before do
25
+ @root_controller = UIViewController.new
26
+ second_controller = UIViewController.new
27
+ @target_controller = UIViewController.new
28
+ fourth_controller = UIViewController.new
29
+ @nav_controller = UINavigationController.alloc.initWithRootViewController(@root_controller)
30
+ @nav_controller.pushViewController(second_controller, animated: false)
31
+ @nav_controller.pushViewController(@target_controller, animated: false)
32
+ @nav_controller.pushViewController(fourth_controller, animated: false)
33
+ end
34
+
35
+ it 'should have `push` method' do
36
+ test_controller = UIViewController.new
37
+ length = @nav_controller.viewControllers.length
38
+ @nav_controller.push(test_controller)
39
+ @nav_controller.viewControllers.length.should == length + 1
40
+ end
41
+
42
+ it 'should have `<<` method' do
43
+ test_controller = UIViewController.new
44
+ length = @nav_controller.viewControllers.length
45
+ @nav_controller << test_controller
46
+ @nav_controller.viewControllers.length.should == length + 1
47
+ end
48
+
49
+ it 'should have `pop()` method' do
50
+ length = @nav_controller.viewControllers.length
51
+ @nav_controller.pop
52
+ @nav_controller.viewControllers.length.should == length - 1
53
+ end
54
+
55
+ it 'should have `pop(:root)` method' do
56
+ @nav_controller.pop :root
57
+ @nav_controller.viewControllers.length.should == 1
58
+ @nav_controller.visibleViewController.should == @root_controller
59
+ end
60
+
61
+ it 'should have `pop(@target_controller)` method' do
62
+ @nav_controller.pop @target_controller
63
+ @nav_controller.visibleViewController.should == @target_controller
64
+ end
65
+
66
+ end
67
+
68
+
69
+ describe 'UITabBarController' do
70
+
71
+ it 'should have `push` method' do
72
+ controller = UITabBarController.new
73
+ controller.push UIViewController.new
74
+ controller.viewControllers.length.should == 1
75
+ controller.push UIViewController.new
76
+ controller.viewControllers.length.should == 2
77
+ end
78
+
79
+ it 'should have `<<` method' do
80
+ controller = UITabBarController.new
81
+ controller << UIViewController.new
82
+ controller.viewControllers.length.should == 1
83
+ controller << UIViewController.new
84
+ controller.viewControllers.length.should == 2
85
+ end
86
+
87
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sugarcube
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.18.21
4
+ version: 0.19.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -13,7 +13,7 @@ authors:
13
13
  autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
- date: 2013-03-11 00:00:00.000000000 Z
16
+ date: 2013-03-17 00:00:00.000000000 Z
17
17
  dependencies: []
18
18
  description: ! '== Description
19
19
 
@@ -153,6 +153,7 @@ files:
153
153
  - spec/uiview_animation_spec.rb
154
154
  - spec/uiview_attr_updates_spec.rb
155
155
  - spec/uiview_spec.rb
156
+ - spec/uiviewcontroller_spec.rb
156
157
  - spec/unholy_spec.rb
157
158
  - sugarcube.gemspec
158
159
  homepage: https://github.com/rubymotion/sugarcube
@@ -212,5 +213,6 @@ test_files:
212
213
  - spec/uiview_animation_spec.rb
213
214
  - spec/uiview_attr_updates_spec.rb
214
215
  - spec/uiview_spec.rb
216
+ - spec/uiviewcontroller_spec.rb
215
217
  - spec/unholy_spec.rb
216
218
  has_rdoc: