class Ocache::Proxy

Public Class Methods

new(module_target, key_name=nil, module_options={}) click to toggle source
# File lib/ocache/proxy.rb, line 4
def initialize(module_target, key_name=nil, module_options={})
  @module_target = module_target

  if cache_options?(key_name)
    @module_options = key_name
  else
    @key_name = key_name
    @module_options = module_options
  end
end

Private Instance Methods

cache_instance_attributes?(possible_object) click to toggle source
# File lib/ocache/proxy.rb, line 44
def cache_instance_attributes?(possible_object)
  possible_object.respond_to?(:id) || possible_object.respond_to?(:created_at) || possible_object.respond_to?(:updated_at)
end
cache_options?(possible_options) click to toggle source
# File lib/ocache/proxy.rb, line 38
def cache_options?(possible_options)
  %w(force expires_in race_condition_ttl raw compress compress_threshold namespace).any? { |option|
    possible_options.inspect.include? option
  }
end
expand_cache_key(arguments) click to toggle source
# File lib/ocache/proxy.rb, line 48
def expand_cache_key(arguments)
  ::ActiveSupport::Cache.expand_cache_key(arguments)
end
generate_cache_key() click to toggle source
# File lib/ocache/proxy.rb, line 26
def generate_cache_key
  if cache_instance_attributes?(@module_target)
    key_module_target = @module_target.cache_key
  elsif @module_target.respond_to?(:model_name)
    key_module_target = @module_target.model_name.cache_key
  else
    key_module_target = @module_target
  end

  "#{key_module_target}/#{@method_target}/#{expand_cache_key(@method_arguments)}".chomp('/')
end
method_missing(method_target, *method_arguments) click to toggle source
# File lib/ocache/proxy.rb, line 15
def method_missing(method_target, *method_arguments)
  @method_target = method_target
  @method_arguments = method_arguments

  @key_name = generate_cache_key unless @key_name

  ::Rails.cache.fetch(@key_name, @module_options) do
    @module_target.__send__(method_target, *method_arguments)
  end
end