class RailsCachedMethod::CachedProxy

Public Class Methods

new(object, key: nil, expires_in:, parent_key: nil, recache: false) click to toggle source
# File lib/rails_cached_method.rb, line 14
def initialize(object, key: nil, expires_in:, parent_key: nil, recache: false)
  @__object__     = object
  @__key__        = key
  @__expires_in__ = expires_in
  @__recache__    = recache
  @__parent_key__ = parent_key
  @__object__
end

Public Instance Methods

__value__() click to toggle source
# File lib/rails_cached_method.rb, line 23
def __value__
  @__object__
end
method_missing(*args) click to toggle source
# File lib/rails_cached_method.rb, line 27
def method_missing(*args)
  key = ___compose_key__(args)
  if @__recache__
    #puts "deleting: #{key}"
    Rails.cache.delete(key)
  end
  #puts "key: #{key}, expires_in: #{@__expires_in__}, args: #{args}, recache: #{@__recache__}"
  Rails.cache.fetch(key, expires_in: @__expires_in__) do
    CachedProxy.new(
      @__object__.send(*args),
      expires_in: @__expires_in__,
      recache: @__recache__,
      parent_key: key,
    )
  end
end

Private Instance Methods

___compose_key__(args) click to toggle source
# File lib/rails_cached_method.rb, line 45
def ___compose_key__(args)
  result = [@__parent_key__, @__key__]
  result += if @__object__.respond_to?(:to_global_id)
    [@__object__.to_global_id]
  elsif @__object__.is_a?(ActiveRecord::Relation)
    [@__object__.class]
  else
    [@__object__]
  end
  result += args[0..1]
  result.compact.map(&:to_s).join('.').dasherize
end