class Elasticsearch::Model::Extensions::OuterDocumentUpdating::Update::Default

Public Class Methods

applicable_to?(klass) click to toggle source
# File lib/elasticsearch/model/extensions/outer_document_updating.rb, line 19
def self.applicable_to?(klass)
  true
end

Public Instance Methods

apply() click to toggle source
# File lib/elasticsearch/model/extensions/outer_document_updating.rb, line 23
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