diff --git a/lib/state_machines/integrations/active_record.rb b/lib/state_machines/integrations/active_record.rb index 2d29e8f..0996768 100644 --- a/lib/state_machines/integrations/active_record.rb +++ b/lib/state_machines/integrations/active_record.rb @@ -456,8 +456,8 @@ def define_state_initializer define_helper :instance, <<-end_eval, __FILE__, __LINE__ + 1 def initialize(attributes = nil, *) super(attributes) do |*args| - attributes = attributes.transform_keys { |key| self.class.attribute_aliases[key.to_s] || key } scoped_attributes = (attributes || {}).merge(self.class.scope_attributes) + scoped_attributes.transform_keys! { |key| self.class.attribute_aliases[key.to_s] || key.to_s } self.class.state_machines.initialize_states(self, {}, scoped_attributes) yield(*args) if block_given? @@ -467,8 +467,8 @@ def initialize(attributes = nil, *) elsif ::ActiveRecord.gem_version >= Gem::Version.new('4.2') define_helper :instance, <<-end_eval, __FILE__, __LINE__ + 1 def initialize(attributes = nil, options = {}) - attributes = attributes.transform_keys { |key| self.class.attribute_aliases[key.to_s] || key } scoped_attributes = (attributes || {}).merge(self.class.scope_attributes) + scoped_attributes.transform_keys! { |key| self.class.attribute_aliases[key.to_s] || key.to_s } super(attributes, options) do |*args| self.class.state_machines.initialize_states(self, {}, scoped_attributes) diff --git a/test/machine_with_aliased_attribute_test.rb b/test/machine_with_aliased_attribute_test.rb index de7fb45..0837384 100644 --- a/test/machine_with_aliased_attribute_test.rb +++ b/test/machine_with_aliased_attribute_test.rb @@ -19,11 +19,5 @@ def test_should_check_custom_attribute_for_predicate @record.vehicle_status = 'parked' assert @record.status?(:parked) end - - def test_should_initialize_with_original_attribute_names - record = @model.new(:vehicle_status => 'bogus') - refute record.status?(:parked) - assert record.status?(:bogus) - end end diff --git a/test/machine_with_initialized_aliased_attribute_test.rb b/test/machine_with_initialized_aliased_attribute_test.rb new file mode 100644 index 0000000..4c057fa --- /dev/null +++ b/test/machine_with_initialized_aliased_attribute_test.rb @@ -0,0 +1,20 @@ +require_relative 'test_helper' + +class MachineWithInitializedAliasedAttributeTest < BaseTestCase + def setup + @model = new_model do + alias_attribute :custom_status, :state + end + + @machine = StateMachines::Machine.new(@model, :initial => :parked, :attribute => :state) + @machine.state :started + + @record = @model.new(:custom_status => :started) + end + + def test_should_match_original_attribute_value + refute @record.state?(:parked) + assert @record.state?(:started) + end +end +