module Card::Fetch::Store

lazy cache updates based on results

Public Instance Methods

cache_ready?() click to toggle source
# File lib/card/fetch/store.rb, line 16
def cache_ready?
  @cache_ready
end
eager_caching?() click to toggle source
# File lib/card/fetch/store.rb, line 30
def eager_caching?
  opts[:eager_cache] && mark.name? && mark.absolute? && new_opts.present?
end
needs_prep?() click to toggle source
# File lib/card/fetch/store.rb, line 38
def needs_prep?
  return unless card.present?

  !(skip_modules? || card.patterns?)
end
new_card_needed?() click to toggle source
# File lib/card/fetch/store.rb, line 44
def new_card_needed?
  !(card.present? && (card.type_id.present? || skip_type_lookup?))
end
new_for_cache() click to toggle source

instantiate a card as a cache placeholder

# 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?() click to toggle source
# File lib/card/fetch/store.rb, line 34
def new_for_cache?
  reusable? && new_card_needed?
end
prep_for_cache() click to toggle source

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

# File lib/card/fetch/store.rb, line 59
def prep_for_cache
  # return # DELETE ME
  return if skip_modules?

  Cardio.config.cache_set_module_list ? card.set_modules : card.patterns
end
reusable?() click to toggle source
# File lib/card/fetch/store.rb, line 48
def reusable?
  !(mark.is_a?(Integer) || (mark.blank? && !opts[:new]))
end
update_cache() click to toggle source
# 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?() click to toggle source
# File lib/card/fetch/store.rb, line 12
def update_cache?
  (cache_ready? || new_for_cache || needs_prep?) && !card&.uncacheable?
end