Class: FlowcommerceSpree::Refresher
- Inherits:
-
Object
- Object
- FlowcommerceSpree::Refresher
- Defined in:
- lib/flowcommerce_spree/refresher.rb
Constant Summary collapse
- SYNC_INTERVAL_IN_MINUTES =
60
Instance Attribute Summary collapse
-
#logger ⇒ Object
readonly
Returns the value of attribute logger.
Instance Method Summary collapse
- #data ⇒ Object
- #duration ⇒ Object
- #in_progress? ⇒ Boolean
-
#initialize(logger: FlowcommerceSpree.logger) ⇒ Refresher
constructor
A new instance of Refresher.
-
#log_refresh!(has_ended: false) ⇒ Object
for start just call log_refresh! and end it with has_ended: true statement.
- #needs_refresh? ⇒ Boolean
- #schedule_refresh! ⇒ Object
- #write {|data| ... } ⇒ Object
Constructor Details
#initialize(logger: FlowcommerceSpree.logger) ⇒ Refresher
Returns a new instance of Refresher.
12 13 14 |
# File 'lib/flowcommerce_spree/refresher.rb', line 12 def initialize(logger: FlowcommerceSpree.logger) @logger = logger end |
Instance Attribute Details
#logger ⇒ Object (readonly)
Returns the value of attribute logger.
10 11 12 |
# File 'lib/flowcommerce_spree/refresher.rb', line 10 def logger @logger end |
Instance Method Details
#data ⇒ Object
16 17 18 |
# File 'lib/flowcommerce_spree/refresher.rb', line 16 def data @data ||= FlowcommerceSpree::Config.product_catalog_upload || {} end |
#duration ⇒ Object
20 21 22 23 24 |
# File 'lib/flowcommerce_spree/refresher.rb', line 20 def duration return '? (unknown)' if !data[:start] || !data[:end] || data[:start] > data[:end] (data[:end] - data[:start]) / 60 end |
#in_progress? ⇒ Boolean
58 59 60 61 62 63 64 |
# File 'lib/flowcommerce_spree/refresher.rb', line 58 def in_progress? # This method needs fresh data, that's why not using the memoized `data` method @data = FlowcommerceSpree::Config.product_catalog_upload || {} return false unless data[:in_progress] logger.info 'Could not be run, another refresh is still in progress, quitting' end |
#log_refresh!(has_ended: false) ⇒ Object
for start just call log_refresh! and end it with has_ended: true statement
67 68 69 70 71 72 73 74 75 76 77 78 79 |
# File 'lib/flowcommerce_spree/refresher.rb', line 67 def log_refresh!(has_ended: false) data.delete(:force_refresh) write do |data| if has_ended data[:end] = Time.zone.now.to_i data.delete(:in_progress) else data[:in_progress] = true data[:start] = Time.zone.now.to_i end end end |
#needs_refresh? ⇒ Boolean
38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
# File 'lib/flowcommerce_spree/refresher.rb', line 38 def needs_refresh? return false if in_progress? now = Time.zone.now.to_i data[:end] ||= now - 10_000 # needs refresh if last refresh started more than threshold ago if data[:end] < (now - (60 * SYNC_INTERVAL_IN_MINUTES)) logger.info 'Last refresh ended long time ago, needs refresh.' true elsif data[:force_refresh] logger.info 'Force refresh scheduled, refreshing.' true else logger.info format('No need for refresh, ended before %<now>d seconds.', (now - data[:end])) @data = nil false end end |
#schedule_refresh! ⇒ Object
32 33 34 35 36 |
# File 'lib/flowcommerce_spree/refresher.rb', line 32 def schedule_refresh! write do |data| data[:force_refresh] = true end end |
#write {|data| ... } ⇒ Object
26 27 28 29 30 |
# File 'lib/flowcommerce_spree/refresher.rb', line 26 def write yield data FlowcommerceSpree::Config.product_catalog_upload = data @data = nil end |