class Chewy::Strategy
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
Public Class Methods
new()
click to toggle source
# File lib/chewy/strategy.rb, line 33 def initialize @stack = [resolve(Chewy.root_strategy).new] end
Public Instance Methods
current()
click to toggle source
# File lib/chewy/strategy.rb, line 37 def current @stack.last end
pop()
click to toggle source
# File lib/chewy/strategy.rb, line 47 def pop raise "Can't pop root strategy" if @stack.one? result = @stack.pop.tap(&:leave) debug "[#{@stack.size}] -> #{result.name}, now #{current.name}" if @stack.size > 1 result end
push(name)
click to toggle source
# File lib/chewy/strategy.rb, line 41 def push(name) result = @stack.push resolve(name).new debug "[#{@stack.size - 1}] <- #{current.name}" if @stack.size > 2 result end
wrap(name) { || ... }
click to toggle source
# File lib/chewy/strategy.rb, line 55 def wrap(name) stack = push(name) yield ensure pop if stack end
Private Instance Methods
debug(string)
click to toggle source
# File lib/chewy/strategy.rb, line 64 def debug(string) return unless Chewy.logger&.debug? line = caller.detect { |l| l !~ %r{lib/chewy/strategy.rb:|lib/chewy.rb:} } Chewy.logger.debug(["Chewy strategies stack: #{string}", line.sub(/:in\s.+$/, '')].join(' @ ')) end
resolve(name)
click to toggle source
# File lib/chewy/strategy.rb, line 71 def resolve(name) "Chewy::Strategy::#{name.to_s.camelize}".safe_constantize or raise "Can't find update strategy `#{name}`" end