bubble-wrap 1.9.1 → 1.9.2

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 92e7c0fe2ee325c95b2ca90338fe351be2418071
4
- data.tar.gz: 0901bb3e373c4297f699abc1e598eb0d261dcc7c
3
+ metadata.gz: 95bb977273e17a942c1eafb9b1b50310c6e0eb9d
4
+ data.tar.gz: 05a96c0c6101319c9e182f857d2f598eafa2011f
5
5
  SHA512:
6
- metadata.gz: 7d730ae4a4226eca0a485fc4b2fdf0375a872d19f48adec94887395a53592a52d895aa78050257cc16af39928f19c0e472eda912bd32a57a5af708f2438a13c1
7
- data.tar.gz: b8712012a3d4817784fe910eb88b7782259e890e943f83af8854c6282d3305c331f5a50affa1deb835a2560aca05d5b5ca0914a1b463bab59e5a1ea59a0469c2
6
+ metadata.gz: 6947c06f77c6dc682e3dfc96d1c998187ae7a6fadd523d55e0a7031a2fc85fcdc1a444ada67de7314ea1484e42dc49deb9540f9a38ba93bff520f65563994865
7
+ data.tar.gz: 3e9c849bb376dfbb3b9cd1a73747a420fb25168cea4907991cfa17b5e8b6197e0e6d0e386c44f1e536a77d7d18c712e5d516abfde1c9820dbf001bb4eb6e94ba
@@ -1,9 +1,17 @@
1
1
  ## Unreleased
2
2
 
3
- [Commit history](https://github.com/rubymotion/BubbleWrap/compare/v1.9.0...master)
3
+ [Commit history](https://github.com/rubymotion/BubbleWrap/compare/v1.9.2...master)
4
+
5
+ ## 1.9.2
6
+
7
+ [Commit history](https://github.com/rubymotion/BubbleWrap/compare/v1.9.1...v1.9.2)
8
+
9
+ * Added `DependentDeferrable`. ([#469](https://github.com/rubymotion/BubbleWrap/pull/469))
4
10
 
5
11
  ## 1.9.1
6
12
 
13
+ [Commit history](https://github.com/rubymotion/BubbleWrap/compare/v1.9.0...v1.9.1)
14
+
7
15
  * Fix issue in loading iOS 8 constants for CoreLocation
8
16
 
9
17
  ## 1.9.0
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- bubble-wrap (1.9.1)
4
+ bubble-wrap (1.9.2)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
data/README.md CHANGED
@@ -24,10 +24,10 @@ gem install bubble-wrap
24
24
  require 'bubble-wrap'
25
25
  ```
26
26
 
27
- If you using Bundler:
27
+ If you use Bundler:
28
28
 
29
29
  ```ruby
30
- gem "bubble-wrap", "~> 1.9.0"
30
+ gem "bubble-wrap", "~> 1.9.2"
31
31
  ```
32
32
 
33
33
  BubbleWrap is split into multiple modules so that you can easily choose which parts are included at compile-time.
@@ -1118,6 +1118,26 @@ Great sadness!
1118
1118
  => [:passed]
1119
1119
  ```
1120
1120
 
1121
+ #### DependentDeferrable
1122
+
1123
+ `DependentDeferrable` depends on children deferrables. A `DependentDeferrable`
1124
+ succeeds only when every child succeeds and fails immediately when any child
1125
+ fails
1126
+
1127
+ ```ruby
1128
+ > d1 = EM::DefaultDeferrable.new
1129
+ => #<BubbleWrap::Reactor::DefaultDeferrable:0x10c713750>
1130
+ > d2 = EM::DefaultDeferrable.new
1131
+ => #<BubbleWrap::Reactor::DefaultDeferrable:0x10370bb10>
1132
+ > d = EM::DependentDeferrable.on(d1, d2)
1133
+ => #<BubbleWrap::Reactor::DependentDeferrable:0x106c17b80>
1134
+ > d.callback {|a, b| puts "a: #{a} b: #{b}"}
1135
+ => [#<Proc:0x103075210>]
1136
+ > d1.succeed 'one', 'one more'
1137
+ > d2.succeed :two
1138
+ a: ["one", "one more"] b: [:two]
1139
+ ```
1140
+
1121
1141
  #### ThreadAwareDeferrable
1122
1142
 
1123
1143
  ```ruby
@@ -1,4 +1,4 @@
1
1
  module BubbleWrap
2
- VERSION = '1.9.1' unless defined?(BubbleWrap::VERSION)
2
+ VERSION = '1.9.2' unless defined?(BubbleWrap::VERSION)
3
3
  MIN_MOTION_VERSION = '3.12'
4
4
  end
@@ -147,6 +147,14 @@ module BubbleWrap
147
147
  @deferred_timeout = Timer.new(seconds) {me.fail}
148
148
  end
149
149
 
150
+ def deferred_status
151
+ @deferred_status ||= :unknown
152
+ end
153
+
154
+ def deferred_args
155
+ @deferred_args
156
+ end
157
+
150
158
  end
151
159
  end
152
160
  end
@@ -0,0 +1,27 @@
1
+ module BubbleWrap
2
+ module Reactor
3
+ class DependentDeferrable < DefaultDeferrable
4
+ # args are Deferrable(s) which the returned Deferrable depends on.
5
+ # returns a Deferrable that depends on args.
6
+ # which:
7
+ # succeeds only when every Deferrable in args succeeds
8
+ # fails immediately when any Deferrable in args fails
9
+ # Have to be careful that #deferred_args for DependentDeferrable is a list of #deferred_args from its children Deferrable(s).
10
+ def self.on(*args)
11
+ deferrable = self.new
12
+ @children_deferrables = args
13
+ @children_deferrables.each do |e|
14
+ e.callback do |result|
15
+ if @children_deferrables.all? {|a| a.deferred_status == :succeeded}
16
+ deferrable.succeed(*@children_deferrables.map(&:deferred_args))
17
+ end
18
+ end
19
+ e.errback do |result|
20
+ deferrable.fail(*e.deferred_args)
21
+ end
22
+ end
23
+ deferrable
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,93 @@
1
+ describe BubbleWrap::Reactor::DependentDeferrable do
2
+
3
+ before do
4
+ @subject = Class.new do
5
+ include BubbleWrap::Reactor::Deferrable
6
+ end
7
+ @d1 = @subject.new
8
+ @d2 = @subject.new
9
+ @object = BubbleWrap::Reactor::DependentDeferrable.on(@d1, @d2)
10
+ end
11
+
12
+ describe '.callback' do
13
+
14
+ it "calls the callback block with arguments after all children .succeed" do
15
+ args1 = [1, 2]
16
+ args2 = [3, 4]
17
+ @object.callback do |*passed_args|
18
+ passed_args.should.equal [args1, args2]
19
+ end
20
+ @d1.succeed *args1
21
+ @d2.succeed *args2
22
+ end
23
+
24
+ it "calls the callback block with arguments only after all children .succeed" do
25
+ execution_order = []
26
+ @object.callback do |*passed_args|
27
+ execution_order << 3
28
+ end
29
+ execution_order << 1
30
+ @d1.succeed :succeeds
31
+ execution_order << 2
32
+ @d2.succeed :succeeds
33
+ execution_order.should.equal [1, 2, 3]
34
+ end
35
+
36
+ it "calls the callback if even if the deferrable already succeeded" do
37
+ @d1.succeed :succeeded1
38
+ @d2.succeed :succeeded2
39
+ @object.callback do |*args|
40
+ NSLog "args: #{args} class: #{args.class}"
41
+ args[0].should.equal [:succeeded1]
42
+ args[1].should.equal [:succeeded2]
43
+ end
44
+ end
45
+
46
+ end
47
+
48
+ describe '.errback' do
49
+ it "calls the errback block after a child fails" do
50
+ args1 = [1, 2]
51
+ args2 = [3, 4]
52
+ @object.errback do |*passed_args|
53
+ passed_args.should.equal args1
54
+ end
55
+ @d1.fail *args1
56
+ end
57
+
58
+ it "calls the errback block immediately after a child fails" do
59
+ execution_order = []
60
+ @object.errback do |*passed_args|
61
+ execution_order << 2
62
+ end
63
+ execution_order << 1
64
+ @d1.fail :fail
65
+ execution_order << 3
66
+ @d2.fail :fail
67
+ execution_order.should.equal [1, 2, 3]
68
+ end
69
+
70
+ it "calls the errback block after a child fails even if others succeeds" do
71
+ args1 = [1, 2]
72
+ args2 = [3, 4]
73
+ callback_called = false
74
+ @object.callback do |*passed_args|
75
+ callback_called = true
76
+ end
77
+ @object.errback do |*passed_args|
78
+ passed_args.should.equal args2
79
+ end
80
+ @d1.succeed *args1
81
+ @d2.fail *args2
82
+ callback_called.should.equal false
83
+ end
84
+
85
+ it "calls the errback block even if the deferrable failed first" do
86
+ @d1.fail :err
87
+ @object.errback do |err|
88
+ err.should.equal :err
89
+ end
90
+ end
91
+ end
92
+
93
+ 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.9.1
4
+ version: 1.9.2
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: 2015-07-10 00:00:00.000000000 Z
17
+ date: 2015-07-27 00:00:00.000000000 Z
18
18
  dependencies:
19
19
  - !ruby/object:Gem::Dependency
20
20
  name: mocha
@@ -141,6 +141,7 @@ extra_rdoc_files:
141
141
  - motion/reactor.rb
142
142
  - motion/reactor/default_deferrable.rb
143
143
  - motion/reactor/deferrable.rb
144
+ - motion/reactor/dependent_deferrable.rb
144
145
  - motion/reactor/eventable.rb
145
146
  - motion/reactor/future.rb
146
147
  - motion/reactor/periodic_timer.rb
@@ -190,6 +191,7 @@ extra_rdoc_files:
190
191
  - spec/motion/motion/core_motion_spec.rb
191
192
  - spec/motion/network-indicator/network_indicator_spec.rb
192
193
  - spec/motion/reactor/deferrable_spec.rb
194
+ - spec/motion/reactor/dependent_deferrable_spec.rb
193
195
  - spec/motion/reactor/eventable_spec.rb
194
196
  - spec/motion/reactor/thread_aware_deferrable_spec.rb
195
197
  - spec/motion/reactor_spec.rb
@@ -280,6 +282,7 @@ files:
280
282
  - motion/reactor.rb
281
283
  - motion/reactor/default_deferrable.rb
282
284
  - motion/reactor/deferrable.rb
285
+ - motion/reactor/dependent_deferrable.rb
283
286
  - motion/reactor/eventable.rb
284
287
  - motion/reactor/future.rb
285
288
  - motion/reactor/periodic_timer.rb
@@ -386,6 +389,7 @@ files:
386
389
  - spec/motion/motion/core_motion_spec.rb
387
390
  - spec/motion/network-indicator/network_indicator_spec.rb
388
391
  - spec/motion/reactor/deferrable_spec.rb
392
+ - spec/motion/reactor/dependent_deferrable_spec.rb
389
393
  - spec/motion/reactor/eventable_spec.rb
390
394
  - spec/motion/reactor/thread_aware_deferrable_spec.rb
391
395
  - spec/motion/reactor_spec.rb
@@ -459,6 +463,7 @@ test_files:
459
463
  - spec/motion/motion/core_motion_spec.rb
460
464
  - spec/motion/network-indicator/network_indicator_spec.rb
461
465
  - spec/motion/reactor/deferrable_spec.rb
466
+ - spec/motion/reactor/dependent_deferrable_spec.rb
462
467
  - spec/motion/reactor/eventable_spec.rb
463
468
  - spec/motion/reactor/thread_aware_deferrable_spec.rb
464
469
  - spec/motion/reactor_spec.rb