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