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.



8
9
10
# File 'lib/second_level_cache/mixin.rb', line 8

def second_level_cache_options
  @second_level_cache_options
end

Instance Method Details

#cache_versionObject



35
36
37
38
39
40
41
42
# File 'lib/second_level_cache/mixin.rb', line 35

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



53
54
55
56
# File 'lib/second_level_cache/mixin.rb', line 53

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



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

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



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

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)


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

def second_level_cache_enabled?
  if defined? @second_level_cache_enabled
    @second_level_cache_enabled == true && SecondLevelCache.cache_enabled?
  else
    false
  end
end

#second_level_cache_key(id) ⇒ Object



44
45
46
# File 'lib/second_level_cache/mixin.rb', line 44

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

#without_second_level_cache(&blk) ⇒ Object



29
30
31
# File 'lib/second_level_cache/mixin.rb', line 29

def without_second_level_cache(&blk)
  SecondLevelCache.without_second_level_cache(&blk) if blk
end