class Elasticsearch::Model::TransactionalCallbacks::Queue

Responsible for storing a queue of resources to be indexed/updated/deleted from elasticsearch

Attributes

state[R]

Public Class Methods

new() click to toggle source
# File lib/elasticsearch/model/transactional_callbacks/queue.rb, line 14
def initialize
  reset!
end

Public Instance Methods

push(action, resource) click to toggle source
# File lib/elasticsearch/model/transactional_callbacks/queue.rb, line 22
def push(action, resource)
  do_push action, resource, _id: resource.id, _parent: parent_id(resource)
end
push_all(action, relation) click to toggle source
# File lib/elasticsearch/model/transactional_callbacks/queue.rb, line 26
def push_all(action, relation)
  return unless ::Elasticsearch::Model::TransactionalCallbacks.in?(relation.included_modules)

  pluck_ids(relation) do |ids|
    do_push action, relation, ids
  end
end
reset!() click to toggle source
# File lib/elasticsearch/model/transactional_callbacks/queue.rb, line 18
def reset!
  @state = {}
end
to_h() click to toggle source
# File lib/elasticsearch/model/transactional_callbacks/queue.rb, line 34
def to_h
  state
end

Private Instance Methods

child?(resource_or_relation) click to toggle source
# File lib/elasticsearch/model/transactional_callbacks/queue.rb, line 65
def child?(resource_or_relation)
  parent_type(resource_or_relation).present?
end
do_push(action, resource_or_relation, options) click to toggle source
# File lib/elasticsearch/model/transactional_callbacks/queue.rb, line 40
def do_push(action, resource_or_relation, options)
  type = document_type(resource_or_relation)

  prepare_state_for(type)

  state[type][action] << options.compact
  state[type][action].uniq!
end
document_type(resource_or_relation) click to toggle source
# File lib/elasticsearch/model/transactional_callbacks/queue.rb, line 61
def document_type(resource_or_relation)
  resource_class(resource_or_relation).document_type.to_sym
end
parent_id(resource) click to toggle source
# File lib/elasticsearch/model/transactional_callbacks/queue.rb, line 73
def parent_id(resource)
  return unless child?(resource)

  resource.public_send "#{parent_type resource}_id"
end
parent_type(resource_or_relation) click to toggle source
# File lib/elasticsearch/model/transactional_callbacks/queue.rb, line 69
def parent_type(resource_or_relation)
  resource_class(resource_or_relation).mapping.options.dig(:_parent, :type)
end
pluck_ids(relation) { |_id: ids, _parent: ids| ... } click to toggle source
# File lib/elasticsearch/model/transactional_callbacks/queue.rb, line 79
def pluck_ids(relation)
  if child?(relation)
    relation.pluck(:id, "#{parent_type relation}_id").map do |ids|
      yield _id: ids[0], _parent: ids[1]
    end
  else
    relation.pluck(:id).map do |id|
      yield _id: id
    end
  end
end
prepare_state_for(type) click to toggle source
# File lib/elasticsearch/model/transactional_callbacks/queue.rb, line 49
def prepare_state_for(type)
  state[type] ||= {
    index: [],
    update: [],
    delete: []
  }
end
resource_class(resource_or_relation) click to toggle source
# File lib/elasticsearch/model/transactional_callbacks/queue.rb, line 57
def resource_class(resource_or_relation)
  resource_or_relation.respond_to?(:document_type) ? resource_or_relation : resource_or_relation.class
end