Skip to content

Commit 4f9c43c

Browse files
make advisory_lock_timeout_seconds required when advisory_lock_timeout_seconds is true
1 parent cad9d07 commit 4f9c43c

File tree

2 files changed

+9
-23
lines changed

2 files changed

+9
-23
lines changed

lib/closure_tree/support.rb

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,11 +23,13 @@ def initialize(model_class, options)
2323
:dependent => :nullify, # or :destroy or :delete_all -- see the README
2424
:name_column => 'name',
2525
:with_advisory_lock => true,
26-
:advisory_lock_timeout_seconds => nil,
26+
:advisory_lock_timeout_seconds => 0,
2727
:numeric_order => false
2828
}.merge(options)
2929
raise ArgumentError, "name_column can't be 'path'" if options[:name_column] == 'path'
30-
if !options[:with_advisory_lock] && options[:advisory_lock_timeout_seconds].present?
30+
if options[:with_advisory_lock] && options[:advisory_lock_timeout_seconds].nil?
31+
raise ArgumentError, "advisory_lock_timeout_seconds must be provided when advisory lock is enabled"
32+
elsif !options[:with_advisory_lock] && options[:advisory_lock_timeout_seconds].present?
3133
raise ArgumentError, "advisory_lock_timeout_seconds cannot be provided when advisory lock is disabled"
3234
end
3335
if order_is_numeric?
@@ -114,8 +116,7 @@ def where_eq(column_name, value)
114116

115117
def with_advisory_lock!(&block)
116118
if options[:with_advisory_lock]
117-
lock_options = { timeout_seconds: options[:advisory_lock_timeout_seconds] }.compact
118-
model_class.with_advisory_lock!(advisory_lock_name, lock_options) do
119+
model_class.with_advisory_lock!(advisory_lock_name, timeout_seconds: options[:advisory_lock_timeout_seconds]) do
119120
transaction { yield }
120121
end
121122
else

spec/closure_tree/support_spec.rb

Lines changed: 4 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
RSpec.describe ClosureTree::Support do
44
let(:model) { Tag }
5-
let(:options) { {} }
5+
let(:options) { { with_advisory_lock: true, advisory_lock_timeout_seconds: 10 } }
66
let(:sut) { described_class.new(model, options) }
77

88
it 'passes through table names without prefix and suffix' do
@@ -16,23 +16,8 @@
1616
expect(sut.remove_prefix_and_suffix(tn)).to eq(expected)
1717
end
1818

19-
[
20-
[true, 10, { timeout_seconds: 10 }],
21-
[true, nil, {}],
22-
[false, nil, {}]
23-
].each do |with_lock, timeout, expected_options|
24-
context "when with_advisory_lock is #{with_lock} and timeout is #{timeout}" do
25-
let(:options) { { with_advisory_lock: with_lock, advisory_lock_timeout_seconds: timeout } }
26-
27-
it "uses advisory lock with timeout options: #{expected_options}" do
28-
if with_lock
29-
expect(model).to receive(:with_advisory_lock!).with(anything, expected_options).and_yield
30-
else
31-
expect(model).not_to receive(:with_advisory_lock!)
32-
end
33-
34-
expect { |b| sut.with_advisory_lock!(&b) }.to yield_control
35-
end
36-
end
19+
it 'calls with_advisory_lock! with timeout options' do
20+
expect(model).to receive(:with_advisory_lock!).with(anything, { timeout_seconds: 10 }).and_yield
21+
expect { |b| sut.with_advisory_lock!(&b) }.to yield_control
3722
end
3823
end

0 commit comments

Comments
 (0)