bubble-wrap 0.2.1 → 0.3.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.
@@ -0,0 +1,24 @@
1
+ module BubbleWrap
2
+ module_function
3
+
4
+ # @return [UIcolor]
5
+ def rgb_color(r,g,b)
6
+ rgba_color(r,g,b,1)
7
+ end
8
+
9
+ # @return [UIcolor]
10
+ def rgba_color(r,g,b,a)
11
+ UIColor.colorWithRed((r/255.0), green:(g/255.0), blue:(b/255.0), alpha:a)
12
+ end
13
+
14
+ def NSLocalizedString(key, value)
15
+ NSBundle.mainBundle.localizedStringForKey(key, value:value, table:nil)
16
+ end
17
+
18
+ # I had issues with #p on the device, this is a temporary workaround
19
+ def p(arg)
20
+ NSLog arg.inspect
21
+ end
22
+
23
+ end
24
+ BW = BubbleWrap
@@ -1,23 +1,21 @@
1
1
  class NSNotificationCenter
2
2
  def observers
3
- @observers ||= {}
3
+ @observers ||= []
4
4
  end
5
5
 
6
- def observe(observer, name, object=nil, &proc)
7
- observers[observer] ||= []
8
- observers[observer] << proc
9
- self.addObserver(proc, selector:'call', name:name, object:object)
6
+ def observe(name, object=nil, &proc)
7
+ observer = self.addObserverForName(name, object:object, queue:NSOperationQueue.mainQueue, usingBlock:proc)
8
+ observers << observer
9
+ observer
10
10
  end
11
11
 
12
12
  def unobserve(observer)
13
- return unless observers[observer]
14
- observers[observer].each do |proc|
15
- removeObserver(proc)
16
- end
13
+ return unless observers.include?(observer)
14
+ removeObserver(observer)
17
15
  observers.delete(observer)
18
16
  end
19
17
 
20
18
  def post(name, object=nil, info=nil)
21
- self.postNotificationName(name, object: object, userInfo:info)
19
+ self.postNotificationName(name, object: object, userInfo: info)
22
20
  end
23
21
  end
@@ -0,0 +1,27 @@
1
+ # Persistence module built on top of NSUserDefaults
2
+ module BubbleWrap
3
+ module Persistence
4
+ module_function
5
+
6
+ def app_key
7
+ @app_key ||= BubbleWrap::App.identifier
8
+ end
9
+
10
+ def []=(key, value)
11
+ defaults = NSUserDefaults.standardUserDefaults
12
+ defaults.setObject(value, forKey: storage_key(key.to_s))
13
+ defaults.synchronize
14
+ end
15
+
16
+ def [](key)
17
+ defaults = NSUserDefaults.standardUserDefaults
18
+ defaults.objectForKey storage_key(key.to_s)
19
+ end
20
+
21
+ def storage_key(key)
22
+ app_key + '_' + key.to_s
23
+ end
24
+ end
25
+
26
+ end
27
+ ::Persistence = BubbleWrap::Persistence
@@ -0,0 +1,8 @@
1
+ class Time
2
+ def self.iso8601(time)
3
+ formatter = NSDateFormatter.alloc.init
4
+ formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss'Z'"
5
+ formatter.timeZone = NSTimeZone.timeZoneWithAbbreviation "UTC"
6
+ formatter.dateFromString time
7
+ end
8
+ end
@@ -1,4 +1,4 @@
1
- module UIButtonWrap
1
+ module UIControlWrap
2
2
  def when(events, &block)
3
3
  @callback ||= {}
4
4
  @callback[events] = block
@@ -1,3 +1,3 @@
1
1
  module BubbleWrap
2
- VERSION = '0.2.1'
2
+ VERSION = '0.3.0'
3
3
  end
data/lib/pollute.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  [
2
2
  [NSIndexPath, NSIndexPathWrap],
3
- [UIButton, UIButtonWrap]
3
+ [UIControl, UIControlWrap]
4
4
  ].each do |base, wrapper|
5
5
  base.send(:include, wrapper)
6
6
  end
@@ -1,4 +1,6 @@
1
1
  class TestSuiteDelegate
2
+ attr_accessor :window
3
+
2
4
  def application(application, didFinishLaunchingWithOptions:launchOptions)
3
5
  @window = UIWindow.alloc.initWithFrame(UIScreen.mainScreen.bounds)
4
6
  @window.rootViewController = UIViewController.alloc.init
data/spec/app_spec.rb ADDED
@@ -0,0 +1,83 @@
1
+ describe BubbleWrap::App do
2
+ describe '.documents_path' do
3
+ it 'should end in "/Documents"' do
4
+ BW::App.documents_path[-10..-1].should == '/Documents'
5
+ end
6
+ end
7
+
8
+ describe '.resources_path' do
9
+ it 'should end in "/MotionLibTestSuite.app"' do
10
+ BW::App.resources_path[-19..-1].should == '/testSuite_spec.app'
11
+ end
12
+ end
13
+
14
+ describe '.notification_center' do
15
+ it 'should be a NSNotificationCenter' do
16
+ BW::App.notification_center.class.should == NSNotificationCenter
17
+ end
18
+ end
19
+
20
+ describe '.user_cache' do
21
+ it 'should be a NSUserDefaults' do
22
+ BW::App.user_cache.class.should == NSUserDefaults
23
+ end
24
+ end
25
+
26
+ describe '.alert' do
27
+ before do
28
+ @alert = BW::App.alert('1.21 Gigawatts!', 'Great Scott!')
29
+ end
30
+
31
+ after do
32
+ @alert.removeFromSuperview
33
+ end
34
+
35
+ it 'returns an alert' do
36
+ @alert.class.should == UIAlertView
37
+ end
38
+
39
+ it 'is displaying the correct title' do
40
+ @alert.title.should == '1.21 Gigawatts!'
41
+ end
42
+
43
+ describe 'cancelButton' do
44
+ it 'is present' do
45
+ @alert.cancelButtonIndex.should == 0
46
+ end
47
+
48
+ it 'has the correct title' do
49
+ @alert.buttonTitleAtIndex(@alert.cancelButtonIndex).should == 'Great Scott!'
50
+ end
51
+ end
52
+ end
53
+
54
+ describe '.states' do
55
+ it 'returns a hash' do
56
+ BW::App.states.class.should == Hash
57
+ end
58
+ end
59
+
60
+ describe '.name' do
61
+ it 'returns the application name' do
62
+ BW::App.name.should == 'testSuite'
63
+ end
64
+ end
65
+
66
+ describe '.identifier' do
67
+ it 'returns the application identifier' do
68
+ BW::App.identifier.should == 'io.bubblewrap.testSuite'
69
+ end
70
+ end
71
+
72
+ describe '.frame' do
73
+ it 'returns a CGRect' do
74
+ BW::App.frame.class.should == CGRect
75
+ end
76
+ end
77
+
78
+ describe '.delegate' do
79
+ it 'returns a TestSuiteDelegate' do
80
+ BW::App.delegate.class.should == TestSuiteDelegate
81
+ end
82
+ end
83
+ end
@@ -0,0 +1,153 @@
1
+ describe BubbleWrap::Device::Screen do
2
+
3
+ describe 'on retina enabled screen' do
4
+ before do
5
+ @screen = Object.new.tap do |o|
6
+ def o.respondsToSelector(selector)
7
+ return true if selector == 'displayLinkWithTarget:selector:'
8
+ UIDevice.mainDevice.respondsToSelector(selector)
9
+ end
10
+ def o.scale
11
+ 2.0
12
+ end
13
+ def o.method_missing(*args)
14
+ UIDevice.mainDevice.send(*args)
15
+ end
16
+ end
17
+ end
18
+
19
+ describe '.retina?' do
20
+ it 'returns true' do
21
+ BW::Device::Screen.retina?(@screen).should == true
22
+ end
23
+ end
24
+ end
25
+
26
+ describe 'on non-retina enabled screen' do
27
+ before do
28
+ @screen = Object.new.tap do |o|
29
+ def o.respondsToSelector(selector)
30
+ return false if selector == 'displayLinkWithTarget:selector:'
31
+ UIDevice.mainDevice.respondsToSelector(selector)
32
+ end
33
+ def o.scale
34
+ 1.0
35
+ end
36
+ def o.method_missing(*args)
37
+ UIDevice.mainDevice.send(*args)
38
+ end
39
+ end
40
+ end
41
+
42
+ describe '.retina?' do
43
+ it 'returns false' do
44
+ BW::Device::Screen.retina?(@screen).should == false
45
+ end
46
+ end
47
+ end
48
+
49
+ describe '.orientation' do
50
+
51
+ describe 'portrait' do
52
+ it 'returns :portrait' do
53
+ BW::Device::Screen.orientation(UIDeviceOrientationPortrait).should == :portrait
54
+ end
55
+ end
56
+
57
+ describe 'portrait upside down' do
58
+ it 'returns :portrait_upside_down' do
59
+ BW::Device::Screen.orientation(UIDeviceOrientationPortraitUpsideDown).should == :portrait_upside_down
60
+ end
61
+ end
62
+
63
+ describe 'landscape left' do
64
+ it 'returns :landscape_left' do
65
+ BW::Device::Screen.orientation(UIDeviceOrientationLandscapeLeft).should == :landscape_left
66
+ end
67
+ end
68
+
69
+ describe 'landscape right' do
70
+ it 'returns :landscape_right' do
71
+ BW::Device::Screen.orientation(UIDeviceOrientationLandscapeRight).should == :landscape_right
72
+ end
73
+ end
74
+
75
+ describe 'face up' do
76
+ it 'returns :face_up' do
77
+ BW::Device::Screen.orientation(UIDeviceOrientationFaceUp).should == :face_up
78
+ end
79
+ end
80
+
81
+ describe 'face down' do
82
+ it 'returns :face_down' do
83
+ BW::Device::Screen.orientation(UIDeviceOrientationFaceDown).should == :face_down
84
+ end
85
+ end
86
+
87
+ describe 'unknown' do
88
+ it 'returns :unknown' do
89
+ BW::Device::Screen.orientation(UIDeviceOrientationUnknown).should == :unknown
90
+ end
91
+ end
92
+
93
+ describe 'any other input' do
94
+ it 'returns :unknown' do
95
+ BW::Device::Screen.orientation('twiggy twiggy twiggy').should == :unknown
96
+ end
97
+ end
98
+ end
99
+
100
+ describe '.width' do
101
+ it 'returns the current device screen width' do
102
+ BW::Device::Screen.width.should == 320.0 if BW::Device.iphone?
103
+ BW::Device::Screen.width.should == 768.0 if BW::Device.ipad?
104
+ end
105
+ end
106
+
107
+ describe '.height' do
108
+ it 'returns the current device screen height' do
109
+ BW::Device::Screen.height.should == 480.0 if BW::Device.iphone?
110
+ BW::Device::Screen.height.should == 1024.0 if BW::Device.ipad?
111
+ end
112
+ end
113
+
114
+ describe '.widthForOrientation' do
115
+ describe ':landscape_left' do
116
+ it 'returns the current device screen height' do
117
+ BW::Device::Screen.widthForOrientation(:landscape_left).should == BW::Device::Screen.height
118
+ end
119
+ end
120
+
121
+ describe ':landscape_right' do
122
+ it 'returns the current device screen height' do
123
+ BW::Device::Screen.widthForOrientation(:landscape_right).should == BW::Device::Screen.height
124
+ end
125
+ end
126
+
127
+ describe 'default' do
128
+ it 'returns the current device screen width' do
129
+ BW::Device::Screen.widthForOrientation.should == BW::Device::Screen.width
130
+ end
131
+ end
132
+ end
133
+
134
+ describe '.heightForOrientation' do
135
+ describe ':landscape_left' do
136
+ it 'returns the current device screen width' do
137
+ BW::Device::Screen.heightForOrientation(:landscape_left).should == BW::Device::Screen.width
138
+ end
139
+ end
140
+
141
+ describe ':landscape_right' do
142
+ it 'returns the current device screen width' do
143
+ BW::Device::Screen.heightForOrientation(:landscape_right).should == BW::Device::Screen.width
144
+ end
145
+ end
146
+
147
+ describe 'default' do
148
+ it 'returns the current device screen height' do
149
+ BW::Device::Screen.heightForOrientation.should == BW::Device::Screen.height
150
+ end
151
+ end
152
+ end
153
+ end
@@ -0,0 +1,112 @@
1
+ describe BubbleWrap::Device do
2
+
3
+ describe 'on iPhone' do
4
+ before do
5
+ @idiom = UIUserInterfaceIdiomPhone
6
+ end
7
+
8
+ describe '.iphone?' do
9
+ it 'returns true' do
10
+ BW::Device.iphone?(@idiom).should == true
11
+ end
12
+ end
13
+
14
+ describe '.ipad?' do
15
+ it 'returns false' do
16
+ BW::Device.ipad?(@idiom).should == false
17
+ end
18
+ end
19
+ end
20
+
21
+ describe 'on iPad' do
22
+ before do
23
+ @idiom = UIUserInterfaceIdiomPad
24
+ end
25
+
26
+ describe '.iphone?' do
27
+ it 'returns false' do
28
+ BW::Device.iphone?(@idiom).should == false
29
+ end
30
+ end
31
+
32
+ describe '.ipad?' do
33
+ it 'returns true' do
34
+ BW::Device.ipad?(@idiom).should == true
35
+ end
36
+ end
37
+ end
38
+
39
+ describe 'on device with only front facing camera' do
40
+ before do
41
+ @picker = Object.new.tap do |o|
42
+ def o.isCameraDeviceAvailable(c)
43
+ c == UIImagePickerControllerCameraDeviceFront
44
+ end
45
+ def o.method_missing(*args)
46
+ UIImagePickerController.send(*args)
47
+ end
48
+ end
49
+ end
50
+
51
+ describe '.front_camera?' do
52
+ it 'returns true' do
53
+ BW::Device.front_camera?(@picker).should == true
54
+ end
55
+ end
56
+
57
+ describe '.rear_camera?' do
58
+ it 'returns false' do
59
+ BW::Device.rear_camera?(@picker).should == false
60
+ end
61
+ end
62
+ end
63
+
64
+ describe 'on device with only rear facing camera' do
65
+ before do
66
+ @picker = Object.new.tap do |o|
67
+ def o.isCameraDeviceAvailable(c)
68
+ c == UIImagePickerControllerCameraDeviceRear
69
+ end
70
+ def o.method_missing(*args)
71
+ UIImagePickerController.send(*args)
72
+ end
73
+ end
74
+ end
75
+
76
+ describe '.front_camera?' do
77
+ it 'returns false' do
78
+ BW::Device.front_camera?(@picker).should == false
79
+ end
80
+ end
81
+
82
+ describe '.rear_camera?' do
83
+ it 'returns true' do
84
+ BW::Device.rear_camera?(@picker).should == true
85
+ end
86
+ end
87
+ end
88
+
89
+ describe '.simulator?' do
90
+ it 'returns true' do
91
+ BW::Device.simulator?.should == true
92
+ end
93
+ end
94
+
95
+ describe '.screen' do
96
+ it 'return BubbleWrap::Screen' do
97
+ BW::Device.screen.should == BW::Device::Screen
98
+ end
99
+ end
100
+
101
+ describe '.retina?' do
102
+ it 'delegates to BubbleWrap::Screen.retina?' do
103
+ BW::Device.retina?.should == BW::Device::Screen.retina?
104
+ end
105
+ end
106
+
107
+ describe '.orientation' do
108
+ it 'delegates to BubbleWrap::Screen.orientation' do
109
+ BW::Device.orientation.should == BW::Device::Screen.orientation
110
+ end
111
+ end
112
+ end