statesman-multi_state 0.2.5 → 0.2.7

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: 72d09a68d4f64028e6376bee25b22a22d0e1bd299fde5e49f74adc9220cb034b
4
- data.tar.gz: 7682734dee3c90329c5a630116f8682ad7824bc3164b3c55ae472d2e71ef9b77
3
+ metadata.gz: 1bf730dc6e8c627150dccbc9d71deccb850c5d38b1df57571d8a9498bcc7ec3e
4
+ data.tar.gz: 7d2ee716b2e833fdce24a1cc0a1f18eeb1414fcdedc11a39bdebcce0af38965b
5
5
  SHA512:
6
- metadata.gz: e3ad119c6bea29649e78fee1b6a295b7a5fab795ec860c3741d3722c58e2284612541d627c78b0ec645937175cf64378b0aaadaeea51be1d0a2ef0fb4126278f
7
- data.tar.gz: 438244f9e6f1b1775d47653ef29708335661968b8e3dae317df452094ce0ec8c743d976eeb22e752bedc137bd836ef406f89b90fc8b0c85c09522d53421e46f5
6
+ metadata.gz: b774428fbe41859c4794c625e2adf80a0954285c376ade1cb71c2a4045cb4796fb0c9a145118c01c0d8ae6e0b3c13b1eb4744ab5dd3fe7f704588a4cc96be7c0
7
+ data.tar.gz: 822b889f5a7cfdde93d2602d83113588daf419bc070ab6582bf900b6fa67272e2bb9df263f6db614438b2cab136753625ca0f7e17595a8b5c931bbe911210047
@@ -39,14 +39,21 @@ module Statesman
39
39
 
40
40
  def #{state_machine_name}
41
41
  key = "@#{state_machine_name}"
42
- return instance_variable_get(key) if instance_variable_defined?(key)
42
+ return instance_variable_get(key) if instance_variable_defined?(key) && @#{state_machine_name}.object.persisted?
43
43
 
44
44
  instance_variable_set(key, #{state_machine_klass}.new(
45
45
  self,
46
46
  transition_class: #{transition_klass},
47
47
  association_name: "#{transition_name}",
48
- initial_transition: "#{initial_transition}"
48
+ initial_transition: false
49
49
  ))
50
+
51
+ if #{initial_transition}
52
+ if @#{state_machine_name}.history.empty? && #{state_machine_klass}.initial_state
53
+ @#{state_machine_name}.instance_variable_get(:@storage_adapter).create(nil, #{state_machine_klass}.initial_state) if @#{state_machine_name}.object.persisted?
54
+ end
55
+ end
56
+ @#{state_machine_name}
50
57
  end
51
58
 
52
59
  def #{virtual_attribute_name}
@@ -57,6 +64,12 @@ module Statesman
57
64
  Hash[self.class.#{field_name}_human_wrapper]
58
65
  .invert[#{field_name}_current_state]
59
66
  end
67
+
68
+ private
69
+
70
+ def #{field_name}
71
+ #{field_name}_current_state
72
+ end
60
73
  CODE
61
74
 
62
75
  include(const_set("#{field_name}#{SecureRandom.hex(4)}_mod".classify, Module.new).tap do |mod|
@@ -77,8 +90,13 @@ module Statesman
77
90
  class_eval <<~METHOD, __FILE__, __LINE__ + 1
78
91
  def save_with_state(**options)
79
92
  @registered_callbacks ||= []
80
- if #{virtual_attribute_name}_changed? && #{field_name}_can_transition_to?(#{virtual_attribute_name})
81
- @registered_callbacks << -> { #{field_name}_transition_to(#{virtual_attribute_name}, **options) }
93
+ if #{virtual_attribute_name}.to_s != #{field_name}_current_state.to_s
94
+ if #{field_name}_can_transition_to?(#{virtual_attribute_name})
95
+ @registered_callbacks << -> { #{field_name}_transition_to(#{virtual_attribute_name}, **options) }
96
+ else
97
+ errors.add(:#{field_name}, :invalid_transition, message: "cannot transition from \#{#{field_name}} to \#{#{virtual_attribute_name}}")
98
+ return false
99
+ end
82
100
  end
83
101
 
84
102
  if defined?(super)
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Statesman
4
4
  module MultiState
5
- VERSION = '0.2.5'
5
+ VERSION = '0.2.7'
6
6
  end
7
7
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: statesman-multi_state
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.5
4
+ version: 0.2.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Chedli Bourguiba
@@ -76,7 +76,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
76
76
  - !ruby/object:Gem::Version
77
77
  version: '0'
78
78
  requirements: []
79
- rubygems_version: 3.6.7
79
+ rubygems_version: 3.6.9
80
80
  specification_version: 4
81
81
  summary: Rails/Statesman plugin that handle multiple state machines on the same model
82
82
  through `has_one_state_machine` ActiveRecord macro