class Miniserver::Command

Constants

COMMANDS

Public Class Methods

new(argv) click to toggle source
# File lib/miniserver/command.rb, line 9
def initialize(argv)
  @options = {
    daemonize: false,
    host: '0.0.0.0',
    port: 8080,
    rackup: ::File.expand_path('config.ru'),
    log: ::File.expand_path('log/miniserver.log'),
    pid: ::File.expand_path('tmp/pids/miniserver.pid'),
    environment: 'development'
  }

  parser.parse!(argv)

  @command = argv.pop || 'start'
end
restart(script, options) click to toggle source
# File lib/miniserver/command.rb, line 78
def self.restart(script, options)
  File.delete(options[:pid]) if File.exist?(options[:pid])

  shellified_options = options.inject([]) do |args, (name, value)|
    option_name = name.to_s.tr("_", "-")
    case value
    when NilClass, TrueClass
      args << "--#{option_name}"
    when FalseClass
    when Array
      value.each { |v| args << "--#{option_name}=#{v}" }
    else
      args << "--#{option_name}=#{value}"
    end

    args
  end

  cmd = "#{script} #{shellified_options.compact.join(' ')} start"

  Open3.popen3(cmd) do |stdin, stdout, stderr|
    puts stdout.gets until stdout.eof?
    puts stderr.gets until stderr.eof?
  end

  exit
end

Public Instance Methods

parser() click to toggle source
# File lib/miniserver/command.rb, line 33
def parser
  @parser ||= OptionParser.new do |o|
    o.banner = "Miniserver #{Miniserver::VERSION}\nUsage: miniserver <options> #{COMMANDS.join('|')}"
    o.separator ""

    o.on "-p", "--port PORT", "Define the TCP port to bind (default: #{@options[:port]})" do |arg|
      @options[:port] = arg
    end

    o.on "-o", "--host HOST", "Bind to HOST address (default: #{@options[:host]})" do |arg|
      @options[:host] = arg
    end

    o.on "-l", "--log FILE", "File to redirect output (default: log/miniserver.log)" do |arg|
      @options[:log] = arg
    end

    o.on "-P", "--pid FILE", "File to store PID (default: tmp/pids/miniserver.pid)" do |arg|
      @options[:pid] = arg
    end

    o.on "-d", "--daemonize", "Run daemonized in the background(default: false)" do |arg|
      @options[:daemonize] = arg
    end

    o.on "-e", "--environment ENVIRONMENT", "The environment to run the Rack app on (default development)" do |arg|
      @options[:environment] = arg
    end

    o.on "-R", "--rackup FILE", "Load a Rack config file (default: #{@options[:rackup]})" do |arg|
      @options[:rackup] = arg
    end

    o.on_tail "-h", "--help", "Show help" do
      puts @parser
      exit
    end

    o.on_tail("-v", "--version", "Show version") do
      puts "Miniserver #{Miniserver::VERSION}"
      exit
    end
  end
end
run!() click to toggle source
# File lib/miniserver/command.rb, line 25
def run!
  if COMMANDS.include?(@command)
    Runner.new(@options).send(@command)
  else
    puts @parser
  end
end