enum_state_machine 0.4.0 → 0.7.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/.ruby-version +1 -1
- data/README.md +73 -2
- data/enum_state_machine.gemspec +4 -5
- data/lib/enum_state_machine/integrations/active_record.rb +10 -3
- data/lib/enum_state_machine/version.rb +1 -1
- data/test/unit/event_test.rb +3 -3
- data/test/unit/machine_test.rb +2 -2
- data/test/unit/transition_collection_test.rb +1 -1
- metadata +26 -16
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: b789f253ef713a0650807bc1d06439252411fca86b15c7c9947dfa466edb104b
|
4
|
+
data.tar.gz: dd54f68b6bd0ff062c98ab75bcfd4444e4879820a831a5def374845fcfec8380
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3d35efc93d0045b153105ddb01499a4b09db5d70acf740ab3ac1ac9b106d5f917042491604c2702b40137acdd317e0b0d4bc4c8c1670146010c6c5915ea9f3ad
|
7
|
+
data.tar.gz: 73389b3df7fe1d451e81321e4eee3e0c4714fcf89270ac1afd10094aca807df6543d8785f79884869f3f6b807d16b61edf0cd3763e1e897c83bb040cf7ea8117
|
data/.ruby-version
CHANGED
@@ -1 +1 @@
|
|
1
|
-
2.
|
1
|
+
2.6.5
|
data/README.md
CHANGED
@@ -1,4 +1,75 @@
|
|
1
|
-
##enum_state_machine
|
1
|
+
## enum_state_machine
|
2
2
|
==================
|
3
3
|
|
4
|
-
state_machine patches to use PowerEnum enums for state values.
|
4
|
+
`state_machine` patches to use PowerEnum enums for state values.
|
5
|
+
It allows you to use an enumerated attribute to track a state machine status.
|
6
|
+
|
7
|
+
## Installation:
|
8
|
+
|
9
|
+
Add the following to your Gemfile:
|
10
|
+
|
11
|
+
```ruby
|
12
|
+
gem 'enum_state_machine'
|
13
|
+
```
|
14
|
+
|
15
|
+
## Usage:
|
16
|
+
|
17
|
+
Before using this you must familiarize yourself with the [PowerEnum](https://github.com/albertosaurus/power_enum_2)
|
18
|
+
and [state_machine](https://github.com/pluginaweek/state_machine) gems.
|
19
|
+
|
20
|
+
Include `EnumStateMachine::StateEnum` in our model. That adds a single method that is used to define an enumerated state attribute:
|
21
|
+
|
22
|
+
```ruby
|
23
|
+
# state_attr is the name of the state variable
|
24
|
+
# enum_attr is the name of the underlying enumerated attribute
|
25
|
+
# enum_opts are options to be passed to has_enumerated
|
26
|
+
has_state_enum(state_attr, enum_attr, enum_opts = {})
|
27
|
+
```
|
28
|
+
|
29
|
+
This is best illustrated with an example. Suppose you have a Grenade model that can have four possible states: stored, armed, kaboom, and fizzle.
|
30
|
+
|
31
|
+
```ruby
|
32
|
+
|
33
|
+
# Migration
|
34
|
+
|
35
|
+
create_enum :grenade_status
|
36
|
+
|
37
|
+
create_table :grenades do |t|
|
38
|
+
t.references :grenade_statuses
|
39
|
+
t.boolean :is_defective
|
40
|
+
|
41
|
+
t.timestamps
|
42
|
+
end
|
43
|
+
|
44
|
+
# Seeds
|
45
|
+
|
46
|
+
GrenadeStatus.update_enumerations_model do
|
47
|
+
[:unarmed, :armed, :kaboom, :fizzle].each { |name| GrenadeStatus.create! name: name }
|
48
|
+
end
|
49
|
+
|
50
|
+
# Models
|
51
|
+
|
52
|
+
class GrenadeStatus < ActiveRecord::Base
|
53
|
+
acts_as_enumerated
|
54
|
+
end
|
55
|
+
|
56
|
+
class Grenade < ActiveRecord::Base
|
57
|
+
include EnumStateMachine::StateEnum
|
58
|
+
has_state_enum :status, :grenade_status, default: :unarmed
|
59
|
+
|
60
|
+
state_machine :status, initial: :unarmed do
|
61
|
+
event :pulled_pin do
|
62
|
+
transition :unarmed => :armed
|
63
|
+
end
|
64
|
+
|
65
|
+
event :thrown do
|
66
|
+
# a defective grenade won't explode
|
67
|
+
transition :armed => :fizzle, :if => :is_defective?
|
68
|
+
# a normal armed one will explode
|
69
|
+
transition :armed => :kaboom
|
70
|
+
# If you forgot to pull the pin, nothing happens
|
71
|
+
transition :unarmed => :unarmed
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
75
|
+
```
|
data/enum_state_machine.gemspec
CHANGED
@@ -17,11 +17,10 @@ Gem::Specification.new do |s|
|
|
17
17
|
s.extra_rdoc_files = %w(README.md CHANGELOG.md LICENSE)
|
18
18
|
s.license = 'MIT'
|
19
19
|
|
20
|
-
s.add_dependency "rails", "
|
21
|
-
|
22
|
-
s.add_dependency "
|
23
|
-
|
24
|
-
s.add_dependency "power_enum", "~> 2.7"
|
20
|
+
s.add_dependency "rails", "> 4.0", "< 7.0"
|
21
|
+
s.add_dependency "activerecord-deprecated_finders", ">= 1.0.3"
|
22
|
+
#s.add_dependency "rails-observers", ">= 0.1.2"
|
23
|
+
s.add_dependency "power_enum", "> 2.8", "< 4.0"
|
25
24
|
|
26
25
|
s.add_development_dependency "rake"
|
27
26
|
s.add_development_dependency "minitest", "~> 5.1"
|
@@ -455,10 +455,17 @@ module EnumStateMachine
|
|
455
455
|
# attributes passed into #initialize
|
456
456
|
define_helper :class, <<-end_eval, __FILE__, __LINE__ + 1
|
457
457
|
def column_defaults(*) #:nodoc:
|
458
|
-
|
458
|
+
@column_defaults = super
|
459
|
+
return @column_defaults if @column_defaults_are_set
|
460
|
+
@column_defaults_are_set = true
|
461
|
+
|
462
|
+
was_frozen = @column_defaults.frozen?
|
463
|
+
@column_defaults = @column_defaults.deep_dup if was_frozen
|
464
|
+
|
459
465
|
# No need to pass in an object, since the overrides will be forced
|
460
|
-
self.state_machines.initialize_states(nil, :static => :force, :dynamic => false, :to =>
|
461
|
-
|
466
|
+
self.state_machines.initialize_states(nil, :static => :force, :dynamic => false, :to => @column_defaults)
|
467
|
+
|
468
|
+
@column_defaults.tap { |defaults| defaults.freeze if was_frozen }
|
462
469
|
end
|
463
470
|
end_eval
|
464
471
|
end
|
data/test/unit/event_test.rb
CHANGED
@@ -247,7 +247,7 @@ class EventWithConflictingHelpersAfterDefinitionTest < MiniTest::Test
|
|
247
247
|
end
|
248
248
|
|
249
249
|
assert_equal false, @object.can_ignite?
|
250
|
-
|
250
|
+
assert_nil @object.ignite_transition
|
251
251
|
assert_equal false, @object.ignite
|
252
252
|
assert_raises(EnumStateMachine::InvalidTransition) { @object.ignite! }
|
253
253
|
end
|
@@ -764,7 +764,7 @@ class EventWithTransitionWithNilToStateTest < MiniTest::Test
|
|
764
764
|
transition = @event.transition_for(@object)
|
765
765
|
refute_nil transition
|
766
766
|
assert_equal 'idling', transition.from
|
767
|
-
|
767
|
+
assert_nil transition.to
|
768
768
|
assert_equal :park, transition.event
|
769
769
|
end
|
770
770
|
|
@@ -774,7 +774,7 @@ class EventWithTransitionWithNilToStateTest < MiniTest::Test
|
|
774
774
|
|
775
775
|
def test_should_not_change_the_current_state
|
776
776
|
@event.fire(@object)
|
777
|
-
|
777
|
+
assert_nil @object.state
|
778
778
|
end
|
779
779
|
end
|
780
780
|
|
data/test/unit/machine_test.rb
CHANGED
@@ -1847,10 +1847,10 @@ class MachineWithConflictingHelpersAfterDefinitionTest < MiniTest::Test
|
|
1847
1847
|
assert_equal 'parked', @klass.human_state_name(:parked)
|
1848
1848
|
assert_equal 'ignite', @klass.human_state_event_name(:ignite)
|
1849
1849
|
|
1850
|
-
|
1850
|
+
assert_nil @object.state
|
1851
1851
|
@object.state = 'idling'
|
1852
1852
|
assert_equal 'idling', @object.state
|
1853
|
-
|
1853
|
+
assert_nil @object.status
|
1854
1854
|
assert_equal false, @object.state?(:parked)
|
1855
1855
|
assert_equal :idling, @object.state_name
|
1856
1856
|
assert_equal 'idling', @object.human_state_name
|
metadata
CHANGED
@@ -1,57 +1,69 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: enum_state_machine
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.7.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- The HornsAndHooves Team
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2022-02-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "
|
17
|
+
- - ">"
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: '4.0'
|
20
|
+
- - "<"
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: '7.0'
|
20
23
|
type: :runtime
|
21
24
|
prerelease: false
|
22
25
|
version_requirements: !ruby/object:Gem::Requirement
|
23
26
|
requirements:
|
24
|
-
- - "
|
27
|
+
- - ">"
|
25
28
|
- !ruby/object:Gem::Version
|
26
29
|
version: '4.0'
|
30
|
+
- - "<"
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '7.0'
|
27
33
|
- !ruby/object:Gem::Dependency
|
28
34
|
name: activerecord-deprecated_finders
|
29
35
|
requirement: !ruby/object:Gem::Requirement
|
30
36
|
requirements:
|
31
|
-
- - "
|
37
|
+
- - ">="
|
32
38
|
- !ruby/object:Gem::Version
|
33
39
|
version: 1.0.3
|
34
40
|
type: :runtime
|
35
41
|
prerelease: false
|
36
42
|
version_requirements: !ruby/object:Gem::Requirement
|
37
43
|
requirements:
|
38
|
-
- - "
|
44
|
+
- - ">="
|
39
45
|
- !ruby/object:Gem::Version
|
40
46
|
version: 1.0.3
|
41
47
|
- !ruby/object:Gem::Dependency
|
42
48
|
name: power_enum
|
43
49
|
requirement: !ruby/object:Gem::Requirement
|
44
50
|
requirements:
|
45
|
-
- - "
|
51
|
+
- - ">"
|
46
52
|
- !ruby/object:Gem::Version
|
47
|
-
version: '2.
|
53
|
+
version: '2.8'
|
54
|
+
- - "<"
|
55
|
+
- !ruby/object:Gem::Version
|
56
|
+
version: '4.0'
|
48
57
|
type: :runtime
|
49
58
|
prerelease: false
|
50
59
|
version_requirements: !ruby/object:Gem::Requirement
|
51
60
|
requirements:
|
52
|
-
- - "
|
61
|
+
- - ">"
|
62
|
+
- !ruby/object:Gem::Version
|
63
|
+
version: '2.8'
|
64
|
+
- - "<"
|
53
65
|
- !ruby/object:Gem::Version
|
54
|
-
version: '
|
66
|
+
version: '4.0'
|
55
67
|
- !ruby/object:Gem::Dependency
|
56
68
|
name: rake
|
57
69
|
requirement: !ruby/object:Gem::Requirement
|
@@ -248,7 +260,7 @@ homepage: https://github.com/HornsAndHooves/enum_state_machine
|
|
248
260
|
licenses:
|
249
261
|
- MIT
|
250
262
|
metadata: {}
|
251
|
-
post_install_message:
|
263
|
+
post_install_message:
|
252
264
|
rdoc_options:
|
253
265
|
- "--line-numbers"
|
254
266
|
- "--inline-source"
|
@@ -269,9 +281,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
269
281
|
- !ruby/object:Gem::Version
|
270
282
|
version: '0'
|
271
283
|
requirements: []
|
272
|
-
|
273
|
-
|
274
|
-
signing_key:
|
284
|
+
rubygems_version: 3.0.9
|
285
|
+
signing_key:
|
275
286
|
specification_version: 4
|
276
287
|
summary: Enum State machines for attributes
|
277
288
|
test_files:
|
@@ -309,4 +320,3 @@ test_files:
|
|
309
320
|
- test/unit/state_test.rb
|
310
321
|
- test/unit/transition_collection_test.rb
|
311
322
|
- test/unit/transition_test.rb
|
312
|
-
has_rdoc:
|