Class: FlowcommerceSpree::Refresher

Inherits:
Object
  • Object
show all
Defined in:
lib/flowcommerce_spree/refresher.rb

Constant Summary collapse

SYNC_INTERVAL_IN_MINUTES =
60

Instance Attribute Summary collapse

Instance Method Summary collapse

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

#loggerObject (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

#dataObject



16
17
18
# File 'lib/flowcommerce_spree/refresher.rb', line 16

def data
  @data ||= FlowcommerceSpree::Config.product_catalog_upload || {}
end

#durationObject



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

Returns:

  • (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

Returns:

  • (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

Yields:



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