bubble-wrap 1.4.0 → 1.5.0.rc1
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 +4 -4
- data/.travis.yml +2 -1
- data/Gemfile.lock +1 -1
- data/README.md +22 -2
- data/bubble-wrap.gemspec +7 -7
- data/lib/bubble-wrap.rb +1 -1
- data/lib/bubble-wrap/core.rb +3 -3
- data/lib/bubble-wrap/ext.rb +0 -1
- data/lib/bubble-wrap/ext/motion_project_app.rb +4 -3
- data/lib/bubble-wrap/loader.rb +3 -3
- data/lib/bubble-wrap/media.rb +2 -0
- data/lib/bubble-wrap/requirement.rb +1 -1
- data/lib/bubble-wrap/version.rb +2 -2
- data/motion/core/device/ios/camera.rb +33 -3
- data/motion/core/device/ios/camera_wrapper.rb +10 -0
- data/motion/core/kvo.rb +18 -2
- data/motion/core/ns_notification_center.rb +1 -0
- data/motion/core/time.rb +5 -0
- data/motion/http/query.rb +15 -9
- data/motion/location/location.rb +3 -2
- data/motion/mail/mail.rb +2 -1
- data/motion/media/player.rb +10 -2
- data/motion/reactor.rb +2 -0
- data/motion/reactor/periodic_timer.rb +2 -1
- data/motion/shortcut.rb +8 -0
- data/motion/sms/sms.rb +2 -0
- data/motion/ui/ui_alert_view.rb +2 -0
- data/motion/ui/ui_bar_button_item.rb +12 -2
- data/motion/ui/ui_control_wrapper.rb +1 -0
- data/motion/ui/ui_view_wrapper.rb +5 -0
- data/samples/osx/Gemfile.lock +7 -3
- data/spec/motion/core/device/ios/camera_spec.rb +6 -0
- data/spec/motion/core/device/ios/camera_wrapper_spec.rb +51 -2
- data/spec/motion/core/kvo_spec.rb +27 -0
- data/spec/motion/core/ns_notification_center_spec.rb +3 -3
- data/spec/motion/core/time_spec.rb +13 -4
- data/spec/motion/core_spec.rb +0 -1
- data/spec/motion/http/query_spec.rb +5 -5
- data/spec/motion/http_spec.rb +1 -1
- data/spec/motion/location/location_spec.rb +2 -2
- data/spec/motion/mail/mail_spec.rb +1 -1
- data/spec/motion/media/player_spec.rb +34 -12
- data/spec/motion/ui/ui_bar_button_item_spec.rb +76 -0
- data/spec/motion/ui/ui_control_wrapper_spec.rb +38 -0
- data/spec/motion/ui/ui_view_wrapper_spec.rb +42 -0
- metadata +4 -6
- data/lib/bubble-wrap/ext/motion_project_config.rb +0 -34
data/spec/motion/http_spec.rb
CHANGED
@@ -44,7 +44,7 @@ describe "HTTP" do
|
|
44
44
|
it "works with classic blocks as well" do
|
45
45
|
[:get, :post, :put, :delete, :head, :patch].each do |method|
|
46
46
|
called = false
|
47
|
-
query = BubbleWrap::HTTP.send(method, @localhost_url, { action: 'not_valid' } ) do
|
47
|
+
query = BubbleWrap::HTTP.send(method, @localhost_url, { action: 'not_valid' } ) do
|
48
48
|
called = true
|
49
49
|
end
|
50
50
|
query.connectionDidFinishLoading(query.connection)
|
@@ -51,7 +51,7 @@ describe BubbleWrap::Location do
|
|
51
51
|
end
|
52
52
|
|
53
53
|
it "should set purpose using hash" do
|
54
|
-
BW::Location.get(purpose: "test") do
|
54
|
+
BW::Location.get(purpose: "test") do
|
55
55
|
end
|
56
56
|
|
57
57
|
location_manager.purpose.should == "test"
|
@@ -82,7 +82,7 @@ describe BubbleWrap::Location do
|
|
82
82
|
end
|
83
83
|
|
84
84
|
it "should use normal update functions" do
|
85
|
-
BW::Location.get do
|
85
|
+
BW::Location.get do
|
86
86
|
end
|
87
87
|
|
88
88
|
location_manager.instance_variable_get("@startUpdatingLocation").should == true
|
@@ -29,6 +29,7 @@ describe BubbleWrap::Media::Player do
|
|
29
29
|
end
|
30
30
|
end
|
31
31
|
|
32
|
+
=begin
|
32
33
|
describe ".play_modal" do
|
33
34
|
before do
|
34
35
|
@player = BW::Media::Player.new
|
@@ -40,11 +41,18 @@ describe BubbleWrap::Media::Player do
|
|
40
41
|
|
41
42
|
@player.play_modal(@local_file)
|
42
43
|
|
43
|
-
|
44
|
+
|
45
|
+
EM.add_timer 2.0 do
|
46
|
+
resume
|
47
|
+
end
|
48
|
+
wait_max 5 do
|
44
49
|
@controller.modalViewController.should.not == nil
|
50
|
+
EM.add_timer 4.0 do
|
51
|
+
resume
|
52
|
+
end
|
45
53
|
|
46
54
|
@player.stop
|
47
|
-
|
55
|
+
wait_max 5 do
|
48
56
|
@controller.modalViewController.should == nil
|
49
57
|
@controller = nil
|
50
58
|
@player = nil
|
@@ -53,25 +61,39 @@ describe BubbleWrap::Media::Player do
|
|
53
61
|
end
|
54
62
|
|
55
63
|
it "should present a modalViewController if controller given" do
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
64
|
+
parent = App.window.rootViewController
|
65
|
+
@controller = UINavigationController.alloc.init
|
66
|
+
parent.addChildViewController @controller
|
67
|
+
@controller.viewWillAppear(false)
|
68
|
+
parent.view.addSubview(@controller.view)
|
69
|
+
@controller.viewDidAppear(false)
|
62
70
|
|
63
|
-
@
|
71
|
+
@controller.didMoveToParentViewController(parent)
|
64
72
|
|
65
|
-
|
73
|
+
EM.add_timer 3.0 do
|
74
|
+
resume
|
75
|
+
end
|
76
|
+
wait_max 5 do
|
77
|
+
@player.play_modal(@local_file, controller: @controller)
|
66
78
|
@controller.modalViewController.should.not == nil
|
79
|
+
EM.add_timer 2.0 do
|
80
|
+
@player.stop
|
81
|
+
end
|
82
|
+
EM.add_timer 4.0 do
|
83
|
+
resume
|
84
|
+
end
|
67
85
|
|
68
|
-
|
69
|
-
wait 1 do
|
86
|
+
wait_max 5 do
|
70
87
|
@controller.modalViewController.should == nil
|
88
|
+
@controller.willMoveToParentViewController(nil)
|
89
|
+
@controller.viewWillDisappear(false)
|
90
|
+
@controller.removeFromParentViewController
|
91
|
+
@controller.viewDidDisappear(false)
|
71
92
|
@controller = nil
|
72
93
|
@player = nil
|
73
94
|
end
|
74
95
|
end
|
75
96
|
end
|
76
97
|
end
|
98
|
+
=end
|
77
99
|
end
|
@@ -1,4 +1,30 @@
|
|
1
1
|
describe BW::UIBarButtonItem do
|
2
|
+
class NavigationItemContainingBarButtonItem < UINavigationItem
|
3
|
+
def init_with_styled
|
4
|
+
initWithTitle('dummy')
|
5
|
+
subject = BW::UIBarButtonItem.styled(:plain, 'dummy') do
|
6
|
+
#Can be empty, but we need a block/proc here to potentially create a retain cycle
|
7
|
+
end
|
8
|
+
self.leftBarButtonItem = subject
|
9
|
+
self
|
10
|
+
end
|
11
|
+
|
12
|
+
|
13
|
+
def init_with_system
|
14
|
+
initWithTitle('dummy')
|
15
|
+
subject = BW::UIBarButtonItem.system(:save) do
|
16
|
+
#Can be empty, but we need a block/proc here to potentially create a retain cycle
|
17
|
+
end
|
18
|
+
self.leftBarButtonItem = subject
|
19
|
+
self
|
20
|
+
end
|
21
|
+
|
22
|
+
def dealloc
|
23
|
+
App.notification_center.post('NavigationItemContainingBarButtonItem dealloc', nil, {'tag'=>tag})
|
24
|
+
super
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
2
28
|
describe ".styled" do
|
3
29
|
describe "given an unknown style" do
|
4
30
|
it "raises an exception" do
|
@@ -153,6 +179,31 @@ describe BW::UIBarButtonItem do
|
|
153
179
|
@subject.action.should.equal(:call)
|
154
180
|
end
|
155
181
|
end
|
182
|
+
|
183
|
+
###############################################################################################
|
184
|
+
|
185
|
+
describe "with BubbleWrap.use_weak_callbacks=true" do
|
186
|
+
it "removes cyclic references" do
|
187
|
+
observer = App.notification_center.observe('NavigationItemContainingBarButtonItem dealloc') do |obj|
|
188
|
+
if obj.userInfo['tag'] == 1
|
189
|
+
@weak_deallocated = true
|
190
|
+
elsif obj.userInfo['tag'] == 2
|
191
|
+
@strong_deallocated = true
|
192
|
+
end
|
193
|
+
end
|
194
|
+
autorelease_pool {
|
195
|
+
BubbleWrap.use_weak_callbacks = true
|
196
|
+
v1 = NavigationItemContainingBarButtonItem.alloc.init_with_styled
|
197
|
+
v1.tag = 1
|
198
|
+
BubbleWrap.use_weak_callbacks = false
|
199
|
+
v2 = NavigationItemContainingBarButtonItem.alloc.init_with_styled
|
200
|
+
v2.tag = 2
|
201
|
+
}
|
202
|
+
App.notification_center.unobserve(observer)
|
203
|
+
@weak_deallocated.should.equal true
|
204
|
+
@strong_deallocated.should.equal nil
|
205
|
+
end
|
206
|
+
end
|
156
207
|
end
|
157
208
|
|
158
209
|
#################################################################################################
|
@@ -222,6 +273,31 @@ describe BW::UIBarButtonItem do
|
|
222
273
|
@subject.action.should.equal(nil)
|
223
274
|
end
|
224
275
|
end
|
276
|
+
|
277
|
+
###############################################################################################
|
278
|
+
|
279
|
+
describe "with BubbleWrap.use_weak_callbacks=true" do
|
280
|
+
it "removes cyclic references" do
|
281
|
+
observer = App.notification_center.observe('NavigationItemContainingBarButtonItem dealloc') do |obj|
|
282
|
+
if obj.userInfo['tag'] == 1
|
283
|
+
@weak_deallocated = true
|
284
|
+
elsif obj.userInfo['tag'] == 2
|
285
|
+
@strong_deallocated = true
|
286
|
+
end
|
287
|
+
end
|
288
|
+
autorelease_pool {
|
289
|
+
BubbleWrap.use_weak_callbacks = true
|
290
|
+
v1 = NavigationItemContainingBarButtonItem.alloc.init_with_system
|
291
|
+
v1.tag = 1
|
292
|
+
BubbleWrap.use_weak_callbacks = false
|
293
|
+
v2 = NavigationItemContainingBarButtonItem.alloc.init_with_system
|
294
|
+
v2.tag = 2
|
295
|
+
}
|
296
|
+
App.notification_center.unobserve(observer)
|
297
|
+
@weak_deallocated.should.equal true
|
298
|
+
@strong_deallocated.should.equal nil
|
299
|
+
end
|
300
|
+
end
|
225
301
|
end
|
226
302
|
|
227
303
|
#################################################################################################
|
@@ -23,6 +23,44 @@ describe BW::UIControlWrapper do
|
|
23
23
|
@touched.should.equal ['touched']
|
24
24
|
end
|
25
25
|
|
26
|
+
it "BubbleWrap.use_weak_callbacks=true removes cyclic references" do
|
27
|
+
class ControlSuperView < UIView
|
28
|
+
def initWithFrame(frame)
|
29
|
+
super
|
30
|
+
subject = UIControl.alloc.init
|
31
|
+
subject.when(UIControlEventTouchUpInside) do
|
32
|
+
#Can be empty, but we need a block/proc here to potentially create a retain cycle
|
33
|
+
end
|
34
|
+
addSubview(subject)
|
35
|
+
self
|
36
|
+
end
|
37
|
+
|
38
|
+
def dealloc
|
39
|
+
App.notification_center.post('ControlSuperView dealloc', nil, {'tag'=>tag})
|
40
|
+
super
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
observer = App.notification_center.observe('ControlSuperView dealloc') do |obj|
|
45
|
+
if obj.userInfo['tag'] == 1
|
46
|
+
@weak_deallocated = true
|
47
|
+
elsif obj.userInfo['tag'] == 2
|
48
|
+
@strong_deallocated = true
|
49
|
+
end
|
50
|
+
end
|
51
|
+
autorelease_pool {
|
52
|
+
BubbleWrap.use_weak_callbacks = true
|
53
|
+
v1 = ControlSuperView.new
|
54
|
+
v1.tag = 1
|
55
|
+
BubbleWrap.use_weak_callbacks = false
|
56
|
+
v2 = ControlSuperView.new
|
57
|
+
v2.tag = 2
|
58
|
+
}
|
59
|
+
App.notification_center.unobserve(observer)
|
60
|
+
@weak_deallocated.should.equal true
|
61
|
+
@strong_deallocated.should.equal nil
|
62
|
+
end
|
63
|
+
|
26
64
|
it "allows multiple targets for a given control event if specified" do
|
27
65
|
@subject.when(UIControlEventTouchUpInside, append: true) do
|
28
66
|
@touched << 'touched'
|
@@ -54,9 +54,51 @@ describe BW::UIViewWrapper do
|
|
54
54
|
testMethod.call :whenPanned
|
55
55
|
end
|
56
56
|
|
57
|
+
describe '#when_screen_edge_panned' do
|
58
|
+
testMethod.call :when_screen_edge_panned
|
59
|
+
end
|
60
|
+
|
57
61
|
describe '#when_pressed' do
|
58
62
|
testMethod.call :when_pressed
|
59
63
|
testMethod.call :whenPressed
|
60
64
|
end
|
65
|
+
|
66
|
+
it "BubbleWrap.use_weak_callbacks=true removes cyclic references" do
|
67
|
+
class ViewSuperView < UIView
|
68
|
+
def initWithFrame(frame)
|
69
|
+
super
|
70
|
+
subject = UIView.alloc.init
|
71
|
+
subject.when_tapped do
|
72
|
+
#Can be empty, but we need a block/proc here to potentially create a retain cycle
|
73
|
+
end
|
74
|
+
addSubview(subject)
|
75
|
+
self
|
76
|
+
end
|
77
|
+
|
78
|
+
def dealloc
|
79
|
+
App.notification_center.post('ViewSuperView dealloc', nil, {'tag'=>tag})
|
80
|
+
super
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
observer = App.notification_center.observe('ViewSuperView dealloc') do |obj|
|
85
|
+
if obj.userInfo['tag'] == 1
|
86
|
+
@weak_deallocated = true
|
87
|
+
elsif obj.userInfo['tag'] == 2
|
88
|
+
@strong_deallocated = true
|
89
|
+
end
|
90
|
+
end
|
91
|
+
autorelease_pool {
|
92
|
+
BubbleWrap.use_weak_callbacks = true
|
93
|
+
v1 = ViewSuperView.new
|
94
|
+
v1.tag = 1
|
95
|
+
BubbleWrap.use_weak_callbacks = false
|
96
|
+
v2 = ViewSuperView.new
|
97
|
+
v2.tag = 2
|
98
|
+
}
|
99
|
+
App.notification_center.unobserve(observer)
|
100
|
+
@weak_deallocated.should.equal true
|
101
|
+
@strong_deallocated.should.equal nil
|
102
|
+
end
|
61
103
|
end
|
62
104
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bubble-wrap
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.5.0.rc1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Matt Aimonetti
|
@@ -14,7 +14,7 @@ authors:
|
|
14
14
|
autorequire:
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
|
-
date:
|
17
|
+
date: 2014-02-17 00:00:00.000000000 Z
|
18
18
|
dependencies:
|
19
19
|
- !ruby/object:Gem::Dependency
|
20
20
|
name: mocha
|
@@ -86,7 +86,6 @@ executables: []
|
|
86
86
|
extensions: []
|
87
87
|
extra_rdoc_files:
|
88
88
|
- lib/bubble-wrap/ext/motion_project_app.rb
|
89
|
-
- lib/bubble-wrap/ext/motion_project_config.rb
|
90
89
|
- motion/core.rb
|
91
90
|
- motion/core/app.rb
|
92
91
|
- motion/core/device.rb
|
@@ -199,7 +198,6 @@ files:
|
|
199
198
|
- lib/bubble-wrap/core.rb
|
200
199
|
- lib/bubble-wrap/ext.rb
|
201
200
|
- lib/bubble-wrap/ext/motion_project_app.rb
|
202
|
-
- lib/bubble-wrap/ext/motion_project_config.rb
|
203
201
|
- lib/bubble-wrap/font.rb
|
204
202
|
- lib/bubble-wrap/http.rb
|
205
203
|
- lib/bubble-wrap/loader.rb
|
@@ -373,9 +371,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
373
371
|
version: '0'
|
374
372
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
375
373
|
requirements:
|
376
|
-
- - '
|
374
|
+
- - '>'
|
377
375
|
- !ruby/object:Gem::Version
|
378
|
-
version:
|
376
|
+
version: 1.3.1
|
379
377
|
requirements: []
|
380
378
|
rubyforge_project:
|
381
379
|
rubygems_version: 2.0.3
|
@@ -1,34 +0,0 @@
|
|
1
|
-
module BubbleWrap
|
2
|
-
module Ext
|
3
|
-
module ConfigTask
|
4
|
-
|
5
|
-
def self.included(base)
|
6
|
-
base.class_eval do
|
7
|
-
alias_method :files_dependencies_without_bubblewrap, :files_dependencies
|
8
|
-
alias_method :files_dependencies, :files_dependencies_with_bubblewrap
|
9
|
-
end
|
10
|
-
end
|
11
|
-
|
12
|
-
def path_matching_expression
|
13
|
-
/^\.?\//
|
14
|
-
end
|
15
|
-
|
16
|
-
def files_dependencies_with_bubblewrap(deps_hash)
|
17
|
-
res_path = lambda do |x|
|
18
|
-
path = path_matching_expression.match(x) ? x : File.join('.', x)
|
19
|
-
unless @files.include?(path)
|
20
|
-
Motion::Project::App.send(:fail, "Can't resolve dependency `#{x}' because #{path} is not in #{@files.inspect}")
|
21
|
-
end
|
22
|
-
path
|
23
|
-
end
|
24
|
-
deps_hash.each do |path, deps|
|
25
|
-
deps = [deps] unless deps.is_a?(Array)
|
26
|
-
@dependencies[res_path.call(path)] = deps.map(&res_path)
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
end
|
31
|
-
end
|
32
|
-
end
|
33
|
-
|
34
|
-
Motion::Project::Config.send(:include, BubbleWrap::Ext::ConfigTask)
|