state_machina 0.1.7 → 0.1.9

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: 3f0a424d08f9a7c3103b4e1eca3d27cda85089c72c25fecdceaad77bf4ba7ad1
4
- data.tar.gz: 5eb6269265360180bc155872205765ae49574e593b1614ec003125ab8109c27a
3
+ metadata.gz: 7b87e9fd8939ff8f4d62931fbd68fadedb2d1ae389cfff44b61241d721439853
4
+ data.tar.gz: b123d40e03a891aff255b19bdd951677b3d0e7c9a1627fbc2244120762e97544
5
5
  SHA512:
6
- metadata.gz: 3f19e17c7e7ac1f8420027b727954bac2677878ef4c9bc2c8b9b8a17af09b9902b7d00f170d3eea7cab154caa90a0e13382a4237f4adbed5c2436f5958608bf5
7
- data.tar.gz: ee4ba5d3bdc4aa9e4f6fa03612312a5f53215fdabf270d99d032a1e4ba73a72429dc45b1bc3166de030b34217c8c03288cf4458ce35a95b9dd16e5b32f0f00cf
6
+ metadata.gz: 6c792c289cc0ed96d530753fc0ecac831dec3acefa13f20dae67dd536995f9b3016e1f5efab4b602b9b93c5044aae46207aab560e3a831d31b8fd7a934e6d4ac
7
+ data.tar.gz: c9846b455451b8954c95b8529947dabc7b0cf9a252d811139ce42e3e97685f77f6bd13c84df342cea5753bff60510595c9af5eb42c464df1e0fdd98a4ca678b8
data/.tool-versions CHANGED
@@ -1 +1 @@
1
- ruby 3.2.0
1
+ ruby 4.0.2
data/Gemfile CHANGED
@@ -11,4 +11,4 @@ gem "rspec", "~> 3.0"
11
11
 
12
12
  gem "rubocop", "~> 1.21"
13
13
 
14
- gem "activesupport", "< 8", require: false
14
+ gem "activesupport", "< 8", require: false
data/Gemfile.lock CHANGED
@@ -1,25 +1,40 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- state_machina (0.1.6)
4
+ state_machina (0.1.9)
5
+ activesupport (>= 5.0)
5
6
  concurrent-ruby (< 2)
7
+ i18n (>= 0.7)
6
8
 
7
9
  GEM
8
10
  remote: https://rubygems.org/
9
11
  specs:
10
- activesupport (5.2.8.1)
11
- concurrent-ruby (~> 1.0, >= 1.0.2)
12
- i18n (>= 0.7, < 2)
13
- minitest (~> 5.1)
14
- tzinfo (~> 1.1)
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.2.3)
29
+ concurrent-ruby (1.3.8)
30
+ connection_pool (2.5.5)
18
31
  diff-lcs (1.5.0)
19
- i18n (1.14.5)
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.22.3)
37
+ minitest (5.27.0)
23
38
  parallel (1.21.0)
24
39
  parser (3.1.1.0)
25
40
  ast (~> 2.4.1)
@@ -27,7 +42,7 @@ GEM
27
42
  coderay (~> 1.1)
28
43
  method_source (~> 1.0)
29
44
  rainbow (3.1.1)
30
- rake (13.0.6)
45
+ rake (13.4.2)
31
46
  regexp_parser (2.2.1)
32
47
  rexml (3.2.5)
33
48
  rspec (3.11.0)
@@ -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
- thread_safe (0.3.6)
59
- tzinfo (1.2.11)
60
- thread_safe (~> 0.1)
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 = 'default')
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 = 'default', column_name: :state, metadata: {})
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(model_name, machine_name, column_name: column_name, metadata: metadata)
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 = 'default')
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 = 'default')
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 = 'default')
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
- attr_reader :model_name, :name, :column_name, :metadata
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
@@ -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
 
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module StateMachina
4
- VERSION = "0.1.7"
4
+ VERSION = "0.1.9"
5
5
  end
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,28 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: state_machina
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.7
4
+ version: 0.1.9
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: 2024-05-14 00:00:00.000000000 Z
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
+ type: :runtime
20
+ prerelease: false
21
+ version_requirements: !ruby/object:Gem::Requirement
22
+ requirements:
23
+ - - ">="
24
+ - !ruby/object:Gem::Version
25
+ version: '5.0'
13
26
  - !ruby/object:Gem::Dependency
14
27
  name: concurrent-ruby
15
28
  requirement: !ruby/object:Gem::Requirement
@@ -24,6 +37,20 @@ dependencies:
24
37
  - - "<"
25
38
  - !ruby/object:Gem::Version
26
39
  version: '2'
40
+ - !ruby/object:Gem::Dependency
41
+ name: i18n
42
+ requirement: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - ">="
45
+ - !ruby/object:Gem::Version
46
+ version: '0.7'
47
+ type: :runtime
48
+ prerelease: false
49
+ version_requirements: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - ">="
52
+ - !ruby/object:Gem::Version
53
+ version: '0.7'
27
54
  - !ruby/object:Gem::Dependency
28
55
  name: pry
29
56
  requirement: !ruby/object:Gem::Requirement
@@ -38,7 +65,6 @@ dependencies:
38
65
  - - "<"
39
66
  - !ruby/object:Gem::Version
40
67
  version: '0.15'
41
- description:
42
68
  email:
43
69
  - jan.vanderpas@beequip.nl
44
70
  executables: []
@@ -68,11 +94,9 @@ files:
68
94
  - lib/state_machina/util.rb
69
95
  - lib/state_machina/version.rb
70
96
  - sig/state_machina.rbs
71
- homepage:
72
97
  licenses:
73
98
  - MIT
74
99
  metadata: {}
75
- post_install_message:
76
100
  rdoc_options: []
77
101
  require_paths:
78
102
  - lib
@@ -87,8 +111,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
87
111
  - !ruby/object:Gem::Version
88
112
  version: '0'
89
113
  requirements: []
90
- rubygems_version: 3.4.21
91
- signing_key:
114
+ rubygems_version: 4.0.13
92
115
  specification_version: 4
93
116
  summary: State machine supporting multiple machines per object
94
117
  test_files: []