From 2abee3fcddab4fbaab208ff11eae564c02abd6b3 Mon Sep 17 00:00:00 2001 From: Rohan Mitchell Date: Wed, 2 Mar 2016 11:01:41 +1100 Subject: [PATCH] Extract integrity checking to lib class --- .../products_cache_integrity_checker_job.rb | 24 +++------- .../products_cache_integrity_checker.rb | 44 +++++++++++++++++++ lib/tasks/cache.rake | 6 +-- 3 files changed, 50 insertions(+), 24 deletions(-) create mode 100644 lib/open_food_network/products_cache_integrity_checker.rb diff --git a/app/jobs/products_cache_integrity_checker_job.rb b/app/jobs/products_cache_integrity_checker_job.rb index 5702380309..78feb3a1b0 100644 --- a/app/jobs/products_cache_integrity_checker_job.rb +++ b/app/jobs/products_cache_integrity_checker_job.rb @@ -1,31 +1,17 @@ -require 'open_food_network/products_renderer' +require 'open_food_network/products_cache_integrity_checker' ProductsCacheIntegrityCheckerJob = Struct.new(:distributor_id, :order_cycle_id) do def perform - if diff.any? - Bugsnag.notify RuntimeError.new("Products JSON differs from cached version for distributor: #{distributor_id}, order cycle: #{order_cycle_id}"), diff: diff.to_s(:text) + unless checker.ok? + Bugsnag.notify RuntimeError.new("Products JSON differs from cached version for distributor: #{distributor_id}, order cycle: #{order_cycle_id}"), diff: checker.diff.to_s(:text) end end private - def diff - @diff ||= Diffy::Diff.new pretty(cached_json), pretty(rendered_json) - end - - def pretty(json) - JSON.pretty_generate JSON.parse json - end - - def cached_json - Rails.cache.read("products-json-#{distributor_id}-#{order_cycle_id}") || {}.to_json - end - - def rendered_json - OpenFoodNetwork::ProductsRenderer.new(distributor, order_cycle).products_json - rescue OpenFoodNetwork::ProductsRenderer::NoProducts - nil + def checker + OpenFoodNetwork::ProductsCacheIntegrityChecker.new(distributor, order_cycle) end def distributor diff --git a/lib/open_food_network/products_cache_integrity_checker.rb b/lib/open_food_network/products_cache_integrity_checker.rb new file mode 100644 index 0000000000..cf8363ee5c --- /dev/null +++ b/lib/open_food_network/products_cache_integrity_checker.rb @@ -0,0 +1,44 @@ +require 'open_food_network/products_renderer' + +module OpenFoodNetwork + class ProductsCacheIntegrityChecker + def initialize(distributor, order_cycle) + @distributor = distributor + @order_cycle = order_cycle + end + + def ok? + diff.none? + end + + def diff + @diff ||= Diffy::Diff.new pretty(cached_json), pretty(rendered_json) + end + + + def self.active_exchanges + Exchange. + outgoing. + joins(:order_cycle). + merge(OrderCycle.dated). + merge(OrderCycle.not_closed) + end + + + private + + def cached_json + Rails.cache.read("products-json-#{@distributor.id}-#{@order_cycle.id}") || {}.to_json + end + + def rendered_json + OpenFoodNetwork::ProductsRenderer.new(@distributor, @order_cycle).products_json + rescue OpenFoodNetwork::ProductsRenderer::NoProducts + nil + end + + def pretty(json) + JSON.pretty_generate JSON.parse json + end + end +end diff --git a/lib/tasks/cache.rake b/lib/tasks/cache.rake index 7b20a69c6a..8a564fcddc 100644 --- a/lib/tasks/cache.rake +++ b/lib/tasks/cache.rake @@ -19,11 +19,7 @@ namespace :openfoodnetwork do private def active_exchanges - Exchange. - outgoing. - joins(:order_cycle). - merge(OrderCycle.dated). - merge(OrderCycle.not_closed) + ProductsCacheIntegrityChecker.active_exchanges end end end