lalka 0.2.0 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (5) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +11 -2
  3. data/lib/lalka.rb +34 -26
  4. data/lib/lalka/version.rb +1 -1
  5. metadata +1 -1
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 8a73f1888ec88d74b7512761a7ef1a1b225896ea
4
- data.tar.gz: d9414cfc7f078a2ca1b5fb55db185109b7939bc8
3
+ metadata.gz: a2c8ed4e0c9d220a12dee163cd1bf8374345335d
4
+ data.tar.gz: 972691694aa8089be51371b55c1e19fcefacb395
5
5
  SHA512:
6
- metadata.gz: b0ad66f8cb854dd0ba9d7796af9d6ca7b397aaa874fbf781913450e83b3e3626c61d474461604e4e4034fd81a051da61d6b49788d0644259751167cd042f4ceb
7
- data.tar.gz: fad058b50f8e5231a817d733ed995ba04f409742b08b377a8761b6bf0ff5c8f936870f3378a0bc8a38c202a553d07c0edce36bc1dec9d622b726e752477b76c5
6
+ metadata.gz: 81fc544ab2f9ba714e75d381ef1251dbbd60ae0209a21e33069a7b3c9f010216af8f158c95be505ef5f15a639e898b6b53a479e2c58154e6b92ffffdaaee2555
7
+ data.tar.gz: c605549c2e9b112d86358db31f0fcd4741d6284fe7a1025d1f56e35dddbe1776da3b1bbd781ea918f965a1b001c2cbe9170e9a4bd9ed1d89aa9c401d21c09387
data/README.md CHANGED
@@ -12,6 +12,10 @@ TODO: Delete this and the text above, and describe your gem
12
12
  t.resolve(value) # resolve task to a value
13
13
  # or
14
14
  t.reject(error) # reject task with an error
15
+ # or
16
+ t.try { 100 } # will resolve
17
+ # or
18
+ t.try { raise 'error' } # will reject
15
19
  end
16
20
  ```
17
21
 
@@ -19,11 +23,13 @@ TODO: Delete this and the text above, and describe your gem
19
23
  ```ruby
20
24
  resolved_task = Lalka::Task.resolve(value) # task which resolves to a value
21
25
  rejected_task = Lalka::Task.reject(error) # task which rejects to a value
26
+ task = Lalka::Task.try { 100 } # will resolve
27
+ task = Lalka::Task.try { raise 'error' } # will reject
22
28
  ```
23
29
 
24
30
  ### fork:
25
31
  ```ruby
26
- # fork is nonblocking, returns nil
32
+ # executes computation, fork is nonblocking, returns nil
27
33
  task.fork do |t|
28
34
  t.on_success do |value|
29
35
  # do something with a value
@@ -37,7 +43,7 @@ TODO: Delete this and the text above, and describe your gem
37
43
 
38
44
  ### fork_wait:
39
45
  ```ruby
40
- # fork_wait blocks and returns Either from "dry-monads" gem
46
+ # executes computation, fork_wait blocks and returns Either from "dry-monads" gem
41
47
  task = Lalka::Task.resolve(99)
42
48
 
43
49
  result = task.fork_wait do |t|
@@ -109,6 +115,9 @@ TODO: Delete this and the text above, and describe your gem
109
115
 
110
116
  result = Lalka::Task.resolve(-> (x) { -> (y) { x + y } }).ap(task1).ap(task2).fork_wait
111
117
  result # Right(100)
118
+
119
+ result = Lalka::Task.resolve(-> (x, y) { x + y }.curry).ap(task1).ap(task2).fork_wait
120
+ result # Right(100)
112
121
  ```
113
122
 
114
123
  ## Installation
data/lib/lalka.rb CHANGED
@@ -13,12 +13,20 @@ module Lalka
13
13
  end
14
14
  end
15
15
 
16
+ alias of resolve
17
+
16
18
  def reject(error)
17
19
  new do |t|
18
20
  t.reject(error)
19
21
  end
20
22
  end
21
23
 
24
+ def try(&block)
25
+ new do |t|
26
+ t.try(&block)
27
+ end
28
+ end
29
+
22
30
  def id(internal)
23
31
  internal.on_success { |v| v }
24
32
  internal.on_error { |e| e }
@@ -92,22 +100,22 @@ module Lalka
92
100
  Task.new do |t|
93
101
  q = Queue.new
94
102
 
95
- fork do |this|
96
- this.on_success do |fn|
97
- q.push [:fn, fn]
103
+ other_task.fork do |other|
104
+ other.on_success do |value|
105
+ q.push [:arg, value]
98
106
  end
99
107
 
100
- this.on_error do |error|
108
+ other.on_error do |error|
101
109
  q.push [:error, error]
102
110
  end
103
111
  end
104
112
 
105
- other_task.fork do |other|
106
- other.on_success do |value|
107
- q.push [:arg, value]
113
+ fork do |this|
114
+ this.on_success do |fn|
115
+ q.push [:fn, fn]
108
116
  end
109
117
 
110
- other.on_error do |error|
118
+ this.on_error do |error|
111
119
  q.push [:error, error]
112
120
  end
113
121
  end
@@ -139,15 +147,7 @@ module Lalka
139
147
  end
140
148
  end
141
149
 
142
- class InternalAsync
143
- def resolve(value)
144
- @on_success.call(value)
145
- end
146
-
147
- def reject(error)
148
- @on_error.call(error)
149
- end
150
-
150
+ class InternalBase
151
151
  def on_success(&block)
152
152
  @on_success = block
153
153
  nil
@@ -157,9 +157,25 @@ module Lalka
157
157
  @on_error = block
158
158
  nil
159
159
  end
160
+
161
+ def try
162
+ resolve(yield)
163
+ rescue => e
164
+ reject(e)
165
+ end
166
+ end
167
+
168
+ class InternalAsync < InternalBase
169
+ def resolve(value)
170
+ @on_success.call(value)
171
+ end
172
+
173
+ def reject(error)
174
+ @on_error.call(error)
175
+ end
160
176
  end
161
177
 
162
- class Internal
178
+ class Internal < InternalBase
163
179
  def initialize(queue)
164
180
  @queue = queue
165
181
  end
@@ -173,13 +189,5 @@ module Lalka
173
189
  result = @on_error.call(error)
174
190
  @queue.push Dry::Monads.Left(result)
175
191
  end
176
-
177
- def on_success(&block)
178
- @on_success = block
179
- end
180
-
181
- def on_error(&block)
182
- @on_error = block
183
- end
184
192
  end
185
193
  end
data/lib/lalka/version.rb CHANGED
@@ -1,4 +1,4 @@
1
1
  # frozen_string_literal: true
2
2
  module Lalka
3
- VERSION = '0.2.0'
3
+ VERSION = '0.3.0'
4
4
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lalka
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Vlad Shmyhlo