decide.rb 0.7.0 → 0.7.1

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: 560335da25429790af3eb660d743eb7233c3dad032f9582462de1142c9cf3d91
4
- data.tar.gz: c42275236a358e3eac7189cf6e7f57cdc3106aa9e00f203b96d139f24360ee91
3
+ metadata.gz: 8ac9878aee3455667ca2fa5e7b4226af3588387e8f42a5a67e102b96c9b2e74d
4
+ data.tar.gz: 3f168429cc20342dca21ab57ad82ab498e3ee2d83623713c3f730966d05e7032
5
5
  SHA512:
6
- metadata.gz: 0da501705ecb75d91b1696f468c9360bc950e7cc0f5ac1ce52a3427beccb2bba8eca1688bee73e874c46c40f17d579ddde4b132a2e6fe04e3737b7091f99619d
7
- data.tar.gz: ea55c13433fb463d9746da6fe08016353bc0d38c3aae988f0b7249cfac86ed5325b0bcbb02c3833e5997f43db61f7b293a822988a851273dc39b087d7e4b2e14
6
+ metadata.gz: b8b3240f864d16a1c31eb2575ec700a0bd5674feee8818fe2e6342e2c0807cc8f0c6ac9fc780699d6ccc0c896ce615f829b7d121c7d059c2f3dad1aef192e321
7
+ data.tar.gz: 3098b0a090dbe5b71eb90cefa2e57127632d40b333aa678c0a0ee6a09bc26e351b3005554bf259ad2011cc4745aef32a158f57cd8d93980efe2c0df33edf3c53
@@ -1,141 +1,143 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- module Decider::Reactor
4
- class Module < ::Module
5
- REACT_FALLBACK = proc { [nil, proc {}] }
6
-
7
- React = Data.define(:action_result, :_actions) do
8
- def issue(*actions)
9
- _actions.push(*actions)
3
+ module Decider
4
+ module Reactor
5
+ class Module < ::Module
6
+ REACT_FALLBACK = proc { [nil, proc {}] }
7
+
8
+ React = Data.define(:action_result, :_actions) do
9
+ def issue(*actions)
10
+ _actions.push(*actions)
11
+ end
10
12
  end
11
- end
12
-
13
- def initialize(reactions:)
14
- define_method(:react) do |action_result|
15
- context = React.new(action_result: action_result, _actions: [])
16
-
17
- reactions.find(REACT_FALLBACK) do |arg, _|
18
- case arg
19
- in Proc => fn
20
- context.instance_exec(&fn)
21
- in artype
22
- action_result in ^artype
23
- else
24
- false
25
- end
26
- end => [_, handler]
27
13
 
28
- context.instance_exec(&handler)
29
- context._actions
30
- end
14
+ def initialize(reactions:)
15
+ define_method(:react) do |action_result|
16
+ context = React.new(action_result: action_result, _actions: [])
17
+
18
+ reactions.find(REACT_FALLBACK) do |arg, _|
19
+ case arg
20
+ in Proc => fn
21
+ context.instance_exec(&fn)
22
+ in artype
23
+ action_result in ^artype
24
+ else
25
+ false
26
+ end
27
+ end => [_, handler]
28
+
29
+ context.instance_exec(&handler)
30
+ context._actions
31
+ end
31
32
 
32
- define_method(:lmap_on_action_result) do |fn|
33
- Decider::Reactor.lmap_on_action_result(fn, self)
34
- end
33
+ define_method(:lmap_on_action_result) do |fn|
34
+ Decider::Reactor.lmap_on_action_result(fn, self)
35
+ end
35
36
 
36
- define_method(:rmap_on_action) do |fn|
37
- Decider::Reactor.rmap_on_action(fn, self)
38
- end
37
+ define_method(:rmap_on_action) do |fn|
38
+ Decider::Reactor.rmap_on_action(fn, self)
39
+ end
39
40
 
40
- define_method(:map_on_action) do |fn|
41
- Decider::Reactor.rmap_on_action(fn, self)
42
- end
41
+ define_method(:map_on_action) do |fn|
42
+ Decider::Reactor.rmap_on_action(fn, self)
43
+ end
43
44
 
44
- define_method(:combine_with_decider) do |decider|
45
- Decider::Reactor.combine_with_decider(self, decider)
45
+ define_method(:combine_with_decider) do |decider|
46
+ Decider::Reactor.combine_with_decider(self, decider)
47
+ end
46
48
  end
47
49
  end
48
- end
49
50
 
50
- class Builder
51
- DEFAULT = Object.new
51
+ class Builder
52
+ DEFAULT = Object.new
52
53
 
53
- attr_reader :module
54
+ attr_reader :module
54
55
 
55
- def initialize
56
- @reactions = {}
57
- end
56
+ def initialize
57
+ @reactions = {}
58
+ end
58
59
 
59
- def build(&block)
60
- instance_exec(&block) if block_given?
60
+ def build(&block)
61
+ instance_exec(&block) if block_given?
61
62
 
62
- reactor = Class.new
63
+ reactor = Class.new
63
64
 
64
- @module = Module.new(
65
- reactions: reactions
66
- )
65
+ @module = Module.new(
66
+ reactions: reactions
67
+ )
67
68
 
68
- reactor.extend(@module)
69
+ reactor.extend(@module)
69
70
 
70
- reactor
71
- end
71
+ reactor
72
+ end
72
73
 
73
- private
74
+ private
74
75
 
75
- attr_reader :reactions
76
+ attr_reader :reactions
76
77
 
77
- def react(arg, &block)
78
- reactions[arg] = block
78
+ def react(arg, &block)
79
+ reactions[arg] = block
80
+ end
79
81
  end
80
- end
81
- private_constant :Builder
82
+ private_constant :Builder
82
83
 
83
- def self.define(&block)
84
- builder = Builder.new
85
- builder.build(&block)
86
- end
84
+ def self.define(&block)
85
+ builder = Builder.new
86
+ builder.build(&block)
87
+ end
87
88
 
88
- def self.lmap_on_action_result(fn, reactor)
89
- define do
90
- react proc { true } do
91
- reactor.react(fn.call(action_result)).each do |action|
92
- issue action
89
+ def self.lmap_on_action_result(fn, reactor)
90
+ define do
91
+ react proc { true } do
92
+ reactor.react(fn.call(action_result)).each do |action|
93
+ issue action
94
+ end
93
95
  end
94
96
  end
95
97
  end
96
- end
97
98
 
98
- def self.rmap_on_action(fn, reactor)
99
- define do
100
- react proc { true } do
101
- reactor.react(action_result).each do |action|
102
- issue fn.call(action)
99
+ def self.rmap_on_action(fn, reactor)
100
+ define do
101
+ react proc { true } do
102
+ reactor.react(action_result).each do |action|
103
+ issue fn.call(action)
104
+ end
103
105
  end
104
106
  end
105
107
  end
106
- end
107
108
 
108
- def self.map_on_action(fn, reactor)
109
- rmap_on_action(fn, reactor)
110
- end
111
-
112
- def self.combine_with_decider(reactor, decider)
113
- Decider.define do
114
- initial_state decider.initial_state
115
-
116
- decide proc { true } do
117
- fn = ->(commands, events, ds) {
118
- case commands
119
- in []
120
- events
121
- in [head, *tail]
122
- new_events = decider.decide(head, ds)
123
- new_commands = new_events.flat_map { |action_result| reactor.react(action_result) }
124
- new_state = new_events.reduce(ds, &decider.evolve)
125
-
126
- fn.call(tail + new_commands, events + new_events, new_state)
127
- end
128
- }
109
+ def self.map_on_action(fn, reactor)
110
+ rmap_on_action(fn, reactor)
111
+ end
129
112
 
130
- fn.call([command], [], state).each { |event| emit event }
131
- end
113
+ def self.combine_with_decider(reactor, decider)
114
+ Decider.define do
115
+ initial_state decider.initial_state
116
+
117
+ decide proc { true } do
118
+ fn = ->(commands, events, ds) {
119
+ case commands
120
+ in []
121
+ events
122
+ in [head, *tail]
123
+ new_events = decider.decide(head, ds)
124
+ new_commands = new_events.flat_map { |action_result| reactor.react(action_result) }
125
+ new_state = new_events.reduce(ds, &decider.evolve)
126
+
127
+ fn.call(tail + new_commands, events + new_events, new_state)
128
+ end
129
+ }
130
+
131
+ fn.call([command], [], state).each { |event| emit event }
132
+ end
132
133
 
133
- evolve proc { true } do
134
- decider.evolve(state, event)
135
- end
134
+ evolve proc { true } do
135
+ decider.evolve(state, event)
136
+ end
136
137
 
137
- terminal? do
138
- decider.terminal?(state)
138
+ terminal? do
139
+ decider.terminal?(state)
140
+ end
139
141
  end
140
142
  end
141
143
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Decider
4
- VERSION = "0.7.0"
4
+ VERSION = "0.7.1"
5
5
  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.7.0
4
+ version: 0.7.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jan Dudulski
8
8
  bindir: exe
9
9
  cert_chain: []
10
- date: 2025-07-14 00:00:00.000000000 Z
10
+ date: 2025-07-23 00:00:00.000000000 Z
11
11
  dependencies:
12
12
  - !ruby/object:Gem::Dependency
13
13
  name: concurrent-ruby