Skip to content

Commit 455a21d

Browse files
authored
Merge pull request #507 from gocardless/reload-should-clear-the-cache
ActiveModel.reload has to clear the internal cache
2 parents 2a9d8ac + 3ce4571 commit 455a21d

File tree

6 files changed

+35
-21
lines changed

6 files changed

+35
-21
lines changed

CHANGELOG.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,8 @@
1+
## v10.2.2 21st April 2023
2+
3+
### Changed
4+
- Calling `active_record.reload` resets the adapater's internal cache
5+
16
## v10.2.1 3rd April 2023
27

38
### Changed

lib/statesman/adapters/active_record.rb

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -76,8 +76,9 @@ def last(force_reload: false)
7676
end
7777

7878
def reset
79-
remove_instance_variable(:@last_transition) \
80-
if instance_variable_defined?(:@last_transition)
79+
if instance_variable_defined?(:@last_transition)
80+
remove_instance_variable(:@last_transition)
81+
end
8182
end
8283

8384
private

lib/statesman/adapters/active_record_queries.rb

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,14 @@ def included(base)
4949

5050
define_in_state(base, query_builder)
5151
define_not_in_state(base, query_builder)
52+
53+
define_method(:reload) do |*a|
54+
instance = super(*a)
55+
if instance.respond_to?(:state_machine, true)
56+
instance.state_machine.reset
57+
end
58+
instance
59+
end
5260
end
5361

5462
private

lib/statesman/version.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
# frozen_string_literal: true
22

33
module Statesman
4-
VERSION = "10.2.1"
4+
VERSION = "10.2.2"
55
end

spec/statesman/machine_spec.rb

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -976,20 +976,20 @@ def after_initialize; end
976976
end
977977

978978
context "with defined callbacks" do
979-
let(:callback_1) { -> { "Hi" } }
980-
let(:callback_2) { -> { "Bye" } }
979+
let(:callback_one) { -> { "Hi" } }
980+
let(:callback_two) { -> { "Bye" } }
981981

982982
before do
983-
machine.send(definer, from: :x, to: :y, &callback_1)
984-
machine.send(definer, from: :y, to: :z, &callback_2)
983+
machine.send(definer, from: :x, to: :y, &callback_one)
984+
machine.send(definer, from: :y, to: :z, &callback_two)
985985
end
986986

987987
it "contains the relevant callback" do
988-
expect(callbacks.map(&:callback)).to include(callback_1)
988+
expect(callbacks.map(&:callback)).to include(callback_one)
989989
end
990990

991991
it "does not contain the irrelevant callback" do
992-
expect(callbacks.map(&:callback)).to_not include(callback_2)
992+
expect(callbacks.map(&:callback)).to_not include(callback_two)
993993
end
994994
end
995995
end

spec/support/active_record.rb

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,22 @@ class MyStateMachine
2020
transition from: :failed, to: :initial
2121
end
2222

23+
class MyActiveRecordModelTransition < ActiveRecord::Base
24+
include Statesman::Adapters::ActiveRecordTransition
25+
26+
belongs_to :my_active_record_model
27+
serialize :metadata, JSON
28+
end
29+
2330
class MyActiveRecordModel < ActiveRecord::Base
2431
has_many :my_active_record_model_transitions, autosave: false
2532
alias_method :transitions, :my_active_record_model_transitions
2633

34+
include Statesman::Adapters::ActiveRecordQueries[
35+
transition_class: MyActiveRecordModelTransition,
36+
initial_state: :initial
37+
]
38+
2739
def state_machine
2840
@state_machine ||= MyStateMachine.new(
2941
self, transition_class: MyActiveRecordModelTransition
@@ -33,18 +45,6 @@ def state_machine
3345
def metadata
3446
super || {}
3547
end
36-
37-
def reload(*)
38-
state_machine.reset
39-
super
40-
end
41-
end
42-
43-
class MyActiveRecordModelTransition < ActiveRecord::Base
44-
include Statesman::Adapters::ActiveRecordTransition
45-
46-
belongs_to :my_active_record_model
47-
serialize :metadata, JSON
4848
end
4949

5050
class MyActiveRecordModelTransitionWithoutInclude < ActiveRecord::Base

0 commit comments

Comments
 (0)