lib/esse/repository/documents.rb in esse-0.2.6 vs lib/esse/repository/documents.rb in esse-0.3.0

- old
+ new

@@ -4,9 +4,41 @@ class Repository module ClassMethods def import(**kwargs) index.import(repo_name, **kwargs) end + + def update_documents_attribute(name, *ids_or_doc_headers, **kwargs) + batch = documents_for_lazy_attribute(name, *ids_or_doc_headers) + return if batch.empty? + + index.bulk(**kwargs, update: batch) + end + + def documents_for_lazy_attribute(name, *ids_or_doc_headers) + unless lazy_document_attribute?(name) + raise ArgumentError, <<~MSG + The attribute `#{name}` is not defined as a lazy document attribute. + + Define the attribute as a lazy document attribute using the `lazy_document_attribute` method. + MSG + end + + docs = LazyDocumentHeader.coerce_each(ids_or_doc_headers) + return [] if docs.empty? + + arr = [] + result = fetch_lazy_document_attribute(name).call(docs) + return [] unless result.is_a?(Hash) + + result.each do |key, datum| + doc = docs.find { |d| d == key || d.id == key } + next unless doc + + arr << doc.to_doc(name => datum) + end + arr + end end extend ClassMethods end end