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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 19870edf42d6c87988172b8041d30496fd4f06c2c47ecb6cfd1d2903ba47f3e5
4
- data.tar.gz: 05f29ff4ddeb5ffe4317b9bc94bf6ee1089fd9c27e88ebb1876512ff05fd3ff6
3
+ metadata.gz: 64d45e68824b71f7c09cdd74a2c5ee0b24dc8b6a5d56c8382d69db3755f2135b
4
+ data.tar.gz: cb4c4e148e18cb5fe4792db4f3c7607917bae0d15fde9823200c7dd43e34731a
5
5
  SHA512:
6
- metadata.gz: 4126dfa52b171f819e7d9144e926c5ffcf8b80a9ad4ee0d2fbae09f61571a1955939a12ad9864d5c4639ab49fecbabc7bed4113a7e13adc1640ac54adf588104
7
- data.tar.gz: cf3ec7be8218914f4f84d1f6a950e2ed42d46bfe5b70c6492d654ee884a2914add13da4cfb630446fd65a7088a2fe61e7cbb2951c470fd4e1bd0c120eda6675a
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
@@ -1,2 +1,3 @@
1
1
  source 'https://www.rubygems.org'
2
+
2
3
  gemspec
@@ -6,8 +6,8 @@ module Stateful
6
6
  module ClassMethods
7
7
  class << self
8
8
  def extended(klass)
9
- klass.define_stateful_column_name_setter_method
10
- klass.define_stateful_column_name_getter_method
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 column_name_for_machine(machine_name = nil)
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 define_event_method(transition, machine_name: nil)
44
- stateful_column_name = column_name_for_machine(machine_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 define_stateful_column_name_getter_method(machine_name: nil)
70
- stateful_column_name = column_name_for_machine(machine_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.define_stateful_variable_name_setter_method
10
- klass.define_stateful_variable_name_getter_method
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 variable_name_for_machine(machine_name = nil)
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 define_event_method(transition, machine_name: nil)
44
- variable_name = variable_name_for_machine(machine_name)
45
- define_method(transition.event_name) do
46
- next_state_name = self.send(variable_name).next_state_name(transition.event_name)
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 define_stateful_variable_name_setter_method(machine_name: nil)
60
- variable_name = variable_name_for_machine(machine_name)
61
- define_method("#{variable_name}=") do |state|
62
- instance_variable_set("@#{variable_name}", self.class.stateful_state_machine(machine_name).find(state))
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("#{variable_name}=", initial_state.name)
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.define_stateful_column_name_setter_method
10
- klass.define_stateful_column_name_getter_method
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 column_name_for_machine(machine_name = nil)
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 define_event_method(transition, machine_name: nil)
44
- stateful_column_name = column_name_for_machine(machine_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 define_stateful_column_name_getter_method(machine_name: nil)
70
- stateful_column_name = column_name_for_machine(machine_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
@@ -1,3 +1,3 @@
1
1
  module Stateful
2
- VERSION = '2.2.0'
2
+ VERSION = '2.3.0'
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: stateful.rb
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.2.0
4
+ version: 2.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - thoran