lalka 0.5.0 → 0.6.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.
- 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
|