decide.rb 0.6.0 → 0.6.2
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/CHANGELOG.md +31 -0
- data/lib/decider/version.rb +1 -1
- data/lib/decider.rb +41 -0
- 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: cdfca1b85746ead6ae446e0b9bfb697a4cfb08685581cabe78cf6462d88db9a4
|
4
|
+
data.tar.gz: ab375b8863a3e88c39e3f8ce3c6c7957758b2d557c7770f260ba4278843a6fea
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: '08fa1bb4c0444cc2a843b853cf9d6050910574c161a409fda2a65f4e628c014abd55416c5e5ef4e4ddeae8b182673186ce61998bba2187cfcb37521ed81dcd60'
|
7
|
+
data.tar.gz: 968ddeb2cd7fac20a82f409c047083d375be4eec79a3c99c0596b8d1bc78ac14000431ddfdc5d66bd20d3ba23f6a6e173a88ec098245e8b461efcc9af818e713
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,34 @@
|
|
1
|
+
# 0.6.2
|
2
|
+
|
3
|
+
* Add `many` extension that takes a decider and manage many instances
|
4
|
+
|
5
|
+
```ruby
|
6
|
+
deciders = Decider.many(decider)
|
7
|
+
# or
|
8
|
+
deciders = decider.many
|
9
|
+
|
10
|
+
deciders.initial_state
|
11
|
+
# => {}
|
12
|
+
|
13
|
+
deciders.decide([id, command], state)
|
14
|
+
# => [[id, event], [id, event]]
|
15
|
+
|
16
|
+
deciders.evolve(state, [id, event])
|
17
|
+
# => state
|
18
|
+
```
|
19
|
+
|
20
|
+
# 0.6.1
|
21
|
+
|
22
|
+
* Add `apply` extension for creating applicatives
|
23
|
+
|
24
|
+
```ruby
|
25
|
+
decider = Decider.map(fn.curry, deciderx)
|
26
|
+
decider = Decider.apply(decider, decidery)
|
27
|
+
decider = Decider.apply(decider, deciderz)
|
28
|
+
# or
|
29
|
+
deciderx.map(fn.curry).apply(decidery).apply(deciderz)
|
30
|
+
```
|
31
|
+
|
1
32
|
# 0.6.0
|
2
33
|
|
3
34
|
* All extensions takes decider as last argument
|
data/lib/decider/version.rb
CHANGED
data/lib/decider.rb
CHANGED
@@ -139,6 +139,14 @@ module Decider
|
|
139
139
|
define_method(:dimap_on_event) do |fl:, fr:|
|
140
140
|
Decider.dimap_on_event(fl, fr, self)
|
141
141
|
end
|
142
|
+
|
143
|
+
define_method(:many) do
|
144
|
+
Decider.many(self)
|
145
|
+
end
|
146
|
+
|
147
|
+
define_method(:apply) do |f|
|
148
|
+
Decider.apply(self, f)
|
149
|
+
end
|
142
150
|
end
|
143
151
|
end
|
144
152
|
|
@@ -311,6 +319,39 @@ module Decider
|
|
311
319
|
end
|
312
320
|
end
|
313
321
|
|
322
|
+
def self.many(decider)
|
323
|
+
define do
|
324
|
+
initial_state({})
|
325
|
+
|
326
|
+
decide proc { [command, state] in [[_id, _], Hash] } do
|
327
|
+
command => [id, command]
|
328
|
+
|
329
|
+
ds = state.fetch(id) { decider.initial_state }
|
330
|
+
|
331
|
+
decider.decide(command, ds).each do |event|
|
332
|
+
emit [id, event]
|
333
|
+
end
|
334
|
+
end
|
335
|
+
|
336
|
+
evolve proc { [state, event] in [Hash, [_id, _]] } do
|
337
|
+
event => [id, event]
|
338
|
+
|
339
|
+
ds = state.fetch(id) { decider.initial_state }
|
340
|
+
ds = decider.evolve(ds, event)
|
341
|
+
|
342
|
+
state.merge(id => ds)
|
343
|
+
end
|
344
|
+
|
345
|
+
terminal? do
|
346
|
+
state.any? && state.all? { |_, ds| decider.terminal?(ds) }
|
347
|
+
end
|
348
|
+
end
|
349
|
+
end
|
350
|
+
|
351
|
+
def self.apply(f, x)
|
352
|
+
map2(->(f, x) { f.call(x) }, f, x)
|
353
|
+
end
|
354
|
+
|
314
355
|
def self.map2(fn, dx, dy)
|
315
356
|
define do
|
316
357
|
initial_state fn.call(dx.initial_state, dy.initial_state)
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: decide.rb
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.6.
|
4
|
+
version: 0.6.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jan Dudulski
|
8
8
|
bindir: exe
|
9
9
|
cert_chain: []
|
10
|
-
date: 2025-06-
|
10
|
+
date: 2025-06-23 00:00:00.000000000 Z
|
11
11
|
dependencies:
|
12
12
|
- !ruby/object:Gem::Dependency
|
13
13
|
name: concurrent-ruby
|