Module: WillCache::Cacheable

Included in:
ClassMethods, InstanceMethods
Defined in:
lib/will_cache/cacheable.rb

Instance Method Summary collapse

Instance Method Details

#cache_exist?(key) ⇒ Boolean

Returns:



48
49
50
# File 'lib/will_cache/cacheable.rb', line 48

def cache_exist?(key)
  Rails.cache.exist?(key)
end

#cached(method_name, args = {}) ⇒ Object Also known as: caches



10
11
12
13
14
15
16
17
18
19
20
21
# File 'lib/will_cache/cacheable.rb', line 10

def cached(method_name, args = {})
  with = args[:with]

  # Rails.fetch is broken
  # http://developingsimplicity.com/posts/rails-cache-fetch
  key = method_cache_key(method_name, with)
  if cache_exist?(key)
    read_cache(key)
  else
    write_cache(key, do_send(method_name, with))
  end
end

#delete_cache(key) ⇒ Object



43
44
45
46
# File 'lib/will_cache/cacheable.rb', line 43

def delete_cache(key)
  Rails.cache.delete(key)
  true
end

#do_send(method_name, with) ⇒ Object



65
66
67
68
69
70
71
# File 'lib/will_cache/cacheable.rb', line 65

def do_send(method_name, with)
  if with.blank?
    send(method_name)
  else
    send(method_name, *with)
  end
end

#expire_cache(method_name = nil, args = {}) ⇒ Object Also known as: clear_cache



4
5
6
7
# File 'lib/will_cache/cacheable.rb', line 4

def expire_cache(method_name = nil, args = {})
  with = args[:with]
  delete_cache(method_cache_key(method_name, with))
end

#fetch_cache(method_name, args = {}) ⇒ Object



29
30
31
32
# File 'lib/will_cache/cacheable.rb', line 29

def fetch_cache(method_name, args = {})
  with = args[:with]
  read_cache(method_cache_key(method_name, with))
end

#method_cache_key(method_name, with) ⇒ Object



52
53
54
55
56
57
58
59
60
61
62
63
# File 'lib/will_cache/cacheable.rb', line 52

def method_cache_key(method_name, with)
  if self.is_a?(ActiveRecord::Base)
    base = [self.class, id, method_name].compact.join(':').gsub(' ', '_')
  else
    base = "#{self}:#{method_name}"
  end
  if with.blank?
    base
  else
    "#{base}:#{with.inspect}"
  end
end

#read_cache(key) ⇒ Object



39
40
41
# File 'lib/will_cache/cacheable.rb', line 39

def read_cache(key)
  Rails.cache.read(key)
end

#refresh_cache(method_name = nil, args = {}) ⇒ Object



24
25
26
27
# File 'lib/will_cache/cacheable.rb', line 24

def refresh_cache(method_name = nil, args = {})
  expire_cache(method_name, args)
  cached(method_name, args)
end

#write_cache(key, value) ⇒ Object



34
35
36
37
# File 'lib/will_cache/cacheable.rb', line 34

def write_cache(key, value)
  Rails.cache.write(key, value)
  value
end