Class: Merb::Rack::Application

Inherits:
Object
  • Object
show all
Defined in:
lib/merb-core/rack/application.rb

Instance Method Summary collapse

Instance Method Details

#call(env) ⇒ Object

The main rack application call method. This is the entry point from rack (and the webserver) to your application.

Parameters

env<Hash>

A rack request of parameters.

Returns

<Array>

A rack response of [status<Integer>, headers<Hash>, body<String, Stream>]

:api: private



15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# File 'lib/merb-core/rack/application.rb', line 15

def call(env) 
  begin
    rack_response = ::Merb::Dispatcher.handle(Merb::Request.new(env))
  rescue Object => e
    return [500, {Merb::Const::CONTENT_TYPE => Merb::Const::TEXT_SLASH_HTML}, e.message + Merb::Const::BREAK_TAG + e.backtrace.join(Merb::Const::BREAK_TAG)]
  end
  Merb.logger.info Merb::Const::DOUBLE_NEWLINE
  Merb.logger.flush

  # unless controller.headers[Merb::Const::DATE]
  #   require "time"
  #   controller.headers[Merb::Const::DATE] = Time.now.rfc2822.to_s
  # end
  rack_response
end

#deferred?(env) ⇒ Boolean

Determines whether this request is a “deferred_action”, usually a long request. Rack uses this method to detemine whether to use an evented request or a deferred request in evented rack handlers.

Parameters

env<Hash>

The rack request

Returns

Boolean

True if the request should be deferred.

:api: private

Returns:

  • (Boolean)


43
44
45
46
47
48
49
50
51
# File 'lib/merb-core/rack/application.rb', line 43

def deferred?(env)
  path = env[Merb::Const::PATH_INFO] ? env[Merb::Const::PATH_INFO].chomp(Merb::Const::SLASH) : Merb::Const::EMPTY_STRING
  if path =~ Merb.deferred_actions
    Merb.logger.info! "Deferring Request: #{path}"
    true
  else
    false
  end        
end