Tests pass, AWDoR passes, and a fresh app boots.
This commit is contained in:
parent
9d398f4827
commit
042bd0a5c8
|
@ -1,4 +1,6 @@
|
||||||
require "pathname"
|
require "pathname"
|
||||||
|
|
||||||
|
$LOAD_PATH.unshift File.dirname(__FILE__)
|
||||||
require 'railties_path'
|
require 'railties_path'
|
||||||
require 'rails/version'
|
require 'rails/version'
|
||||||
require 'rails/gem_dependency'
|
require 'rails/gem_dependency'
|
||||||
|
@ -7,26 +9,143 @@ require 'rails/rack'
|
||||||
RAILS_ENV = (ENV['RAILS_ENV'] || 'development').dup unless defined?(RAILS_ENV)
|
RAILS_ENV = (ENV['RAILS_ENV'] || 'development').dup unless defined?(RAILS_ENV)
|
||||||
|
|
||||||
module Rails
|
module Rails
|
||||||
|
# Needs to be duplicated from Active Support since its needed before Active
|
||||||
|
# Support is available. Here both Options and Hash are namespaced to prevent
|
||||||
|
# conflicts with other implementations AND with the classes residing in Active Support.
|
||||||
|
# ---
|
||||||
|
# TODO: w0t?
|
||||||
|
class << self
|
||||||
|
# The Configuration instance used to configure the Rails environment
|
||||||
|
def configuration
|
||||||
|
@@configuration
|
||||||
|
end
|
||||||
|
|
||||||
|
def configuration=(configuration)
|
||||||
|
@@configuration = configuration
|
||||||
|
end
|
||||||
|
|
||||||
|
def initialized?
|
||||||
|
@initialized || false
|
||||||
|
end
|
||||||
|
|
||||||
|
def initialized=(initialized)
|
||||||
|
@initialized ||= initialized
|
||||||
|
end
|
||||||
|
|
||||||
|
def logger
|
||||||
|
if defined?(RAILS_DEFAULT_LOGGER)
|
||||||
|
RAILS_DEFAULT_LOGGER
|
||||||
|
else
|
||||||
|
nil
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def backtrace_cleaner
|
||||||
|
@@backtrace_cleaner ||= begin
|
||||||
|
# Relies on ActiveSupport, so we have to lazy load to postpone definition until AS has been loaded
|
||||||
|
require 'rails/backtrace_cleaner'
|
||||||
|
Rails::BacktraceCleaner.new
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def root
|
||||||
|
Pathname.new(RAILS_ROOT) if defined?(RAILS_ROOT)
|
||||||
|
end
|
||||||
|
|
||||||
|
def env
|
||||||
|
@_env ||= ActiveSupport::StringInquirer.new(RAILS_ENV)
|
||||||
|
end
|
||||||
|
|
||||||
|
def cache
|
||||||
|
RAILS_CACHE
|
||||||
|
end
|
||||||
|
|
||||||
|
def version
|
||||||
|
VERSION::STRING
|
||||||
|
end
|
||||||
|
|
||||||
|
def public_path
|
||||||
|
@@public_path ||= self.root ? File.join(self.root, "public") : "public"
|
||||||
|
end
|
||||||
|
|
||||||
|
def public_path=(path)
|
||||||
|
@@public_path = path
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
class OrderedOptions < Array #:nodoc:
|
||||||
|
def []=(key, value)
|
||||||
|
key = key.to_sym
|
||||||
|
|
||||||
|
if pair = find_pair(key)
|
||||||
|
pair.pop
|
||||||
|
pair << value
|
||||||
|
else
|
||||||
|
self << [key, value]
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def [](key)
|
||||||
|
pair = find_pair(key.to_sym)
|
||||||
|
pair ? pair.last : nil
|
||||||
|
end
|
||||||
|
|
||||||
|
def method_missing(name, *args)
|
||||||
|
if name.to_s =~ /(.*)=$/
|
||||||
|
self[$1.to_sym] = args.first
|
||||||
|
else
|
||||||
|
self[name]
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
def find_pair(key)
|
||||||
|
self.each { |i| return i if i.first == key }
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
class Configuration
|
class Configuration
|
||||||
attr_accessor :cache_classes, :load_paths, :eager_load_paths, :framework_paths,
|
attr_accessor :cache_classes, :load_paths, :eager_load_paths, :framework_paths,
|
||||||
:load_once_paths, :gems_dependencies_loaded, :after_initialize_blocks,
|
:load_once_paths, :gems_dependencies_loaded, :after_initialize_blocks,
|
||||||
:frameworks, :framework_root_path, :root_path, :plugin_paths, :plugins,
|
:frameworks, :framework_root_path, :root_path, :plugin_paths, :plugins,
|
||||||
:plugin_loader, :plugin_locators, :gems, :loaded_plugins, :reload_plugins,
|
:plugin_loader, :plugin_locators, :gems, :loaded_plugins, :reload_plugins,
|
||||||
:i18n, :gems
|
:i18n, :gems, :whiny_nils, :consider_all_requests_local,
|
||||||
|
:action_controller, :active_record, :action_view, :active_support,
|
||||||
|
:action_mailer, :active_resource,
|
||||||
|
:log_path, :log_level, :logger, :preload_frameworks,
|
||||||
|
:database_configuration_file, :cache_store, :time_zone,
|
||||||
|
:view_path, :metals, :controller_paths, :routes_configuration_file,
|
||||||
|
:eager_load_paths, :dependency_loading
|
||||||
|
|
||||||
def initialize
|
def initialize
|
||||||
set_root_path!
|
set_root_path!
|
||||||
|
|
||||||
@framework_paths = []
|
@framework_paths = []
|
||||||
@load_once_paths = []
|
@load_once_paths = []
|
||||||
@after_initialize_blocks = []
|
@after_initialize_blocks = []
|
||||||
@loaded_plugins = []
|
@loaded_plugins = []
|
||||||
@plugin_paths = default_plugin_paths
|
@dependency_loading = true
|
||||||
@frameworks = default_frameworks
|
@eager_load_paths = default_eager_load_paths
|
||||||
@plugin_loader = default_plugin_loader
|
@load_paths = default_load_paths
|
||||||
@plugin_locators = default_plugin_locators
|
@plugin_paths = default_plugin_paths
|
||||||
@gems = default_gems
|
@frameworks = default_frameworks
|
||||||
@i18n = default_i18n
|
@plugin_loader = default_plugin_loader
|
||||||
|
@plugin_locators = default_plugin_locators
|
||||||
|
@gems = default_gems
|
||||||
|
@i18n = default_i18n
|
||||||
|
@log_path = default_log_path
|
||||||
|
@log_level = default_log_level
|
||||||
|
@cache_store = default_cache_store
|
||||||
|
@view_path = default_view_path
|
||||||
|
@controller_paths = default_controller_paths
|
||||||
|
@routes_configuration_file = default_routes_configuration_file
|
||||||
|
@database_configuration_file = default_database_configuration_file
|
||||||
|
|
||||||
|
for framework in default_frameworks
|
||||||
|
self.send("#{framework}=", Rails::OrderedOptions.new)
|
||||||
|
end
|
||||||
|
self.active_support = Rails::OrderedOptions.new
|
||||||
end
|
end
|
||||||
|
|
||||||
def after_initialize(&blk)
|
def after_initialize(&blk)
|
||||||
|
@ -72,6 +191,86 @@ module Rails
|
||||||
ActionController::Dispatcher.middleware
|
ActionController::Dispatcher.middleware
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# Loads and returns the contents of the #database_configuration_file. The
|
||||||
|
# contents of the file are processed via ERB before being sent through
|
||||||
|
# YAML::load.
|
||||||
|
def database_configuration
|
||||||
|
require 'erb'
|
||||||
|
YAML::load(ERB.new(IO.read(database_configuration_file)).result)
|
||||||
|
end
|
||||||
|
|
||||||
|
def default_routes_configuration_file
|
||||||
|
File.join(root_path, 'config', 'routes.rb')
|
||||||
|
end
|
||||||
|
|
||||||
|
def default_controller_paths
|
||||||
|
paths = [File.join(root_path, 'app', 'controllers')]
|
||||||
|
paths.concat builtin_directories
|
||||||
|
paths
|
||||||
|
end
|
||||||
|
|
||||||
|
def default_cache_store
|
||||||
|
if File.exist?("#{root_path}/tmp/cache/")
|
||||||
|
[ :file_store, "#{root_path}/tmp/cache/" ]
|
||||||
|
else
|
||||||
|
:memory_store
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def default_database_configuration_file
|
||||||
|
File.join(root_path, 'config', 'database.yml')
|
||||||
|
end
|
||||||
|
|
||||||
|
def default_view_path
|
||||||
|
File.join(root_path, 'app', 'views')
|
||||||
|
end
|
||||||
|
|
||||||
|
def default_eager_load_paths
|
||||||
|
%w(
|
||||||
|
app/metal
|
||||||
|
app/models
|
||||||
|
app/controllers
|
||||||
|
app/helpers
|
||||||
|
).map { |dir| "#{root_path}/#{dir}" }.select { |dir| File.directory?(dir) }
|
||||||
|
end
|
||||||
|
|
||||||
|
def default_load_paths
|
||||||
|
paths = []
|
||||||
|
|
||||||
|
# Add the old mock paths only if the directories exists
|
||||||
|
paths.concat(Dir["#{root_path}/test/mocks/#{RAILS_ENV}"]) if File.exists?("#{root_path}/test/mocks/#{RAILS_ENV}")
|
||||||
|
|
||||||
|
# Add the app's controller directory
|
||||||
|
paths.concat(Dir["#{root_path}/app/controllers/"])
|
||||||
|
|
||||||
|
# Followed by the standard includes.
|
||||||
|
paths.concat %w(
|
||||||
|
app
|
||||||
|
app/metal
|
||||||
|
app/models
|
||||||
|
app/controllers
|
||||||
|
app/helpers
|
||||||
|
app/services
|
||||||
|
lib
|
||||||
|
vendor
|
||||||
|
).map { |dir| "#{root_path}/#{dir}" }.select { |dir| File.directory?(dir) }
|
||||||
|
|
||||||
|
paths.concat builtin_directories
|
||||||
|
end
|
||||||
|
|
||||||
|
def builtin_directories
|
||||||
|
# Include builtins only in the development environment.
|
||||||
|
(RAILS_ENV == 'development') ? Dir["#{RAILTIES_PATH}/builtin/*/"] : []
|
||||||
|
end
|
||||||
|
|
||||||
|
def default_log_path
|
||||||
|
File.join(root_path, 'log', "#{RAILS_ENV}.log")
|
||||||
|
end
|
||||||
|
|
||||||
|
def default_log_level
|
||||||
|
RAILS_ENV == 'production' ? :info : :debug
|
||||||
|
end
|
||||||
|
|
||||||
def default_frameworks
|
def default_frameworks
|
||||||
[ :active_record, :action_controller, :action_view, :action_mailer, :active_resource ]
|
[ :active_record, :action_controller, :action_view, :action_mailer, :active_resource ]
|
||||||
end
|
end
|
||||||
|
@ -123,6 +322,10 @@ module Rails
|
||||||
[]
|
[]
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def environment_path
|
||||||
|
"#{root_path}/config/environments/#{RAILS_ENV}.rb"
|
||||||
|
end
|
||||||
|
|
||||||
def reload_plugins?
|
def reload_plugins?
|
||||||
@reload_plugins
|
@reload_plugins
|
||||||
end
|
end
|
||||||
|
@ -201,7 +404,7 @@ module Rails
|
||||||
end
|
end
|
||||||
|
|
||||||
def run(initializer = nil)
|
def run(initializer = nil)
|
||||||
Base.config = @config
|
Rails.configuration = Base.config = @config
|
||||||
|
|
||||||
if initializer
|
if initializer
|
||||||
run_initializer(initializer)
|
run_initializer(initializer)
|
||||||
|
@ -217,6 +420,7 @@ module Rails
|
||||||
|
|
||||||
def self.run(initializer = nil, config = nil)
|
def self.run(initializer = nil, config = nil)
|
||||||
default.config = config if config
|
default.config = config if config
|
||||||
|
default.config ||= Configuration.new
|
||||||
default.run(initializer)
|
default.run(initializer)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -281,9 +485,9 @@ module Rails
|
||||||
Initializer.default.add :add_gem_load_paths do
|
Initializer.default.add :add_gem_load_paths do
|
||||||
require 'rails/gem_dependency'
|
require 'rails/gem_dependency'
|
||||||
Rails::GemDependency.add_frozen_gem_path
|
Rails::GemDependency.add_frozen_gem_path
|
||||||
unless @configuration.gems.empty?
|
unless config.gems.empty?
|
||||||
require "rubygems"
|
require "rubygems"
|
||||||
@configuration.gems.each { |gem| gem.add_load_paths }
|
config.gems.each { |gem| gem.add_load_paths }
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -330,7 +534,7 @@ module Rails
|
||||||
# is typically one of development, test, or production.
|
# is typically one of development, test, or production.
|
||||||
Initializer.default.add :load_environment do
|
Initializer.default.add :load_environment do
|
||||||
silence_warnings do
|
silence_warnings do
|
||||||
return if @environment_loaded
|
next if @environment_loaded
|
||||||
@environment_loaded = true
|
@environment_loaded = true
|
||||||
|
|
||||||
config = configuration
|
config = configuration
|
||||||
|
@ -408,7 +612,7 @@ module Rails
|
||||||
begin
|
begin
|
||||||
logger = ActiveSupport::BufferedLogger.new(configuration.log_path)
|
logger = ActiveSupport::BufferedLogger.new(configuration.log_path)
|
||||||
logger.level = ActiveSupport::BufferedLogger.const_get(configuration.log_level.to_s.upcase)
|
logger.level = ActiveSupport::BufferedLogger.const_get(configuration.log_level.to_s.upcase)
|
||||||
if configuration.environment == "production"
|
if RAILS_ENV == "production"
|
||||||
logger.auto_flushing = false
|
logger.auto_flushing = false
|
||||||
end
|
end
|
||||||
rescue StandardError => e
|
rescue StandardError => e
|
||||||
|
@ -525,7 +729,7 @@ module Rails
|
||||||
end
|
end
|
||||||
|
|
||||||
Initializer.default.add :check_for_unbuilt_gems do
|
Initializer.default.add :check_for_unbuilt_gems do
|
||||||
unbuilt_gems = @configuration.gems.select {|gem| gem.frozen? && !gem.built? }
|
unbuilt_gems = config.gems.select {|gem| gem.frozen? && !gem.built? }
|
||||||
if unbuilt_gems.size > 0
|
if unbuilt_gems.size > 0
|
||||||
# don't print if the gems:build rake tasks are being run
|
# don't print if the gems:build rake tasks are being run
|
||||||
unless $gems_build_rake_task
|
unless $gems_build_rake_task
|
||||||
|
@ -545,7 +749,7 @@ Run `rake gems:build` to build the unbuilt gems.
|
||||||
|
|
||||||
Initializer.default.add :load_gems do
|
Initializer.default.add :load_gems do
|
||||||
unless $gems_rake_task
|
unless $gems_rake_task
|
||||||
@configuration.gems.each { |gem| gem.load }
|
config.gems.each { |gem| gem.load }
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -574,9 +778,9 @@ Run `rake gems:build` to build the unbuilt gems.
|
||||||
Initializer.default.add :add_gem_load_paths do
|
Initializer.default.add :add_gem_load_paths do
|
||||||
require 'rails/gem_dependency'
|
require 'rails/gem_dependency'
|
||||||
Rails::GemDependency.add_frozen_gem_path
|
Rails::GemDependency.add_frozen_gem_path
|
||||||
unless @configuration.gems.empty?
|
unless config.gems.empty?
|
||||||
require "rubygems"
|
require "rubygems"
|
||||||
@configuration.gems.each { |gem| gem.add_load_paths }
|
config.gems.each { |gem| gem.add_load_paths }
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -584,7 +788,7 @@ Run `rake gems:build` to build the unbuilt gems.
|
||||||
# load_gems
|
# load_gems
|
||||||
|
|
||||||
Initializer.default.add :check_gem_dependencies do
|
Initializer.default.add :check_gem_dependencies do
|
||||||
unloaded_gems = @configuration.gems.reject { |g| g.loaded? }
|
unloaded_gems = config.gems.reject { |g| g.loaded? }
|
||||||
if unloaded_gems.size > 0
|
if unloaded_gems.size > 0
|
||||||
configuration.gems_dependencies_loaded = false
|
configuration.gems_dependencies_loaded = false
|
||||||
# don't print if the gems rake tasks are being run
|
# don't print if the gems rake tasks are being run
|
||||||
|
@ -643,7 +847,7 @@ Run `rake gems:install` to install the missing gems.
|
||||||
|
|
||||||
# # Prepare dispatcher callbacks and run 'prepare' callbacks
|
# # Prepare dispatcher callbacks and run 'prepare' callbacks
|
||||||
Initializer.default.add :prepare_dispatcher do
|
Initializer.default.add :prepare_dispatcher do
|
||||||
return unless configuration.frameworks.include?(:action_controller)
|
next unless configuration.frameworks.include?(:action_controller)
|
||||||
require 'dispatcher' unless defined?(::Dispatcher)
|
require 'dispatcher' unless defined?(::Dispatcher)
|
||||||
Dispatcher.define_dispatcher_callbacks(configuration.cache_classes)
|
Dispatcher.define_dispatcher_callbacks(configuration.cache_classes)
|
||||||
end
|
end
|
||||||
|
@ -654,7 +858,7 @@ Run `rake gems:install` to install the missing gems.
|
||||||
# this does nothing. Otherwise, it loads the routing definitions and sets up
|
# this does nothing. Otherwise, it loads the routing definitions and sets up
|
||||||
# loading module used to lazily load controllers (Configuration#controller_paths).
|
# loading module used to lazily load controllers (Configuration#controller_paths).
|
||||||
Initializer.default.add :initialize_routing do
|
Initializer.default.add :initialize_routing do
|
||||||
return unless configuration.frameworks.include?(:action_controller)
|
next unless configuration.frameworks.include?(:action_controller)
|
||||||
|
|
||||||
ActionController::Routing.controller_paths += configuration.controller_paths
|
ActionController::Routing.controller_paths += configuration.controller_paths
|
||||||
ActionController::Routing::Routes.add_configuration_file(configuration.routes_configuration_file)
|
ActionController::Routing::Routes.add_configuration_file(configuration.routes_configuration_file)
|
||||||
|
@ -681,7 +885,7 @@ Run `rake gems:install` to install the missing gems.
|
||||||
|
|
||||||
# Eager load application classes
|
# Eager load application classes
|
||||||
Initializer.default.add :load_application_classes do
|
Initializer.default.add :load_application_classes do
|
||||||
return if $rails_rake_task
|
next if $rails_rake_task
|
||||||
if configuration.cache_classes
|
if configuration.cache_classes
|
||||||
configuration.eager_load_paths.each do |load_path|
|
configuration.eager_load_paths.each do |load_path|
|
||||||
matcher = /\A#{Regexp.escape(load_path)}(.*)\.rb\Z/
|
matcher = /\A#{Regexp.escape(load_path)}(.*)\.rb\Z/
|
||||||
|
@ -699,100 +903,3 @@ Run `rake gems:install` to install the missing gems.
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
# Needs to be duplicated from Active Support since its needed before Active
|
|
||||||
# Support is available. Here both Options and Hash are namespaced to prevent
|
|
||||||
# conflicts with other implementations AND with the classes residing in Active Support.
|
|
||||||
# ---
|
|
||||||
# TODO: w0t?
|
|
||||||
module Rails
|
|
||||||
class << self
|
|
||||||
# The Configuration instance used to configure the Rails environment
|
|
||||||
def configuration
|
|
||||||
@@configuration
|
|
||||||
end
|
|
||||||
|
|
||||||
def configuration=(configuration)
|
|
||||||
@@configuration = configuration
|
|
||||||
end
|
|
||||||
|
|
||||||
def initialized?
|
|
||||||
@initialized || false
|
|
||||||
end
|
|
||||||
|
|
||||||
def initialized=(initialized)
|
|
||||||
@initialized ||= initialized
|
|
||||||
end
|
|
||||||
|
|
||||||
def logger
|
|
||||||
if defined?(RAILS_DEFAULT_LOGGER)
|
|
||||||
RAILS_DEFAULT_LOGGER
|
|
||||||
else
|
|
||||||
nil
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def backtrace_cleaner
|
|
||||||
@@backtrace_cleaner ||= begin
|
|
||||||
# Relies on ActiveSupport, so we have to lazy load to postpone definition until AS has been loaded
|
|
||||||
require 'rails/backtrace_cleaner'
|
|
||||||
Rails::BacktraceCleaner.new
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def root
|
|
||||||
Pathname.new(RAILS_ROOT) if defined?(RAILS_ROOT)
|
|
||||||
end
|
|
||||||
|
|
||||||
def env
|
|
||||||
@_env ||= ActiveSupport::StringInquirer.new(RAILS_ENV)
|
|
||||||
end
|
|
||||||
|
|
||||||
def cache
|
|
||||||
RAILS_CACHE
|
|
||||||
end
|
|
||||||
|
|
||||||
def version
|
|
||||||
VERSION::STRING
|
|
||||||
end
|
|
||||||
|
|
||||||
def public_path
|
|
||||||
@@public_path ||= self.root ? File.join(self.root, "public") : "public"
|
|
||||||
end
|
|
||||||
|
|
||||||
def public_path=(path)
|
|
||||||
@@public_path = path
|
|
||||||
end
|
|
||||||
end
|
|
||||||
class OrderedOptions < Array #:nodoc:
|
|
||||||
def []=(key, value)
|
|
||||||
key = key.to_sym
|
|
||||||
|
|
||||||
if pair = find_pair(key)
|
|
||||||
pair.pop
|
|
||||||
pair << value
|
|
||||||
else
|
|
||||||
self << [key, value]
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def [](key)
|
|
||||||
pair = find_pair(key.to_sym)
|
|
||||||
pair ? pair.last : nil
|
|
||||||
end
|
|
||||||
|
|
||||||
def method_missing(name, *args)
|
|
||||||
if name.to_s =~ /(.*)=$/
|
|
||||||
self[$1.to_sym] = args.first
|
|
||||||
else
|
|
||||||
self[name]
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
private
|
|
||||||
def find_pair(key)
|
|
||||||
self.each { |i| return i if i.first == key }
|
|
||||||
return false
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
Loading…
Reference in New Issue