Class: Rack::Adapter::Rails
- Inherits:
-
Object
- Object
- Rack::Adapter::Rails
show all
- Defined in:
- lib/rack/adapter/rails.rb
Defined Under Namespace
Classes: CGIWrapper, CgiApp
Constant Summary
collapse
- FILE_METHODS =
%w(GET HEAD).freeze
Class Method Summary
collapse
Instance Method Summary
collapse
Constructor Details
#initialize(options = {}) ⇒ Rails
Returns a new instance of Rails.
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
# File 'lib/rack/adapter/rails.rb', line 18
def initialize(options={})
@root = options[:root] || Dir.pwd
@env = options[:environment] || 'development'
@prefix = options[:prefix]
load_application
@rails_app = if self.class.rack_based?
ActionController::Dispatcher.new
else
CgiApp.new
end
@file_app = Rack::File.new(::File.join(RAILS_ROOT, "public"))
end
|
Class Method Details
.rack_based? ⇒ Boolean
72
73
74
75
76
77
78
|
# File 'lib/rack/adapter/rails.rb', line 72
def self.rack_based?
rails_version = ::Rails::VERSION
return false if rails_version::MAJOR < 2
return false if rails_version::MAJOR == 2 && rails_version::MINOR < 2
return false if rails_version::MAJOR == 2 && rails_version::MINOR == 2 && rails_version::TINY < 3
true end
|
Instance Method Details
#call(env) ⇒ Object
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
|
# File 'lib/rack/adapter/rails.rb', line 54
def call(env)
path = env['PATH_INFO'].chomp('/')
method = env['REQUEST_METHOD']
cached_path = (path.empty? ? 'index' : path) + ActionController::Base.page_cache_extension
if FILE_METHODS.include?(method)
if file_exist?(path) return @file_app.call(env)
elsif file_exist?(cached_path) env['PATH_INFO'] = cached_path
return @file_app.call(env)
end
end
@rails_app.call(env)
end
|
#file_exist?(path) ⇒ Boolean
49
50
51
52
|
# File 'lib/rack/adapter/rails.rb', line 49
def file_exist?(path)
full_path = ::File.join(@file_app.root, Utils.unescape(path))
::File.file?(full_path) && ::File.readable_real?(full_path)
end
|
#load_application ⇒ Object
34
35
36
37
38
39
40
41
42
43
44
45
46
47
|
# File 'lib/rack/adapter/rails.rb', line 34
def load_application
ENV['RAILS_ENV'] = @env
require "#{@root}/config/environment"
require 'dispatcher'
if @prefix
if ActionController::Base.respond_to?(:relative_url_root=)
ActionController::Base.relative_url_root = @prefix else
ActionController::AbstractRequest.relative_url_root = @prefix
end
end
end
|