Skip to content

Commit e01efee

Browse files
committed
Add tests
1 parent 68b8b41 commit e01efee

File tree

2 files changed

+72
-4
lines changed

2 files changed

+72
-4
lines changed

lib/active_record_replica/active_record_replica.rb

+10-3
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ def self.read_from_primary(&block)
4747
# Then use this method and supply block to read from the replica database
4848
# Only applies to calls made within the current thread
4949
def self.read_from_replica(&block)
50-
thread_variable_yield(:active_record_replica, nil, &block)
50+
thread_variable_yield(:active_record_replica, :replica, &block)
5151
end
5252

5353
# When only reading from a replica it is important to prevent entering any into
@@ -66,12 +66,19 @@ def self.skip_transactions
6666

6767
# Whether this thread is currently forcing all reads to go against the primary database
6868
def self.read_from_primary?
69-
!@read_from_replica || thread_variable_equals(:active_record_replica, :primary)
69+
!read_from_replica?
7070
end
7171

7272
# Whether this thread is currently forcing all reads to go against the replica database
7373
def self.read_from_replica?
74-
@read_from_replica && thread_variable_equals(:active_record_replica, nil)
74+
case Thread.current.thread_variable_get(:active_record_replica)
75+
when :primary
76+
false
77+
when :replica
78+
true
79+
else
80+
@read_from_replica
81+
end
7582
end
7683

7784
# Force all subsequent reads in this process to read from the primary database.

test/active_record_replica_test.rb

+62-1
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,14 @@
1212
#
1313
# The tests verify that reads going to the replica database do not find data written to the primary.
1414
class ActiveRecordReplicaTest < Minitest::Test
15-
describe "the active_record_replica gem" do
15+
describe ActiveRecordReplica do
1616
let(:user_name) { "Joe Bloggs" }
1717
let(:address) { "Somewhere" }
1818
let(:user) { User.new(name: user_name, address: address) }
1919

2020
before do
2121
ActiveRecordReplica.ignore_transactions = false
22+
ActiveRecordReplica.read_from_replica!
2223
User.delete_all
2324
end
2425

@@ -95,5 +96,65 @@ class ActiveRecordReplicaTest < Minitest::Test
9596
assert_equal 1, User.where(name: user_name, address: address).count
9697
end
9798
end
99+
100+
describe ".read_from_replica?" do
101+
it "is true when global replica flag is set" do
102+
ActiveRecordReplica.read_from_replica!
103+
assert ActiveRecordReplica.read_from_replica?
104+
end
105+
106+
it "is false when reading from replica" do
107+
ActiveRecordReplica.read_from_primary!
108+
refute ActiveRecordReplica.read_from_replica?
109+
end
110+
end
111+
112+
describe ".read_from_primary?" do
113+
it "is true when global primary flag is set" do
114+
ActiveRecordReplica.read_from_primary!
115+
assert ActiveRecordReplica.read_from_primary?
116+
end
117+
118+
it "is false when reading from replica" do
119+
ActiveRecordReplica.read_from_replica!
120+
refute ActiveRecordReplica.read_from_primary?
121+
end
122+
end
123+
124+
describe ".read_from_replica" do
125+
it "works with global replica flag" do
126+
ActiveRecordReplica.read_from_replica!
127+
ActiveRecordReplica.read_from_replica do
128+
assert ActiveRecordReplica.read_from_replica?
129+
refute ActiveRecordReplica.read_from_primary?
130+
end
131+
end
132+
133+
it "overwrites global replica flag" do
134+
ActiveRecordReplica.read_from_primary!
135+
ActiveRecordReplica.read_from_replica do
136+
assert ActiveRecordReplica.read_from_replica?
137+
refute ActiveRecordReplica.read_from_primary?
138+
end
139+
end
140+
end
141+
142+
describe ".read_from_primary" do
143+
it "works with global replica flag" do
144+
ActiveRecordReplica.read_from_primary!
145+
ActiveRecordReplica.read_from_primary do
146+
assert ActiveRecordReplica.read_from_primary?
147+
refute ActiveRecordReplica.read_from_replica?
148+
end
149+
end
150+
151+
it "overwrites global replica flag" do
152+
ActiveRecordReplica.read_from_replica!
153+
ActiveRecordReplica.read_from_primary do
154+
assert ActiveRecordReplica.read_from_primary?
155+
refute ActiveRecordReplica.read_from_replica?
156+
end
157+
end
158+
end
98159
end
99160
end

0 commit comments

Comments
 (0)