class ActiveModelCachers::CacheServiceFactory

Public Class Methods

create_for_active_model(attr, query) click to toggle source
# File lib/active_model_cachers/cache_service_factory.rb, line 15
def create_for_active_model(attr, query)
  cache_key = get_cache_key(attr)

  klass = @key_class_mapping[cache_key] ||= ->{
    klass = Class.new(CacheService)
    klass.cache_key = cache_key
    klass.query_mapping = {}
    klass.instance_variable_set(:@callbacks_defined, false) # to remove warning: instance variable @callbacks_defined not initialized
    next klass
  }[]

  klass.query_mapping[attr.reflect] = query
  return klass
end
has_cacher?(attr) click to toggle source
# File lib/active_model_cachers/cache_service_factory.rb, line 11
def has_cacher?(attr)
  return (@key_class_mapping[get_cache_key(attr)] != nil)
end
set_klass_to_mapping(attr, current_klass) click to toggle source
# File lib/active_model_cachers/cache_service_factory.rb, line 30
def set_klass_to_mapping(attr, current_klass)
  cache_key = get_cache_key(attr)
  changed = clean_klass_cache_if_reloaded!(cache_key, current_klass, attr)
  @cache_key_klass_mapping[cache_key] = current_klass
  return changed
end

Private Class Methods

clean_klass_cache_if_reloaded!(cache_key, current_klass, attr) click to toggle source
# File lib/active_model_cachers/cache_service_factory.rb, line 47
def clean_klass_cache_if_reloaded!(cache_key, current_klass, attr)
  origin_klass, @cache_key_klass_mapping[cache_key] = @cache_key_klass_mapping[cache_key], current_klass
  return false if origin_klass == nil or origin_klass == current_klass # when code reloaded in development.
  @key_class_mapping[cache_key] = nil
  return true
end
get_cache_key(attr) click to toggle source
# File lib/active_model_cachers/cache_service_factory.rb, line 39
def get_cache_key(attr)
  class_name, column = attr.extract_class_and_column
  return "active_model_cachers_#{class_name}_at_#{column}" if column
  foreign_key = attr.foreign_key(reverse: true)
  return "active_model_cachers_#{class_name}_by_#{foreign_key}" if foreign_key and foreign_key.to_s != 'id'
  return "active_model_cachers_#{class_name}"
end