class Duoconsole::CommandServer

Constants

RECOGNIZED_COMMANDS

Attributes

socket[R]

Public Class Methods

new(socket) click to toggle source
# File lib/duoconsole.rb, line 102
def initialize socket
  @socket = socket
end

Public Instance Methods

start() click to toggle source
# File lib/duoconsole.rb, line 106
def start
  loop do
    msg = socket.recv(1000)
    command, args = Marshal.load(msg)

    retval = if valid_command?(command)
      require_app unless @app_required
      run_command(command, args)
    else
      "Unrecognized command. Valid commands are #{RECOGNIZED_COMMANDS.join(', ')}"
    end

    socket.write(retval)
  end
end

Private Instance Methods

commander() click to toggle source
# File lib/duoconsole.rb, line 135
def commander
  @commander ||= Rails::Commands::Commander.new
end
dump_exception(e) click to toggle source
# File lib/duoconsole.rb, line 139
def dump_exception e
  puts "#{e.class}: #{e.message}"
  puts e.backtrace.map {|line| "\t#{line}"}
end
fork() { || ... } click to toggle source
# File lib/duoconsole.rb, line 154
def fork
  Rails::Commands::Environment.fork do
    trap(:INT) {
      $stderr.flush
      exit
    }

    Rails.application.require_environment!

    if defined?(ActiveRecord::Base)
      ActiveRecord::Base.establish_connection
    end

    add_test_dir_to_load_path

    yield
  end
end
monkeypatch_commands_gem() click to toggle source
# File lib/duoconsole.rb, line 152
def monkeypatch_commands_gem
  Rails::Commands::TestEnvironment.module_eval do
    def fork
      Rails::Commands::Environment.fork do
        trap(:INT) {
          $stderr.flush
          exit
        }

        Rails.application.require_environment!

        if defined?(ActiveRecord::Base)
          ActiveRecord::Base.establish_connection
        end

        add_test_dir_to_load_path

        yield
      end
    end
  end
end
require_app() click to toggle source
# File lib/duoconsole.rb, line 144
def require_app
  Rails.env = ENV['RAILS_ENV'] = ENV['RACK_ENV'] = 'test'
  require APP_PATH
  require 'commands'
  monkeypatch_commands_gem
  @app_required = true
end
run_command(command, args) click to toggle source
# File lib/duoconsole.rb, line 128
def run_command command, args
  commander.send(command, *args)
rescue => e
  dump_exception e
  e.class.name
end
valid_command?(command) click to toggle source
# File lib/duoconsole.rb, line 124
def valid_command? command
  RECOGNIZED_COMMANDS.include?(command.to_sym)
end