Class: Elasticsearch::Model::Extensions::OuterDocumentUpdating::Update::Default

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

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)


25
26
27
# File 'lib/elasticsearch/model/extensions/outer_document_updating.rb', line 25

def self.applicable_to?(klass)
  true
end

Instance Method Details

#applyObject



29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
# File 'lib/elasticsearch/model/extensions/outer_document_updating.rb', line 29

def apply
  parent_class = @parent_class
  child_class = @child_class

  only_if = -> r { true }

  puts "Parent: #{@parent_class.name}"
  puts "Child: #{@child_class.name}"

  # 子cから親aへのパスが[:b, :a]のようなパスだったら、c.b.aのようにaを辿れるはずなので
  records_to_update_documents = begin
    child_to_parent_path = Elasticsearch::Model::Extensions::OuterDocumentUpdating::ClassMethods::AssociationTraversal.shortest_path(from: child_class, to: parent_class)

    -> updated_record {
      if child_to_parent_path.nil?
        warn "Couldn't automatically determine the path from the class `#{child_class}` to `#{parent_class}." +
                "Use `partially_updates_document_of parent_class, records_to_update_documents: -> child { ... }` to specify it."
      end

      child_to_parent_path.inject(updated_record) { |d, parent_association| d.send parent_association }
    }
  end

  [only_if, records_to_update_documents]
end