Module: Roda::RodaPlugins::SinatraHelpers::ResponseMethods
- Defined in:
- lib/roda/plugins/sinatra_helpers.rb
Instance Method Summary collapse
-
#attachment(filename = nil, disposition = ATTACHMENT) ⇒ Object
Set the Content-Disposition to “attachment” with the specified filename, instructing the user agents to prompt to save.
-
#body(value = (return @body unless block_given?; nil), &block) ⇒ Object
Set or retrieve the response body.
-
#body=(body) ⇒ Object
Set the body to the given value.
-
#client_error? ⇒ Boolean
Whether or not the status is set to 4xx.
-
#content_type(type = (return @headers[CONTENT_TYPE]; nil), opts = OPTS) ⇒ Object
Set the Content-Type of the response body given a media type or file extension.
-
#finish ⇒ Object
If the body is a DelayedBody, set the appropriate length for it.
-
#headers(hash = (return @headers; nil)) ⇒ Object
Set multiple response headers with Hash, or return the headers if no argument is given.
-
#informational? ⇒ Boolean
Whether or not the status is set to 1xx.
-
#mime_type(type) ⇒ Object
Look up a media type by file extension in Rack’s mime registry.
-
#not_found? ⇒ Boolean
Whether or not the status is set to 404.
-
#redirect? ⇒ Boolean
Whether or not the status is set to 3xx.
-
#server_error? ⇒ Boolean
Whether or not the status is set to 5xx.
-
#status(value = (return @status; nil)) ⇒ Object
Set or retrieve the response status code.
-
#success? ⇒ Boolean
Whether or not the status is set to 2xx.
Instance Method Details
#attachment(filename = nil, disposition = ATTACHMENT) ⇒ Object
Set the Content-Disposition to “attachment” with the specified filename, instructing the user agents to prompt to save.
445 446 447 448 449 450 451 452 453 454 455 456 |
# File 'lib/roda/plugins/sinatra_helpers.rb', line 445 def (filename = nil, disposition=ATTACHMENT) if filename params = "; filename=#{File.basename(filename).inspect}" unless @headers[CONTENT_TYPE] ext = File.extname(filename) unless ext.empty? content_type(ext) end end end @headers[CONTENT_DISPOSITION] = "#{disposition}#{params}" end |
#body(value = (return @body unless block_given?; nil), &block) ⇒ Object
Set or retrieve the response body. When a block is given, evaluation is deferred until the body is needed.
395 396 397 398 399 400 401 |
# File 'lib/roda/plugins/sinatra_helpers.rb', line 395 def body(value = (return @body unless block_given?; nil), &block) if block @body = DelayedBody.new(&block) else self.body = value end end |
#body=(body) ⇒ Object
Set the body to the given value.
404 405 406 |
# File 'lib/roda/plugins/sinatra_helpers.rb', line 404 def body=(body) @body = DelayedBody.new{body} end |
#client_error? ⇒ Boolean
Whether or not the status is set to 4xx. Returns nil if status not yet set.
474 475 476 |
# File 'lib/roda/plugins/sinatra_helpers.rb', line 474 def client_error? @status.between?(400, 499) if @status end |
#content_type(type = (return @headers[CONTENT_TYPE]; nil), opts = OPTS) ⇒ Object
Set the Content-Type of the response body given a media type or file extension. See plugin documentation for options.
427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 |
# File 'lib/roda/plugins/sinatra_helpers.rb', line 427 def content_type(type = (return @headers[CONTENT_TYPE]; nil), opts = OPTS) unless (mime_type = mime_type(type) || opts[:default]) raise RodaError, "Unknown media type: #{type}" end unless opts.empty? opts.each do |key, val| next if key == :default || (key == :charset && mime_type.include?(CHARSET)) val = val.inspect if val =~ /[";,]/ mime_type += "#{mime_type.include?(SEMICOLON) ? COMMA : SEMICOLON}#{key}=#{val}" end end @headers[CONTENT_TYPE] = mime_type end |
#finish ⇒ Object
If the body is a DelayedBody, set the appropriate length for it.
409 410 411 412 |
# File 'lib/roda/plugins/sinatra_helpers.rb', line 409 def finish @length = @body.length if @body.is_a?(DelayedBody) && !@headers[CONTENT_LENGTH] super end |
#headers(hash = (return @headers; nil)) ⇒ Object
Set multiple response headers with Hash, or return the headers if no argument is given.
416 417 418 |
# File 'lib/roda/plugins/sinatra_helpers.rb', line 416 def headers(hash = (return @headers; nil)) @headers.merge!(hash) end |
#informational? ⇒ Boolean
Whether or not the status is set to 1xx. Returns nil if status not yet set.
459 460 461 |
# File 'lib/roda/plugins/sinatra_helpers.rb', line 459 def informational? @status.between?(100, 199) if @status end |
#mime_type(type) ⇒ Object
Look up a media type by file extension in Rack’s mime registry.
421 422 423 |
# File 'lib/roda/plugins/sinatra_helpers.rb', line 421 def mime_type(type) roda_class.mime_type(type) end |
#not_found? ⇒ Boolean
Whether or not the status is set to 404. Returns nil if status not yet set.
484 485 486 |
# File 'lib/roda/plugins/sinatra_helpers.rb', line 484 def not_found? @status == 404 if @status end |
#redirect? ⇒ Boolean
Whether or not the status is set to 3xx. Returns nil if status not yet set.
469 470 471 |
# File 'lib/roda/plugins/sinatra_helpers.rb', line 469 def redirect? @status.between?(300, 399) if @status end |
#server_error? ⇒ Boolean
Whether or not the status is set to 5xx. Returns nil if status not yet set.
479 480 481 |
# File 'lib/roda/plugins/sinatra_helpers.rb', line 479 def server_error? @status.between?(500, 599) if @status end |
#status(value = (return @status; nil)) ⇒ Object
Set or retrieve the response status code.
389 390 391 |
# File 'lib/roda/plugins/sinatra_helpers.rb', line 389 def status(value = (return @status; nil)) @status = value end |
#success? ⇒ Boolean
Whether or not the status is set to 2xx. Returns nil if status not yet set.
464 465 466 |
# File 'lib/roda/plugins/sinatra_helpers.rb', line 464 def success? @status.between?(200, 299) if @status end |