Sha256: c1f7b764be579d9a4823bc7c91c92c7a679985df12daa5ddbfca94f7d98c7bd2

Contents?: true

Size: 1.83 KB

Versions: 8

Compression:

Stored size: 1.83 KB

Contents

require 'optparse'

class Pigeon::Launcher
  # == Class Methods ========================================================
  
  def self.launch(engine = Pigeon::Engine, *arguments)
    arguments = %w[ start ] if (arguments.empty?)
    
    new(engine).handle_args(*arguments)
  end
    
  # == Instance Methods =====================================================
    
  def initialize(with_engine = Pigeon::Engine)
    @engine = with_engine
    
    yield(self) if (block_given?)
  end
  
  def handle_args(*args)
    op = OptionParser.new
    
    command = op.parse(*args.flatten).first

    begin
      case (command)
      when 'start'
        @engine.start(&method(:start))
      when 'stop'
        @engine.stop(&method(:stop))
      when 'restart'
        @engine.restart(&method(:restart))
      when 'status'
        @engine.status(&method(:status))
      when 'run'
        @engine.logger = Pigeon::Logger.new(STDOUT)

        @engine.run(&method(:run))
      else
        usage
      end
    rescue Interrupt
      shutdown(pid)
      exit(0)
    end
  end
  
  def run(pid)
    puts "#{@engine.name} now running. [%d]" % pid
    puts "Use ^C to terminate."
  end
  
  def start(pid)
    puts "#{@engine.name} now running. [%d]" % pid
  end
  
  def stop(pid)
    if (pid)
      puts "#{@engine.name} shut down. [%d]" % pid
    else
      puts "#{@engine.name} was not running."
    end
  end
  
  def status(pid)
    if (pid)
      puts "#{@engine.name} running. [%d]" % pid
    else
      puts "#{@engine.name} is not running."
    end
  end
  
  def restart(pid, old_pid)
    if (old_pid)
      puts "#{@engine.name} terminated. [%d]" % old_pid
    end

    puts "#{@engine.name} now running. [%d]" % pid
  end
  
  def shutdown(pid)
    puts "Shutting down."
  end

  def usage
    puts "Usage: #{File.basename($0)} [start|stop|restart|status|run]"
  end
end

Version data entries

8 entries across 8 versions & 1 rubygems

Version Path
pigeon-0.7.1 lib/pigeon/launcher.rb
pigeon-0.7.0 lib/pigeon/launcher.rb
pigeon-0.6.5 lib/pigeon/launcher.rb
pigeon-0.6.4 lib/pigeon/launcher.rb
pigeon-0.6.3 lib/pigeon/launcher.rb
pigeon-0.6.2 lib/pigeon/launcher.rb
pigeon-0.6.1 lib/pigeon/launcher.rb
pigeon-0.6.0 lib/pigeon/launcher.rb