class Ki::RackCommand

When starting up, looks for /web extension classes loaded from ki-scripts and starts up a web site

class MyApp2 < Sinatra::Base
  get '/' do
    "MyApp2"
  end
end
KiCommand.register("/web/test", MyApp2)

@see DefaultRackHandler

Public Class Methods

build_app(path_class_list) click to toggle source
# File lib/web/rack_cmd.rb, line 73
def RackCommand.build_app(path_class_list)
  Rack::Builder.new do
    path_class_list.each do |path, clazz|
      map(path) do
        run(clazz)
      end
    end
  end
end
find_free_tcp_port() click to toggle source
# File lib/web/rack_cmd.rb, line 83
def RackCommand.find_free_tcp_port
  socket = Socket.new(:INET, :STREAM, 0)
  socket.bind(Addrinfo.tcp("127.0.0.1", 0))
  begin
    socket.local_address.ip_port
  ensure
    socket.close
  end
end
wait_until_url_responds(url, &block) click to toggle source
# File lib/web/rack_cmd.rb, line 93
def RackCommand.wait_until_url_responds(url, &block)
  try(20, 0.1) do
    response = Net::HTTP.get_response(URI(url))
    if block
      block.call(response)
    else
      if (code = response.code) == "200"
        return response
      else
        raise "Response code from #{url} was #{code}"
      end
    end
  end
end
web_ctx() click to toggle source
# File lib/web/rack_cmd.rb, line 140
def self.web_ctx
  @@web_ctx
end

Public Instance Methods

execute(ctx, args) click to toggle source
# File lib/web/rack_cmd.rb, line 118
def execute(ctx, args)
  RackCommand.web_ctx.ki_home=ctx.ki_home
  @port = nil
  opts.parse(args)
  start_server
end
help() click to toggle source
# File lib/web/rack_cmd.rb, line 146
    def help
      <<EOF
ki-repo has a built in web server.

### Usage

    #{shell_command} - Starts Ki web server

### Parameters
#{opts}
EOF
    end
ki_app() click to toggle source
# File lib/web/rack_cmd.rb, line 65
def ki_app
  extensions = KiCommand::KiExtensions.by_parent["/web"]
  if extensions.nil? || extensions.empty?
    raise "No /web extensions defined!"
  end
  RackCommand.build_app(extensions.map{|p,c| [p[4..-1], c]})
end
opts() click to toggle source
# File lib/web/rack_cmd.rb, line 125
def opts
  OptionParser.new do |opts|
    opts.banner = ""
    opts.on("--handler HANDLER", "Use specified Rack Handler") do |v|
      handler(Object.const_get_full(v))
    end
    opts.on("--development", "Development mode, resource urls are reloaded") do |v|
      RackCommand.web_ctx.development=true
    end
    opts.on("-p", "--port PORT", "Use specified port") do |v|
      @port = Integer(v)
    end
  end
end
start_server() click to toggle source
# File lib/web/rack_cmd.rb, line 108
def start_server
  @server = handler.new
  [:INT, :TERM].each { |sig| trap(sig) { stop_server } }
  @server.run(ki_app, :Port => (@port || 8290))
end
stop_server() click to toggle source
# File lib/web/rack_cmd.rb, line 114
def stop_server
  @server.stop
end