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