decide.rb 0.5.4 → 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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +97 -2
- data/lib/decider/version.rb +1 -1
- data/lib/decider.rb +68 -16
- 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: cbe851f7fea959e98b1b98f0151962c495cfb36195307b4fb44a6116fe15f4a5
|
4
|
+
data.tar.gz: 5770da3f08fe829c42489195c9f0a16e4b3f8cef174c7793d4b057a6d8f3fe20
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 20757b12712eda8e22c8a63705ebf06aaa5aadd3489df5119af3ac63ca58858e00fb8e128088e33dc7832dc8f66cb8debf1283fdce32e1aebfad06ea9ff91fae
|
7
|
+
data.tar.gz: 7553cf027e1e79477ba67344bd65bb35d49db76863d52f680aeb59f4ae638ce8c948fb4f81b99e4e44aa7d8a00f8613323cbd10f3b980ce55e6a29c1e8fa5235
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,98 @@
|
|
1
|
+
# 0.6.0
|
2
|
+
|
3
|
+
* All extensions takes decider as last argument
|
4
|
+
|
5
|
+
```ruby
|
6
|
+
# Before
|
7
|
+
Decider.dimap_on_state(decider, fl:, fr:)
|
8
|
+
Decider.dimap_on_event(decider, fl:, fr:)
|
9
|
+
Decider.lmap_on_event(decider, fn)
|
10
|
+
Decider.lmap_on_command(decider, fn)
|
11
|
+
Decider.lmap_on_state(decider, fn)
|
12
|
+
Decider.rmap_on_event(decider, fn)
|
13
|
+
Decider.rmap_on_state(decider, fn)
|
14
|
+
|
15
|
+
# After
|
16
|
+
Decider.dimap_on_state(fl, fr, decider)
|
17
|
+
Decider.dimap_on_event(fl, fr, decider)
|
18
|
+
Decider.lmap_on_event(fn, decider)
|
19
|
+
Decider.lmap_on_command(fn, decider)
|
20
|
+
Decider.lmap_on_state(fn, decider)
|
21
|
+
Decider.rmap_on_event(fn, decider)
|
22
|
+
Decider.rmap_on_state(fn, decider)
|
23
|
+
```
|
24
|
+
|
25
|
+
# 0.5.5
|
26
|
+
|
27
|
+
* Add `lmap_on_command` extension that takes proc that maps command and returns a new decider
|
28
|
+
|
29
|
+
```ruby
|
30
|
+
decider = Decider.define do
|
31
|
+
initial_state 0
|
32
|
+
|
33
|
+
decide :increase do
|
34
|
+
emit :increased
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
lmap = decider.lmap_on_command(->(command) { command.to_sym })
|
39
|
+
lmap.decide("increase", 0)
|
40
|
+
# => [:increased]
|
41
|
+
```
|
42
|
+
|
43
|
+
* Add `map` extension that works the same way as `rmap_on_state` but `Decider.map` takes function first
|
44
|
+
|
45
|
+
```ruby
|
46
|
+
# equivalent
|
47
|
+
Decider.rmap_on_state(decider, fn)
|
48
|
+
Decider.map(fn, decider)
|
49
|
+
decider.rmap_on_state(fn)
|
50
|
+
decider.map(fn)
|
51
|
+
```
|
52
|
+
|
53
|
+
* Add `map2` extension that takes function with two arguments and two deciders and returns a decider:
|
54
|
+
|
55
|
+
```ruby
|
56
|
+
dx = Decider.define do
|
57
|
+
initial_state({score: 0})
|
58
|
+
|
59
|
+
decide :score do
|
60
|
+
emit :scored
|
61
|
+
end
|
62
|
+
|
63
|
+
evolve :scored do
|
64
|
+
{score: state[:score] + 1}
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
dy = Decider.define do
|
69
|
+
initial_state({time: 0})
|
70
|
+
|
71
|
+
decide :tick do
|
72
|
+
emit :ticked
|
73
|
+
end
|
74
|
+
|
75
|
+
evolve :ticked do
|
76
|
+
{time: state[:time] + 1}
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
decider = Decider.map2(
|
81
|
+
->(sx, sy) { {score: sx[:score], time: sy[:time]} }, dx, dy
|
82
|
+
)
|
83
|
+
|
84
|
+
decider.initial_state
|
85
|
+
# => {score: 0, time: 0}
|
86
|
+
decider.decide(:score, decider.initial_state)
|
87
|
+
# => [:scored]
|
88
|
+
decider.decide(:tick, decider.initial_state)
|
89
|
+
# => [:ticked]
|
90
|
+
decider.evolve(decider.initial_state, :scored)
|
91
|
+
# => {score: 1, time: 0}
|
92
|
+
decider.evolve(decider.initial_state, :ticked)
|
93
|
+
# => {score: 0, time: 1}
|
94
|
+
```
|
95
|
+
|
1
96
|
# 0.5.4
|
2
97
|
|
3
98
|
* 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 +102,7 @@ decider = Decider.define do
|
|
7
102
|
initial_state 0
|
8
103
|
|
9
104
|
decide :increase do
|
10
|
-
:increased
|
105
|
+
emit :increased
|
11
106
|
end
|
12
107
|
|
13
108
|
evolve :increased do
|
@@ -84,7 +179,7 @@ inner = Decider.define do
|
|
84
179
|
initial_state 0
|
85
180
|
|
86
181
|
decide :increase do
|
87
|
-
:increased
|
182
|
+
emit :increased
|
88
183
|
end
|
89
184
|
|
90
185
|
evolve :increased do
|
data/lib/decider/version.rb
CHANGED
data/lib/decider.rb
CHANGED
@@ -108,28 +108,36 @@ 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(fn, self)
|
113
|
+
end
|
114
|
+
|
111
115
|
define_method(:lmap_on_state) do |fn|
|
112
|
-
Decider.lmap_on_state(
|
116
|
+
Decider.lmap_on_state(fn, self)
|
117
|
+
end
|
118
|
+
|
119
|
+
define_method(:map) do |fn|
|
120
|
+
Decider.map(fn, self)
|
113
121
|
end
|
114
122
|
|
115
123
|
define_method(:rmap_on_state) do |fn|
|
116
|
-
Decider.rmap_on_state(
|
124
|
+
Decider.rmap_on_state(fn, self)
|
117
125
|
end
|
118
126
|
|
119
127
|
define_method(:dimap_on_state) do |fl:, fr:|
|
120
|
-
Decider.dimap_on_state(
|
128
|
+
Decider.dimap_on_state(fl, fr, self)
|
121
129
|
end
|
122
130
|
|
123
131
|
define_method(:lmap_on_event) do |fn|
|
124
|
-
Decider.lmap_on_event(
|
132
|
+
Decider.lmap_on_event(fn, self)
|
125
133
|
end
|
126
134
|
|
127
135
|
define_method(:rmap_on_event) do |fn|
|
128
|
-
Decider.rmap_on_event(
|
136
|
+
Decider.rmap_on_event(fn, self)
|
129
137
|
end
|
130
138
|
|
131
139
|
define_method(:dimap_on_event) do |fl:, fr:|
|
132
|
-
Decider.dimap_on_event(
|
140
|
+
Decider.dimap_on_event(fl, fr, self)
|
133
141
|
end
|
134
142
|
end
|
135
143
|
end
|
@@ -227,15 +235,37 @@ module Decider
|
|
227
235
|
end
|
228
236
|
end
|
229
237
|
|
230
|
-
def self.
|
231
|
-
|
238
|
+
def self.lmap_on_command(fn, decider)
|
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
|
232
254
|
end
|
233
255
|
|
234
|
-
def self.
|
235
|
-
dimap_on_state(
|
256
|
+
def self.lmap_on_state(fn, decider)
|
257
|
+
dimap_on_state(fn, ->(state) { state }, decider)
|
236
258
|
end
|
237
259
|
|
238
|
-
def self.
|
260
|
+
def self.map(fn, decider)
|
261
|
+
dimap_on_state(->(state) { state }, fn, decider)
|
262
|
+
end
|
263
|
+
|
264
|
+
def self.rmap_on_state(fn, decider)
|
265
|
+
dimap_on_state(->(state) { state }, fn, decider)
|
266
|
+
end
|
267
|
+
|
268
|
+
def self.dimap_on_state(fl, fr, decider)
|
239
269
|
define do
|
240
270
|
initial_state fr.call(decider.initial_state)
|
241
271
|
|
@@ -253,15 +283,15 @@ module Decider
|
|
253
283
|
end
|
254
284
|
end
|
255
285
|
|
256
|
-
def self.lmap_on_event(
|
257
|
-
dimap_on_event(
|
286
|
+
def self.lmap_on_event(fn, decider)
|
287
|
+
dimap_on_event(fn, ->(event) { event }, decider)
|
258
288
|
end
|
259
289
|
|
260
|
-
def self.rmap_on_event(
|
261
|
-
dimap_on_event(
|
290
|
+
def self.rmap_on_event(fn, decider)
|
291
|
+
dimap_on_event(->(event) { event }, fn, decider)
|
262
292
|
end
|
263
293
|
|
264
|
-
def self.dimap_on_event(
|
294
|
+
def self.dimap_on_event(fl, fr, decider)
|
265
295
|
define do
|
266
296
|
initial_state decider.initial_state
|
267
297
|
|
@@ -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.
|
4
|
+
version: 0.6.0
|
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
|