class Restfulness::Dispatchers::Rack
Public Instance Methods
call(env)
click to toggle source
# File lib/restfulness/dispatchers/rack.rb, line 7 def call(env) # Make sure we understand the request request = prepare_request(env) # Prepare a suitable response response = Response.new(request) response.run [response.status, response.headers, [response.payload || ""]] end
Protected Instance Methods
parse_action(env, action)
click to toggle source
Given that we need to deal with the action early on, we handle the HTTP method override header here.
# File lib/restfulness/dispatchers/rack.rb, line 46 def parse_action(env, action) action = (env['HTTP_X_HTTP_METHOD_OVERRIDE'] || action).strip.downcase case action when 'delete', 'get', 'head', 'post', 'put', 'patch', 'options' action.to_sym else raise HTTPException.new(501) end end
prepare_headers(env)
click to toggle source
# File lib/restfulness/dispatchers/rack.rb, line 56 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
prepare_request(env)
click to toggle source
# File lib/restfulness/dispatchers/rack.rb, line 20 def prepare_request(env) rack_req = ::Rack::Request.new(env) request = Request.new(app) request.env = env # Reference to Rack env request.uri = rack_req.url request.action = parse_action(env, rack_req.request_method) request.body = rack_req.body request.headers = prepare_headers(env) # Just in case something else got to body first request.body.rewind if request.body.is_a?(StringIO) # Useful info 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