Class: Sinatra::Request
- Inherits:
-
Rack::Request
- Object
- Rack::Request
- Sinatra::Request
- Defined in:
- lib/sinatra/base.rb
Overview
The request object. See Rack::Request for more info: http://rubydoc.info/github/rack/rack/master/Rack/Request
Defined Under Namespace
Classes: AcceptEntry
Constant Summary collapse
- HEADER_PARAM =
/\s*[\w.]+=(?:[\w.]+|"(?:[^"\\]|\\.)*")?\s*/
- HEADER_VALUE_WITH_PARAMS =
/(?:(?:\w+|\*)\/(?:\w+(?:\.|\-|\+)?|\*)*)\s*(?:;#{HEADER_PARAM})*/
Instance Method Summary collapse
-
#accept ⇒ Object
Returns an array of acceptable media types for the response.
- #accept?(type) ⇒ Boolean
- #forwarded? ⇒ Boolean
- #idempotent? ⇒ Boolean
- #link? ⇒ Boolean
- #params ⇒ Object
- #preferred_type(*types) ⇒ Object
- #safe? ⇒ Boolean
- #unlink? ⇒ Boolean
Instance Method Details
#accept ⇒ Object
Returns an array of acceptable media types for the response
30 31 32 33 34 35 36 37 38 39 |
# File 'lib/sinatra/base.rb', line 30 def accept @env['sinatra.accept'] ||= begin if @env.include? 'HTTP_ACCEPT' and @env['HTTP_ACCEPT'].to_s != '' @env['HTTP_ACCEPT'].to_s.scan(HEADER_VALUE_WITH_PARAMS). map! { |e| AcceptEntry.new(e) }.sort else [AcceptEntry.new('*/*')] end end end |
#accept?(type) ⇒ Boolean
41 42 43 |
# File 'lib/sinatra/base.rb', line 41 def accept?(type) preferred_type(type).to_s.include?(type) end |
#forwarded? ⇒ Boolean
58 59 60 |
# File 'lib/sinatra/base.rb', line 58 def forwarded? @env.include? "HTTP_X_FORWARDED_HOST" end |
#idempotent? ⇒ Boolean
66 67 68 |
# File 'lib/sinatra/base.rb', line 66 def idempotent? safe? or put? or delete? or link? or unlink? end |
#link? ⇒ Boolean
70 71 72 |
# File 'lib/sinatra/base.rb', line 70 def link? request_method == "LINK" end |
#params ⇒ Object
78 79 80 81 82 |
# File 'lib/sinatra/base.rb', line 78 def params super rescue Rack::Utils::ParameterTypeError, Rack::Utils::InvalidParameterError => e raise BadRequest, "Invalid query parameters: #{Rack::Utils.escape_html(e.)}" end |
#preferred_type(*types) ⇒ Object
45 46 47 48 49 50 51 52 53 54 |
# File 'lib/sinatra/base.rb', line 45 def preferred_type(*types) accepts = accept # just evaluate once return accepts.first if types.empty? types.flatten! return types.first if accepts.empty? accepts.detect do |pattern| type = types.detect { |t| File.fnmatch(pattern, t) } return type if type end end |
#safe? ⇒ Boolean
62 63 64 |
# File 'lib/sinatra/base.rb', line 62 def safe? get? or head? or or trace? end |
#unlink? ⇒ Boolean
74 75 76 |
# File 'lib/sinatra/base.rb', line 74 def unlink? request_method == "UNLINK" end |