Class: Chewy::Strategy::Atomic

Inherits:
Base show all
Defined in:
lib/chewy/strategy/atomic.rb

Overview

This strategy accumulates all the objects prepared for indexing and fires index process when strategy is popped from the strategies stack.

Chewy.strategy(:atomic) do
  User.all.map(&:save) # Does nothing here
  Post.all.map(&:save) # And here
  # It imports all the changed users and posts right here
  # before block leaving with bulk ES API, kinda optimization
end

Direct Known Subclasses

ActiveJob, Resque, Sidekiq

Instance Method Summary collapse

Methods inherited from Base

#name

Constructor Details

#initializeAtomic

Returns a new instance of Atomic.



15
16
17
# File 'lib/chewy/strategy/atomic.rb', line 15

def initialize
  @stash = {}
end

Instance Method Details

#leaveObject



26
27
28
# File 'lib/chewy/strategy/atomic.rb', line 26

def leave
  @stash.all? { |type, ids| type.import!(ids) }
end

#update(type, objects, options = {}) ⇒ Object



19
20
21
22
23
24
# File 'lib/chewy/strategy/atomic.rb', line 19

def update(type, objects, options = {})
  ActiveSupport::Deprecation.warn('`urgent: true` option is deprecated and is not effective inside `:atomic` strategy, use `Chewy.strategy(:urgent)` strategy instead') if options.key?(:urgent)

  @stash[type] ||= []
  @stash[type] |= type.send(:build_root).id ? Array.wrap(objects) : type.adapter.identify(objects)
end