Module: SecondLevelCache::Mixin::ClassMethods

Defined in:
lib/second_level_cache/mixin.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#second_level_cache_optionsObject (readonly)

Returns the value of attribute second_level_cache_options.



6
7
8
# File 'lib/second_level_cache/mixin.rb', line 6

def second_level_cache_options
  @second_level_cache_options
end

Instance Method Details

#cache_versionObject



38
39
40
41
42
43
44
45
# File 'lib/second_level_cache/mixin.rb', line 38

def cache_version
  return @cache_version if defined? @cache_version
  # This line is copy from:
  # https://github.com/rails/rails/blob/f9a5f48/activerecord/lib/active_record/core.rb#L236
  attr_list = attribute_types.map { |name, type| "#{name}: #{type.type}" } * ', '
  model_schema_digest = Digest::MD5.hexdigest(attr_list)
  @cache_version = "#{second_level_cache_options[:version]}/#{model_schema_digest}"
end

#expire_second_level_cache(id) ⇒ Object



56
57
58
59
# File 'lib/second_level_cache/mixin.rb', line 56

def expire_second_level_cache(id)
  return unless second_level_cache_enabled?
  SecondLevelCache.cache_store.delete(second_level_cache_key(id))
end

#read_second_level_cache(id) ⇒ Object



51
52
53
54
# File 'lib/second_level_cache/mixin.rb', line 51

def read_second_level_cache(id)
  return unless second_level_cache_enabled?
  RecordMarshal.load(SecondLevelCache.cache_store.read(second_level_cache_key(id)))
end

#second_level_cache(options = {}) ⇒ Object



10
11
12
13
14
15
16
17
# File 'lib/second_level_cache/mixin.rb', line 10

def second_level_cache(options = {})
  @second_level_cache_enabled = true
  @second_level_cache_options = options
  @second_level_cache_options[:version] ||= 0
  @second_level_cache_options[:expires_in] ||= 1.week
  relation.class.send :prepend, SecondLevelCache::ActiveRecord::FinderMethods
  prepend SecondLevelCache::ActiveRecord::Core
end

#second_level_cache_enabled?Boolean

Returns:

  • (Boolean)


19
20
21
22
23
24
25
# File 'lib/second_level_cache/mixin.rb', line 19

def second_level_cache_enabled?
  if defined? @second_level_cache_enabled
    @second_level_cache_enabled == true
  else
    false
  end
end

#second_level_cache_key(id) ⇒ Object



47
48
49
# File 'lib/second_level_cache/mixin.rb', line 47

def second_level_cache_key(id)
  "#{cache_key_prefix}/#{table_name.downcase}/#{id}/#{cache_version}"
end

#without_second_level_cacheObject



27
28
29
30
31
32
33
34
# File 'lib/second_level_cache/mixin.rb', line 27

def without_second_level_cache
  old = @second_level_cache_enabled
  @second_level_cache_enabled = false

  yield if block_given?
ensure
  @second_level_cache_enabled = old
end