diff --git a/.rubocop_todo.yml b/.rubocop_todo.yml index eaff617a86..7798d41309 100644 --- a/.rubocop_todo.yml +++ b/.rubocop_todo.yml @@ -185,7 +185,6 @@ Layout/EmptyLines: - 'lib/open_food_network/order_cycle_permissions.rb' - 'lib/open_food_network/products_cache.rb' - 'lib/open_food_network/products_cache_integrity_checker.rb' - - 'lib/open_food_network/products_cache_refreshment.rb' - 'lib/open_food_network/products_renderer.rb' - 'lib/open_food_network/property_merge.rb' - 'lib/open_food_network/reports/bulk_coop_report.rb' @@ -560,7 +559,6 @@ Layout/MultilineOperationIndentation: - 'app/models/variant_override_set.rb' - 'lib/open_food_network/accounts_and_billing_settings_validator.rb' - 'lib/open_food_network/order_cycle_permissions.rb' - - 'lib/open_food_network/products_cache_refreshment.rb' - 'lib/open_food_network/sales_tax_report.rb' - 'lib/open_food_network/users_and_enterprises_report.rb' @@ -986,7 +984,6 @@ Lint/IneffectiveAccessModifier: - 'app/models/variant_override.rb' - 'lib/open_food_network/feature_toggle.rb' - 'lib/open_food_network/products_cache.rb' - - 'lib/open_food_network/products_cache_refreshment.rb' - 'lib/open_food_network/property_merge.rb' - 'spec/lib/open_food_network/reports/report_spec.rb' @@ -1096,7 +1093,6 @@ Lint/UselessAccessModifier: - 'app/models/column_preference.rb' - 'lib/open_food_network/feature_toggle.rb' - 'lib/open_food_network/products_cache.rb' - - 'lib/open_food_network/products_cache_refreshment.rb' - 'lib/open_food_network/property_merge.rb' - 'lib/open_food_network/reports/bulk_coop_report.rb' - 'spec/lib/open_food_network/reports/report_spec.rb' @@ -1505,7 +1501,6 @@ Rails/TimeZone: - 'lib/open_food_network/users_and_enterprises_report.rb' - 'spec/controllers/api/statuses_controller_spec.rb' - 'spec/jobs/heartbeat_job_spec.rb' - - 'spec/lib/open_food_network/products_cache_refreshment_spec.rb' - 'spec/lib/open_food_network/products_cache_spec.rb' - 'spec/models/enterprise_relationship_spec.rb' - 'spec/models/variant_override_spec.rb' @@ -1861,7 +1856,6 @@ Style/GuardClause: - 'lib/open_food_network/accounts_and_billing_settings_validator.rb' - 'lib/open_food_network/order_cycle_form_applicator.rb' - 'lib/open_food_network/products_cache.rb' - - 'lib/open_food_network/products_cache_refreshment.rb' - 'lib/open_food_network/products_renderer.rb' - 'lib/open_food_network/rack_request_blocker.rb' - 'lib/open_food_network/variant_and_line_item_naming.rb' diff --git a/lib/open_food_network/products_cache_refreshment.rb b/lib/open_food_network/products_cache_refreshment.rb index 276734570f..3bcde00f8d 100644 --- a/lib/open_food_network/products_cache_refreshment.rb +++ b/lib/open_food_network/products_cache_refreshment.rb @@ -17,31 +17,26 @@ module OpenFoodNetwork class ProductsCacheRefreshment def self.refresh(distributor, order_cycle) - unless pending_job? distributor, order_cycle - enqueue_job distributor, order_cycle - end + job = refresh_job(distributor, order_cycle) + enqueue_job(job) unless pending_job?(job) end + def self.refresh_job(distributor, order_cycle) + RefreshProductsCacheJob.new(distributor.id, order_cycle.id) + end + private_class_method :refresh_job - private - - def self.pending_job?(distributor, order_cycle) - # To inspect each job, we need to deserialize the payload. - # This is slow, and if it's a problem in practice, we could pre-filter in SQL - # for handlers matching the class name, distributor id and order cycle id. - + def self.pending_job?(job) Delayed::Job. where(locked_at: nil). - map(&:payload_object). - select { |j| - j.class == RefreshProductsCacheJob && - j.distributor_id == distributor.id && - j.order_cycle_id == order_cycle.id - }.any? + where(handler: job.to_yaml). + exists? end + private_class_method :pending_job? - def self.enqueue_job(distributor, order_cycle) - Delayed::Job.enqueue RefreshProductsCacheJob.new(distributor.id, order_cycle.id), priority: 10 + def self.enqueue_job(job) + Delayed::Job.enqueue job, priority: 10 end + private_class_method :enqueue_job end end diff --git a/spec/lib/open_food_network/products_cache_refreshment_spec.rb b/spec/lib/open_food_network/products_cache_refreshment_spec.rb index f65b81346e..74998928d5 100644 --- a/spec/lib/open_food_network/products_cache_refreshment_spec.rb +++ b/spec/lib/open_food_network/products_cache_refreshment_spec.rb @@ -1,3 +1,4 @@ +require 'spec_helper' require 'open_food_network/products_cache_refreshment' module OpenFoodNetwork