2010-01-22 00:10:31 +00:00
|
|
|
require 'fileutils'
|
2010-01-23 21:30:17 +00:00
|
|
|
require 'rails/railties_path'
|
|
|
|
require 'rails/plugin'
|
2010-01-24 08:00:18 +00:00
|
|
|
require 'rails/engine'
|
2009-12-23 01:03:23 +00:00
|
|
|
|
2009-09-26 02:32:28 +00:00
|
|
|
module Rails
|
2010-01-21 22:14:20 +00:00
|
|
|
class Application < Engine
|
2010-01-23 15:07:20 +00:00
|
|
|
autoload :Bootstrap, 'rails/application/bootstrap'
|
2010-01-26 13:58:00 +00:00
|
|
|
autoload :Configurable, 'rails/application/configurable'
|
2010-01-23 21:30:17 +00:00
|
|
|
autoload :Configuration, 'rails/application/configuration'
|
2010-01-23 15:07:20 +00:00
|
|
|
autoload :Finisher, 'rails/application/finisher'
|
2010-01-27 16:39:35 +00:00
|
|
|
autoload :MetalLoader, 'rails/application/metal_loader'
|
2010-01-23 15:59:32 +00:00
|
|
|
autoload :Railties, 'rails/application/railties'
|
2010-01-23 14:05:13 +00:00
|
|
|
autoload :RoutesReloader, 'rails/application/routes_reloader'
|
|
|
|
|
2009-10-08 19:14:57 +00:00
|
|
|
class << self
|
2009-12-24 01:11:17 +00:00
|
|
|
private :new
|
2010-01-23 14:05:13 +00:00
|
|
|
alias :configure :class_eval
|
|
|
|
|
2009-12-24 01:11:17 +00:00
|
|
|
def instance
|
2010-01-26 11:14:48 +00:00
|
|
|
if self == Rails::Application
|
|
|
|
Rails.application
|
2010-01-24 16:29:38 +00:00
|
|
|
else
|
2010-01-26 11:14:48 +00:00
|
|
|
@@instance ||= new
|
2010-01-24 16:29:38 +00:00
|
|
|
end
|
2009-11-03 01:19:03 +00:00
|
|
|
end
|
|
|
|
|
2010-01-21 22:14:20 +00:00
|
|
|
def inherited(base)
|
2010-01-24 08:00:18 +00:00
|
|
|
raise "You cannot have more than one Rails::Application" if Rails.application
|
2010-01-21 22:14:20 +00:00
|
|
|
super
|
2010-01-23 17:41:53 +00:00
|
|
|
Rails.application = base.instance
|
2009-10-08 19:14:57 +00:00
|
|
|
end
|
2009-09-29 00:57:36 +00:00
|
|
|
|
2010-01-27 20:20:32 +00:00
|
|
|
def respond_to?(*args)
|
|
|
|
super || instance.respond_to?(*args)
|
|
|
|
end
|
|
|
|
|
2010-01-23 14:05:13 +00:00
|
|
|
protected
|
|
|
|
|
|
|
|
def method_missing(*args, &block)
|
|
|
|
instance.send(*args, &block)
|
2009-12-22 02:15:27 +00:00
|
|
|
end
|
2009-11-03 01:19:03 +00:00
|
|
|
end
|
2009-09-29 00:57:36 +00:00
|
|
|
|
2010-01-23 17:41:53 +00:00
|
|
|
def require_environment!
|
2010-01-23 15:59:32 +00:00
|
|
|
environment = config.paths.config.environment.to_a.first
|
|
|
|
require environment if environment
|
2009-12-22 00:35:54 +00:00
|
|
|
end
|
|
|
|
|
2010-01-23 14:05:13 +00:00
|
|
|
def routes
|
2010-02-25 00:47:43 +00:00
|
|
|
@routes ||= ActionDispatch::Routing::RouteSet.new
|
2010-01-23 15:59:32 +00:00
|
|
|
end
|
|
|
|
|
|
|
|
def railties
|
|
|
|
@railties ||= Railties.new(config)
|
2009-11-03 01:19:03 +00:00
|
|
|
end
|
2009-12-14 23:54:41 +00:00
|
|
|
|
2010-01-23 14:05:13 +00:00
|
|
|
def routes_reloader
|
2010-01-27 16:39:35 +00:00
|
|
|
@routes_reloader ||= RoutesReloader.new
|
2009-12-14 23:54:41 +00:00
|
|
|
end
|
|
|
|
|
|
|
|
def reload_routes!
|
2010-01-23 14:05:13 +00:00
|
|
|
routes_reloader.reload!
|
|
|
|
end
|
2009-12-14 23:54:41 +00:00
|
|
|
|
2010-01-23 14:05:13 +00:00
|
|
|
def initialize!
|
|
|
|
run_initializers(self)
|
|
|
|
self
|
2009-12-14 23:54:41 +00:00
|
|
|
end
|
|
|
|
|
2009-12-24 01:11:17 +00:00
|
|
|
def load_tasks
|
2010-01-23 17:41:53 +00:00
|
|
|
initialize_tasks
|
2010-01-23 15:59:32 +00:00
|
|
|
super
|
|
|
|
railties.all { |r| r.load_tasks }
|
|
|
|
self
|
2009-12-24 01:11:17 +00:00
|
|
|
end
|
|
|
|
|
2010-01-19 17:43:09 +00:00
|
|
|
def load_generators
|
2010-01-23 17:41:53 +00:00
|
|
|
initialize_generators
|
2010-01-23 15:59:32 +00:00
|
|
|
super
|
|
|
|
railties.all { |r| r.load_generators }
|
|
|
|
self
|
2009-11-07 01:21:39 +00:00
|
|
|
end
|
|
|
|
|
2010-01-16 22:14:35 +00:00
|
|
|
def app
|
2010-01-23 14:05:13 +00:00
|
|
|
@app ||= middleware.build(routes)
|
2010-01-16 22:14:35 +00:00
|
|
|
end
|
|
|
|
|
2009-11-03 01:19:03 +00:00
|
|
|
def call(env)
|
2010-01-21 15:50:11 +00:00
|
|
|
env["action_dispatch.parameter_filter"] = config.filter_parameters
|
2010-01-16 22:14:35 +00:00
|
|
|
app.call(env)
|
2009-10-07 22:21:19 +00:00
|
|
|
end
|
|
|
|
|
2010-01-23 00:29:29 +00:00
|
|
|
def initializers
|
2010-01-25 23:08:08 +00:00
|
|
|
initializers = Bootstrap.initializers_for(self)
|
2010-01-23 15:59:32 +00:00
|
|
|
railties.all { |r| initializers += r.initializers }
|
2010-01-25 17:06:39 +00:00
|
|
|
initializers += super
|
2010-01-25 23:08:08 +00:00
|
|
|
initializers += Finisher.initializers_for(self)
|
2010-01-23 00:29:29 +00:00
|
|
|
initializers
|
|
|
|
end
|
2010-01-23 17:41:53 +00:00
|
|
|
|
|
|
|
protected
|
|
|
|
|
|
|
|
def initialize_tasks
|
|
|
|
require "rails/tasks"
|
|
|
|
task :environment do
|
|
|
|
$rails_rake_task = true
|
|
|
|
initialize!
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
def initialize_generators
|
|
|
|
require "rails/generators"
|
|
|
|
end
|
|
|
|
|
|
|
|
# Application is always reloadable when config.cache_classes is false.
|
|
|
|
def reloadable?(app)
|
|
|
|
true
|
|
|
|
end
|
2009-09-26 02:32:28 +00:00
|
|
|
end
|
|
|
|
end
|