lib/restfulness/dispatchers/rack.rb in restfulness-0.2.0 vs lib/restfulness/dispatchers/rack.rb in restfulness-0.2.1
- old
+ new
@@ -3,73 +3,55 @@
module Dispatchers
class Rack < Dispatcher
def call(env)
- rack_req = ::Rack::Request.new(env)
-
# Make sure we understand the request
- request = Request.new(app)
- prepare_request(env, rack_req, request)
+ request = prepare_request(env)
# Prepare a suitable response
response = Response.new(request)
response.run
- log_response(response.status)
[response.status, response.headers, [response.payload || ""]]
end
protected
- def prepare_request(env, rack_req, request)
- request.uri = rack_req.url
- request.action = parse_action(rack_req.request_method)
- request.query = rack_req.GET
- request.body = rack_req.body
- request.remote_ip = rack_req.ip
- request.headers = prepare_headers(env)
+ def prepare_request(env)
+ rack_req = ::Rack::Request.new(env)
+ request = Request.new(app)
+ request.uri = rack_req.url
+ request.action = parse_action(rack_req.request_method)
+ request.query = rack_req.GET
+ request.body = rack_req.body
+ request.headers = prepare_headers(env)
+ request.remote_ip = rack_req.ip
+ request.user_agent = rack_req.user_agent
+
# Sometimes rack removes content type from headers
request.headers[:content_type] ||= rack_req.content_type
+
+ request
end
def parse_action(action)
case action
- when 'DELETE'
- :delete
- when 'GET'
- :get
- when 'HEAD'
- :head
- when 'POST'
- :post
- when 'PUT'
- :put
- when 'PATCH'
- :patch
- when 'OPTIONS'
- :options
+ when 'DELETE', 'GET', 'HEAD', 'POST', 'PUT', 'PATCH', 'OPTIONS'
+ action.downcase.to_sym
else
raise HTTPException.new(501)
end
end
- def log_response(status)
- logger.info("Completed #{status} #{STATUSES[status]}")
- end
-
def prepare_headers(env)
res = {}
env.each do |k,v|
next unless k =~ /^HTTP_/
res[k.sub(/^HTTP_/, '').downcase.gsub(/-/, '_').to_sym] = v
end
res
- end
-
- def logger
- Restfulness.logger
end
end
end