isomorfeus-redux 4.0.17 → 4.0.18
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/isomorfeus-redux.rb +3 -1
- data/lib/isomorfeus/promise.rb +3 -349
- data/lib/redux/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: dab6bfed0e9e91a5a59c8b45056449ad2c0f2cab5ec1bfb7fcfb5f8179628970
|
4
|
+
data.tar.gz: 5506812a4498c8080ad3a125f25052afe8602a043786062952abcb1ffa5c9472
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ed0aefa578a4af22a5b478b50fc133949598e0ca79d267f5bbbd3b4951f131885f7dcf0db1308a71c63273d5813f4298517d9910bb1ac66169753d0b59f48aaa
|
7
|
+
data.tar.gz: 7fa33aa40a2c96218f5d43cca71f119c077322bab3896612839005f947d0ef36ef9157df0f8e5dcc39863b4cefdaaba798d05576dff2f6be70d63420fc7fb185
|
data/lib/isomorfeus-redux.rb
CHANGED
@@ -12,7 +12,9 @@ if RUBY_ENGINE == 'opal'
|
|
12
12
|
Redux::Reducers::add_application_reducers_to_store
|
13
13
|
Isomorfeus.init_store
|
14
14
|
else
|
15
|
-
|
15
|
+
opal_path = Gem::Specification.find_by_name('opal').full_gem_path
|
16
|
+
promise_path = File.join(opal_path, 'stdlib', 'promise.rb')
|
17
|
+
require promise_path
|
16
18
|
require 'redux/version'
|
17
19
|
require 'isomorfeus/execution_environment'
|
18
20
|
|
data/lib/isomorfeus/promise.rb
CHANGED
@@ -1,349 +1,3 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
def self.value(value)
|
5
|
-
new.resolve(value)
|
6
|
-
end
|
7
|
-
|
8
|
-
def self.error(value)
|
9
|
-
new.reject(value)
|
10
|
-
end
|
11
|
-
|
12
|
-
def self.when(*promises)
|
13
|
-
When.new(promises)
|
14
|
-
end
|
15
|
-
|
16
|
-
attr_reader :error, :prev, :next
|
17
|
-
|
18
|
-
def initialize(action = {})
|
19
|
-
@action = action
|
20
|
-
|
21
|
-
@realized = false
|
22
|
-
@exception = false
|
23
|
-
@value = nil
|
24
|
-
@error = nil
|
25
|
-
@delayed = false
|
26
|
-
|
27
|
-
@prev = nil
|
28
|
-
@next = []
|
29
|
-
end
|
30
|
-
|
31
|
-
def value
|
32
|
-
if Promise === @value
|
33
|
-
@value.value
|
34
|
-
else
|
35
|
-
@value
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
|
-
def act?
|
40
|
-
@action.has_key?(:success) || @action.has_key?(:always)
|
41
|
-
end
|
42
|
-
|
43
|
-
def action
|
44
|
-
@action.keys
|
45
|
-
end
|
46
|
-
|
47
|
-
def exception?
|
48
|
-
@exception
|
49
|
-
end
|
50
|
-
|
51
|
-
def realized?
|
52
|
-
!!@realized
|
53
|
-
end
|
54
|
-
|
55
|
-
def resolved?
|
56
|
-
@realized == :resolve
|
57
|
-
end
|
58
|
-
|
59
|
-
def rejected?
|
60
|
-
@realized == :reject
|
61
|
-
end
|
62
|
-
|
63
|
-
def pending?
|
64
|
-
!realized?
|
65
|
-
end
|
66
|
-
|
67
|
-
def ^(promise)
|
68
|
-
promise << self
|
69
|
-
self >> promise
|
70
|
-
|
71
|
-
promise
|
72
|
-
end
|
73
|
-
|
74
|
-
def <<(promise)
|
75
|
-
@prev = promise
|
76
|
-
|
77
|
-
self
|
78
|
-
end
|
79
|
-
|
80
|
-
def >>(promise)
|
81
|
-
@next << promise
|
82
|
-
|
83
|
-
if exception?
|
84
|
-
promise.reject(@delayed[0])
|
85
|
-
elsif resolved?
|
86
|
-
promise.resolve(@delayed ? @delayed[0] : value)
|
87
|
-
elsif rejected?
|
88
|
-
if !@action.has_key?(:failure) || Promise === (@delayed ? @delayed[0] : @error)
|
89
|
-
promise.reject(@delayed ? @delayed[0] : error)
|
90
|
-
elsif promise.action.include?(:always)
|
91
|
-
promise.reject(@delayed ? @delayed[0] : error)
|
92
|
-
end
|
93
|
-
end
|
94
|
-
|
95
|
-
self
|
96
|
-
end
|
97
|
-
|
98
|
-
def resolve(value = nil)
|
99
|
-
if realized?
|
100
|
-
raise ArgumentError, 'the promise has already been realized'
|
101
|
-
end
|
102
|
-
|
103
|
-
if Promise === value
|
104
|
-
return (value << @prev) ^ self
|
105
|
-
end
|
106
|
-
|
107
|
-
begin
|
108
|
-
if block = @action[:success] || @action[:always]
|
109
|
-
value = block.call(value)
|
110
|
-
end
|
111
|
-
|
112
|
-
resolve!(value)
|
113
|
-
rescue Exception => e
|
114
|
-
exception!(e)
|
115
|
-
end
|
116
|
-
|
117
|
-
self
|
118
|
-
end
|
119
|
-
|
120
|
-
def resolve!(value)
|
121
|
-
@realized = :resolve
|
122
|
-
@value = value
|
123
|
-
|
124
|
-
if @next.any?
|
125
|
-
@next.each { |p| p.resolve(value) }
|
126
|
-
else
|
127
|
-
@delayed = [value]
|
128
|
-
end
|
129
|
-
end
|
130
|
-
|
131
|
-
def reject(value = nil)
|
132
|
-
if realized?
|
133
|
-
raise ArgumentError, 'the promise has already been realized'
|
134
|
-
end
|
135
|
-
|
136
|
-
if Promise === value
|
137
|
-
return (value << @prev) ^ self
|
138
|
-
end
|
139
|
-
|
140
|
-
begin
|
141
|
-
if block = @action[:failure] || @action[:always]
|
142
|
-
value = block.call(value)
|
143
|
-
end
|
144
|
-
|
145
|
-
if @action.has_key?(:always)
|
146
|
-
resolve!(value)
|
147
|
-
else
|
148
|
-
reject!(value)
|
149
|
-
end
|
150
|
-
rescue Exception => e
|
151
|
-
exception!(e)
|
152
|
-
end
|
153
|
-
|
154
|
-
self
|
155
|
-
end
|
156
|
-
|
157
|
-
def reject!(value)
|
158
|
-
@realized = :reject
|
159
|
-
@error = value
|
160
|
-
|
161
|
-
if @next.any?
|
162
|
-
@next.each { |p| p.reject(value) }
|
163
|
-
else
|
164
|
-
@delayed = [value]
|
165
|
-
end
|
166
|
-
end
|
167
|
-
|
168
|
-
def exception!(error)
|
169
|
-
@exception = true
|
170
|
-
|
171
|
-
reject!(error)
|
172
|
-
end
|
173
|
-
|
174
|
-
def then(&block)
|
175
|
-
self ^ Promise.new(success: block)
|
176
|
-
end
|
177
|
-
|
178
|
-
def then!(&block)
|
179
|
-
there_can_be_only_one!
|
180
|
-
self.then(&block)
|
181
|
-
end
|
182
|
-
|
183
|
-
alias do then
|
184
|
-
alias do! then!
|
185
|
-
|
186
|
-
def fail(&block)
|
187
|
-
self ^ Promise.new(failure: block)
|
188
|
-
end
|
189
|
-
|
190
|
-
def fail!(&block)
|
191
|
-
there_can_be_only_one!
|
192
|
-
fail(&block)
|
193
|
-
end
|
194
|
-
|
195
|
-
alias rescue fail
|
196
|
-
alias catch fail
|
197
|
-
alias rescue! fail!
|
198
|
-
alias catch! fail!
|
199
|
-
|
200
|
-
def always(&block)
|
201
|
-
self ^ Promise.new(always: block)
|
202
|
-
end
|
203
|
-
|
204
|
-
def always!(&block)
|
205
|
-
there_can_be_only_one!
|
206
|
-
always(&block)
|
207
|
-
end
|
208
|
-
|
209
|
-
alias finally always
|
210
|
-
alias ensure always
|
211
|
-
alias finally! always!
|
212
|
-
alias ensure! always!
|
213
|
-
|
214
|
-
def trace(depth = nil, &block)
|
215
|
-
self ^ Trace.new(depth, block)
|
216
|
-
end
|
217
|
-
|
218
|
-
def trace!(*args, &block)
|
219
|
-
there_can_be_only_one!
|
220
|
-
trace(*args, &block)
|
221
|
-
end
|
222
|
-
|
223
|
-
def there_can_be_only_one!
|
224
|
-
if @next.any?
|
225
|
-
raise ArgumentError, 'a promise has already been chained'
|
226
|
-
end
|
227
|
-
end
|
228
|
-
|
229
|
-
def inspect
|
230
|
-
result = "#<#{self.class}(#{object_id})"
|
231
|
-
|
232
|
-
if @next.any?
|
233
|
-
result += " >> #{@next.inspect}"
|
234
|
-
end
|
235
|
-
|
236
|
-
if realized?
|
237
|
-
result += ": #{(@value || @error).inspect}>"
|
238
|
-
else
|
239
|
-
result += ">"
|
240
|
-
end
|
241
|
-
|
242
|
-
result
|
243
|
-
end
|
244
|
-
|
245
|
-
class Trace < self
|
246
|
-
def self.it(promise)
|
247
|
-
current = []
|
248
|
-
|
249
|
-
if promise.act? || promise.prev.nil?
|
250
|
-
current.push(promise.value)
|
251
|
-
end
|
252
|
-
|
253
|
-
if prev = promise.prev
|
254
|
-
current.concat(it(prev))
|
255
|
-
else
|
256
|
-
current
|
257
|
-
end
|
258
|
-
end
|
259
|
-
|
260
|
-
def initialize(depth, block)
|
261
|
-
@depth = depth
|
262
|
-
|
263
|
-
super success: proc {
|
264
|
-
trace = Trace.it(self).reverse
|
265
|
-
trace.pop
|
266
|
-
|
267
|
-
if depth && depth <= trace.length
|
268
|
-
trace.shift(trace.length - depth)
|
269
|
-
end
|
270
|
-
|
271
|
-
block.call(*trace)
|
272
|
-
}
|
273
|
-
end
|
274
|
-
end
|
275
|
-
|
276
|
-
class When < self
|
277
|
-
def initialize(promises = [])
|
278
|
-
super()
|
279
|
-
|
280
|
-
@wait = []
|
281
|
-
|
282
|
-
promises.each {|promise|
|
283
|
-
wait promise
|
284
|
-
}
|
285
|
-
end
|
286
|
-
|
287
|
-
def each(&block)
|
288
|
-
raise ArgumentError, 'no block given' unless block
|
289
|
-
|
290
|
-
self.then {|values|
|
291
|
-
values.each(&block)
|
292
|
-
}
|
293
|
-
end
|
294
|
-
|
295
|
-
def collect(&block)
|
296
|
-
raise ArgumentError, 'no block given' unless block
|
297
|
-
|
298
|
-
self.then {|values|
|
299
|
-
When.new(values.map(&block))
|
300
|
-
}
|
301
|
-
end
|
302
|
-
|
303
|
-
def inject(*args, &block)
|
304
|
-
self.then {|values|
|
305
|
-
values.reduce(*args, &block)
|
306
|
-
}
|
307
|
-
end
|
308
|
-
|
309
|
-
alias map collect
|
310
|
-
|
311
|
-
alias reduce inject
|
312
|
-
|
313
|
-
def wait(promise)
|
314
|
-
unless Promise === promise
|
315
|
-
promise = Promise.value(promise)
|
316
|
-
end
|
317
|
-
|
318
|
-
if promise.act?
|
319
|
-
promise = promise.then
|
320
|
-
end
|
321
|
-
|
322
|
-
@wait << promise
|
323
|
-
|
324
|
-
promise.always {
|
325
|
-
try if @next.any?
|
326
|
-
}
|
327
|
-
|
328
|
-
self
|
329
|
-
end
|
330
|
-
|
331
|
-
alias and wait
|
332
|
-
|
333
|
-
def >>(*)
|
334
|
-
super.tap {
|
335
|
-
try
|
336
|
-
}
|
337
|
-
end
|
338
|
-
|
339
|
-
def try
|
340
|
-
if @wait.all?(&:realized?)
|
341
|
-
if promise = @wait.find(&:rejected?)
|
342
|
-
reject(promise.error)
|
343
|
-
else
|
344
|
-
resolve(@wait.map(&:value))
|
345
|
-
end
|
346
|
-
end
|
347
|
-
end
|
348
|
-
end
|
349
|
-
end
|
1
|
+
opal_path = Gem::Specification.find_by_name('opal').full_gem_path
|
2
|
+
promise_path = File.join(opal_path, 'stdlib', 'promise.rb')
|
3
|
+
require promise_path
|
data/lib/redux/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: isomorfeus-redux
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 4.0.
|
4
|
+
version: 4.0.18
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jan Biedermann
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-
|
11
|
+
date: 2020-02-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: opal
|