decider 0.9.0 → 0.10.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c8cf547b60c57f5e6d7de4f9818c6422dd45b7508d7d547e0857596f12dc9dee
4
- data.tar.gz: 567d203347522c6401e1fc724316ddec6f5d0c7625f59a44d2214a4dc0299bc9
3
+ metadata.gz: 21f3d750ca980c0f3f4af0c798b0ab0be623959f61a66dc16c596d8be8076880
4
+ data.tar.gz: 1fe993a700c878a7244b629585113feac135cdfce65ec3fd68edae3a8f48f9c9
5
5
  SHA512:
6
- metadata.gz: b47df204a4040a1377b33f6d3395fcca83e167d0c073a84c7555195b671c54464d3e29f6c0d27036260bcc949547d189e52acb2e5ea7ab6421c774dc1412971b
7
- data.tar.gz: 4a808fd5cff184f84e7e6a3be391c431052e5e38106e4ac547b140c405eb1af9fcf2d225e3306f774376a114f75d7108ec837b759514409b6aaf366f5773de7f
6
+ metadata.gz: 8d473ceb5129e7d62dd943ad2ff9b0538b5dff49222ac2f5a9dc92305b79efd7f5935365e5781a066e258b4a327ad111ae692985848e3bb939391a655fc544bc
7
+ data.tar.gz: 635d00dd5ed86650c7ecccb07c148ee2b6bd3aec6808e9bed5abb4a23f408e49badab98ba31cb3ceafe3fa400b5e2b1590b414f3c3c58748a8497f0f62ddeb97
data/CHANGELOG.md CHANGED
@@ -1,3 +1,7 @@
1
+ # 0.10.0
2
+
3
+ * Lazy load initial state when block provided
4
+
1
5
  # 0.9.0
2
6
 
3
7
  * Rename gem to `decider`
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Decider
4
- VERSION = "0.9.0"
4
+ VERSION = "0.10.0"
5
5
  end
data/lib/decider/view.rb CHANGED
@@ -1,6 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Decider::View
4
+ StateAlreadyDefined = Class.new(StandardError)
5
+ StateNotDefined = Class.new(StandardError)
6
+
4
7
  class Module < ::Module
5
8
  EVOLVE_FALLBACK = proc { [nil, proc { state }] }
6
9
 
@@ -11,8 +14,15 @@ module Decider::View
11
14
  end
12
15
 
13
16
  def initialize(initial_state:, evolutions:)
14
- define_method(:initial_state) do
15
- initial_state
17
+ case initial_state
18
+ in Proc
19
+ define_method(:initial_state) do
20
+ initial_state.call
21
+ end
22
+ else
23
+ define_method(:initial_state) do
24
+ initial_state
25
+ end
16
26
  end
17
27
 
18
28
  define_method(:evolve) do |*args|
@@ -92,10 +102,15 @@ module Decider::View
92
102
 
93
103
  attr_reader :evolutions
94
104
 
95
- def initial_state(state)
105
+ def initial_state(state = DEFAULT, &block)
96
106
  raise StateAlreadyDefined if @initial_state != DEFAULT
97
107
 
98
- @initial_state = state
108
+ @initial_state =
109
+ if block_given?
110
+ block
111
+ else
112
+ state
113
+ end
99
114
  end
100
115
 
101
116
  def evolve(*args, &block)
data/lib/decider.rb CHANGED
@@ -58,8 +58,15 @@ module Decider
58
58
  Terminal = Data.define(:state)
59
59
 
60
60
  def initialize(initial_state:, deciders:, evolutions:, terminal:)
61
- define_method(:initial_state) do
62
- initial_state
61
+ case initial_state
62
+ in Proc
63
+ define_method(:initial_state) do
64
+ initial_state.call
65
+ end
66
+ else
67
+ define_method(:initial_state) do
68
+ initial_state
69
+ end
63
70
  end
64
71
 
65
72
  define_method(:decide) do |command, state|
@@ -189,10 +196,15 @@ module Decider
189
196
 
190
197
  attr_reader :deciders, :evolutions, :terminal
191
198
 
192
- def initial_state(state)
199
+ def initial_state(state = DEFAULT, &block)
193
200
  raise StateAlreadyDefined if @initial_state != DEFAULT
194
201
 
195
- @initial_state = state
202
+ @initial_state =
203
+ if block_given?
204
+ block
205
+ else
206
+ state
207
+ end
196
208
  end
197
209
 
198
210
  def decide(*args, &block)
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: decider
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.0
4
+ version: 0.10.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jan Dudulski