aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/lib/active_record/middleware/database_selector/resolver.rb
diff options
context:
space:
mode:
authorEileen Uchitelle <eileencodes@gmail.com>2019-02-01 10:16:34 -0500
committerEileen Uchitelle <eileencodes@gmail.com>2019-02-01 11:34:50 -0500
commit31f205234acb5f4b084eb726cf903c55d59677fa (patch)
tree2f94b169a30755e64227073cbeef0060d63d6193 /activerecord/lib/active_record/middleware/database_selector/resolver.rb
parent79bc9e81c3d47be6336223be39cb3bcaeddc0a39 (diff)
downloadrails-31f205234acb5f4b084eb726cf903c55d59677fa.tar.gz
rails-31f205234acb5f4b084eb726cf903c55d59677fa.tar.bz2
rails-31f205234acb5f4b084eb726cf903c55d59677fa.zip
Refactor options for middleware
Right now we only have one option that's supported, the delay. However I can see us supporting other options in the future. This PR refactors the options to get passed into the resolver so whether you're using middleware or using the config options you can pass options to the resolver. This will also make it easy to add new options in the future.
Diffstat (limited to 'activerecord/lib/active_record/middleware/database_selector/resolver.rb')
-rw-r--r--activerecord/lib/active_record/middleware/database_selector/resolver.rb13
1 files changed, 7 insertions, 6 deletions
diff --git a/activerecord/lib/active_record/middleware/database_selector/resolver.rb b/activerecord/lib/active_record/middleware/database_selector/resolver.rb
index acdb9b3238..0eeb0453ef 100644
--- a/activerecord/lib/active_record/middleware/database_selector/resolver.rb
+++ b/activerecord/lib/active_record/middleware/database_selector/resolver.rb
@@ -18,16 +18,18 @@ module ActiveRecord
class Resolver # :nodoc:
SEND_TO_REPLICA_DELAY = 2.seconds
- def self.call(resolver)
- new(resolver)
+ def self.call(resolver, options = {})
+ new(resolver, options)
end
- def initialize(resolver)
+ def initialize(resolver, options = {})
@resolver = resolver
+ @options = options
+ @delay = @options && @options[:delay] ? @options[:delay] : SEND_TO_REPLICA_DELAY
@instrumenter = ActiveSupport::Notifications.instrumenter
end
- attr_reader :resolver, :instrumenter
+ attr_reader :resolver, :delay, :instrumenter
def read(&blk)
if read_from_primary?
@@ -76,8 +78,7 @@ module ActiveRecord
end
def send_to_replica_delay
- (ActiveRecord::Base.database_selector && ActiveRecord::Base.database_selector[:delay]) ||
- SEND_TO_REPLICA_DELAY
+ delay
end
def time_since_last_write_ok?