stateful.rb 2.2.0 → 2.3.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 +25 -1
- data/Gemfile +1 -0
- data/lib/Stateful/ActiveRecord/ClassMethods.rb +7 -65
- data/lib/Stateful/ClassMethods.rb +60 -0
- data/lib/Stateful/Poro/ClassMethods.rb +12 -70
- data/lib/Stateful/Sequel/ClassMethods.rb +7 -65
- data/lib/Stateful/VERSION.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 64d45e68824b71f7c09cdd74a2c5ee0b24dc8b6a5d56c8382d69db3755f2135b
|
|
4
|
+
data.tar.gz: cb4c4e148e18cb5fe4792db4f3c7607917bae0d15fde9823200c7dd43e34731a
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 2ee5b530989c26519491d9575bfdc5cad20f9eda1e1cae0c95186d52891c78e78a765d1eb1b42c194177959979abefd017f2f47edaeb586746556322b89f3f38
|
|
7
|
+
data.tar.gz: 6e55e936a191bc872594b3a6ad370b1912b03950680eac27ecd9a960592b16129c69c073f0d903d1d5f1c50cfadeb5b08dad0b3a521fe045df4d649854d81b9a
|
data/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,29 @@
|
|
|
1
1
|
# stateful/CHANGELOG.md
|
|
2
2
|
|
|
3
|
+
## 2.3.0 (20260418): Extract shared class methods.
|
|
4
|
+
-----------------------------------------------------------------------------------------------------------------------
|
|
5
|
+
|
|
6
|
+
### ~
|
|
7
|
+
1. lib/Stateful/ClassMethods.rb: + shared adapter methods extracted from Poro::ClassMethods, ActiveRecord::ClassMethods, Sequel::ClassMethods. All adapters now delegate to stateful\_attribute\_name\_for\_machine.
|
|
8
|
+
- define\_named\_machine\_methods
|
|
9
|
+
- define\_event\_method
|
|
10
|
+
- define\_status\_predicate\_method
|
|
11
|
+
- define\_next\_state\_method
|
|
12
|
+
- define\_transitions\_method
|
|
13
|
+
- define\_initial\_stateQ\_method
|
|
14
|
+
- define\_final\_stateQ\_method
|
|
15
|
+
2. lib/Stateful/ActiveRecord/ClassMethods.rb:
|
|
16
|
+
- Extracted shared adapter methods to Stateful::ClassMethods.
|
|
17
|
+
- /column_name_for_machine/stateful\_attribute_name\_for\_machine/
|
|
18
|
+
3. lib/Stateful/Poro/ClassMethods.rb: Extracted shared adapter methods to Stateful::ClassMethods.
|
|
19
|
+
- Extracted shared adapter methods to Stateful::ClassMethods.
|
|
20
|
+
- /variable_name_for_machine/stateful\_attribute_name\_for\_machine/
|
|
21
|
+
4. lib/Stateful/Sequel/ClassMethods.rb: Extracted shared adapter methods to Stateful::ClassMethods.
|
|
22
|
+
- Extracted shared adapter methods to Stateful::ClassMethods.
|
|
23
|
+
- /column_name_for_machine/stateful\_attribute_name\_for\_machine/
|
|
24
|
+
5. lib/Stateful/VERSION.rb: /2.2.0/2.3.0/
|
|
25
|
+
|
|
26
|
+
|
|
3
27
|
## 2.2.0 (20260418): Add Sequel support.
|
|
4
28
|
-----------------------------------------------------------------------------------------------------------------------
|
|
5
29
|
|
|
@@ -24,7 +48,7 @@
|
|
|
24
48
|
|
|
25
49
|
### ~
|
|
26
50
|
1. lib/Stateful.rb: Auto-detect Sequel::Model in Stateful.extended, between ActiveRecord and Poro.
|
|
27
|
-
2. test/Stateful.rb: + Sequel specs
|
|
51
|
+
2. test/Stateful.rb: + Sequel specs; - $LOAD\_PATH.unshift(test\_dir) to avoid case-insensitive collision between test/Sequel.rb and require 'sequel'.
|
|
28
52
|
3. stateful.rb.gemspec: + sequel dev dependency; update description to include Sequel.
|
|
29
53
|
4. lib/Stateful/VERSION.rb: /2.1.0/2.2.0/
|
|
30
54
|
|
data/Gemfile
CHANGED
|
@@ -6,8 +6,8 @@ module Stateful
|
|
|
6
6
|
module ClassMethods
|
|
7
7
|
class << self
|
|
8
8
|
def extended(klass)
|
|
9
|
-
klass.
|
|
10
|
-
klass.
|
|
9
|
+
klass.define_stateful_attribute_setter_method
|
|
10
|
+
klass.define_stateful_attribute_getter_method
|
|
11
11
|
klass.define_next_state_method
|
|
12
12
|
klass.define_transitions_method
|
|
13
13
|
klass.define_initial_stateQ_method
|
|
@@ -15,15 +15,6 @@ module Stateful
|
|
|
15
15
|
end
|
|
16
16
|
end # class << self
|
|
17
17
|
|
|
18
|
-
def define_named_machine_methods(machine_name)
|
|
19
|
-
define_stateful_column_name_setter_method(machine_name: machine_name)
|
|
20
|
-
define_stateful_column_name_getter_method(machine_name: machine_name)
|
|
21
|
-
define_next_state_method(machine_name: machine_name)
|
|
22
|
-
define_transitions_method(machine_name: machine_name)
|
|
23
|
-
define_initial_stateQ_method(machine_name: machine_name)
|
|
24
|
-
define_final_stateQ_method(machine_name: machine_name)
|
|
25
|
-
end
|
|
26
|
-
|
|
27
18
|
def stateful_column_name=(stateful_column_name)
|
|
28
19
|
@stateful_column_name = stateful_column_name
|
|
29
20
|
end
|
|
@@ -32,7 +23,7 @@ module Stateful
|
|
|
32
23
|
@stateful_column_name
|
|
33
24
|
end
|
|
34
25
|
|
|
35
|
-
def
|
|
26
|
+
def stateful_attribute_name_for_machine(machine_name = nil)
|
|
36
27
|
if machine_name
|
|
37
28
|
"#{machine_name}_state"
|
|
38
29
|
else
|
|
@@ -40,24 +31,8 @@ module Stateful
|
|
|
40
31
|
end
|
|
41
32
|
end
|
|
42
33
|
|
|
43
|
-
def
|
|
44
|
-
stateful_column_name =
|
|
45
|
-
define_method(transition.event_name) do
|
|
46
|
-
next_state_name = self.send(stateful_column_name).next_state_name(transition.event_name)
|
|
47
|
-
next_state = self.class.stateful_state_machine(machine_name).find(next_state_name)
|
|
48
|
-
self.send("#{stateful_column_name}=", next_state)
|
|
49
|
-
end
|
|
50
|
-
end
|
|
51
|
-
|
|
52
|
-
def define_status_predicate_method(state_name, machine_name: nil)
|
|
53
|
-
stateful_column_name = column_name_for_machine(machine_name)
|
|
54
|
-
define_method("#{state_name}?") do
|
|
55
|
-
self.send(stateful_column_name).name == state_name
|
|
56
|
-
end
|
|
57
|
-
end
|
|
58
|
-
|
|
59
|
-
def define_stateful_column_name_setter_method(machine_name: nil)
|
|
60
|
-
stateful_column_name = column_name_for_machine(machine_name)
|
|
34
|
+
def define_stateful_attribute_setter_method(machine_name: nil)
|
|
35
|
+
stateful_column_name = stateful_attribute_name_for_machine(machine_name)
|
|
61
36
|
define_method("#{stateful_column_name}=") do |state|
|
|
62
37
|
instance_variable_set("@#{stateful_column_name}", self.class.stateful_state_machine(machine_name).find(state))
|
|
63
38
|
write_attribute(stateful_column_name, instance_variable_get("@#{stateful_column_name}").name)
|
|
@@ -66,8 +41,8 @@ module Stateful
|
|
|
66
41
|
end
|
|
67
42
|
end
|
|
68
43
|
|
|
69
|
-
def
|
|
70
|
-
stateful_column_name =
|
|
44
|
+
def define_stateful_attribute_getter_method(machine_name: nil)
|
|
45
|
+
stateful_column_name = stateful_attribute_name_for_machine(machine_name)
|
|
71
46
|
define_method(stateful_column_name) do
|
|
72
47
|
instance_variable_set("@#{stateful_column_name}", self.class.stateful_state_machine(machine_name).find(read_attribute(stateful_column_name)))
|
|
73
48
|
if state = instance_variable_get("@#{stateful_column_name}")
|
|
@@ -79,39 +54,6 @@ module Stateful
|
|
|
79
54
|
end
|
|
80
55
|
end
|
|
81
56
|
end
|
|
82
|
-
|
|
83
|
-
def define_next_state_method(machine_name: nil)
|
|
84
|
-
stateful_column_name = column_name_for_machine(machine_name)
|
|
85
|
-
method_name = machine_name ? "#{machine_name}_next_state" : :next_state
|
|
86
|
-
define_method(method_name) do |event_name|
|
|
87
|
-
next_state_name = self.send(stateful_column_name).next_state_name(event_name)
|
|
88
|
-
self.class.stateful_state_machine(machine_name).find(next_state_name)
|
|
89
|
-
end
|
|
90
|
-
end
|
|
91
|
-
|
|
92
|
-
def define_transitions_method(machine_name: nil)
|
|
93
|
-
stateful_column_name = column_name_for_machine(machine_name)
|
|
94
|
-
method_name = machine_name ? "#{machine_name}_transitions" : :transitions
|
|
95
|
-
define_method(method_name) do
|
|
96
|
-
self.send(stateful_column_name).transitions
|
|
97
|
-
end
|
|
98
|
-
end
|
|
99
|
-
|
|
100
|
-
def define_initial_stateQ_method(machine_name: nil)
|
|
101
|
-
stateful_column_name = column_name_for_machine(machine_name)
|
|
102
|
-
method_name = machine_name ? "#{machine_name}_initial_state?" : :initial_state?
|
|
103
|
-
define_method(method_name) do
|
|
104
|
-
self.send(stateful_column_name) == self.class.stateful_state_machine(machine_name).initial_state
|
|
105
|
-
end
|
|
106
|
-
end
|
|
107
|
-
|
|
108
|
-
def define_final_stateQ_method(machine_name: nil)
|
|
109
|
-
stateful_column_name = column_name_for_machine(machine_name)
|
|
110
|
-
method_name = machine_name ? "#{machine_name}_final_state?" : :final_state?
|
|
111
|
-
define_method(method_name) do
|
|
112
|
-
self.class.stateful_state_machine(machine_name).final_states.include?(self.send(stateful_column_name))
|
|
113
|
-
end
|
|
114
|
-
end
|
|
115
57
|
end
|
|
116
58
|
end
|
|
117
59
|
end
|
|
@@ -51,6 +51,66 @@ module Stateful
|
|
|
51
51
|
|
|
52
52
|
# end DSL
|
|
53
53
|
|
|
54
|
+
# adapter methods
|
|
55
|
+
|
|
56
|
+
def define_named_machine_methods(machine_name)
|
|
57
|
+
define_stateful_attribute_setter_method(machine_name: machine_name)
|
|
58
|
+
define_stateful_attribute_getter_method(machine_name: machine_name)
|
|
59
|
+
define_next_state_method(machine_name: machine_name)
|
|
60
|
+
define_transitions_method(machine_name: machine_name)
|
|
61
|
+
define_initial_stateQ_method(machine_name: machine_name)
|
|
62
|
+
define_final_stateQ_method(machine_name: machine_name)
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
def define_event_method(transition, machine_name: nil)
|
|
66
|
+
attribute_name = stateful_attribute_name_for_machine(machine_name)
|
|
67
|
+
define_method(transition.event_name) do
|
|
68
|
+
next_state_name = self.send(attribute_name).next_state_name(transition.event_name)
|
|
69
|
+
next_state = self.class.stateful_state_machine(machine_name).find(next_state_name)
|
|
70
|
+
self.send("#{attribute_name}=", next_state)
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
def define_status_predicate_method(state_name, machine_name: nil)
|
|
75
|
+
attribute_name = stateful_attribute_name_for_machine(machine_name)
|
|
76
|
+
define_method("#{state_name}?") do
|
|
77
|
+
self.send(attribute_name).name == state_name
|
|
78
|
+
end
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
def define_next_state_method(machine_name: nil)
|
|
82
|
+
attribute_name = stateful_attribute_name_for_machine(machine_name)
|
|
83
|
+
method_name = machine_name ? "#{machine_name}_next_state" : :next_state
|
|
84
|
+
define_method(method_name) do |event_name|
|
|
85
|
+
next_state_name = self.send(attribute_name).next_state_name(event_name)
|
|
86
|
+
self.class.stateful_state_machine(machine_name).find(next_state_name)
|
|
87
|
+
end
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
def define_transitions_method(machine_name: nil)
|
|
91
|
+
attribute_name = stateful_attribute_name_for_machine(machine_name)
|
|
92
|
+
method_name = machine_name ? "#{machine_name}_transitions" : :transitions
|
|
93
|
+
define_method(method_name) do
|
|
94
|
+
self.send(attribute_name).transitions
|
|
95
|
+
end
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
def define_initial_stateQ_method(machine_name: nil)
|
|
99
|
+
attribute_name = stateful_attribute_name_for_machine(machine_name)
|
|
100
|
+
method_name = machine_name ? "#{machine_name}_initial_state?" : :initial_state?
|
|
101
|
+
define_method(method_name) do
|
|
102
|
+
self.send(attribute_name) == self.class.stateful_state_machine(machine_name).initial_state
|
|
103
|
+
end
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
def define_final_stateQ_method(machine_name: nil)
|
|
107
|
+
attribute_name = stateful_attribute_name_for_machine(machine_name)
|
|
108
|
+
method_name = machine_name ? "#{machine_name}_final_state?" : :final_state?
|
|
109
|
+
define_method(method_name) do
|
|
110
|
+
self.class.stateful_state_machine(machine_name).final_states.include?(self.send(attribute_name))
|
|
111
|
+
end
|
|
112
|
+
end
|
|
113
|
+
|
|
54
114
|
# predicate methods
|
|
55
115
|
|
|
56
116
|
def final_state?
|
|
@@ -6,8 +6,8 @@ module Stateful
|
|
|
6
6
|
module ClassMethods
|
|
7
7
|
class << self
|
|
8
8
|
def extended(klass)
|
|
9
|
-
klass.
|
|
10
|
-
klass.
|
|
9
|
+
klass.define_stateful_attribute_setter_method
|
|
10
|
+
klass.define_stateful_attribute_getter_method
|
|
11
11
|
klass.define_next_state_method
|
|
12
12
|
klass.define_transitions_method
|
|
13
13
|
klass.define_initial_stateQ_method
|
|
@@ -15,15 +15,6 @@ module Stateful
|
|
|
15
15
|
end
|
|
16
16
|
end # class << self
|
|
17
17
|
|
|
18
|
-
def define_named_machine_methods(machine_name)
|
|
19
|
-
define_stateful_variable_name_setter_method(machine_name: machine_name)
|
|
20
|
-
define_stateful_variable_name_getter_method(machine_name: machine_name)
|
|
21
|
-
define_next_state_method(machine_name: machine_name)
|
|
22
|
-
define_transitions_method(machine_name: machine_name)
|
|
23
|
-
define_initial_stateQ_method(machine_name: machine_name)
|
|
24
|
-
define_final_stateQ_method(machine_name: machine_name)
|
|
25
|
-
end
|
|
26
|
-
|
|
27
18
|
def stateful_variable_name=(stateful_variable_name)
|
|
28
19
|
@stateful_variable_name = stateful_variable_name
|
|
29
20
|
end
|
|
@@ -32,7 +23,7 @@ module Stateful
|
|
|
32
23
|
@stateful_variable_name
|
|
33
24
|
end
|
|
34
25
|
|
|
35
|
-
def
|
|
26
|
+
def stateful_attribute_name_for_machine(machine_name = nil)
|
|
36
27
|
if machine_name
|
|
37
28
|
"#{machine_name}_state"
|
|
38
29
|
else
|
|
@@ -40,74 +31,25 @@ module Stateful
|
|
|
40
31
|
end
|
|
41
32
|
end
|
|
42
33
|
|
|
43
|
-
def
|
|
44
|
-
|
|
45
|
-
define_method(
|
|
46
|
-
|
|
47
|
-
next_state = self.class.stateful_state_machine(machine_name).find(next_state_name)
|
|
48
|
-
self.send("#{variable_name}=", next_state)
|
|
49
|
-
end
|
|
50
|
-
end
|
|
51
|
-
|
|
52
|
-
def define_status_predicate_method(state_name, machine_name: nil)
|
|
53
|
-
variable_name = variable_name_for_machine(machine_name)
|
|
54
|
-
define_method("#{state_name}?") do
|
|
55
|
-
self.send(variable_name).name == state_name
|
|
34
|
+
def define_stateful_attribute_setter_method(machine_name: nil)
|
|
35
|
+
attribute_name = stateful_attribute_name_for_machine(machine_name)
|
|
36
|
+
define_method("#{attribute_name}=") do |state|
|
|
37
|
+
instance_variable_set("@#{attribute_name}", self.class.stateful_state_machine(machine_name).find(state))
|
|
56
38
|
end
|
|
57
39
|
end
|
|
58
40
|
|
|
59
|
-
def
|
|
60
|
-
|
|
61
|
-
define_method(
|
|
62
|
-
|
|
63
|
-
end
|
|
64
|
-
end
|
|
65
|
-
|
|
66
|
-
def define_stateful_variable_name_getter_method(machine_name: nil)
|
|
67
|
-
variable_name = variable_name_for_machine(machine_name)
|
|
68
|
-
define_method(variable_name) do
|
|
69
|
-
if state = instance_variable_get("@#{variable_name}")
|
|
41
|
+
def define_stateful_attribute_getter_method(machine_name: nil)
|
|
42
|
+
attribute_name = stateful_attribute_name_for_machine(machine_name)
|
|
43
|
+
define_method(attribute_name) do
|
|
44
|
+
if state = instance_variable_get("@#{attribute_name}")
|
|
70
45
|
state
|
|
71
46
|
else
|
|
72
47
|
initial_state = self.class.stateful_state_machine(machine_name).initial_state
|
|
73
|
-
self.send("#{
|
|
48
|
+
self.send("#{attribute_name}=", initial_state.name)
|
|
74
49
|
initial_state
|
|
75
50
|
end
|
|
76
51
|
end
|
|
77
52
|
end
|
|
78
|
-
|
|
79
|
-
def define_next_state_method(machine_name: nil)
|
|
80
|
-
variable_name = variable_name_for_machine(machine_name)
|
|
81
|
-
method_name = machine_name ? "#{machine_name}_next_state" : :next_state
|
|
82
|
-
define_method(method_name) do |event_name|
|
|
83
|
-
next_state_name = self.send(variable_name).next_state_name(event_name)
|
|
84
|
-
self.class.stateful_state_machine(machine_name).find(next_state_name)
|
|
85
|
-
end
|
|
86
|
-
end
|
|
87
|
-
|
|
88
|
-
def define_transitions_method(machine_name: nil)
|
|
89
|
-
variable_name = variable_name_for_machine(machine_name)
|
|
90
|
-
method_name = machine_name ? "#{machine_name}_transitions" : :transitions
|
|
91
|
-
define_method(method_name) do
|
|
92
|
-
self.send(variable_name).transitions
|
|
93
|
-
end
|
|
94
|
-
end
|
|
95
|
-
|
|
96
|
-
def define_initial_stateQ_method(machine_name: nil)
|
|
97
|
-
variable_name = variable_name_for_machine(machine_name)
|
|
98
|
-
method_name = machine_name ? "#{machine_name}_initial_state?" : :initial_state?
|
|
99
|
-
define_method(method_name) do
|
|
100
|
-
self.send(variable_name) == self.class.stateful_state_machine(machine_name).initial_state
|
|
101
|
-
end
|
|
102
|
-
end
|
|
103
|
-
|
|
104
|
-
def define_final_stateQ_method(machine_name: nil)
|
|
105
|
-
variable_name = variable_name_for_machine(machine_name)
|
|
106
|
-
method_name = machine_name ? "#{machine_name}_final_state?" : :final_state?
|
|
107
|
-
define_method(method_name) do
|
|
108
|
-
self.class.stateful_state_machine(machine_name).final_states.include?(self.send(variable_name))
|
|
109
|
-
end
|
|
110
|
-
end
|
|
111
53
|
end
|
|
112
54
|
end
|
|
113
55
|
end
|
|
@@ -6,8 +6,8 @@ module Stateful
|
|
|
6
6
|
module ClassMethods
|
|
7
7
|
class << self
|
|
8
8
|
def extended(klass)
|
|
9
|
-
klass.
|
|
10
|
-
klass.
|
|
9
|
+
klass.define_stateful_attribute_setter_method
|
|
10
|
+
klass.define_stateful_attribute_getter_method
|
|
11
11
|
klass.define_next_state_method
|
|
12
12
|
klass.define_transitions_method
|
|
13
13
|
klass.define_initial_stateQ_method
|
|
@@ -15,15 +15,6 @@ module Stateful
|
|
|
15
15
|
end
|
|
16
16
|
end # class << self
|
|
17
17
|
|
|
18
|
-
def define_named_machine_methods(machine_name)
|
|
19
|
-
define_stateful_column_name_setter_method(machine_name: machine_name)
|
|
20
|
-
define_stateful_column_name_getter_method(machine_name: machine_name)
|
|
21
|
-
define_next_state_method(machine_name: machine_name)
|
|
22
|
-
define_transitions_method(machine_name: machine_name)
|
|
23
|
-
define_initial_stateQ_method(machine_name: machine_name)
|
|
24
|
-
define_final_stateQ_method(machine_name: machine_name)
|
|
25
|
-
end
|
|
26
|
-
|
|
27
18
|
def stateful_column_name=(stateful_column_name)
|
|
28
19
|
@stateful_column_name = stateful_column_name
|
|
29
20
|
end
|
|
@@ -32,7 +23,7 @@ module Stateful
|
|
|
32
23
|
@stateful_column_name
|
|
33
24
|
end
|
|
34
25
|
|
|
35
|
-
def
|
|
26
|
+
def stateful_attribute_name_for_machine(machine_name = nil)
|
|
36
27
|
if machine_name
|
|
37
28
|
"#{machine_name}_state"
|
|
38
29
|
else
|
|
@@ -40,24 +31,8 @@ module Stateful
|
|
|
40
31
|
end
|
|
41
32
|
end
|
|
42
33
|
|
|
43
|
-
def
|
|
44
|
-
stateful_column_name =
|
|
45
|
-
define_method(transition.event_name) do
|
|
46
|
-
next_state_name = self.send(stateful_column_name).next_state_name(transition.event_name)
|
|
47
|
-
next_state = self.class.stateful_state_machine(machine_name).find(next_state_name)
|
|
48
|
-
self.send("#{stateful_column_name}=", next_state)
|
|
49
|
-
end
|
|
50
|
-
end
|
|
51
|
-
|
|
52
|
-
def define_status_predicate_method(state_name, machine_name: nil)
|
|
53
|
-
stateful_column_name = column_name_for_machine(machine_name)
|
|
54
|
-
define_method("#{state_name}?") do
|
|
55
|
-
self.send(stateful_column_name).name == state_name
|
|
56
|
-
end
|
|
57
|
-
end
|
|
58
|
-
|
|
59
|
-
def define_stateful_column_name_setter_method(machine_name: nil)
|
|
60
|
-
stateful_column_name = column_name_for_machine(machine_name)
|
|
34
|
+
def define_stateful_attribute_setter_method(machine_name: nil)
|
|
35
|
+
stateful_column_name = stateful_attribute_name_for_machine(machine_name)
|
|
61
36
|
define_method("#{stateful_column_name}=") do |state|
|
|
62
37
|
instance_variable_set("@#{stateful_column_name}", self.class.stateful_state_machine(machine_name).find(state))
|
|
63
38
|
self[stateful_column_name.to_sym] = instance_variable_get("@#{stateful_column_name}").name.to_s
|
|
@@ -66,8 +41,8 @@ module Stateful
|
|
|
66
41
|
end
|
|
67
42
|
end
|
|
68
43
|
|
|
69
|
-
def
|
|
70
|
-
stateful_column_name =
|
|
44
|
+
def define_stateful_attribute_getter_method(machine_name: nil)
|
|
45
|
+
stateful_column_name = stateful_attribute_name_for_machine(machine_name)
|
|
71
46
|
define_method(stateful_column_name) do
|
|
72
47
|
instance_variable_set("@#{stateful_column_name}", self.class.stateful_state_machine(machine_name).find(self[stateful_column_name.to_sym]))
|
|
73
48
|
if state = instance_variable_get("@#{stateful_column_name}")
|
|
@@ -79,39 +54,6 @@ module Stateful
|
|
|
79
54
|
end
|
|
80
55
|
end
|
|
81
56
|
end
|
|
82
|
-
|
|
83
|
-
def define_next_state_method(machine_name: nil)
|
|
84
|
-
stateful_column_name = column_name_for_machine(machine_name)
|
|
85
|
-
method_name = machine_name ? "#{machine_name}_next_state" : :next_state
|
|
86
|
-
define_method(method_name) do |event_name|
|
|
87
|
-
next_state_name = self.send(stateful_column_name).next_state_name(event_name)
|
|
88
|
-
self.class.stateful_state_machine(machine_name).find(next_state_name)
|
|
89
|
-
end
|
|
90
|
-
end
|
|
91
|
-
|
|
92
|
-
def define_transitions_method(machine_name: nil)
|
|
93
|
-
stateful_column_name = column_name_for_machine(machine_name)
|
|
94
|
-
method_name = machine_name ? "#{machine_name}_transitions" : :transitions
|
|
95
|
-
define_method(method_name) do
|
|
96
|
-
self.send(stateful_column_name).transitions
|
|
97
|
-
end
|
|
98
|
-
end
|
|
99
|
-
|
|
100
|
-
def define_initial_stateQ_method(machine_name: nil)
|
|
101
|
-
stateful_column_name = column_name_for_machine(machine_name)
|
|
102
|
-
method_name = machine_name ? "#{machine_name}_initial_state?" : :initial_state?
|
|
103
|
-
define_method(method_name) do
|
|
104
|
-
self.send(stateful_column_name) == self.class.stateful_state_machine(machine_name).initial_state
|
|
105
|
-
end
|
|
106
|
-
end
|
|
107
|
-
|
|
108
|
-
def define_final_stateQ_method(machine_name: nil)
|
|
109
|
-
stateful_column_name = column_name_for_machine(machine_name)
|
|
110
|
-
method_name = machine_name ? "#{machine_name}_final_state?" : :final_state?
|
|
111
|
-
define_method(method_name) do
|
|
112
|
-
self.class.stateful_state_machine(machine_name).final_states.include?(self.send(stateful_column_name))
|
|
113
|
-
end
|
|
114
|
-
end
|
|
115
57
|
end
|
|
116
58
|
end
|
|
117
59
|
end
|
data/lib/Stateful/VERSION.rb
CHANGED