Class: Webmachine::Adapters::Rack3
- Inherits:
-
Adapter
- Object
- Adapter
- Webmachine::Adapters::Rack3
- Defined in:
- lib/webmachine/adapters/rack3_adapter.rb
Direct Known Subclasses
Defined Under Namespace
Classes: RackRequest, RequestBody
Constant Summary collapse
- DEFAULT_OPTIONS =
Used to override default Rack server options (useful in testing)
{}
- REQUEST_URI =
"REQUEST_URI".freeze
- RACK_VERSION =
::Rack::RELEASE.match(/^(\d+\.\d+)/)[1]
- VERSION_STRING =
"#{Webmachine::SERVER_STRING} Rack/#{RACK_VERSION}".freeze
- NEWLINE =
"\n".freeze
Instance Method Summary collapse
-
#call(env) ⇒ Object
Handles a Rack-based request.
-
#run ⇒ Object
Start the Rack adapter.
Instance Method Details
#call(env) ⇒ Object
Handles a Rack-based request.
37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 |
# File 'lib/webmachine/adapters/rack3_adapter.rb', line 37 def call(env) headers = Webmachine::Headers.from_cgi(env) rack_req = ::Rack::Request.new env request = build_webmachine_request(rack_req, headers) response = Webmachine::Response.new application.dispatcher.dispatch(request, response) response.headers[SERVER] = VERSION_STRING rack_body = case response.body when String # Strings are enumerable in ruby 1.8 [response.body] else if (io_body = IO.try_convert(response.body)) io_body elsif response.body.respond_to?(:call) response.body elsif response.body.respond_to?(:each) response.body else [response.body.to_s] end end rack_res = ::Rack::Response.new(rack_body, response.code, response.headers) rack_res.finish end |
#run ⇒ Object
Start the Rack adapter
24 25 26 27 28 29 30 31 32 33 |
# File 'lib/webmachine/adapters/rack3_adapter.rb', line 24 def run = DEFAULT_OPTIONS.merge({ app: self, Port: application.configuration.port, Host: application.configuration.ip }).merge(application.configuration.) @server = ::Rack::Server.new() @server.start end |