decide.rb 0.5.4 → 0.5.5
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 +73 -2
- data/lib/decider/version.rb +1 -1
- data/lib/decider.rb +52 -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: a644014eccc9464b607d16d44c6181de06b712c1aab8e2d33d407de838723fe8
|
4
|
+
data.tar.gz: 1dbdd3c6a7b3b7efa189d857afa28da43d4f72ac1cc3ca72801bb86b854dfa73
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 751a52fb88eef2b129cd439765c6d9083759fd3eda0727b831202d4a903e86532fc41ba4633753f0a3318aa197d64a974d612c3d8abedc0fe102d1c28a101fd7
|
7
|
+
data.tar.gz: 2b658d6758c820c6d199c59a0275ea4cf49eee221570c4c8447f72b240207e9f717e1f3537da02f67512baf3976e448d7611ca49bbf5088032f88e79b2b89989
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,74 @@
|
|
1
|
+
# 0.5.5
|
2
|
+
|
3
|
+
* Add `lmap_on_command` extension that takes proc that maps command and returns a new decider
|
4
|
+
|
5
|
+
```ruby
|
6
|
+
decider = Decider.define do
|
7
|
+
initial_state 0
|
8
|
+
|
9
|
+
decide :increase do
|
10
|
+
emit :increased
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
lmap = decider.lmap_on_command(->(command) { command.to_sym })
|
15
|
+
lmap.decide("increase", 0)
|
16
|
+
# => [:increased]
|
17
|
+
```
|
18
|
+
|
19
|
+
* Add `map` extension that works the same way as `rmap_on_state` but `Decider.map` takes function first
|
20
|
+
|
21
|
+
```ruby
|
22
|
+
# equivalent
|
23
|
+
Decider.rmap_on_state(decider, fn)
|
24
|
+
Decider.map(fn, decider)
|
25
|
+
decider.rmap_on_state(fn)
|
26
|
+
decider.map(fn)
|
27
|
+
```
|
28
|
+
|
29
|
+
* Add `map2` extension that takes function with two arguments and two deciders and returns a decider:
|
30
|
+
|
31
|
+
```ruby
|
32
|
+
dx = Decider.define do
|
33
|
+
initial_state({score: 0})
|
34
|
+
|
35
|
+
decide :score do
|
36
|
+
emit :scored
|
37
|
+
end
|
38
|
+
|
39
|
+
evolve :scored do
|
40
|
+
{score: state[:score] + 1}
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
dy = Decider.define do
|
45
|
+
initial_state({time: 0})
|
46
|
+
|
47
|
+
decide :tick do
|
48
|
+
emit :ticked
|
49
|
+
end
|
50
|
+
|
51
|
+
evolve :ticked do
|
52
|
+
{time: state[:time] + 1}
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
decider = Decider.map2(
|
57
|
+
->(sx, sy) { {score: sx[:score], time: sy[:time]} }, dx, dy
|
58
|
+
)
|
59
|
+
|
60
|
+
decider.initial_state
|
61
|
+
# => {score: 0, time: 0}
|
62
|
+
decider.decide(:score, decider.initial_state)
|
63
|
+
# => [:scored]
|
64
|
+
decider.decide(:tick, decider.initial_state)
|
65
|
+
# => [:ticked]
|
66
|
+
decider.evolve(decider.initial_state, :scored)
|
67
|
+
# => {score: 1, time: 0}
|
68
|
+
decider.evolve(decider.initial_state, :ticked)
|
69
|
+
# => {score: 0, time: 1}
|
70
|
+
```
|
71
|
+
|
1
72
|
# 0.5.4
|
2
73
|
|
3
74
|
* Add `lmap_on_event` and `rmap_on_event` extensions that takes proc that maps event in or out and returns a new decider
|
@@ -7,7 +78,7 @@ decider = Decider.define do
|
|
7
78
|
initial_state 0
|
8
79
|
|
9
80
|
decide :increase do
|
10
|
-
:increased
|
81
|
+
emit :increased
|
11
82
|
end
|
12
83
|
|
13
84
|
evolve :increased do
|
@@ -84,7 +155,7 @@ inner = Decider.define do
|
|
84
155
|
initial_state 0
|
85
156
|
|
86
157
|
decide :increase do
|
87
|
-
:increased
|
158
|
+
emit :increased
|
88
159
|
end
|
89
160
|
|
90
161
|
evolve :increased do
|
data/lib/decider/version.rb
CHANGED
data/lib/decider.rb
CHANGED
@@ -108,10 +108,18 @@ module Decider
|
|
108
108
|
context.instance_exec(&terminal)
|
109
109
|
end
|
110
110
|
|
111
|
+
define_method(:lmap_on_command) do |fn|
|
112
|
+
Decider.lmap_on_command(self, fn)
|
113
|
+
end
|
114
|
+
|
111
115
|
define_method(:lmap_on_state) do |fn|
|
112
116
|
Decider.lmap_on_state(self, fn)
|
113
117
|
end
|
114
118
|
|
119
|
+
define_method(:map) do |fn|
|
120
|
+
Decider.map(fn, self)
|
121
|
+
end
|
122
|
+
|
115
123
|
define_method(:rmap_on_state) do |fn|
|
116
124
|
Decider.rmap_on_state(self, fn)
|
117
125
|
end
|
@@ -227,10 +235,32 @@ module Decider
|
|
227
235
|
end
|
228
236
|
end
|
229
237
|
|
238
|
+
def self.lmap_on_command(decider, fn)
|
239
|
+
define do
|
240
|
+
initial_state decider.initial_state
|
241
|
+
|
242
|
+
decide proc { true } do
|
243
|
+
decider.decide(fn.call(command), state).each(&method(:emit))
|
244
|
+
end
|
245
|
+
|
246
|
+
evolve proc { true } do
|
247
|
+
decider.evolve(state, event)
|
248
|
+
end
|
249
|
+
|
250
|
+
terminal? do
|
251
|
+
decider.terminal?(state)
|
252
|
+
end
|
253
|
+
end
|
254
|
+
end
|
255
|
+
|
230
256
|
def self.lmap_on_state(decider, fn)
|
231
257
|
dimap_on_state(decider, fl: fn, fr: ->(state) { state })
|
232
258
|
end
|
233
259
|
|
260
|
+
def self.map(fn, decider)
|
261
|
+
dimap_on_state(decider, fl: ->(state) { state }, fr: fn)
|
262
|
+
end
|
263
|
+
|
234
264
|
def self.rmap_on_state(decider, fn)
|
235
265
|
dimap_on_state(decider, fl: ->(state) { state }, fr: fn)
|
236
266
|
end
|
@@ -280,4 +310,26 @@ module Decider
|
|
280
310
|
end
|
281
311
|
end
|
282
312
|
end
|
313
|
+
|
314
|
+
def self.map2(fn, dx, dy)
|
315
|
+
define do
|
316
|
+
initial_state fn.call(dx.initial_state, dy.initial_state)
|
317
|
+
|
318
|
+
decide proc { true } do
|
319
|
+
dx.decide(command, state).each(&method(:emit))
|
320
|
+
dy.decide(command, state).each(&method(:emit))
|
321
|
+
end
|
322
|
+
|
323
|
+
evolve proc { true } do
|
324
|
+
fn.call(
|
325
|
+
dx.evolve(state, event),
|
326
|
+
dy.evolve(state, event)
|
327
|
+
)
|
328
|
+
end
|
329
|
+
|
330
|
+
terminal? do
|
331
|
+
dx.terminal?(state) && dy.terminal?(state)
|
332
|
+
end
|
333
|
+
end
|
334
|
+
end
|
283
335
|
end
|
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.5.
|
4
|
+
version: 0.5.5
|
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-22 00:00:00.000000000 Z
|
11
11
|
dependencies:
|
12
12
|
- !ruby/object:Gem::Dependency
|
13
13
|
name: concurrent-ruby
|