From ab86f8b5a7c062b7f3d6cd510ef840acd3e63c23 Mon Sep 17 00:00:00 2001 From: Roland Studer Date: Fri, 23 Apr 2021 00:10:24 +0200 Subject: [PATCH] fix: timestamp will work with named machine --- lib/aasm/base.rb | 2 +- .../models/timestamps_with_named_machine_example.rb | 13 +++++++++++++ spec/unit/timestamps_spec.rb | 5 +++++ 3 files changed, 19 insertions(+), 1 deletion(-) create mode 100644 spec/models/timestamps_with_named_machine_example.rb diff --git a/lib/aasm/base.rb b/lib/aasm/base.rb index d660c30d..5e870cfc 100644 --- a/lib/aasm/base.rb +++ b/lib/aasm/base.rb @@ -268,7 +268,7 @@ def setup_timestamps(aasm_name) after_all_transitions do if self.class.aasm(:"#{aasm_name}").state_machine.config.timestamps - ts_setter = "#{aasm.to_state}_at=" + ts_setter = "#{aasm(aasm_name).to_state}_at=" respond_to?(ts_setter) && send(ts_setter, ::Time.now) end end diff --git a/spec/models/timestamps_with_named_machine_example.rb b/spec/models/timestamps_with_named_machine_example.rb new file mode 100644 index 00000000..0ebbbf7e --- /dev/null +++ b/spec/models/timestamps_with_named_machine_example.rb @@ -0,0 +1,13 @@ +class TimestampsWithNamedMachineExample + include AASM + + attr_accessor :opened_at + + aasm :my_state, timestamps: true do + state :opened + + event :open do + transitions to: :opened + end + end +end diff --git a/spec/unit/timestamps_spec.rb b/spec/unit/timestamps_spec.rb index 1912589f..0c36ec48 100644 --- a/spec/unit/timestamps_spec.rb +++ b/spec/unit/timestamps_spec.rb @@ -24,4 +24,9 @@ object.class.aasm.state_machine.config.timestamps = true expect { object.open }.to change { object.opened_at } end + + it 'calls a timestamp setter when using a named state machine' do + object = TimestampsWithNamedMachineExample.new + expect { object.open }.to change { object.opened_at }.from(nil).to(instance_of(::Time)) + end end