Skip to content

Commit 6a15719

Browse files
authored
Merge pull request #43 from state-machines/moderniz
feat: modernize ActiveModel integration with Ruby 3+ patterns release-as: 0.31.0
2 parents d9806c6 + f3ee659 commit 6a15719

File tree

4 files changed

+13
-12
lines changed

4 files changed

+13
-12
lines changed

Gemfile

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,4 +9,3 @@ platforms :mri do
99
gem 'debug'
1010
end
1111

12-
gem 'mutex_m'

lib/state_machines/integrations/active_model.rb

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -324,13 +324,13 @@ def self.matching_ancestors
324324

325325
# Adds a validation error to the given object
326326
def invalidate(object, attribute, message, values = [])
327-
if supports_validations?
328-
attribute = self.attribute(attribute)
329-
options = values.to_h { |key, value| [key, value] }
327+
return unless supports_validations?
330328

331-
default_options = default_error_message_options(object, attribute, message)
332-
object.errors.add(attribute, message, **options, **default_options)
333-
end
329+
attribute = self.attribute(attribute)
330+
options = values.to_h
331+
332+
default_options = default_error_message_options(object, attribute, message)
333+
object.errors.add(attribute, message, **options, **default_options)
334334
end
335335

336336
# Describes the current validation errors on the given object. If none
@@ -353,7 +353,7 @@ def around_validation(object)
353353

354354
def define_state_initializer
355355
define_helper :instance, <<-end_eval, __FILE__, __LINE__ + 1
356-
def initialize(params = {})
356+
def initialize(**params)
357357
params.transform_keys! do |key|
358358
self.class.attribute_aliases[key.to_s] || key.to_s
359359
end if self.class.respond_to?(:attribute_aliases)

lib/state_machines/integrations/active_model/locale.rb

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,14 @@
11
# frozen_string_literal: true
22

3+
# Use lazy evaluation to avoid circular dependencies with frozen default_messages
4+
# This ensures messages can be updated after gem loading while maintaining thread safety
35
{ en: {
46
activemodel: {
57
errors: {
68
messages: {
7-
invalid: StateMachines::Machine.default_messages[:invalid],
8-
invalid_event: StateMachines::Machine.default_messages[:invalid_event] % ['%{state}'],
9-
invalid_transition: StateMachines::Machine.default_messages[:invalid_transition] % ['%{event}']
9+
invalid: lambda { |*| StateMachines::Machine.default_messages[:invalid] },
10+
invalid_event: lambda { |*| StateMachines::Machine.default_messages[:invalid_event] % ['%{state}'] },
11+
invalid_transition: lambda { |*| StateMachines::Machine.default_messages[:invalid_transition] % ['%{event}'] }
1012
}
1113
}
1214
}

state_machines-activemodel.gemspec

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ Gem::Specification.new do |spec|
1616
spec.test_files = Dir.glob('test/**/{*_test,test_*}.rb')
1717
spec.require_paths = ['lib']
1818
spec.required_ruby_version = '>= 3.1.0' # jruby is still outdated
19-
spec.add_dependency 'state_machines', '>= 0.10.0'
19+
spec.add_dependency 'state_machines', '>= 0.31.0'
2020
spec.add_dependency 'activemodel', '>= 7.1'
2121

2222
spec.add_development_dependency 'bundler', '>= 1.6'

0 commit comments

Comments
 (0)