Module: Roda::RodaPlugins::SinatraHelpers::ResponseMethods

Defined in:
lib/roda/plugins/sinatra_helpers.rb

Instance Method Summary collapse

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.



462
463
464
465
466
467
468
469
470
471
472
473
# File 'lib/roda/plugins/sinatra_helpers.rb', line 462

def attachment(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.



412
413
414
415
416
417
418
# File 'lib/roda/plugins/sinatra_helpers.rb', line 412

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.



421
422
423
# File 'lib/roda/plugins/sinatra_helpers.rb', line 421

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.

Returns:

  • (Boolean)


491
492
493
# File 'lib/roda/plugins/sinatra_helpers.rb', line 491

def client_error?
  @status.between?(400, 499) if @status
end

#content_type(type = (return @headers["Content-Type"]; nil), opts = RodaPlugins::OPTS) ⇒ Object

Set the Content-Type of the response body given a media type or file extension. See plugin documentation for options.



444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
# File 'lib/roda/plugins/sinatra_helpers.rb', line 444

def content_type(type = (return @headers["Content-Type"]; nil), opts = RodaPlugins::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?(';') ? ', ' : ';'}#{key}=#{val}"
    end
  end

  @headers["Content-Type"] = mime_type
end

#finishObject

If the body is a DelayedBody, set the appropriate length for it.



426
427
428
429
# File 'lib/roda/plugins/sinatra_helpers.rb', line 426

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.



433
434
435
# File 'lib/roda/plugins/sinatra_helpers.rb', line 433

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.

Returns:

  • (Boolean)


476
477
478
# File 'lib/roda/plugins/sinatra_helpers.rb', line 476

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.



438
439
440
# File 'lib/roda/plugins/sinatra_helpers.rb', line 438

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.

Returns:

  • (Boolean)


501
502
503
# File 'lib/roda/plugins/sinatra_helpers.rb', line 501

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.

Returns:

  • (Boolean)


486
487
488
# File 'lib/roda/plugins/sinatra_helpers.rb', line 486

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.

Returns:

  • (Boolean)


496
497
498
# File 'lib/roda/plugins/sinatra_helpers.rb', line 496

def server_error?
  @status.between?(500, 599) if @status
end

#status(value = (return @status; nil)) ⇒ Object

Set or retrieve the response status code.



406
407
408
# File 'lib/roda/plugins/sinatra_helpers.rb', line 406

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.

Returns:

  • (Boolean)


481
482
483
# File 'lib/roda/plugins/sinatra_helpers.rb', line 481

def success?
  @status.between?(200, 299) if @status
end