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.
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