state_machina 0.1.7 → 0.1.8
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/.tool-versions +1 -1
- data/Gemfile.lock +28 -12
- data/lib/state_machina/extended_integration.rb +1 -1
- data/lib/state_machina/integration.rb +11 -5
- data/lib/state_machina/machine.rb +23 -2
- data/lib/state_machina/state.rb +10 -0
- data/lib/state_machina/version.rb +1 -1
- data/lib/state_machina.rb +3 -0
- metadata +43 -8
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: da7744a0dd9bd422710ba97e8db2799be0ce7a9c2aed9da7c580f0f0941b3276
|
|
4
|
+
data.tar.gz: ffa9c6ab967b3490b0bc54fbd34ea51332d9d2e61470e1c07468a1f8caf81b80
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: ca9ee7f05f7790ebe6cedb28d7d62963f1718ac1d0baf2317640ae26b42846e06999784ebb906cc62035dc320e51520a1479204c62c98051c7989de862b83d65
|
|
7
|
+
data.tar.gz: 96215bace1c18c7d7a9829541e035d4cdb46f6ee136ca0f5a6621b31d49df22b44f6f9224f825863a5a84255eb4ff817ed07a769c0fa8bf32a9dccb0e5d965ce
|
data/.tool-versions
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
ruby
|
|
1
|
+
ruby 4.0.2
|
data/Gemfile.lock
CHANGED
|
@@ -1,25 +1,40 @@
|
|
|
1
1
|
PATH
|
|
2
2
|
remote: .
|
|
3
3
|
specs:
|
|
4
|
-
state_machina (0.1.
|
|
4
|
+
state_machina (0.1.8)
|
|
5
|
+
activesupport (>= 5.0, < 8)
|
|
5
6
|
concurrent-ruby (< 2)
|
|
7
|
+
i18n (>= 0.7, < 2)
|
|
6
8
|
|
|
7
9
|
GEM
|
|
8
10
|
remote: https://rubygems.org/
|
|
9
11
|
specs:
|
|
10
|
-
activesupport (
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
12
|
+
activesupport (7.2.4)
|
|
13
|
+
base64
|
|
14
|
+
benchmark (>= 0.3)
|
|
15
|
+
bigdecimal
|
|
16
|
+
concurrent-ruby (~> 1.0, >= 1.3.1)
|
|
17
|
+
connection_pool (>= 2.2.5, < 3)
|
|
18
|
+
drb
|
|
19
|
+
i18n (>= 1.6, < 2)
|
|
20
|
+
logger (>= 1.4.2)
|
|
21
|
+
minitest (>= 5.1, < 6)
|
|
22
|
+
securerandom (>= 0.3)
|
|
23
|
+
tzinfo (~> 2.0, >= 2.0.5)
|
|
15
24
|
ast (2.4.2)
|
|
25
|
+
base64 (0.3.0)
|
|
26
|
+
benchmark (0.5.0)
|
|
27
|
+
bigdecimal (4.1.3)
|
|
16
28
|
coderay (1.1.3)
|
|
17
|
-
concurrent-ruby (1.
|
|
29
|
+
concurrent-ruby (1.3.8)
|
|
30
|
+
connection_pool (2.5.5)
|
|
18
31
|
diff-lcs (1.5.0)
|
|
19
|
-
|
|
32
|
+
drb (2.2.3)
|
|
33
|
+
i18n (1.15.2)
|
|
20
34
|
concurrent-ruby (~> 1.0)
|
|
35
|
+
logger (1.7.0)
|
|
21
36
|
method_source (1.0.0)
|
|
22
|
-
minitest (5.
|
|
37
|
+
minitest (5.27.0)
|
|
23
38
|
parallel (1.21.0)
|
|
24
39
|
parser (3.1.1.0)
|
|
25
40
|
ast (~> 2.4.1)
|
|
@@ -55,15 +70,16 @@ GEM
|
|
|
55
70
|
rubocop-ast (1.16.0)
|
|
56
71
|
parser (>= 3.1.1.0)
|
|
57
72
|
ruby-progressbar (1.11.0)
|
|
58
|
-
|
|
59
|
-
tzinfo (
|
|
60
|
-
|
|
73
|
+
securerandom (0.4.1)
|
|
74
|
+
tzinfo (2.0.6)
|
|
75
|
+
concurrent-ruby (~> 1.0)
|
|
61
76
|
unicode-display_width (2.1.0)
|
|
62
77
|
|
|
63
78
|
PLATFORMS
|
|
64
79
|
arm64-darwin-21
|
|
65
80
|
arm64-darwin-22
|
|
66
81
|
arm64-darwin-23
|
|
82
|
+
arm64-darwin-25
|
|
67
83
|
x86_64-darwin-20
|
|
68
84
|
|
|
69
85
|
DEPENDENCIES
|
|
@@ -2,7 +2,7 @@ module StateMachina
|
|
|
2
2
|
module ExtendedIntegration
|
|
3
3
|
module ClassMethods
|
|
4
4
|
# Extends a machine on a model where the machine is already defined
|
|
5
|
-
def extend_machine(klass, machine_name =
|
|
5
|
+
def extend_machine(klass, machine_name = StateMachina::Machine::DEFAULT_MACHINE_NAME)
|
|
6
6
|
model_name = StateMachina::Util.normalized_klass_to_name(klass)
|
|
7
7
|
|
|
8
8
|
yield(StateMachina::Registry.find_machine!(model_name, machine_name))
|
|
@@ -2,9 +2,15 @@ module StateMachina
|
|
|
2
2
|
module Integration
|
|
3
3
|
module ClassMethods
|
|
4
4
|
# Defines a new machine on a model
|
|
5
|
-
def define_machine(machine_name =
|
|
5
|
+
def define_machine(machine_name = StateMachina::Machine::DEFAULT_MACHINE_NAME, column_name: :state, i18n_scope: nil, metadata: {})
|
|
6
6
|
model_name = StateMachina::Util.normalized_klass_to_name(self)
|
|
7
|
-
machine = StateMachina::Machine.new(
|
|
7
|
+
machine = StateMachina::Machine.new(
|
|
8
|
+
model_name,
|
|
9
|
+
machine_name,
|
|
10
|
+
column_name: column_name,
|
|
11
|
+
i18n_scope: i18n_scope,
|
|
12
|
+
metadata: metadata
|
|
13
|
+
)
|
|
8
14
|
|
|
9
15
|
yield(StateMachina::Registry.register_machine(machine))
|
|
10
16
|
end
|
|
@@ -12,7 +18,7 @@ module StateMachina
|
|
|
12
18
|
alias_method :define_state_machine, :define_machine
|
|
13
19
|
|
|
14
20
|
# Extends a machine on a model where the machine is already defined
|
|
15
|
-
def extend_machine(klass, machine_name =
|
|
21
|
+
def extend_machine(klass, machine_name = StateMachina::Machine::DEFAULT_MACHINE_NAME)
|
|
16
22
|
model_name = StateMachina::Util.normalized_klass_to_name(klass)
|
|
17
23
|
|
|
18
24
|
yield(StateMachina::Registry.find_machine!(model_name, machine_name))
|
|
@@ -21,7 +27,7 @@ module StateMachina
|
|
|
21
27
|
alias_method :extend_state_machine, :extend_machine
|
|
22
28
|
|
|
23
29
|
# Returns the defined machine on a model
|
|
24
|
-
def machine(machine_name =
|
|
30
|
+
def machine(machine_name = StateMachina::Machine::DEFAULT_MACHINE_NAME)
|
|
25
31
|
model_name = StateMachina::Util.normalized_klass_to_name(self)
|
|
26
32
|
|
|
27
33
|
StateMachina::Registry.find_machine!(model_name, machine_name)
|
|
@@ -44,7 +50,7 @@ module StateMachina
|
|
|
44
50
|
end
|
|
45
51
|
|
|
46
52
|
# Returns the defined machine on a model instance
|
|
47
|
-
def machine(machine_name =
|
|
53
|
+
def machine(machine_name = StateMachina::Machine::DEFAULT_MACHINE_NAME)
|
|
48
54
|
model_name = StateMachina::Util.normalized_klass_to_name(self.class)
|
|
49
55
|
|
|
50
56
|
machine = StateMachina::Registry.find_machine!(model_name, machine_name).dup
|
|
@@ -1,17 +1,32 @@
|
|
|
1
1
|
module StateMachina
|
|
2
2
|
class Machine
|
|
3
|
-
|
|
3
|
+
DEFAULT_MACHINE_NAME = 'default'
|
|
4
|
+
|
|
5
|
+
attr_reader :model_name, :name, :column_name, :i18n_scope, :metadata
|
|
4
6
|
attr_accessor :model
|
|
5
7
|
|
|
6
8
|
delegate :before?, :before_inclusive?, :past?, :past_inclusive?, :between?, :between_inclusive?, to: :current_state
|
|
7
9
|
|
|
8
|
-
def initialize(model_name, name, column_name: :state, metadata: {})
|
|
10
|
+
def initialize(model_name, name, column_name: :state, i18n_scope: nil, metadata: {})
|
|
9
11
|
@model_name = model_name
|
|
10
12
|
@name = name.to_s
|
|
11
13
|
@column_name = column_name
|
|
14
|
+
@i18n_scope = i18n_scope || default_i18n_scope
|
|
12
15
|
@metadata = metadata
|
|
13
16
|
end
|
|
14
17
|
|
|
18
|
+
def default?
|
|
19
|
+
name == DEFAULT_MACHINE_NAME
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def self.default_i18n_scope(model_name)
|
|
23
|
+
"activerecord.attributes.#{model_name}"
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def human_name
|
|
27
|
+
I18n.t(name, scope: "#{i18n_scope}.machines", default: name.humanize)
|
|
28
|
+
end
|
|
29
|
+
|
|
15
30
|
def state(state_name, metadata: {})
|
|
16
31
|
state = StateMachina::State.new(model_name, name, state_name, metadata: metadata)
|
|
17
32
|
|
|
@@ -55,6 +70,7 @@ module StateMachina
|
|
|
55
70
|
end
|
|
56
71
|
|
|
57
72
|
def update_state(new_state)
|
|
73
|
+
raise(UnknownStateError, "for model: #{model_name}, with name: #{new_state}") unless states.find_by_name(new_state)
|
|
58
74
|
if model.respond_to?(:update)
|
|
59
75
|
model.update(column_name => new_state)
|
|
60
76
|
else
|
|
@@ -63,6 +79,7 @@ module StateMachina
|
|
|
63
79
|
end
|
|
64
80
|
|
|
65
81
|
def update_state!(new_state)
|
|
82
|
+
raise(UnknownStateError, "for model: #{model_name}, with name: #{new_state}") unless states.find_by_name(new_state)
|
|
66
83
|
if model.respond_to?(:update!)
|
|
67
84
|
model.update!(column_name => new_state)
|
|
68
85
|
else
|
|
@@ -72,6 +89,10 @@ module StateMachina
|
|
|
72
89
|
|
|
73
90
|
private
|
|
74
91
|
|
|
92
|
+
def default_i18n_scope
|
|
93
|
+
self.class.default_i18n_scope(model_name)
|
|
94
|
+
end
|
|
95
|
+
|
|
75
96
|
def select_possible_events(events)
|
|
76
97
|
events.select(&:possible?)
|
|
77
98
|
end
|
data/lib/state_machina/state.rb
CHANGED
|
@@ -10,6 +10,16 @@ module StateMachina
|
|
|
10
10
|
@metadata = metadata
|
|
11
11
|
end
|
|
12
12
|
|
|
13
|
+
def human_name
|
|
14
|
+
return name.humanize if machine.nil?
|
|
15
|
+
|
|
16
|
+
I18n.t(name, scope: i18n_scope, default: name.humanize)
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def i18n_scope
|
|
20
|
+
"#{machine.i18n_scope}.states.#{machine_name}"
|
|
21
|
+
end
|
|
22
|
+
|
|
13
23
|
def before?(other_state_name)
|
|
14
24
|
return false if machine.nil?
|
|
15
25
|
|
data/lib/state_machina.rb
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
require "concurrent"
|
|
4
|
+
require "i18n"
|
|
4
5
|
require "active_support/core_ext/module/delegation"
|
|
6
|
+
require "active_support/core_ext/string/inflections"
|
|
5
7
|
|
|
6
8
|
require_relative "state_machina/event"
|
|
7
9
|
require_relative "state_machina/events_collection"
|
|
@@ -19,4 +21,5 @@ module StateMachina
|
|
|
19
21
|
class Error < StandardError; end
|
|
20
22
|
|
|
21
23
|
class NoMachineFoundError < Error; end
|
|
24
|
+
class UnknownStateError < Error; end
|
|
22
25
|
end
|
metadata
CHANGED
|
@@ -1,15 +1,34 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: state_machina
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.1.
|
|
4
|
+
version: 0.1.8
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Jan van der Pas
|
|
8
|
-
autorequire:
|
|
9
8
|
bindir: exe
|
|
10
9
|
cert_chain: []
|
|
11
|
-
date:
|
|
10
|
+
date: 1980-01-02 00:00:00.000000000 Z
|
|
12
11
|
dependencies:
|
|
12
|
+
- !ruby/object:Gem::Dependency
|
|
13
|
+
name: activesupport
|
|
14
|
+
requirement: !ruby/object:Gem::Requirement
|
|
15
|
+
requirements:
|
|
16
|
+
- - ">="
|
|
17
|
+
- !ruby/object:Gem::Version
|
|
18
|
+
version: '5.0'
|
|
19
|
+
- - "<"
|
|
20
|
+
- !ruby/object:Gem::Version
|
|
21
|
+
version: '8'
|
|
22
|
+
type: :runtime
|
|
23
|
+
prerelease: false
|
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
25
|
+
requirements:
|
|
26
|
+
- - ">="
|
|
27
|
+
- !ruby/object:Gem::Version
|
|
28
|
+
version: '5.0'
|
|
29
|
+
- - "<"
|
|
30
|
+
- !ruby/object:Gem::Version
|
|
31
|
+
version: '8'
|
|
13
32
|
- !ruby/object:Gem::Dependency
|
|
14
33
|
name: concurrent-ruby
|
|
15
34
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -24,6 +43,26 @@ dependencies:
|
|
|
24
43
|
- - "<"
|
|
25
44
|
- !ruby/object:Gem::Version
|
|
26
45
|
version: '2'
|
|
46
|
+
- !ruby/object:Gem::Dependency
|
|
47
|
+
name: i18n
|
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
|
49
|
+
requirements:
|
|
50
|
+
- - ">="
|
|
51
|
+
- !ruby/object:Gem::Version
|
|
52
|
+
version: '0.7'
|
|
53
|
+
- - "<"
|
|
54
|
+
- !ruby/object:Gem::Version
|
|
55
|
+
version: '2'
|
|
56
|
+
type: :runtime
|
|
57
|
+
prerelease: false
|
|
58
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
59
|
+
requirements:
|
|
60
|
+
- - ">="
|
|
61
|
+
- !ruby/object:Gem::Version
|
|
62
|
+
version: '0.7'
|
|
63
|
+
- - "<"
|
|
64
|
+
- !ruby/object:Gem::Version
|
|
65
|
+
version: '2'
|
|
27
66
|
- !ruby/object:Gem::Dependency
|
|
28
67
|
name: pry
|
|
29
68
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -38,7 +77,6 @@ dependencies:
|
|
|
38
77
|
- - "<"
|
|
39
78
|
- !ruby/object:Gem::Version
|
|
40
79
|
version: '0.15'
|
|
41
|
-
description:
|
|
42
80
|
email:
|
|
43
81
|
- jan.vanderpas@beequip.nl
|
|
44
82
|
executables: []
|
|
@@ -68,11 +106,9 @@ files:
|
|
|
68
106
|
- lib/state_machina/util.rb
|
|
69
107
|
- lib/state_machina/version.rb
|
|
70
108
|
- sig/state_machina.rbs
|
|
71
|
-
homepage:
|
|
72
109
|
licenses:
|
|
73
110
|
- MIT
|
|
74
111
|
metadata: {}
|
|
75
|
-
post_install_message:
|
|
76
112
|
rdoc_options: []
|
|
77
113
|
require_paths:
|
|
78
114
|
- lib
|
|
@@ -87,8 +123,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
87
123
|
- !ruby/object:Gem::Version
|
|
88
124
|
version: '0'
|
|
89
125
|
requirements: []
|
|
90
|
-
rubygems_version:
|
|
91
|
-
signing_key:
|
|
126
|
+
rubygems_version: 4.0.13
|
|
92
127
|
specification_version: 4
|
|
93
128
|
summary: State machine supporting multiple machines per object
|
|
94
129
|
test_files: []
|