Class: Ki::RackCommand

Inherits:
Object show all
Defined in:
lib/web/rack_cmd.rb

Overview

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 Also:

Constant Summary collapse

@@web_ctx =
WebContext.new

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.build_app(path_class_list) ⇒ Object



73
74
75
76
77
78
79
80
81
# 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_portObject



83
84
85
86
87
88
89
90
91
# 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) ⇒ Object



93
94
95
96
97
98
99
100
101
102
103
104
105
106
# 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_ctxObject



140
141
142
# File 'lib/web/rack_cmd.rb', line 140

def self.web_ctx
  @@web_ctx
end

Instance Method Details

#execute(ctx, args) ⇒ Object



118
119
120
121
122
123
# 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

#helpObject



146
147
148
149
150
151
152
153
154
155
156
157
# 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_appObject



65
66
67
68
69
70
71
# 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

#optsObject



125
126
127
128
129
130
131
132
133
134
135
136
137
138
# 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_serverObject



108
109
110
111
112
# 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_serverObject



114
115
116
# File 'lib/web/rack_cmd.rb', line 114

def stop_server
  @server.stop
end