lalka 0.5.0 → 0.6.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (4) hide show
  1. checksums.yaml +4 -4
  2. data/lib/lalka.rb +48 -10
  3. data/lib/lalka/version.rb +1 -1
  4. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 3d84e81df254853fab9f6098eb9977459e1ec950
4
- data.tar.gz: cf66bc790e5914ae297f9b9adbc0ba60724e7bde
3
+ metadata.gz: 803656007eaa3ce1fa9bf0590906f978c296d51f
4
+ data.tar.gz: 1e3808e62ec73431dac71b77a020ab6dcda74b43
5
5
  SHA512:
6
- metadata.gz: a43f7bdad55186d6eee469b6a46b520d9f4a394359f3fdeabdfeef21dede608593495ebb014b4c9a9d4d9a9951603a21e0396dd6c77c9c3f77cd5331f78e249e
7
- data.tar.gz: 0999a61f36c30400c6504ddb80b9c4b1197ba6f0e72731be8af9d9a2c1552b9743453ebb4b2d93786e46095b359120bf52c42053a0ac667819e85bac605b908c
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
- @computation.call(internal)
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
- @computation.call(internal)
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(yield value)
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 = yield first_value
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.call(value)
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
- result = @on_success.call(value)
183
- @queue.push M.Right(result)
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 = @on_error.call(error)
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
@@ -1,4 +1,4 @@
1
1
  # frozen_string_literal: true
2
2
  module Lalka
3
- VERSION = '0.5.0'
3
+ VERSION = '0.6.0'
4
4
  end
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.5.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-17 00:00:00.000000000 Z
11
+ date: 2016-12-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: concurrent-ruby