class Lifesaver::Notification::EagerLoader

Attributes

loaded_models[RW]
models_to_load[RW]

Public Class Methods

new() click to toggle source
# File lib/lifesaver/notification/eager_loader.rb, line 4
def initialize
  @models_to_load = {}
  @loaded_models = {}
end

Public Instance Methods

add_model(class_name, id) click to toggle source
# File lib/lifesaver/notification/eager_loader.rb, line 9
def add_model(class_name, id)
  return if model_previously_added?(class_name, id)
  models_to_load[class_name] ||= []
  models_to_load[class_name] << id
  mark_model_added(class_name, id)
end
empty?() click to toggle source
# File lib/lifesaver/notification/eager_loader.rb, line 26
def empty?
  @models_to_load.empty?
end
load() click to toggle source
# File lib/lifesaver/notification/eager_loader.rb, line 16
def load
  models = []
  models_to_load.each do |class_name, ids|
    klass = class_name.classify.constantize
    models |= load_associations(klass, ids)
    models_to_load.delete(class_name)
  end
  models
end

Private Instance Methods

load_associations(klass, ids) click to toggle source
# File lib/lifesaver/notification/eager_loader.rb, line 34
def load_associations(klass, ids)
  klass.load_with_notifiable_associations(ids)
end
mark_model_added(class_name, id) click to toggle source
# File lib/lifesaver/notification/eager_loader.rb, line 42
def mark_model_added(class_name, id)
  loaded_models[class_name] ||= {}
  loaded_models[class_name][id] = true
end
model_previously_added?(class_name, id) click to toggle source
# File lib/lifesaver/notification/eager_loader.rb, line 38
def model_previously_added?(class_name, id)
  loaded_models[class_name] && loaded_models[class_name][id]
end