Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Newer
Older
100644 203 lines (176 sloc) 6.682 kb
6690d66 José Valim Rename config.cookie_secret to config.secret_token and pass it as config...
josevalim authored
1 require 'active_support/core_ext/hash/reverse_merge'
772c2b0 José Valim Use the new ActiveSupport::FileUpdateChecker instead of RoutesReloader.
josevalim authored
2 require 'active_support/file_update_checker'
02c5137 José Valim Add view paths to Engine setup.
josevalim authored
3 require 'fileutils'
b17e358 José Valim Move configuration to subfolders.
josevalim authored
4 require 'rails/plugin'
2fde9d7 José Valim Solve some pendencies.
josevalim authored
5 require 'rails/engine'
dc677f7 tests pass with requiring the frameworks in rails.rb
Carlhuda authored
6
accd9b4 Joshua Peek Restore "Start Rails::Application object
josh authored
7 module Rails
781d0a9 José Valim Add docs for Railtie, Engine, Plugin and Application.
josevalim authored
8 # In Rails 3.0, a Rails::Application object was introduced which is nothing more than
9 # an Engine but with the responsibility of coordinating the whole boot process.
10 #
11 # == Initialization
12 #
13 # Rails::Application is responsible for executing all railties, engines and plugin
14 # initializers. Besides, it also executed some bootstrap initializers (check
15 # Rails::Application::Bootstrap) and finishing initializers, after all the others
16 # are executed (check Rails::Application::Finisher).
17 #
18 # == Configuration
19 #
20 # Besides providing the same configuration as Rails::Engine and Rails::Railtie,
21 # the application object has several specific configurations, for example
22 # "allow_concurrency", "cache_classes", "consider_all_requests_local", "filter_parameters",
9b19a6f José Valim A few changes were done in this commit:
josevalim authored
23 # "logger", "reload_plugins" and so forth.
781d0a9 José Valim Add docs for Railtie, Engine, Plugin and Application.
josevalim authored
24 #
25 # Check Rails::Application::Configuration to see them all.
26 #
27 # == Routes
28 #
29 # The application object is also responsible for holding the routes and reloading routes
30 # whenever the files change in development.
31 #
45e6028 Yehuda Katz Removing Metal from Rails 3.
wycats authored
32 # == Middlewares
781d0a9 José Valim Add docs for Railtie, Engine, Plugin and Application.
josevalim authored
33 #
45e6028 Yehuda Katz Removing Metal from Rails 3.
wycats authored
34 # The Application is also responsible for building the middleware stack.
9cfeefb Yehuda Katz Reorganized initializers a bit to enable better hooks for common cases w...
wycats authored
35 #
7fcf859 José Valim Massive cleanup in Railties and load stack.
josevalim authored
36 class Application < Engine
4f03603 José Valim Break application.rb file in smaller chunks.
josevalim authored
37 autoload :Bootstrap, 'rails/application/bootstrap'
b17e358 José Valim Move configuration to subfolders.
josevalim authored
38 autoload :Configuration, 'rails/application/configuration'
4f03603 José Valim Break application.rb file in smaller chunks.
josevalim authored
39 autoload :Finisher, 'rails/application/finisher'
13d66cd José Valim Extract Railtie load from application.
josevalim authored
40 autoload :Railties, 'rails/application/railties'
3049e64 Piotr Sarnacki Moved Rails::RoutesReloader to Rails::Application::RoutesReloader
drogus authored
41 autoload :RoutesReloader, 'rails/application/routes_reloader'
80130d1 José Valim Extract routes reloading responsibilities from application and load them...
josevalim authored
42
e4d7e50 Moving more initializers into the application object
Carl Lerche authored
43 class << self
7fcf859 José Valim Massive cleanup in Railties and load stack.
josevalim authored
44 def inherited(base)
2fde9d7 José Valim Solve some pendencies.
josevalim authored
45 raise "You cannot have more than one Rails::Application" if Rails.application
7fcf859 José Valim Massive cleanup in Railties and load stack.
josevalim authored
46 super
788fce2 José Valim Create configurable modules and ensure that they are added only on direc...
josevalim authored
47 Rails.application = base.instance
6f83a50 Xavier Noria renames load_(once_)paths to autoload_(once_)paths in dependencies and c...
fxn authored
48 Rails.application.add_lib_to_load_path!
9cfeefb Yehuda Katz Reorganized initializers a bit to enable better hooks for common cases w...
wycats authored
49 ActiveSupport.run_load_hooks(:before_configuration, base.instance)
e4d7e50 Moving more initializers into the application object
Carl Lerche authored
50 end
897164d Conceptually unify instance & global initializers
Yehuda Katz + Carl Lerche authored
51 end
6f6a589 Create the application object from config/environment.rb
Yehuda Katz + Carl Lerche authored
52
2fe70c1 José Valim Booya, sprockets now works from Engines.
josevalim authored
53 attr_accessor :assets
eedbf87 Piotr Sarnacki New way of generating urls for Application from Engine.
drogus authored
54 delegate :default_url_options, :default_url_options=, :to => :routes
55
9e081ca José Valim Improve documentation for add_lib_to_load_paths!
josevalim authored
56 # This method is called just after an application inherits from Rails::Application,
57 # allowing the developer to load classes in lib and use them during application
58 # configuration.
59 #
60 # class MyApplication < Rails::Application
61 # require "my_backend" # in lib/my_backend
62 # config.i18n.backend = MyBackend
63 # end
64 #
65 # Notice this method takes into consideration the default root path. So if you
66 # are changing config.root inside your application definition or having a custom
67 # Rails application, you will need to add lib to $LOAD_PATH on your own in case
68 # you need to load files in lib/ during the application configuration as well.
6f83a50 Xavier Noria renames load_(once_)paths to autoload_(once_)paths in dependencies and c...
fxn authored
69 def add_lib_to_load_path! #:nodoc:
5a0d73f José Valim Add lib to load paths when application is inherited to be able to load l...
josevalim authored
70 path = config.root.join('lib').to_s
71 $LOAD_PATH.unshift(path) if File.exists?(path)
72 end
73
9e081ca José Valim Improve documentation for add_lib_to_load_paths!
josevalim authored
74 def require_environment! #:nodoc:
d649bf1 José Valim Provide a cleaner syntax for paths configuration that does not rely on m...
josevalim authored
75 environment = paths["config/environment"].existent.first
13d66cd José Valim Extract Railtie load from application.
josevalim authored
76 require environment if environment
d982fe2 Replace reopening the class with App.configure as an alias to class_eval
Carlhuda authored
77 end
78
9e081ca José Valim Improve documentation for add_lib_to_load_paths!
josevalim authored
79 def eager_load! #:nodoc:
5a0d73f José Valim Add lib to load paths when application is inherited to be able to load l...
josevalim authored
80 railties.all(&:eager_load!)
81 super
82 end
83
7b0c592 José Valim reload_routes! is part of the public API and should not be removed.
josevalim authored
84 def reload_routes!
85 routes_reloader.reload!
86 end
87
80130d1 José Valim Extract routes reloading responsibilities from application and load them...
josevalim authored
88 def routes_reloader
3049e64 Piotr Sarnacki Moved Rails::RoutesReloader to Rails::Application::RoutesReloader
drogus authored
89 @routes_reloader ||= RoutesReloader.new
80130d1 José Valim Extract routes reloading responsibilities from application and load them...
josevalim authored
90 end
5f8e48c Joshua Peek Move route reloading into railties
josh authored
91
80130d1 José Valim Extract routes reloading responsibilities from application and load them...
josevalim authored
92 def initialize!
abeb0ff Piotr Sarnacki Ensure that Rails.application.initialize! is called only once
drogus authored
93 raise "Application has been already initialized." if @initialized
80130d1 José Valim Extract routes reloading responsibilities from application and load them...
josevalim authored
94 run_initializers(self)
abeb0ff Piotr Sarnacki Ensure that Rails.application.initialize! is called only once
drogus authored
95 @initialized = true
80130d1 José Valim Extract routes reloading responsibilities from application and load them...
josevalim authored
96 self
5f8e48c Joshua Peek Move route reloading into railties
josh authored
97 end
98
94bb331 Jeremy Kemper Shift more responsibility from application class to its singleton instan...
jeremy authored
99 def load_tasks
788fce2 José Valim Create configurable modules and ensure that they are added only on direc...
josevalim authored
100 initialize_tasks
13d66cd José Valim Extract Railtie load from application.
josevalim authored
101 railties.all { |r| r.load_tasks }
e461e1b José Valim Ensure application rake tasks and generators are loaded after the ones s...
josevalim authored
102 super
13d66cd José Valim Extract Railtie load from application.
josevalim authored
103 self
94bb331 Jeremy Kemper Shift more responsibility from application class to its singleton instan...
jeremy authored
104 end
105
4ca9765 José Valim Allow railties to specify generators paths.
josevalim authored
106 def load_generators
788fce2 José Valim Create configurable modules and ensure that they are added only on direc...
josevalim authored
107 initialize_generators
13d66cd José Valim Extract Railtie load from application.
josevalim authored
108 railties.all { |r| r.load_generators }
e461e1b José Valim Ensure application rake tasks and generators are loaded after the ones s...
josevalim authored
109 super
13d66cd José Valim Extract Railtie load from application.
josevalim authored
110 self
82b9b15 Refactor plugins
Yehuda Katz + Carl Lerche authored
111 end
112
fa98eca José Valim Add console hook to force ActiveRecord::Base to be loaded when console s...
josevalim authored
113 def load_console(sandbox=false)
114 initialize_console(sandbox)
115 railties.all { |r| r.load_console }
116 super()
117 self
118 end
119
a132229 Piotr Sarnacki Added ability to set asset_path for engines
drogus authored
120 def env_config
121 @env_config ||= super.merge({
6690d66 José Valim Rename config.cookie_secret to config.secret_token and pass it as config...
josevalim authored
122 "action_dispatch.parameter_filter" => config.filter_parameters,
a132229 Piotr Sarnacki Added ability to set asset_path for engines
drogus authored
123 "action_dispatch.secret_token" => config.secret_token,
439a745 Prem Sichanugrist Make sure that we set `env["action_dispatch.show_exceptions"]`
sikachu authored
124 "action_dispatch.show_exceptions" => config.action_dispatch.show_exceptions
a132229 Piotr Sarnacki Added ability to set asset_path for engines
drogus authored
125 })
6d6ae08 Start moving the initializers into the application object
Carl Lerche authored
126 end
127
98240c4 José Valim Get rid of initializers global and create i18n railtie.
josevalim authored
128 def initializers
e9793c6 Santiago Pastorino Makes this code a bit more clear
spastorino authored
129 Bootstrap.initializers_for(self) +
130 super +
131 Finisher.initializers_for(self)
98240c4 José Valim Get rid of initializers global and create i18n railtie.
josevalim authored
132 end
788fce2 José Valim Create configurable modules and ensure that they are added only on direc...
josevalim authored
133
32a5b49 Piotr Sarnacki Move singleton pattern to Railtie and remove Engine::Configurable and Ap...
drogus authored
134 def config
135 @config ||= Application::Configuration.new(find_root_with_flag("config.ru", Dir.pwd))
136 end
137
2fe70c1 José Valim Booya, sprockets now works from Engines.
josevalim authored
138 protected
139
140 alias :build_middleware_stack :app
612454e Joshua Peek Move sprockets initializers back to application
josh authored
141
19d8c8c José Valim Remove the laziness from the middleware stack.
josevalim authored
142 def default_middleware_stack
143 ActionDispatch::MiddlewareStack.new.tap do |middleware|
2c0c4d7 Prem Sichanugrist Add `config.force_ssl` configuration which will load `Rack::SSL` middlew...
sikachu authored
144 if rack_cache = config.action_controller.perform_caching && config.action_dispatch.rack_cache
145 require "action_dispatch/http/rack_cache"
146 middleware.use ::Rack::Cache, rack_cache
147 end
254ab7d Yehuda Katz First pass at Rack::Cache
wycats authored
148
2c0c4d7 Prem Sichanugrist Add `config.force_ssl` configuration which will load `Rack::SSL` middlew...
sikachu authored
149 if config.force_ssl
150 require "rack/ssl"
151 middleware.use ::Rack::SSL
152 end
eeb3246 Only add Rack::Cache to the middleware stack if config.action_controller...
Sparky authored
153
e6369bc Piotr Sarnacki Application's assets should have higher priority than engine's ones
drogus authored
154 if config.serve_static_assets
1ca8123 José Valim Add static_cache_control as configuration option and set a default for t...
josevalim authored
155 middleware.use ::ActionDispatch::Static, paths["public"].first, config.static_cache_control
e6369bc Piotr Sarnacki Application's assets should have higher priority than engine's ones
drogus authored
156 end
2c0c4d7 Prem Sichanugrist Add `config.force_ssl` configuration which will load `Rack::SSL` middlew...
sikachu authored
157
ea14396 Neeraj Singh replace if ! with unless
neerajdotname authored
158 middleware.use ::Rack::Lock unless config.allow_concurrency
19d8c8c José Valim Remove the laziness from the middleware stack.
josevalim authored
159 middleware.use ::Rack::Runtime
160 middleware.use ::Rails::Rack::Logger
515ea95 Prem Sichanugrist Always use ActionDispatch::ShowExceptions middleware [#6462 state:resolv...
sikachu authored
161 middleware.use ::ActionDispatch::ShowExceptions, config.consider_all_requests_local
19d8c8c José Valim Remove the laziness from the middleware stack.
josevalim authored
162 middleware.use ::ActionDispatch::RemoteIp, config.action_dispatch.ip_spoofing_check, config.action_dispatch.trusted_proxies
163 middleware.use ::Rack::Sendfile, config.action_dispatch.x_sendfile_header
0f7c970 Introduce ActionDispatch::Reloader
John Firebaugh authored
164 middleware.use ::ActionDispatch::Reloader unless config.cache_classes
435bccd Replace AD::Callbacks.to_prepare with AD::Reloader.to_prepare
John Firebaugh authored
165 middleware.use ::ActionDispatch::Callbacks
19d8c8c José Valim Remove the laziness from the middleware stack.
josevalim authored
166 middleware.use ::ActionDispatch::Cookies
167
168 if config.session_store
169 middleware.use config.session_store, config.session_options
170 middleware.use ::ActionDispatch::Flash
171 end
172
173 middleware.use ::ActionDispatch::ParamsParser
174 middleware.use ::Rack::MethodOverride
175 middleware.use ::ActionDispatch::Head
74dd8a3 José Valim Move ETag and ConditionalGet logic from AD::Response to the middleware s...
josevalim authored
176 middleware.use ::Rack::ConditionalGet
177 middleware.use ::Rack::ETag, "no-cache"
2c0c4d7 Prem Sichanugrist Add `config.force_ssl` configuration which will load `Rack::SSL` middlew...
sikachu authored
178
179 if config.action_dispatch.best_standards_support
180 middleware.use ::ActionDispatch::BestStandardsSupport, config.action_dispatch.best_standards_support
181 end
19d8c8c José Valim Remove the laziness from the middleware stack.
josevalim authored
182 end
183 end
184
788fce2 José Valim Create configurable modules and ensure that they are added only on direc...
josevalim authored
185 def initialize_tasks
186 require "rails/tasks"
187 task :environment do
188 $rails_rake_task = true
1b816d5 José Valim The rake task :environment now loads config/environment.rb instead of in...
josevalim authored
189 require_environment!
788fce2 José Valim Create configurable modules and ensure that they are added only on direc...
josevalim authored
190 end
191 end
192
193 def initialize_generators
194 require "rails/generators"
195 end
fa98eca José Valim Add console hook to force ActiveRecord::Base to be loaded when console s...
josevalim authored
196
197 def initialize_console(sandbox=false)
198 require "rails/console/app"
199 require "rails/console/sandbox" if sandbox
200 require "rails/console/helpers"
201 end
accd9b4 Joshua Peek Restore "Start Rails::Application object
josh authored
202 end
2fe70c1 José Valim Booya, sprockets now works from Engines.
josevalim authored
203 end
Something went wrong with that request. Please try again.