Class: AppEngine::Rack::DeferredDispatcher
- Inherits:
-
Object
- Object
- AppEngine::Rack::DeferredDispatcher
- Defined in:
- lib/appengine-rack.rb
Overview
Split loading requests into 3 parts
deferred_dispatcher = AppEngine::Rack::DeferredDispatcher.new(
:require => File.expand_path('../config/environment', __FILE__),
:dispatch => 'ActionController::Dispatcher')
map ‘/admin’ do
use AppEngine::Rack::AdminRequired
run deferred_dispatcher
end
map ‘/’ do
use AppEngine::Rack::LoginRequired
run deferred_dispatcher
end
Instance Method Summary collapse
- #call(env) ⇒ Object
-
#initialize(args) ⇒ DeferredDispatcher
constructor
A new instance of DeferredDispatcher.
- #redirect_or_error(env) ⇒ Object
Constructor Details
#initialize(args) ⇒ DeferredDispatcher
Returns a new instance of DeferredDispatcher.
128 129 130 |
# File 'lib/appengine-rack.rb', line 128 def initialize args @args = args end |
Instance Method Details
#call(env) ⇒ Object
132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 |
# File 'lib/appengine-rack.rb', line 132 def call env if @runtime.nil? @runtime = true # 1: redirect with runtime and jruby-rack loaded redirect_or_error(env) elsif @rack_app.nil? require @args[:require] @rack_app = Object.module_eval(@args[:dispatch]).new # 2: redirect with framework required & dispatched redirect_or_error(env) else # 3: process all other requests @rack_app.call(env) end end |
#redirect_or_error(env) ⇒ Object
148 149 150 151 152 153 154 155 156 157 158 |
# File 'lib/appengine-rack.rb', line 148 def redirect_or_error(env) if env['REQUEST_METHOD'].eql?('GET') redir_url = env['REQUEST_URI'] + (env['QUERY_STRING'].eql?('') ? '?' : '&') + Time.now.to_i.to_s res = ::Rack::Response.new('*', 302) res['Location'] = redir_url res.finish else ::Rack::Response.new('Service Unavailable', 503).finish end end |