decider 0.10.0 → 2.0.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.

Potentially problematic release.


This version of decider might be problematic. Click here for more details.

metadata CHANGED
@@ -1,107 +1,67 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: decider
3
- version: !ruby/object:Gem::Version
4
- version: 0.10.0
3
+ version: !ruby/object:Gem::Version
4
+ version: 2.0.0
5
5
  platform: ruby
6
- authors:
7
- - Jan Dudulski
8
- bindir: exe
6
+ authors:
7
+ - Mike Skalnik
8
+ autorequire:
9
+ bindir: bin
9
10
  cert_chain: []
10
- date: 1980-01-02 00:00:00.000000000 Z
11
- dependencies:
12
- - !ruby/object:Gem::Dependency
13
- name: concurrent-ruby
14
- requirement: !ruby/object:Gem::Requirement
15
- requirements:
16
- - - "~>"
17
- - !ruby/object:Gem::Version
18
- version: '1.3'
19
- type: :runtime
20
- prerelease: false
21
- version_requirements: !ruby/object:Gem::Requirement
22
- requirements:
23
- - - "~>"
24
- - !ruby/object:Gem::Version
25
- version: '1.3'
26
- - !ruby/object:Gem::Dependency
27
- name: sqlite3
28
- requirement: !ruby/object:Gem::Requirement
29
- requirements:
30
- - - "~>"
31
- - !ruby/object:Gem::Version
32
- version: 2.5.0
33
- type: :development
34
- prerelease: false
35
- version_requirements: !ruby/object:Gem::Requirement
36
- requirements:
37
- - - "~>"
38
- - !ruby/object:Gem::Version
39
- version: 2.5.0
40
- - !ruby/object:Gem::Dependency
41
- name: ruby_event_store
42
- requirement: !ruby/object:Gem::Requirement
43
- requirements:
44
- - - "~>"
45
- - !ruby/object:Gem::Version
46
- version: '2.15'
47
- type: :development
48
- prerelease: false
49
- version_requirements: !ruby/object:Gem::Requirement
50
- requirements:
51
- - - "~>"
52
- - !ruby/object:Gem::Version
53
- version: '2.15'
54
- description: Functional Event Sourcing Decider in Ruby
55
- email:
56
- - jan@dudulski.pl
57
- executables: []
11
+
12
+ date: 2009-08-06 00:00:00 -05:00
13
+ default_executable:
14
+ dependencies: []
15
+
16
+ description:
17
+ email: mike.skalnik@gmail.com
18
+ executables:
19
+ - 8ball
20
+ - decider
58
21
  extensions: []
59
- extra_rdoc_files: []
60
- files:
61
- - ".standard.yml"
62
- - CHANGELOG.md
63
- - LICENSE.txt
64
- - README.md
22
+
23
+ extra_rdoc_files:
24
+ - LICENSE
25
+ - README.rdoc
26
+ files:
27
+ - .document
28
+ - .gitignore
29
+ - LICENSE
30
+ - README.rdoc
65
31
  - Rakefile
66
- - Steepfile
67
- - examples/decide.md
68
- - examples/evolve.md
69
- - examples/infra.md
70
- - examples/state.md
32
+ - VERSION
33
+ - bin/decider
71
34
  - lib/decider.rb
72
- - lib/decider/event_sourcing.rb
73
- - lib/decider/in_memory.rb
74
- - lib/decider/reactor.rb
75
- - lib/decider/state.rb
76
- - lib/decider/version.rb
77
- - lib/decider/view.rb
78
- - mise.toml
79
- - sig/decider.rbs
80
- homepage: https://github.com/jandudulski/decider
81
- licenses:
82
- - MIT
83
- metadata:
84
- allowed_push_host: https://rubygems.org
85
- bug_tracker_uri: https://github.com/jandudulski/decider/issues
86
- changelog_uri: https://github.com/jandudulski/decider/CHANGELOG.md
87
- documentation_uri: https://github.com/jandudulski/decider
88
- homepage_uri: https://github.com/jandudulski/decider
89
- source_code_uri: https://github.com/jandudulski/decider
90
- rdoc_options: []
91
- require_paths:
35
+ - test/decider_test.rb
36
+ - test/test_helper.rb
37
+ has_rdoc: true
38
+ homepage: http://github.com/skalnik/decider
39
+ licenses: []
40
+
41
+ post_install_message:
42
+ rdoc_options:
43
+ - --charset=UTF-8
44
+ require_paths:
92
45
  - lib
93
- required_ruby_version: !ruby/object:Gem::Requirement
94
- requirements:
46
+ required_ruby_version: !ruby/object:Gem::Requirement
47
+ requirements:
95
48
  - - ">="
96
- - !ruby/object:Gem::Version
97
- version: 3.0.0
98
- required_rubygems_version: !ruby/object:Gem::Requirement
99
- requirements:
49
+ - !ruby/object:Gem::Version
50
+ version: "0"
51
+ version:
52
+ required_rubygems_version: !ruby/object:Gem::Requirement
53
+ requirements:
100
54
  - - ">="
101
- - !ruby/object:Gem::Version
102
- version: '0'
55
+ - !ruby/object:Gem::Version
56
+ version: "0"
57
+ version:
103
58
  requirements: []
104
- rubygems_version: 4.0.6
105
- specification_version: 4
106
- summary: Functional Event Sourcing Decider in Ruby
107
- test_files: []
59
+
60
+ rubyforge_project:
61
+ rubygems_version: 1.3.5
62
+ signing_key:
63
+ specification_version: 3
64
+ summary: A small gem that helps you decide between a few choices
65
+ test_files:
66
+ - test/decider_test.rb
67
+ - test/test_helper.rb
checksums.yaml DELETED
@@ -1,7 +0,0 @@
1
- ---
2
- SHA256:
3
- metadata.gz: 21f3d750ca980c0f3f4af0c798b0ab0be623959f61a66dc16c596d8be8076880
4
- data.tar.gz: 1fe993a700c878a7244b629585113feac135cdfce65ec3fd68edae3a8f48f9c9
5
- SHA512:
6
- metadata.gz: 8d473ceb5129e7d62dd943ad2ff9b0538b5dff49222ac2f5a9dc92305b79efd7f5935365e5781a066e258b4a327ad111ae692985848e3bb939391a655fc544bc
7
- data.tar.gz: 635d00dd5ed86650c7ecccb07c148ee2b6bd3aec6808e9bed5abb4a23f408e49badab98ba31cb3ceafe3fa400b5e2b1590b414f3c3c58748a8497f0f62ddeb97
data/.standard.yml DELETED
@@ -1,3 +0,0 @@
1
- # For available configuration options, see:
2
- # https://github.com/standardrb/standard
3
- ruby_version: 3.0
data/CHANGELOG.md DELETED
@@ -1,381 +0,0 @@
1
- # 0.10.0
2
-
3
- * Lazy load initial state when block provided
4
-
5
- # 0.9.0
6
-
7
- * Rename gem to `decider`
8
- * Support `many` in `View`
9
-
10
- Big Thanks to [skalnik](https://github.com/skalnik/) for transfering the name ❤️
11
-
12
- # 0.8.1
13
-
14
- * Fix support for Ruby > 3.4.5
15
-
16
- # 0.8.0
17
-
18
- * Add view that can evolve from initial state
19
-
20
- ```ruby
21
- view = Decider::View.define do
22
- initial_state 0
23
-
24
- evolve :increased do
25
- state + 1
26
- end
27
-
28
- evolve :decreased do
29
- state - 1
30
- end
31
- end
32
- ```
33
-
34
- * Add `lmap_on_event`, `dimap_on_state`, `lmap_on_state` and `rmap_on_state` extensions for view
35
-
36
- # 0.7.0
37
-
38
- * Add reactor that can react to action results and issue actions
39
-
40
- ```ruby
41
- ActionResult = Data.define(:value)
42
- Action = Data.define(:value)
43
-
44
- reactor = Decider::Reactor.define do
45
- react :action_result do
46
- issue :action
47
- issue :another_action
48
- end
49
-
50
- react proc { action_result in ActionResult(value: 42) } do
51
- issue Action.new(value: "the answer")
52
- end
53
-
54
- react ActionResult do
55
- issue Action.new(value: action_result.value)
56
- end
57
- end
58
-
59
- reactor.react(:action_result)
60
- # => [:action, :another_action]
61
- reactor.react(ActionResult.new(value: 42)
62
- # => #<data Action value="the answer">
63
- reactor.react(ActionResult.new(value: 1)
64
- # => #<data Action value=1>
65
- ```
66
-
67
- * Add `lmap_on_action_result` extension to reactor
68
- * Add `rmap_on_action` (aliased to `map_on_action`) extensions to reactor
69
- * Add `combine_with_decider` extension to reactor
70
-
71
- ```ruby
72
- decider = Decider.define do
73
- initial_state 0
74
-
75
- decide :action do
76
- emit :result
77
- end
78
-
79
- decide :another_action do
80
- emit :another_result
81
- end
82
- end
83
-
84
- reactor = Decider::Reactor.define do
85
- react :result do
86
- issue :another_action
87
- end
88
- end
89
-
90
- decider = reactor.combine_with_decider(decider)
91
- decider.decide(:action)
92
- # => [:result, :another_result]
93
- ```
94
-
95
- # 0.6.2
96
-
97
- * Add `many` extension that takes a decider and manage many instances
98
-
99
- ```ruby
100
- deciders = Decider.many(decider)
101
- # or
102
- deciders = decider.many
103
-
104
- deciders.initial_state
105
- # => {}
106
-
107
- deciders.decide([id, command], state)
108
- # => [[id, event], [id, event]]
109
-
110
- deciders.evolve(state, [id, event])
111
- # => state
112
- ```
113
-
114
- # 0.6.1
115
-
116
- * Add `apply` extension for creating applicatives
117
-
118
- ```ruby
119
- decider = Decider.map(fn.curry, deciderx)
120
- decider = Decider.apply(decider, decidery)
121
- decider = Decider.apply(decider, deciderz)
122
- # or
123
- deciderx.map(fn.curry).apply(decidery).apply(deciderz)
124
- ```
125
-
126
- # 0.6.0
127
-
128
- * All extensions takes decider as last argument
129
-
130
- ```ruby
131
- # Before
132
- Decider.dimap_on_state(decider, fl:, fr:)
133
- Decider.dimap_on_event(decider, fl:, fr:)
134
- Decider.lmap_on_event(decider, fn)
135
- Decider.lmap_on_command(decider, fn)
136
- Decider.lmap_on_state(decider, fn)
137
- Decider.rmap_on_event(decider, fn)
138
- Decider.rmap_on_state(decider, fn)
139
-
140
- # After
141
- Decider.dimap_on_state(fl, fr, decider)
142
- Decider.dimap_on_event(fl, fr, decider)
143
- Decider.lmap_on_event(fn, decider)
144
- Decider.lmap_on_command(fn, decider)
145
- Decider.lmap_on_state(fn, decider)
146
- Decider.rmap_on_event(fn, decider)
147
- Decider.rmap_on_state(fn, decider)
148
- ```
149
-
150
- # 0.5.5
151
-
152
- * Add `lmap_on_command` extension that takes proc that maps command and returns a new decider
153
-
154
- ```ruby
155
- decider = Decider.define do
156
- initial_state 0
157
-
158
- decide :increase do
159
- emit :increased
160
- end
161
- end
162
-
163
- lmap = decider.lmap_on_command(->(command) { command.to_sym })
164
- lmap.decide("increase", 0)
165
- # => [:increased]
166
- ```
167
-
168
- * Add `map` extension that works the same way as `rmap_on_state` but `Decider.map` takes function first
169
-
170
- ```ruby
171
- # equivalent
172
- Decider.rmap_on_state(decider, fn)
173
- Decider.map(fn, decider)
174
- decider.rmap_on_state(fn)
175
- decider.map(fn)
176
- ```
177
-
178
- * Add `map2` extension that takes function with two arguments and two deciders and returns a decider:
179
-
180
- ```ruby
181
- dx = Decider.define do
182
- initial_state({score: 0})
183
-
184
- decide :score do
185
- emit :scored
186
- end
187
-
188
- evolve :scored do
189
- {score: state[:score] + 1}
190
- end
191
- end
192
-
193
- dy = Decider.define do
194
- initial_state({time: 0})
195
-
196
- decide :tick do
197
- emit :ticked
198
- end
199
-
200
- evolve :ticked do
201
- {time: state[:time] + 1}
202
- end
203
- end
204
-
205
- decider = Decider.map2(
206
- ->(sx, sy) { {score: sx[:score], time: sy[:time]} }, dx, dy
207
- )
208
-
209
- decider.initial_state
210
- # => {score: 0, time: 0}
211
- decider.decide(:score, decider.initial_state)
212
- # => [:scored]
213
- decider.decide(:tick, decider.initial_state)
214
- # => [:ticked]
215
- decider.evolve(decider.initial_state, :scored)
216
- # => {score: 1, time: 0}
217
- decider.evolve(decider.initial_state, :ticked)
218
- # => {score: 0, time: 1}
219
- ```
220
-
221
- # 0.5.4
222
-
223
- * Add `lmap_on_event` and `rmap_on_event` extensions that takes proc that maps event in or out and returns a new decider
224
-
225
- ```ruby
226
- decider = Decider.define do
227
- initial_state 0
228
-
229
- decide :increase do
230
- emit :increased
231
- end
232
-
233
- evolve :increased do
234
- state + 1
235
- end
236
- end
237
-
238
- lmap = decider.lmap_on_event(->(event) { event.to_sym })
239
- lmap.evolve(0, "increased")
240
- # => 1
241
-
242
- rmap = decider.rmap_on_event(->(event) { event.to_s })
243
- rmap.decide(:increase, 0)
244
- # => "increased"
245
- ```
246
-
247
- * Add `lmap_on_state` and `rmap_on_state` extensions that takes proc that maps state in or out and returns a new decider
248
-
249
- ```ruby
250
- decider = Decider.define do
251
- initial_state :symbol
252
-
253
- decide :command, :state do
254
- emit :called
255
- end
256
-
257
- evolve :state, :called do
258
- :new_state
259
- end
260
- end
261
- decider.initial_state
262
- # => :symbol
263
-
264
- lmap = decider.lmap_on_state(
265
- ->(state) { state.to_sym }
266
- )
267
- lmap.initial_state
268
- # => :symbol
269
- lmap.decide(:command, "symbol")
270
- # => [:called]
271
- lmap.evolve("symbol", :called)
272
- # => :new_state
273
-
274
- rmap = inner.rmap_on_state(
275
- ->(state) { state.to_s }
276
- )
277
- rmap.initial_state
278
- # => "symbol"
279
- rmap.decide(:command, :symbol)
280
- # => [:called]
281
- rmap.evolve(:symbol, :called)
282
- # => "new_state"
283
- ```
284
-
285
- # 0.5.3
286
-
287
- * Add shortcut for evolving:
288
-
289
- ```ruby
290
- # this three are the same now
291
- [event, event].reduce(state) { |s, e| decider.evolve(s, e) }
292
- [event, event].reduce(state, &decider.method(:evolve))
293
-
294
- # new
295
- [event, event].reduce(state, &decider.evolve)
296
- ```
297
-
298
- # 0.5.2
299
-
300
- * Add `dimap_on_event` extension that takes procs that maps event in and out and returns a new decider
301
-
302
- ```ruby
303
- inner = Decider.define do
304
- initial_state 0
305
-
306
- decide :increase do
307
- emit :increased
308
- end
309
-
310
- evolve :increased do
311
- state + 1
312
- end
313
- end
314
-
315
- outer = inner.dimap_on_event(
316
- fl: ->(event) { event.to_sym },
317
- fr: ->(event) { event.to_s }
318
- )
319
-
320
- outer.decide(:increase, 0)
321
- # => "increased"
322
-
323
- outer.evolve(0, "increased")
324
- # => 1
325
- ```
326
-
327
- # 0.5.1
328
-
329
- * Add `dimap_on_state` extension that takes procs that maps state in and out and returns a new decider
330
-
331
- ```ruby
332
- inner = Decider.define do
333
- initial_state :symbol
334
- end
335
- inner.initial_state
336
- # => :symbol
337
-
338
- outer = inner.dimap_on_state(
339
- fl: ->(state) { state.to_sym },
340
- fr: ->(state) { state.to_s }
341
- )
342
- outer.initial_state
343
- # => "symbol"
344
-
345
- # under the hood it will run inner.decide(:command, :symbol)
346
- outer.decide(:command, "symbol")
347
- ```
348
-
349
- # 0.5.0
350
-
351
- * Support pattern matching for commands and events
352
- * Support passing state to decider and evolve matchers
353
- * Remove explicit arguments for handlers
354
- * Remove redundant bang methods - raise error in catch-all if needed
355
- * Add Left|Right value wrappers for composition
356
- * Use `emit` to return events in `decide`
357
-
358
- # 0.4.1
359
-
360
- * `define` returns new class, not object
361
-
362
- # 0.4.0
363
-
364
- * Accept more data structures for commands and events
365
-
366
- # 0.3.0
367
-
368
- * Rename `Decider.state` to `Decider.initial_state`
369
- * Allow to use anything as state
370
- * Use tuple-like array for composition
371
- * Do not raise error when deciding unknown command
372
- * Do not raise error when evolving unknown event
373
-
374
- # 0.2.0
375
-
376
- * Added `terminal?` function
377
- * `Decider.compose(left, right)`
378
-
379
- # 0.1.0
380
-
381
- * Initial release
data/LICENSE.txt DELETED
@@ -1,21 +0,0 @@
1
- The MIT License (MIT)
2
-
3
- Copyright (c) 2024 Jan Dudulski
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining a copy
6
- of this software and associated documentation files (the "Software"), to deal
7
- in the Software without restriction, including without limitation the rights
8
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- copies of the Software, and to permit persons to whom the Software is
10
- furnished to do so, subject to the following conditions:
11
-
12
- The above copyright notice and this permission notice shall be included in
13
- all copies or substantial portions of the Software.
14
-
15
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
- THE SOFTWARE.