class Lusnoc::Guard
Attributes
callbacks[R]
Public Class Methods
new(base_url) { |self| ... }
click to toggle source
# File lib/lusnoc/guard.rb, line 11 def initialize(base_url) @base_url = base_url @callbacks = {} yield(self) if block_given? end
Public Instance Methods
condition(&block)
click to toggle source
# File lib/lusnoc/guard.rb, line 17 def condition(&block) @callbacks[:condition] = block self end
run() { || ... }
click to toggle source
# File lib/lusnoc/guard.rb, line 27 def run th = start_thread yield ensure th.kill rescue nil end
then(&block)
click to toggle source
# File lib/lusnoc/guard.rb, line 22 def then(&block) @callbacks[:then] = block self end
Private Instance Methods
fire!(*args)
click to toggle source
# File lib/lusnoc/guard.rb, line 50 def fire!(*args) @callbacks[:then]&.tap do |cb| @callbacks[:then] = nil logger.info "Guard[#{@base_url.inspect}] fired" cb.call(*args) end end
start_thread()
click to toggle source
# File lib/lusnoc/guard.rb, line 36 def start_thread Thread.new do logger.info "Guard[#{@base_url.inspect}] thread started" watch_forever(@base_url) fire! rescue StandardError => e logger.error "Guard[#{@base_url.inspect}] error: #{e.inspect}" logger.error e.backtrace fire!(e) ensure logger.info "Guard[#{@base_url.inspect}] finihsed" end end
watch_forever(base_url)
click to toggle source
# File lib/lusnoc/guard.rb, line 58 def watch_forever(base_url) Lusnoc::Watcher.new(base_url).run(max_consul_wait: 10) do |body| return true unless @callbacks[:condition].call(body) end end