class Msgr::CLI

Attributes

options[R]

Public Class Methods

new(options) click to toggle source
# File lib/msgr/cli.rb, line 9
    def initialize(options)
      @options = options

      if !File.exist?(options[:require]) ||
         (File.directory?(options[:require]) &&
         !File.exist?("#{options[:require]}/config/application.rb"))
        raise <<~ERR
          Rails application or required ruby file not found: #{options[:require]}
        ERR
      end
    end
run(argv) click to toggle source
# File lib/msgr/cli.rb, line 59
def run(argv)
  new(parse(argv)).run
end

Private Class Methods

parse(_argv) click to toggle source
# File lib/msgr/cli.rb, line 65
def parse(_argv)
  options = {
    require: Dir.pwd,
    environment: 'development'
  }

  OptionParser.new do |o|
    o.on(
      '-r', '--require [PATH|DIR]',
      'Location of Rails application (default to current directory)'
    ) do |arg|
      options[:require] = arg
    end

    o.on(
      '-e', '--environment [env]',
      'Rails environment (default to development)'
    ) do |arg|
      options[:environment] = arg
    end
  end.parse!

  options
end

Public Instance Methods

run() click to toggle source
# File lib/msgr/cli.rb, line 21
def run
  ENV['RACK_ENV'] = ENV['RAILS_ENV'] = options[:environment]

  if File.directory?(options[:require])
    require 'rails'
    if ::Rails::VERSION::MAJOR == 4
      require File.expand_path("#{options[:require]}/config/application.rb")
      ::Rails::Application.initializer 'msgr.eager_load' do
        ::Rails.application.config.eager_load = true
      end
    end

    require 'msgr/railtie'
    require File.expand_path("#{options[:require]}/config/environment.rb")
  else
    require(options[:require])
  end

  r, w = IO.pipe

  Signal.trap('INT') { w.puts 'INT' }
  Signal.trap('TERM') { w.puts 'TERM' }

  Msgr.logger = Logger.new(STDOUT)
  Msgr.client.start

  while (readable = IO.select([r]))
    case readable.first[0].gets.strip
      when 'INT', 'TERM'
        Msgr.client.stop
        break
      else
        exit 1
    end
  end
end