Module: ActivityNotification::Association

Extended by:
ActiveSupport::Concern
Included in:
Notifiable, Notifier, ORM::Mongoid::Notification, ORM::Mongoid::Subscription, Subscriber, Target
Defined in:
lib/activity_notification/orm/mongoid.rb,
lib/activity_notification/orm/active_record.rb

Class Method Summary collapse

Class Method Details

.belongs_to_polymorphic_xdb_record(name, _options = {}) ⇒ Object

Defines polymorphic belongs_to association with models in other database.



22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
# File 'lib/activity_notification/orm/mongoid.rb', line 22

def belongs_to_polymorphic_xdb_record(name, _options = {})
  association_name     = name.to_s.singularize.underscore
  id_field, type_field = "#{association_name}_id", "#{association_name}_type"
  field id_field,   type: String
  field type_field, type: String

  self.instance_eval do
    define_method(name) do |reload = false|
      reload and self.instance_variable_set("@#{name}", nil)
      if self.instance_variable_get("@#{name}").blank?
        if (class_name = self.send(type_field)).present?
          object_class = class_name.classify.constantize
          self.instance_variable_set("@#{name}", object_class.where(id: self.send(id_field)).first)
        end
      end
      self.instance_variable_get("@#{name}")
    end

    define_method("#{name}=") do |new_instance|
      if new_instance.nil? then instance_id, instance_type = nil, nil else instance_id, instance_type = new_instance.id, new_instance.class.name end
      self.send("#{id_field}=", instance_id)
      self.send("#{type_field}=", instance_type)
      self.instance_variable_set("@#{name}", nil)
    end
  end
end

.filtered_by_associationMongoid::Criteria<Notificaion>

Selects filtered notifications by associated instance.

Parameters:

  • name (String)

    Association name

  • instance (Object)

    Associated instance

Returns:

  • (Mongoid::Criteria<Notificaion>)

    Database query of filtered notifications



11
# File 'lib/activity_notification/orm/mongoid.rb', line 11

scope :filtered_by_association, ->(name, instance) { instance.present? ? where({ "#{name}_id" => instance.id, "#{name}_type" => instance.class.name }) : none }

.has_many_polymorphic_xdb_records(name, options = {}) ⇒ Object

TODO:

Add dependent option

Defines polymorphic has_many association with models in other database.



51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
# File 'lib/activity_notification/orm/mongoid.rb', line 51

def has_many_polymorphic_xdb_records(name, options = {})
  association_name     = options[:as] || name.to_s.underscore
  id_field, type_field = "#{association_name}_id", "#{association_name}_type"
  object_name          = options[:class_name] || name.to_s.singularize.camelize
  object_class         = object_name.classify.constantize

  self.instance_eval do
    define_method(name) do |reload = false|
      reload and self.instance_variable_set("@#{name}", nil)
      if self.instance_variable_get("@#{name}").blank?
        new_value = object_class.where(id_field => self.id, type_field => self.class.name)
        self.instance_variable_set("@#{name}", new_value)
      end
      self.instance_variable_get("@#{name}")
    end
  end
end

.has_many_records(name, options = {}) ⇒ ActiveRecord_AssociationRelation<Object>

Defines has_many association with ActivityNotification models.

Returns:

  • (ActiveRecord_AssociationRelation<Object>)

    Database query of associated model instances



17
18
19
# File 'lib/activity_notification/orm/mongoid.rb', line 17

def has_many_records(name, options = {})
  has_many_polymorphic_xdb_records name, options
end