module Lifesaver::Notification::ModelAdditions

Public Class Methods

included(base) click to toggle source
# File lib/lifesaver/notification/model_additions.rb, line 28
def self.included(base)
  base.class_attribute :notifiable_associations
  base.notifiable_associations = NotifiableAssociations.new
  base.delegate :notifiable_associations, to: :class
  base.class_attribute :dependent_associations
  base.dependent_associations = DependentAssociations.new(base)
  base.delegate :dependent_associations, to: :class
  base.extend(ClassMethods)
end

Public Instance Methods

associations_to_notify() click to toggle source
# File lib/lifesaver/notification/model_additions.rb, line 38
def associations_to_notify
  models = []
  notifiable_associations.on_notify.each do |association|
    models |= models_for_association(association)
  end
  models
end
models_for_association(assoc) click to toggle source
# File lib/lifesaver/notification/model_additions.rb, line 50
def models_for_association(assoc)
  models = []
  association = send(assoc)
  unless association.nil?
    if association.respond_to?(:each)
      association.each do |m|
        models << m
      end
    else
      models << association
    end
  end
  models
end
needs_to_notify?() click to toggle source
# File lib/lifesaver/notification/model_additions.rb, line 46
def needs_to_notify?
  notifiable_associations.any_to_notify?
end

Private Instance Methods

associations_to_load(key, associations_to_skip) click to toggle source
# File lib/lifesaver/notification/model_additions.rb, line 84
def associations_to_load(key, associations_to_skip)
  associations = notifiable_associations.public_send(key)
  associations - associations_to_skip
end
enqueue_worker(serialized_models) click to toggle source
# File lib/lifesaver/notification/model_additions.rb, line 97
def enqueue_worker(serialized_models)
  Lifesaver::Notification::Enqueuer.new(serialized_models).enqueue
end
load_associations(operation) click to toggle source
# File lib/lifesaver/notification/model_additions.rb, line 75
def load_associations(operation)
  return @loaded_associations unless @loaded_associations.nil?
  @loaded_associations = []
  to_skip = operation == :destroy ? dependent_associations.fetch : []
  to_load = associations_to_load(:on_change, to_skip)
  to_load.each { |key| @loaded_associations |= models_for_association(key) }
  @loaded_associations
end
serialize_models(models) click to toggle source
# File lib/lifesaver/notification/model_additions.rb, line 89
def serialize_models(models)
  serialized_models = []
  models.each do |m|
    serialized_models << Lifesaver::SerializedModel.new(m.class.name, m.id)
  end
  serialized_models
end
update_associations() click to toggle source
# File lib/lifesaver/notification/model_additions.rb, line 67
def update_associations
  operation = destroyed? ? :destroy : :update
  models = load_associations(operation)
  serialized_models = serialize_models(models)
  enqueue_worker(serialized_models)
  @loaded_associations = nil
end