Module: Card::Fetch::Store

Included in:
Card::Fetch
Defined in:
lib/card/fetch/store.rb

Overview

lazy cache updates based on results

Instance Method Summary collapse

Instance Method Details

#cache_ready?Boolean

Returns:

  • (Boolean)


16
17
18
# File 'lib/card/fetch/store.rb', line 16

def cache_ready?
  @cache_ready
end

#eager_caching?Boolean

Returns:

  • (Boolean)


29
30
31
# File 'lib/card/fetch/store.rb', line 29

def eager_caching?
  opts[:eager_cache] && mark.name? && mark.absolute? && new_opts.present?
end

#needs_prep?Boolean

Returns:

  • (Boolean)


37
38
39
40
41
# File 'lib/card/fetch/store.rb', line 37

def needs_prep?
  return unless card.present?

  !(skip_modules? || card.patterns?)
end

#new_card_needed?Boolean

Returns:

  • (Boolean)


43
44
45
# File 'lib/card/fetch/store.rb', line 43

def new_card_needed?
  !(card.present? && (card.type_id.present? || skip_type_lookup?))
end

#new_for_cacheObject

instantiate a card as a cache placeholder



21
22
23
24
25
26
27
# File 'lib/card/fetch/store.rb', line 21

def new_for_cache
  return unless new_for_cache?
  args = { name: mark, skip_modules: true }
  args[:type_lookup] = :skip if skip_type_lookup?
  args.merge! new_opts.slice(:type, :type_id, :type_code) if eager_caching?
  @card = Card.new args
end

#new_for_cache?Boolean

Returns:

  • (Boolean)


33
34
35
# File 'lib/card/fetch/store.rb', line 33

def new_for_cache?
  reusable? && new_card_needed?
end

#prep_for_cacheObject

Because Card works by including set-specific ruby modules on singleton classes and singleton classes generally can’t be cached, we can never cache the cards in a completely ready-to-roll form.

However, we can optimize considerably by saving the list of ruby modules in environments where they won’t be changing (eg production) or at least the list of matching set patterns



58
59
60
61
62
63
# File 'lib/card/fetch/store.rb', line 58

def prep_for_cache
  # return # DELETE ME
  return if skip_modules?

  Cardio.config.cache_set_module_list ? card.set_modules : card.patterns
end

#reusable?Boolean

Returns:

  • (Boolean)


47
48
49
# File 'lib/card/fetch/store.rb', line 47

def reusable?
  !(mark.is_a?(Integer) || (mark.blank? && !opts[:new]))
end

#update_cacheObject



5
6
7
8
9
10
# File 'lib/card/fetch/store.rb', line 5

def update_cache
  return unless update_cache?

  prep_for_cache
  Card.write_to_cache card, local_only?
end

#update_cache?Boolean

Returns:

  • (Boolean)


12
13
14
# File 'lib/card/fetch/store.rb', line 12

def update_cache?
  (cache_ready? || new_for_cache || needs_prep?) && !card&.uncacheable?
end