diff --git a/lib/sidekiq/grouping.rb b/lib/sidekiq/grouping.rb index 3e6b908..d827de8 100644 --- a/lib/sidekiq/grouping.rb +++ b/lib/sidekiq/grouping.rb @@ -2,7 +2,7 @@ require "active_support" require "active_support/core_ext/string" -require "active_support/configurable" +require "active_support/ordered_options" require "active_support/core_ext/numeric/time" require "sidekiq" require "sidekiq/grouping/version" @@ -55,6 +55,8 @@ def start! config.client_middleware do |chain| chain.add Sidekiq::Grouping::Middleware end -end -Sidekiq::Grouping.start! if Sidekiq.server? + config.on(:startup) do + Sidekiq::Grouping.start! + end +end diff --git a/lib/sidekiq/grouping/config.rb b/lib/sidekiq/grouping/config.rb index 6bde5b6..b5db40f 100644 --- a/lib/sidekiq/grouping/config.rb +++ b/lib/sidekiq/grouping/config.rb @@ -3,38 +3,43 @@ module Sidekiq module Grouping module Config - include ActiveSupport::Configurable - - def self.options - if Sidekiq.respond_to?(:[]) # Sidekiq 6.x - Sidekiq[:grouping] || {} - elsif Sidekiq.respond_to?(:options) # Sidekiq <= 5.x - Sidekiq.options[:grouping] || Sidekiq.options["grouping"] || {} - else # Sidekiq 7.x - Sidekiq.default_configuration[:grouping] || {} + class << self + %i[lock_ttl max_batch_size poll_interval tests_env].each do |method_name| + define_method(method_name) do + config[method_name] + end + define_method(:"#{method_name}=") do |value| + config[method_name] = value + end end - end - - # Queue size overflow check polling interval - config_accessor :poll_interval do - options[:poll_interval] || 3 - end - # Maximum batch size - config_accessor :max_batch_size do - options[:max_batch_size] || 1000 - end + private - # Batch queue flush lock timeout - config_accessor :lock_ttl do - options[:lock_ttl] || 1 - end + def config + @config ||= ActiveSupport::InheritableOptions.new( + lock_ttl: options[:lock_ttl] || 1, + max_batch_size: options[:max_batch_size] || 1_000, + poll_interval: options[:poll_interval] || 3, + tests_env: options[:tests_env] || ( + defined?(::Rails) && ::Rails.respond_to?(:env) && ::Rails.env.test? + ) + ) + end - # Option to override how Sidekiq::Grouping know about tests env - config_accessor :tests_env do - options[:tests_env] || ( - defined?(::Rails) && Rails.respond_to?(:env) && Rails.env.test? - ) + def options + @options ||= + begin + if Sidekiq.respond_to?(:[]) # Sidekiq 6.x + Sidekiq[:grouping] || {} + elsif Sidekiq.respond_to?(:options) # Sidekiq <= 5.x + Sidekiq.options[:grouping] || Sidekiq.options["grouping"] || {} + elsif Sidekiq.server? # Sidekiq >= 7.x + Sidekiq::CLI.instance.config[:grouping] || {} + else + Sidekiq.default_configuration[:grouping] || {} + end + end + end end end end diff --git a/lib/sidekiq/grouping/views/index.erb b/lib/sidekiq/grouping/views/index.erb index b261ad2..e155458 100644 --- a/lib/sidekiq/grouping/views/index.erb +++ b/lib/sidekiq/grouping/views/index.erb @@ -25,8 +25,9 @@