class Geary::CLI

Constants

Shutdown

Attributes

configuration[R]
external_signal_queue[R]
internal_signal_queue[R]

Public Class Methods

new(argv, stdout = STDOUT, stderr = STDERR, kernel = Kernel, pipe = IO.pipe) click to toggle source
# File lib/geary/cli.rb, line 16
def initialize(argv, stdout = STDOUT, stderr = STDERR, kernel = Kernel,
               pipe = IO.pipe)
  @argv = argv
  @stdout = stdout
  @stdout = stderr
  @kernel = kernel
  @internal_signal_queue, @external_signal_queue = pipe
  @configuration = OptionParser.new.parse(@argv)
end

Public Instance Methods

execute!() click to toggle source
# File lib/geary/cli.rb, line 26
def execute!
  Celluloid.logger.level = configuration.log_level

  %w(INT TERM).each do |signal|
    trap signal do
      external_signal_queue.puts(signal)
    end
  end

  munge_environment_given(configuration)
  load_rails

  manager = Manager.new(configuration: configuration)
  manager.start

  begin
    loop do
      IO.select([internal_signal_queue])
      signal = internal_signal_queue.gets.strip

      handle(signal)
    end
  rescue Shutdown
    manager.async.stop

    manager.wait(:done)

    @kernel.exit(0)
  end
end
handle(signal) click to toggle source
# File lib/geary/cli.rb, line 57
def handle(signal)
  if %w(INT TERM).include?(signal)
    raise Shutdown
  end
end

Private Instance Methods

load_rails() click to toggle source
# File lib/geary/cli.rb, line 70
def load_rails
  begin
    require 'rails'
  rescue LoadError
    Celluloid.logger.debug "Unable to load Rails"
  else
    Celluloid.logger.debug "Loading Rails"

    require 'geary/railtie'
    require 'config/environment'

    ::Rails.application.eager_load!
  end
end
munge_environment_given(configuration) click to toggle source
# File lib/geary/cli.rb, line 65
def munge_environment_given(configuration)
  $:.concat(configuration.included_paths)
  configuration.required_files.each { |file| require file }
end