class Mimi::Application::Runner

Attributes

application_class[R]
application_instance[R]

Public Class Methods

new(application_class) click to toggle source
# File lib/mimi/application/runner.rb, line 8
def initialize(application_class)
  @application_class = application_class
  @application_instance = application_class.instance
end

Public Instance Methods

emit(event) click to toggle source
# File lib/mimi/application/runner.rb, line 38
def emit(event)
  logger.debug "emit(#{event})"
  handlers = application_class.event_handlers.select { |h| h[:event] == event }
  handlers.each do |h|
    application_instance.instance_exec(&h[:block])
  end
rescue Exception => e
  logger.fatal "Failed to process event '#{event}': #{e}"
  logger.debug e.backtrace.join("\n")
  raise
end
run() click to toggle source
# File lib/mimi/application/runner.rb, line 13
def run
  application_instance.stop_requested = false
  init_signal_handlers
  emit(:configure)
  emit(:start)
  loop do
    break if application_instance.stop_requested
    emit(:tick)
    emit(:every)
    break if application_instance.stop_requested
    sleep Mimi::Application.module_options[:tick_interval]
  end
  emit(:stop)
  true
rescue Exception => e
  # abort "FATAL: #{e}"
  abort "FATAL: #{e}"
end
stop_by_signal(signal) click to toggle source
# File lib/mimi/application/runner.rb, line 32
def stop_by_signal(signal)
  # TODO: cant' run to log in the trap context
  # puts "Signal caught (#{signal}), exiting"
  application_instance.stop_requested = true
end

Private Instance Methods

init_signal_handlers() click to toggle source
# File lib/mimi/application/runner.rb, line 52
def init_signal_handlers
  %w(INT TERM QUIT).each do |stop_signal|
    Signal.trap(stop_signal) { stop_by_signal(stop_signal) }
  end
  # Signal.trap('KILL') { stop_now! }
end