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