Module: Roda::RodaPlugins::SinatraHelpers::RequestMethods
- Defined in:
- lib/roda/plugins/sinatra_helpers.rb
Instance Method Summary collapse
-
#back ⇒ Object
Alias for referrer.
-
#error(code = 500, body = nil) ⇒ Object
Halt processing and return the error status provided with the given code and optional body.
-
#not_found(body = nil) ⇒ Object
Halt processing and return a 404 response with an optional body.
-
#redirect(path = (no_add_script_name = true; default_redirect_path), status = default_redirect_status) ⇒ Object
If the absolute_redirects or :prefixed_redirects roda class options has been set, respect those and update the path.
-
#send_file(path, opts = OPTS) ⇒ Object
Use the contents of the file at
path
as the response body. -
#uri(addr = nil, absolute = true, add_script_name = true) ⇒ Object
(also: #url, #to)
Generates the absolute URI for a given path in the app.
Instance Method Details
#back ⇒ Object
Alias for referrer
278 279 280 |
# File 'lib/roda/plugins/sinatra_helpers.rb', line 278 def back referrer end |
#error(code = 500, body = nil) ⇒ Object
Halt processing and return the error status provided with the given code and optional body. If a single argument is given and it is not an integer, consider it the body and use a 500 status code.
286 287 288 289 290 291 292 293 294 295 |
# File 'lib/roda/plugins/sinatra_helpers.rb', line 286 def error(code=500, body = nil) unless code.is_a?(Integer) body = code code = 500 end response.status = code response.body = body if body halt end |
#not_found(body = nil) ⇒ Object
Halt processing and return a 404 response with an optional body.
298 299 300 |
# File 'lib/roda/plugins/sinatra_helpers.rb', line 298 def not_found(body = nil) error(404, body) end |
#redirect(path = (no_add_script_name = true; default_redirect_path), status = default_redirect_status) ⇒ Object
If the absolute_redirects or :prefixed_redirects roda class options has been set, respect those and update the path.
304 305 306 307 308 309 310 |
# File 'lib/roda/plugins/sinatra_helpers.rb', line 304 def redirect(path=(no_add_script_name = true; default_redirect_path), status=default_redirect_status) opts = roda_class.opts absolute_redirects = opts[:absolute_redirects] prefixed_redirects = no_add_script_name ? false : opts[:prefixed_redirects] path = uri(path, absolute_redirects, prefixed_redirects) if absolute_redirects || prefixed_redirects super(path, status) end |
#send_file(path, opts = OPTS) ⇒ Object
Use the contents of the file at path
as the response body. See plugin documentation for options.
313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 |
# File 'lib/roda/plugins/sinatra_helpers.rb', line 313 def send_file(path, opts = OPTS) res = response headers = res.headers if opts[:type] || !headers["Content-Type"] res.content_type(opts[:type] || ::File.extname(path), :default => 'application/octet-stream') end disposition = opts[:disposition] filename = opts[:filename] if disposition || filename disposition ||= 'attachment' filename = path if filename.nil? res.(filename, disposition) end if lm = opts[:last_modified] last_modified(lm) end file = ::Rack::File.new nil s, h, b = if Rack.release > '2' file.serving(self, path) else # :nocov: file.path = path file.serving(@env) # :nocov: end res.status = opts[:status] || s headers.delete("Content-Length") headers.replace(h.merge!(headers)) res.body = b halt rescue Errno::ENOENT not_found end |
#uri(addr = nil, absolute = true, add_script_name = true) ⇒ Object Also known as: url, to
Generates the absolute URI for a given path in the app. Takes Rack routers and reverse proxies into account.
354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 |
# File 'lib/roda/plugins/sinatra_helpers.rb', line 354 def uri(addr = nil, absolute = true, add_script_name = true) addr = addr.to_s if addr return addr if addr =~ /\A[A-z][A-z0-9\+\.\-]*:/ uri = if absolute h = if @env.has_key?("HTTP_X_FORWARDED_HOST") || port != (ssl? ? 443 : 80) host_with_port else host end ["http#{'s' if ssl?}://#{h}"] else [''] end uri << script_name.to_s if add_script_name uri << (addr || path_info) File.join(uri) end |