lalka 0.5.0 → 0.6.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/lalka.rb +48 -10
- data/lib/lalka/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 803656007eaa3ce1fa9bf0590906f978c296d51f
|
4
|
+
data.tar.gz: 1e3808e62ec73431dac71b77a020ab6dcda74b43
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ce6d3be7b9c1ad1fd49b43801896bb7f44aeb0e6b472c7386ce4463cdbc6327795ac85478071760268cf97ddaf4b5208f939dc4002f4cdb6799cfdd93c70e041
|
7
|
+
data.tar.gz: 8bb5196fc4a04021a499104d2bd2bc1083da6aebe0d09bb1301aee0ca3251927bffae52d067d7f2ff7070277070944d39e8523c46a16ff3c689326530bc24eb2
|
data/lib/lalka.rb
CHANGED
@@ -49,22 +49,24 @@ module Lalka
|
|
49
49
|
Task.id(internal)
|
50
50
|
end
|
51
51
|
|
52
|
-
|
52
|
+
internal.call(&@computation)
|
53
53
|
queue.pop
|
54
54
|
end
|
55
55
|
|
56
56
|
def fork
|
57
57
|
internal = InternalAsync.new
|
58
58
|
yield internal
|
59
|
-
|
59
|
+
internal.call(&@computation)
|
60
60
|
nil
|
61
61
|
end
|
62
62
|
|
63
|
-
def map
|
63
|
+
def map(*args, &block)
|
64
|
+
block = function_from_arguments(*args, &block)
|
65
|
+
|
64
66
|
Task.new do |t|
|
65
67
|
fork do |this|
|
66
68
|
this.on_success do |value|
|
67
|
-
t.resolve(
|
69
|
+
t.resolve(block.call(value))
|
68
70
|
end
|
69
71
|
|
70
72
|
this.on_error do |error|
|
@@ -74,11 +76,13 @@ module Lalka
|
|
74
76
|
end
|
75
77
|
end
|
76
78
|
|
77
|
-
def bind
|
79
|
+
def bind(*args, &block)
|
80
|
+
block = function_from_arguments(*args, &block)
|
81
|
+
|
78
82
|
Task.new do |t|
|
79
83
|
fork do |this|
|
80
84
|
this.on_success do |first_value|
|
81
|
-
other_task =
|
85
|
+
other_task = block.call(first_value)
|
82
86
|
|
83
87
|
other_task.fork do |other|
|
84
88
|
other.on_success do |second_value|
|
@@ -143,6 +147,18 @@ module Lalka
|
|
143
147
|
alias fmap map
|
144
148
|
alias chain bind
|
145
149
|
alias flat_map bind
|
150
|
+
|
151
|
+
private
|
152
|
+
|
153
|
+
def function_from_arguments(*args, &block)
|
154
|
+
if block_given?
|
155
|
+
raise ArgumentError, 'both block and function provided' if args.length != 0
|
156
|
+
block
|
157
|
+
else
|
158
|
+
raise ArgumentError, 'no block or function provided' if args.length != 1
|
159
|
+
args[0]
|
160
|
+
end
|
161
|
+
end
|
146
162
|
end
|
147
163
|
|
148
164
|
class InternalBase
|
@@ -161,14 +177,26 @@ module Lalka
|
|
161
177
|
rescue => e
|
162
178
|
reject(e)
|
163
179
|
end
|
180
|
+
|
181
|
+
def call
|
182
|
+
yield self
|
183
|
+
rescue => e
|
184
|
+
reject(e)
|
185
|
+
end
|
164
186
|
end
|
165
187
|
|
166
188
|
class InternalAsync < InternalBase
|
167
189
|
def resolve(value)
|
168
|
-
@on_success.
|
190
|
+
if @on_success.nil?
|
191
|
+
reject(ArgumentError.new('missing on_success block'))
|
192
|
+
else
|
193
|
+
@on_success.call(value)
|
194
|
+
end
|
169
195
|
end
|
170
196
|
|
171
197
|
def reject(error)
|
198
|
+
raise ArgumentError, 'missing on_error block' if @on_error.nil?
|
199
|
+
|
172
200
|
@on_error.call(error)
|
173
201
|
end
|
174
202
|
end
|
@@ -179,12 +207,22 @@ module Lalka
|
|
179
207
|
end
|
180
208
|
|
181
209
|
def resolve(value)
|
182
|
-
|
183
|
-
|
210
|
+
if @on_success.nil?
|
211
|
+
reject(ArgumentError.new('missing on_success block'))
|
212
|
+
else
|
213
|
+
result = @on_success.call(value)
|
214
|
+
@queue.push M.Right(result)
|
215
|
+
end
|
184
216
|
end
|
185
217
|
|
186
218
|
def reject(error)
|
187
|
-
result =
|
219
|
+
result =
|
220
|
+
if @on_error.nil?
|
221
|
+
ArgumentError.new('missing on_error block')
|
222
|
+
else
|
223
|
+
@on_error.call(error)
|
224
|
+
end
|
225
|
+
|
188
226
|
@queue.push M.Left(result)
|
189
227
|
end
|
190
228
|
end
|
data/lib/lalka/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: lalka
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Vlad Shmyhlo
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-12-
|
11
|
+
date: 2016-12-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: concurrent-ruby
|