delayer-deferred 1.1.1 → 2.0.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.
@@ -98,6 +98,20 @@ describe(Delayer::Deferred) do
98
98
  assert succeed, "Deferred did not executed."
99
99
  end
100
100
 
101
+ it "assign twice" do
102
+ succeed = false
103
+ delayer = Delayer.generate_class
104
+ assert_raises(Delayer::Deferred::MultipleAssignmentError) do
105
+ eval_all_events(delayer) do
106
+ defer = delayer.Deferred.new.next {
107
+ succeed = 0
108
+ }
109
+ defer.next{ succeed = 1 }
110
+ defer.next{ succeed = 2 }
111
+ end
112
+ end
113
+ end
114
+
101
115
  describe "Deferred.when" do
102
116
  it "give 3 deferred" do
103
117
  result = failure = false
@@ -31,7 +31,7 @@ describe(Enumerable) do
31
31
  c = a + b
32
32
  yielder << a
33
33
  a, b = b, c end end
34
- timeout(1) {
34
+ Timeout.timeout(1) {
35
35
  fib.deach(@delayer) {|digit|
36
36
  log << digit
37
37
  }.next{
@@ -0,0 +1,52 @@
1
+ # -*- coding: utf-8 -*-
2
+ require_relative 'helper'
3
+
4
+ describe(Delayer::Deferred) do
5
+ include TestUtils
6
+
7
+ before do
8
+ Delayer.default = Delayer.generate_class
9
+ end
10
+
11
+ describe 'auto execution Promise' do
12
+ it 'should include Promise result of Promise.graph' do
13
+ promise = Delayer::Deferred::Promise.new
14
+ assert_includes promise.graph, 'egg', ->{"[[#{promise.graph_draw}]]"}
15
+ assert_includes promise.graph, 'reserved', ->{"[[#{promise.graph_draw}]]"}
16
+ end
17
+ end
18
+
19
+ describe 'Promise' do
20
+ it 'should include Promise result of Promise.graph' do
21
+ promise = Delayer::Deferred::Promise.new(true)
22
+ assert_includes promise.graph, 'egg', ->{"[[#{promise.graph_draw}]]"}
23
+ assert_includes promise.graph, 'fresh', ->{"[[#{promise.graph_draw}]]"}
24
+ end
25
+ end
26
+
27
+ describe 'Chain' do
28
+ it 'should include ' do
29
+ promise = Delayer::Deferred::Promise.new.next{ ; }
30
+ assert_includes promise.graph, 'graph_test.rb', ->{"[[#{promise.graph_draw}]]"}
31
+ end
32
+ end
33
+
34
+ describe 'Awaiting' do
35
+ it 'await' do
36
+ promise_a = Delayer::Deferred::Promise.new(true).next{ |buf|
37
+ buf << :a
38
+ }.next{ |buf|
39
+ buf << :b
40
+ }.trap{ |buf|
41
+ buf << :c
42
+ }
43
+ promise_b = Delayer::Deferred::Promise.new.next{
44
+ +promise_a << :e
45
+ }.trap{ |buf|
46
+ buf << :f
47
+ }
48
+ eval_all_events
49
+ end
50
+ end
51
+
52
+ end
@@ -1,9 +1,14 @@
1
1
  require 'bundler/setup'
2
- require 'minitest/autorun'
3
2
 
4
- require 'delayer/deferred'
5
3
  require 'securerandom'
6
4
  require 'set'
7
5
  require 'timeout'
8
-
9
6
  require_relative 'testutils'
7
+
8
+ require 'simplecov'
9
+ SimpleCov.start do
10
+ add_filter "/test/"
11
+ end
12
+
13
+ require 'delayer/deferred'
14
+ require 'minitest/autorun'
@@ -0,0 +1,91 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ require_relative 'helper'
4
+
5
+ describe(Delayer::Deferred::Promise) do
6
+ include TestUtils
7
+
8
+ before do
9
+ Delayer.default = Delayer.generate_class
10
+ @delayer = Delayer.generate_class
11
+ end
12
+
13
+ describe 'get instance' do
14
+ it 'default delayer' do
15
+ assert_instance_of Delayer::Deferred::Promise, Delayer::Deferred::Promise.new
16
+ end
17
+
18
+ it 'another delayer' do
19
+ promise = @delayer.Promise.new
20
+ assert_instance_of @delayer.Promise, promise
21
+ end
22
+
23
+ describe "with block" do
24
+ before do
25
+ @promise = @delayer.Promise.new{ ; }
26
+ end
27
+
28
+ it 'was generated' do
29
+ assert_kind_of Delayer::Deferred::Chain::Next, @promise
30
+ end
31
+
32
+ it "doesn't have child" do
33
+ refute @promise.has_child?
34
+ end
35
+ end
36
+ end
37
+
38
+ describe 'chain' do
39
+ before do
40
+ @promise = @delayer.Promise.new(true)
41
+ end
42
+
43
+ describe 'next' do
44
+ before do
45
+ @record = nil
46
+ @chain = @promise.next{|x| @record = x + 1 }
47
+ end
48
+
49
+ it 'should execute next block if called promise#call' do
50
+ val = rand(1000)
51
+ eval_all_events(@delayer) do
52
+ @promise.call(val)
53
+ end
54
+ assert_equal val + 1, @record, ->{ "next block did not executed.\n[[#{@chain.graph_draw}]]" }
55
+ end
56
+
57
+ it "shouldn't execute next block if called promise#fail" do
58
+ val = rand(1000)
59
+ eval_all_events(@delayer) do
60
+ @promise.fail(val)
61
+ end
62
+ refute_equal val + 1, @record, ->{ "next block did executed.\n[[#{@chain.graph_draw}]]" }
63
+ end
64
+ end
65
+
66
+ describe 'trap' do
67
+ before do
68
+ @record = nil
69
+ @chain = @promise.trap{|x| @record = x + 1 }
70
+ end
71
+
72
+ it 'should execute trap block if called promise#fail' do
73
+ val = rand(1000)
74
+ eval_all_events(@delayer) do
75
+ @promise.fail(val)
76
+ end
77
+ assert_equal val + 1, @record, ->{ "trap block did not executed.\n[[#{@chain.graph_draw}]]" }
78
+ end
79
+
80
+ it "shouldn't execute trap block if called promise#call" do
81
+ val = rand(1000)
82
+ eval_all_events(@delayer) do
83
+ @promise.call(val)
84
+ end
85
+ refute_equal val + 1, @record, ->{ "trap block did executed.\n[[#{@chain.graph_draw}]]" }
86
+ end
87
+ end
88
+
89
+ end
90
+
91
+ end
@@ -46,6 +46,7 @@ describe(Thread) do
46
46
  thread = succeed = failure = result = false
47
47
  uuid = SecureRandom.uuid
48
48
  delayer = Delayer.generate_class
49
+ assert_equal delayer, delayer.Deferred.Thread.delayer
49
50
  eval_all_events(delayer) do
50
51
  delayer.Deferred.Thread.new {
51
52
  thread = true
@@ -55,7 +56,7 @@ describe(Thread) do
55
56
  result = param
56
57
  }.trap{ |exception|
57
58
  failure = exception } end
58
- assert_equal false, failure
59
+ assert_equal false, failure, 'Unexpected failed.'
59
60
  assert thread, "Thread did not executed."
60
61
  assert succeed, "next block did not executed."
61
62
  assert_equal uuid, result
@@ -101,16 +102,19 @@ describe(Thread) do
101
102
  result = failure = false
102
103
  delayer = Delayer.generate_class
103
104
  uuid = SecureRandom.uuid
104
- eval_all_events(delayer) do
105
+ node = eval_all_events(delayer) do
105
106
  delayer.Deferred.new.next{
106
- delayer.Deferred.Thread.new{
107
- uuid }
107
+ delayer.Deferred.new.next{
108
+ delayer.Deferred.Thread.new{
109
+ uuid
110
+ }
111
+ }
108
112
  }.next{ |value|
109
113
  result = value
110
114
  }.trap{ |exception|
111
115
  failure = exception }
112
116
  end
113
- assert_equal uuid, result
117
+ assert_equal uuid, result, ->{ "[[#{node.graph_draw}]]" }
114
118
  assert_equal false, failure
115
119
  end
116
120
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: delayer-deferred
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.1
4
+ version: 2.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Toshiaki Asai
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-03-19 00:00:00.000000000 Z
11
+ date: 2017-05-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: delayer
@@ -72,6 +72,20 @@ dependencies:
72
72
  - - "~>"
73
73
  - !ruby/object:Gem::Version
74
74
  version: '5.7'
75
+ - !ruby/object:Gem::Dependency
76
+ name: simplecov
77
+ requirement: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - ">="
80
+ - !ruby/object:Gem::Version
81
+ version: '0'
82
+ type: :development
83
+ prerelease: false
84
+ version_requirements: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - ">="
87
+ - !ruby/object:Gem::Version
88
+ version: '0'
75
89
  - !ruby/object:Gem::Dependency
76
90
  name: ruby-prof
77
91
  requirement: !ruby/object:Gem::Requirement
@@ -142,20 +156,36 @@ files:
142
156
  - Rakefile
143
157
  - delayer-deferred.gemspec
144
158
  - lib/delayer/deferred.rb
159
+ - lib/delayer/deferred/chain.rb
160
+ - lib/delayer/deferred/chain/await.rb
161
+ - lib/delayer/deferred/chain/base.rb
162
+ - lib/delayer/deferred/chain/next.rb
163
+ - lib/delayer/deferred/chain/trap.rb
145
164
  - lib/delayer/deferred/deferred.rb
146
165
  - lib/delayer/deferred/deferredable.rb
166
+ - lib/delayer/deferred/deferredable/awaitable.rb
167
+ - lib/delayer/deferred/deferredable/chainable.rb
168
+ - lib/delayer/deferred/deferredable/graph.rb
169
+ - lib/delayer/deferred/deferredable/node_sequence.rb
170
+ - lib/delayer/deferred/deferredable/trigger.rb
147
171
  - lib/delayer/deferred/enumerable.rb
148
172
  - lib/delayer/deferred/enumerator.rb
149
173
  - lib/delayer/deferred/error.rb
174
+ - lib/delayer/deferred/promise.rb
175
+ - lib/delayer/deferred/request.rb
176
+ - lib/delayer/deferred/response.rb
150
177
  - lib/delayer/deferred/result_container.rb
151
178
  - lib/delayer/deferred/thread.rb
152
179
  - lib/delayer/deferred/tools.rb
153
180
  - lib/delayer/deferred/version.rb
181
+ - lib/delayer/deferred/worker.rb
154
182
  - test/deferred_benchmark.rb
155
183
  - test/deferred_profiler.rb
156
184
  - test/deferred_test.rb
157
185
  - test/enumerable_test.rb
186
+ - test/graph_test.rb
158
187
  - test/helper.rb
188
+ - test/promise_test.rb
159
189
  - test/testutils.rb
160
190
  - test/thread_test.rb
161
191
  homepage: https://github.com/toshia/delayer-deferred
@@ -178,7 +208,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
178
208
  version: '0'
179
209
  requirements: []
180
210
  rubyforge_project:
181
- rubygems_version: 2.6.8
211
+ rubygems_version: 2.6.11
182
212
  signing_key:
183
213
  specification_version: 4
184
214
  summary: Deferred for Delayer
@@ -187,6 +217,8 @@ test_files:
187
217
  - test/deferred_profiler.rb
188
218
  - test/deferred_test.rb
189
219
  - test/enumerable_test.rb
220
+ - test/graph_test.rb
190
221
  - test/helper.rb
222
+ - test/promise_test.rb
191
223
  - test/testutils.rb
192
224
  - test/thread_test.rb