Module: CustomFragmentCache::Logic

Extended by:
ActiveSupport::Concern
Included in:
CustomFragmentCache
Defined in:
lib/custom_fragment_cache/logic.rb

Defined Under Namespace

Modules: ClassMethods

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.cache_key(fragment_name, record) ⇒ Object



36
37
38
# File 'lib/custom_fragment_cache/logic.rb', line 36

def cache_key(fragment_name, record)
  "#{prefix}:#{record.class.name.downcase}-#{record.id}:#{fragment_name}"
end

.prefixObject



32
33
34
# File 'lib/custom_fragment_cache/logic.rb', line 32

def prefix
  "custom_fragment_cache"
end

Instance Method Details

#expire_cache?(fragment_cache, record) ⇒ Boolean

Returns:

  • (Boolean)


5
6
7
8
9
10
11
12
13
# File 'lib/custom_fragment_cache/logic.rb', line 5

def expire_cache?(fragment_cache, record)
  if fragment_cache.fields_method == :safe
    unsafe_dirty_fields = record.changed - fragment_cache.fields
    return true if unsafe_dirty_fields.present?
  elsif fragment_cache.fields_method == :trigger
    trigger_dirty_fields = record.changed & fragment_cache.fields
    return true if trigger_dirty_fields.present?
  end
end

#expire_fragment(key) ⇒ Object



15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# File 'lib/custom_fragment_cache/logic.rb', line 15

def expire_fragment(key)
  action_controller = ActionController::Base.new

  if action_controller.send(:cache_configured?)
    action_controller.instrument_fragment_cache :expire_fragment, key do
      if key.is_a?(Regexp)
        action_controller.cache_store.delete_matched(key)
      elsif action_controller.cache_store.is_a?(ActiveSupport::Cache::RedisStore)
        # TODO find better solution
        action_controller.cache_store.delete_matched("*#{key}*")
      else
        action_controller.cache_store.delete(key)
      end
    end
  end
end