Module: Card::Set::Abstract::SolidCache::ClassMethods

Defined in:
tmpsets/set/mod012-solid_cache/abstract/solid_cache.rb

Instance Method Summary collapse

Instance Method Details

#cache_expire_trigger(set_of_changed_card, args = {}, &block) ⇒ Object

Same as 'cache_update_trigger' but expires instead of updates the outdated solid caches



57
58
59
60
61
# File 'tmpsets/set/mod012-solid_cache/abstract/solid_cache.rb', line 57

def cache_expire_trigger set_of_changed_card, args={}, &block
  define_event_to_update_expired_cached_cards(
    set_of_changed_card, args, :expire_solid_cache, &block
  )
end

#cache_update_trigger(set_of_changed_card, args = {}) { ... } ⇒ Object

If a card of the set given by 'set_of_changed_card' is changed the given block is executed. It is supposed to return an array of cards whose solid caches are expired because of the change.

Parameters:

  • set_of_changed_card (set constant)

    a set of cards that triggers a cache update

  • args (Hash) (defaults to: {})

Options Hash (args):

  • :on (Symbol, Array<Symbol>)

    the action(s) (:create, :update, or :delete) on which the cache update should be triggered. Default is all actions.

  • :in_stage (Stage)

    the stage when the update is executed. Default is :integrate

Yields:

  • return a card or an array of cards with solid cache that need to be updated



49
50
51
52
53
# File 'tmpsets/set/mod012-solid_cache/abstract/solid_cache.rb', line 49

def cache_update_trigger set_of_changed_card, args={}, &block
  define_event_to_update_expired_cached_cards(
    set_of_changed_card, args, :update_solid_cache, &block
  )
end

#define_event_to_update_expired_cached_cards(set_of_changed_card, args, method_name) ⇒ Object



63
64
65
66
67
68
69
70
71
72
73
74
75
# File 'tmpsets/set/mod012-solid_cache/abstract/solid_cache.rb', line 63

def define_event_to_update_expired_cached_cards set_of_changed_card, args,
                                                method_name
  args[:on] ||= %i[create update delete]
  name = event_name set_of_changed_card, args
  stage = args[:in_stage] || :integrate
  Card::Set.register_set set_of_changed_card
  set_of_changed_card.event name, stage, args do
    Array.wrap(yield(self)).compact.each do |expired_cache_card|
      next unless expired_cache_card.solid_cache?
      expired_cache_card.send method_name
    end
  end
end

#event_name(set, args) ⇒ Object



77
78
79
80
81
82
83
84
# File 'tmpsets/set/mod012-solid_cache/abstract/solid_cache.rb', line 77

def event_name set, args
  changed_card_set = set.underscore
  solid_cache_set = underscore + "__solid_cache"
  actions = Array.wrap(args[:on]).join("_")
  ["update", solid_cache_set,
   "changed_by", changed_card_set,
   "on", actions].join("___").to_sym
end