Class: Chewy::Strategy

Inherits:
Object show all
Defined in:
lib/chewy/strategy.rb,
lib/chewy/strategy/base.rb,
lib/chewy/strategy/atomic.rb,
lib/chewy/strategy/bypass.rb,
lib/chewy/strategy/resque.rb,
lib/chewy/strategy/urgent.rb,
lib/chewy/strategy/sidekiq.rb,
lib/chewy/strategy/active_job.rb

Overview

This class represents strategies stack with ‘:base` Strategy on top of it. This causes raising exceptions on every index update attempt, so other strategy must be choosen.

User.first.save # Raises UndefinedUpdateStrategy exception

Chewy.strategy(:atomic) do
  User.last.save # Save user according to the `:atomic` strategy rules
end

Defined Under Namespace

Classes: ActiveJob, Atomic, Base, Bypass, Resque, Sidekiq, Urgent

Instance Method Summary collapse

Constructor Details

#initializeStrategy

Returns a new instance of Strategy.



37
38
39
# File 'lib/chewy/strategy.rb', line 37

def initialize
  @stack = [resolve(Chewy.root_strategy).new]
end

Instance Method Details

#currentObject



41
42
43
# File 'lib/chewy/strategy.rb', line 41

def current
  @stack.last
end

#popObject



51
52
53
54
55
56
# File 'lib/chewy/strategy.rb', line 51

def pop
  raise "Can't pop root strategy" if @stack.one?
  debug "[#{@stack.size}] -> #{current.name}"
  result = @stack.pop.tap(&:leave)
  result
end

#push(name) ⇒ Object



45
46
47
48
49
# File 'lib/chewy/strategy.rb', line 45

def push name
  result = @stack.push resolve(name).new
  debug "[#{@stack.size}] <- #{current.name}"
  result
end

#wrap(name) ⇒ Object



58
59
60
61
62
63
# File 'lib/chewy/strategy.rb', line 58

def wrap name
  stack = push(name)
  yield
ensure
  pop if stack
end