Class: Ki::RackCommand
Overview
Constant Summary collapse
- @@web_ctx =
WebContext.new
Class Method Summary collapse
- .build_app(path_class_list) ⇒ Object
- .find_free_tcp_port ⇒ Object
- .wait_until_url_responds(url, &block) ⇒ Object
- .web_ctx ⇒ Object
Instance Method Summary collapse
- #execute(ctx, args) ⇒ Object
- #help ⇒ Object
- #ki_app ⇒ Object
- #opts ⇒ Object
- #start_server ⇒ Object
- #stop_server ⇒ Object
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_port ⇒ Object
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_ctx ⇒ Object
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 |
#help ⇒ Object
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_app ⇒ Object
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 |
#opts ⇒ Object
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. = "" 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 ⇒ Object
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_server ⇒ Object
114 115 116 |
# File 'lib/web/rack_cmd.rb', line 114 def stop_server @server.stop end |