decide.rb 0.6.1 → 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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 38dfd00197b187505e43c496a3493942ad4b986d4cd7152cfc51affac1f6abf1
4
- data.tar.gz: f0aea859df148b5f4a3eb9518df261dda2cff1fbd71b96e61ad26623c863c083
3
+ metadata.gz: cdfca1b85746ead6ae446e0b9bfb697a4cfb08685581cabe78cf6462d88db9a4
4
+ data.tar.gz: ab375b8863a3e88c39e3f8ce3c6c7957758b2d557c7770f260ba4278843a6fea
5
5
  SHA512:
6
- metadata.gz: 3b90ffcfa1407bcd0cedba9f0fa2c4882fa4675a6f8b73045c025c02a77eb26f5fc0d311693426c78903c1b3dd75606369b857ab5b9683ae75e68ba80aae6a5d
7
- data.tar.gz: cbf4b81d9391c97b18a5532fe3f583867f6dc8127403d8c195307a8efc4a1e6ebbd94c298819831587f78711a329812d613014137630d2613174de44ccf0e365
6
+ metadata.gz: '08fa1bb4c0444cc2a843b853cf9d6050910574c161a409fda2a65f4e628c014abd55416c5e5ef4e4ddeae8b182673186ce61998bba2187cfcb37521ed81dcd60'
7
+ data.tar.gz: 968ddeb2cd7fac20a82f409c047083d375be4eec79a3c99c0596b8d1bc78ac14000431ddfdc5d66bd20d3ba23f6a6e173a88ec098245e8b461efcc9af818e713
data/CHANGELOG.md CHANGED
@@ -1,3 +1,22 @@
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
+
1
20
  # 0.6.1
2
21
 
3
22
  * Add `apply` extension for creating applicatives
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Decider
4
- VERSION = "0.6.1"
4
+ VERSION = "0.6.2"
5
5
  end
data/lib/decider.rb CHANGED
@@ -140,6 +140,10 @@ module Decider
140
140
  Decider.dimap_on_event(fl, fr, self)
141
141
  end
142
142
 
143
+ define_method(:many) do
144
+ Decider.many(self)
145
+ end
146
+
143
147
  define_method(:apply) do |f|
144
148
  Decider.apply(self, f)
145
149
  end
@@ -315,6 +319,35 @@ module Decider
315
319
  end
316
320
  end
317
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
+
318
351
  def self.apply(f, x)
319
352
  map2(->(f, x) { f.call(x) }, f, x)
320
353
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: decide.rb
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.1
4
+ version: 0.6.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jan Dudulski