class RedMatryoshka::Base

Constants

DEFAULT_DEPENDS_ON_OPTIONS
DEFAULT_LISTEN_FOR_OPTIONS

Attributes

cache_classes_dependencies[R]
cache_classes_to_depends_on[R]
class_to_fetch_from[R]
classes_to_listen_for[R]
sub_id[RW]

Public Class Methods

dependency_of(klass) click to toggle source
# File lib/red_matryoshka/base.rb, line 119
def dependency_of(klass)
  klass_that_depends_of = transformed_class klass

  @cache_classes_dependencies = [] if @cache_classes_dependencies.nil?
  unless @cache_classes_dependencies.include? klass_that_depends_of
    @cache_classes_dependencies << klass_that_depends_of
  end
end
depends_on(klass, options = {}) click to toggle source
# File lib/red_matryoshka/base.rb, line 103
def depends_on(klass, options = {})
  klass_to_depends_on = transformed_class klass

  @cache_classes_to_depends_on = {} if @cache_classes_to_depends_on.nil?

  unless @cache_classes_to_depends_on.include? klass_to_depends_on
    klass_options = DEFAULT_DEPENDS_ON_OPTIONS.merge options
    @cache_classes_to_depends_on[klass_to_depends_on] = klass_options
  end
end
depends_on_multiple(klass, options = {}) click to toggle source
# File lib/red_matryoshka/base.rb, line 114
def depends_on_multiple(klass, options = {})
  for_option = options[:for] || nil
  depends_on(klass, options.merge(for: for_option, as: :array))
end
fetch(*ids) click to toggle source
# File lib/red_matryoshka/base.rb, line 82
def fetch(*ids)
  RedMatryoshka::Cache.new(new).fetch(ids)
end
fetch_from(klass) click to toggle source
# File lib/red_matryoshka/base.rb, line 92
def fetch_from(klass)
  @class_to_fetch_from = transformed_class klass
end
fetch_sub(sub_id, ids = []) click to toggle source
# File lib/red_matryoshka/base.rb, line 86
def fetch_sub(sub_id, ids = [])
  klass = new.set_sub_id sub_id

  RedMatryoshka::Cache.new(klass).fetch(ids)
end
listen_for(klass, options = {}) click to toggle source
# File lib/red_matryoshka/base.rb, line 96
def listen_for(klass, options = {})
  @classes_to_listen_for = {} if @classes_to_listen_for.nil?

  klass_options = DEFAULT_LISTEN_FOR_OPTIONS.merge options
  @classes_to_listen_for[transformed_class(klass)] = klass_options
end
transformed_class(klass) click to toggle source
# File lib/red_matryoshka/base.rb, line 128
def transformed_class(klass)
  klass.to_s.split("_").map(&:capitalize).join
end

Public Instance Methods

after_fetch(hashes) click to toggle source
# File lib/red_matryoshka/base.rb, line 43
def after_fetch(hashes)
  # Instantiate me if you want to edit data
  hashes
end
cache_key(id, prefix = true) click to toggle source
# File lib/red_matryoshka/base.rb, line 48
def cache_key(id, prefix = true)
  key_prefix = RedMatryoshka.configuration.key_prefix
  klass_name = self.class.name.demodulize # Only retrieve class without module name

  key_parts = klass_name.split(":")
  key_parts << @sub_id unless @sub_id.nil?
  if prefix && key_parts[0].casecmp(key_prefix) != 0
    key_parts.insert(0, key_prefix)
  end

  key_parts = key_parts.map do |part|
    part.to_s.split(/(?=[A-Z])/).map(&:downcase).join("_")
  end

  key_parts << id
  key_parts.join(":")
end
cache_klass_with_module(klass) click to toggle source
# File lib/red_matryoshka/base.rb, line 66
def cache_klass_with_module(klass)
  if RedMatryoshka.configuration.module.present?
    "#{RedMatryoshka.configuration.module}::#{klass}"
  else
    klass
  end
end
class_to_depends_on_with_dependencies() click to toggle source
# File lib/red_matryoshka/base.rb, line 19
def class_to_depends_on_with_dependencies
  @class_to_depends_on_with_dependencies ||= begin
    classes_to_depends_on.inject({}) do |hashes, (k, v)|
      sub_dependencies = {
        sub_dependencies: cache_klass_with_module(k).constantize.new.classes_to_depends_on
      }
      hashes.merge! k => v.merge(sub_dependencies)
    end
  end
end
class_to_fetch_from() click to toggle source
# File lib/red_matryoshka/base.rb, line 11
def class_to_fetch_from
  @class_to_fetch_from ||= self.class.class_to_fetch_from
end
classes_dependencies_of() click to toggle source
# File lib/red_matryoshka/base.rb, line 30
def classes_dependencies_of
  @cache_classes_dependencies ||= self.class.cache_classes_dependencies || []
end
classes_to_depends_on() click to toggle source
# File lib/red_matryoshka/base.rb, line 15
def classes_to_depends_on
  @classes_to_depends_on ||= self.class.cache_classes_to_depends_on || {}
end
classes_to_listen_for() click to toggle source
# File lib/red_matryoshka/base.rb, line 34
def classes_to_listen_for
  default_listen_for = { self.class.class_to_fetch_from => { sub: nil, record: :self } }
  @classes_to_listen_for ||= self.class.classes_to_listen_for || default_listen_for
end
set_sub_id(sub_id) click to toggle source
# File lib/red_matryoshka/base.rb, line 6
def set_sub_id(sub_id)
  @sub_id = sub_id
  self
end
to_hash(object) click to toggle source
# File lib/red_matryoshka/base.rb, line 39
def to_hash(object)
  object.attributes.symbolize_keys
end