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