Class: Elasticsearch::Model::Extensions::OuterDocumentUpdating::Update::ThroughPolymorphicAssociation

Inherits:
Elasticsearch::Model::Extensions::OuterDocumentUpdating::Update show all
Defined in:
lib/elasticsearch/model/extensions/outer_document_updating.rb

Overview

Configures callbacks to update the index of the model associated through a polymorphic association

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from Elasticsearch::Model::Extensions::OuterDocumentUpdating::Update

#initialize

Constructor Details

This class inherits a constructor from Elasticsearch::Model::Extensions::OuterDocumentUpdating::Update

Class Method Details

.applicable_to?(klass) ⇒ Boolean

Returns:

  • (Boolean)


59
60
61
# File 'lib/elasticsearch/model/extensions/outer_document_updating.rb', line 59

def self.applicable_to?(klass)
  !! polymorphic_assoc_for(klass)
end

.polymorphic_assoc_for(klass) ⇒ Object



63
64
65
66
67
# File 'lib/elasticsearch/model/extensions/outer_document_updating.rb', line 63

def self.polymorphic_assoc_for(klass)
  klass.reflect_on_all_associations.find { |a|
    a.macro == :belongs_to && a.options[:polymorphic]
  }
end

Instance Method Details

#applyObject



69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
# File 'lib/elasticsearch/model/extensions/outer_document_updating.rb', line 69

def apply
  parent_class = @parent_class
  child_class = @child_class

  polymorphic_assoc = self.class.polymorphic_assoc_for(child_class)
  polymorphic_assoc_name = polymorphic_assoc.name

  parent_type_attribute_name = :"#{polymorphic_assoc_name}_type"
  parent_id_attribute_name = :"#{polymorphic_assoc_name}_id"

  only_if = -> updated_record {
    updated_record.send(parent_type_attribute_name) == parent_class.name
  }

  records_to_update_documents = -> updated_record {
    parent_class.where(id: updated_record.send(parent_id_attribute_name))
  }

  [only_if, records_to_update_documents]
end