bubble-wrap 0.2.1 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -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