Restore "Start Rails::Application object
This reverts commit f14ad41456
.
This commit is contained in:
parent
bace497aea
commit
accd9b4634
|
@ -31,3 +31,4 @@ actionpack/bin
|
|||
vendor/gems/
|
||||
*/vendor/gems/
|
||||
bin/
|
||||
railties/tmp
|
||||
|
|
|
@ -0,0 +1,2 @@
|
|||
require 'rails/application'
|
||||
require 'rails/initializer'
|
|
@ -0,0 +1,29 @@
|
|||
require 'action_controller'
|
||||
|
||||
module Rails
|
||||
class Application
|
||||
def self.load(path, options = {})
|
||||
config = options[:config] || 'config.ru'
|
||||
config = File.join(path, config)
|
||||
|
||||
if config =~ /\.ru$/
|
||||
cfgfile = File.read(config)
|
||||
if cfgfile[/^#\\(.*)/]
|
||||
opts.parse!($1.split(/\s+/))
|
||||
end
|
||||
inner_app = eval("::Rack::Builder.new {( " + cfgfile + "\n )}.to_app", nil, config)
|
||||
else
|
||||
require config
|
||||
inner_app = Object.const_get(File.basename(config, '.rb').capitalize)
|
||||
end
|
||||
end
|
||||
|
||||
def initialize
|
||||
@app = ActionController::Dispatcher.new
|
||||
end
|
||||
|
||||
def call(env)
|
||||
@app.call(env)
|
||||
end
|
||||
end
|
||||
end
|
|
@ -0,0 +1,56 @@
|
|||
require "isolation/abstract_unit"
|
||||
require "rails"
|
||||
require "rack"
|
||||
|
||||
module ApplicationTests
|
||||
class LoadTest < Test::Unit::TestCase
|
||||
include ActiveSupport::Testing::Isolation
|
||||
|
||||
def setup
|
||||
build_app
|
||||
end
|
||||
|
||||
test "rails app is present" do
|
||||
assert File.exist?(app_path("config"))
|
||||
end
|
||||
|
||||
test "running Rails::Application.load on the path returns a (vaguely) useful application" do
|
||||
@app = Rails::Application.load app_path
|
||||
assert_welcome get("/")
|
||||
end
|
||||
|
||||
test "config.ru is used" do
|
||||
app_file "config.ru", <<-CONFIG
|
||||
class MyMiddleware
|
||||
def initialize(app)
|
||||
@app = app
|
||||
end
|
||||
|
||||
def call(env)
|
||||
status, headers, body = @app.call(env)
|
||||
headers["Config-Ru-Test"] = "TESTING"
|
||||
[status, headers, body]
|
||||
end
|
||||
end
|
||||
|
||||
use MyMiddleware
|
||||
run proc {|env| [200, {"Content-Type" => "text/html"}, ["VICTORY"]] }
|
||||
CONFIG
|
||||
|
||||
@app = Rails::Application.load app_path, :config => "config.ru"
|
||||
|
||||
assert_body "VICTORY", get("/omg")
|
||||
assert_header "Config-Ru-Test", "TESTING", get("/omg")
|
||||
end
|
||||
|
||||
test "arbitrary.rb can be used as a config" do
|
||||
app_file "myapp.rb", <<-CONFIG
|
||||
Myapp = proc {|env| [200, {"Content-Type" => "text/html"}, ["OMG ROBOTS"]] }
|
||||
CONFIG
|
||||
|
||||
@app = Rails::Application.load app_path, :config => "myapp.rb"
|
||||
|
||||
assert_body "OMG ROBOTS", get("/omg")
|
||||
end
|
||||
end
|
||||
end
|
|
@ -0,0 +1,107 @@
|
|||
# Note:
|
||||
# It is important to keep this file as light as possible
|
||||
# the goal for tests that require this is to test booting up
|
||||
# rails from an empty state, so anything added here could
|
||||
# hide potential failures
|
||||
#
|
||||
# It is also good to know what is the bare minimum to get
|
||||
# Rails booted up.
|
||||
|
||||
# TODO: Remove rubygems when possible
|
||||
require 'rubygems'
|
||||
require 'test/unit'
|
||||
|
||||
# TODO: Remove setting this magic constant
|
||||
RAILS_FRAMEWORK_ROOT = File.expand_path("#{File.dirname(__FILE__)}/../../..")
|
||||
|
||||
# These load paths usually get set inside of boot.rb
|
||||
$:.unshift "#{RAILS_FRAMEWORK_ROOT}/railties/lib"
|
||||
$:.unshift "#{RAILS_FRAMEWORK_ROOT}/actionpack/lib"
|
||||
|
||||
# These files do not require any others and are needed
|
||||
# to run the tests
|
||||
require "#{RAILS_FRAMEWORK_ROOT}/activesupport/lib/active_support/testing/isolation"
|
||||
require "#{RAILS_FRAMEWORK_ROOT}/activesupport/lib/active_support/testing/declarative"
|
||||
|
||||
module TestHelpers
|
||||
module Paths
|
||||
module_function
|
||||
|
||||
def tmp_path(*args)
|
||||
File.expand_path(File.join(File.dirname(__FILE__), *%w[.. .. tmp] + args))
|
||||
end
|
||||
|
||||
def app_path(*args)
|
||||
tmp_path(*%w[app] + args)
|
||||
end
|
||||
end
|
||||
|
||||
module Rack
|
||||
def extract_body(response)
|
||||
"".tap do |body|
|
||||
response[2].each {|chunk| body << chunk }
|
||||
end
|
||||
end
|
||||
|
||||
def get(path)
|
||||
@app.call(::Rack::MockRequest.env_for(path))
|
||||
end
|
||||
|
||||
def assert_welcome(resp)
|
||||
assert_equal 200, resp[0]
|
||||
assert resp[1]["Content-Type"] = "text/html"
|
||||
assert extract_body(resp).match(/Welcome aboard/)
|
||||
end
|
||||
|
||||
def assert_success(resp)
|
||||
assert_equal 202, resp[0]
|
||||
end
|
||||
|
||||
def assert_missing(resp)
|
||||
assert_equal 404, resp[0]
|
||||
end
|
||||
|
||||
def assert_header(key, value, resp)
|
||||
assert_equal value, resp[1][key.to_s]
|
||||
end
|
||||
|
||||
def assert_body(expected, resp)
|
||||
assert_equal expected, extract_body(resp)
|
||||
end
|
||||
end
|
||||
|
||||
module Generation
|
||||
def build_app
|
||||
FileUtils.cp_r(tmp_path('app_template'), app_path)
|
||||
end
|
||||
|
||||
def app_file(path, contents)
|
||||
File.open(app_path(path), 'w') do |f|
|
||||
f.puts contents
|
||||
end
|
||||
end
|
||||
|
||||
def controller(name, contents)
|
||||
app_file("app/controllers/#{name}_controller.rb", contents)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
class Test::Unit::TestCase
|
||||
include TestHelpers::Paths
|
||||
include TestHelpers::Rack
|
||||
include TestHelpers::Generation
|
||||
extend ActiveSupport::Testing::Declarative
|
||||
end
|
||||
|
||||
# Create a scope and build a fixture rails app
|
||||
Module.new do
|
||||
extend TestHelpers::Paths
|
||||
# Build a rails app
|
||||
if File.exist?(tmp_path)
|
||||
FileUtils.rm_rf(tmp_path)
|
||||
end
|
||||
|
||||
FileUtils.mkdir(tmp_path)
|
||||
`#{Gem.ruby} #{RAILS_FRAMEWORK_ROOT}/railties/bin/rails #{tmp_path('app_template')}`
|
||||
end
|
Loading…
Reference in New Issue