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