This repository has been archived by the owner on Aug 23, 2022. It is now read-only.
forked from Tho85/rails
-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Restore "Start Rails::Application object
This reverts commit f14ad41.
- Loading branch information
Showing
5 changed files
with
195 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -31,3 +31,4 @@ actionpack/bin | |
vendor/gems/ | ||
*/vendor/gems/ | ||
bin/ | ||
railties/tmp |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,2 @@ | ||
require 'rails/application' | ||
require 'rails/initializer' |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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 |