rails 2.3.18 → 7.1.3.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (217) hide show
  1. checksums.yaml +7 -0
  2. data/MIT-LICENSE +2 -2
  3. data/README.md +97 -0
  4. metadata +207 -332
  5. data/CHANGELOG +0 -2193
  6. data/README +0 -243
  7. data/Rakefile +0 -365
  8. data/bin/about +0 -4
  9. data/bin/console +0 -3
  10. data/bin/dbconsole +0 -3
  11. data/bin/destroy +0 -3
  12. data/bin/generate +0 -3
  13. data/bin/performance/benchmarker +0 -3
  14. data/bin/performance/profiler +0 -3
  15. data/bin/plugin +0 -3
  16. data/bin/rails +0 -21
  17. data/bin/runner +0 -3
  18. data/bin/server +0 -3
  19. data/builtin/rails_info/rails/info.rb +0 -131
  20. data/builtin/rails_info/rails/info_controller.rb +0 -9
  21. data/builtin/rails_info/rails/info_helper.rb +0 -2
  22. data/builtin/rails_info/rails_info_controller.rb +0 -2
  23. data/configs/databases/frontbase.yml +0 -28
  24. data/configs/databases/ibm_db.yml +0 -62
  25. data/configs/databases/mysql.yml +0 -60
  26. data/configs/databases/oracle.yml +0 -39
  27. data/configs/databases/postgresql.yml +0 -51
  28. data/configs/databases/sqlite2.yml +0 -19
  29. data/configs/databases/sqlite3.yml +0 -22
  30. data/configs/empty.log +0 -0
  31. data/configs/initializers/backtrace_silencers.rb +0 -7
  32. data/configs/initializers/cookie_verification_secret.rb +0 -7
  33. data/configs/initializers/inflections.rb +0 -10
  34. data/configs/initializers/mime_types.rb +0 -5
  35. data/configs/initializers/new_rails_defaults.rb +0 -21
  36. data/configs/initializers/session_store.rb +0 -15
  37. data/configs/locales/en.yml +0 -5
  38. data/configs/routes.rb +0 -43
  39. data/configs/seeds.rb +0 -7
  40. data/dispatches/config.ru +0 -7
  41. data/dispatches/dispatch.fcgi +0 -24
  42. data/dispatches/dispatch.rb +0 -10
  43. data/dispatches/gateway.cgi +0 -97
  44. data/doc/README_FOR_APP +0 -2
  45. data/environments/boot.rb +0 -114
  46. data/environments/development.rb +0 -17
  47. data/environments/environment.rb +0 -41
  48. data/environments/production.rb +0 -28
  49. data/environments/test.rb +0 -28
  50. data/fresh_rakefile +0 -10
  51. data/helpers/application_controller.rb +0 -10
  52. data/helpers/application_helper.rb +0 -3
  53. data/helpers/performance_test.rb +0 -9
  54. data/helpers/test_helper.rb +0 -38
  55. data/html/404.html +0 -30
  56. data/html/422.html +0 -30
  57. data/html/500.html +0 -30
  58. data/html/favicon.ico +0 -0
  59. data/html/images/rails.png +0 -0
  60. data/html/index.html +0 -275
  61. data/html/javascripts/application.js +0 -2
  62. data/html/javascripts/controls.js +0 -963
  63. data/html/javascripts/dragdrop.js +0 -973
  64. data/html/javascripts/effects.js +0 -1128
  65. data/html/javascripts/prototype.js +0 -4320
  66. data/html/robots.txt +0 -5
  67. data/lib/code_statistics.rb +0 -107
  68. data/lib/commands/about.rb +0 -3
  69. data/lib/commands/console.rb +0 -45
  70. data/lib/commands/dbconsole.rb +0 -87
  71. data/lib/commands/destroy.rb +0 -6
  72. data/lib/commands/generate.rb +0 -6
  73. data/lib/commands/ncgi/listener +0 -86
  74. data/lib/commands/ncgi/tracker +0 -69
  75. data/lib/commands/performance/benchmarker.rb +0 -24
  76. data/lib/commands/performance/profiler.rb +0 -50
  77. data/lib/commands/plugin.rb +0 -968
  78. data/lib/commands/runner.rb +0 -54
  79. data/lib/commands/server.rb +0 -114
  80. data/lib/commands/update.rb +0 -4
  81. data/lib/commands.rb +0 -17
  82. data/lib/console_app.rb +0 -30
  83. data/lib/console_sandbox.rb +0 -6
  84. data/lib/console_with_helpers.rb +0 -5
  85. data/lib/dispatcher.rb +0 -24
  86. data/lib/fcgi_handler.rb +0 -239
  87. data/lib/initializer.rb +0 -1152
  88. data/lib/performance_test_help.rb +0 -5
  89. data/lib/rails/backtrace_cleaner.rb +0 -54
  90. data/lib/rails/gem_builder.rb +0 -21
  91. data/lib/rails/gem_dependency.rb +0 -317
  92. data/lib/rails/plugin/loader.rb +0 -198
  93. data/lib/rails/plugin/locator.rb +0 -100
  94. data/lib/rails/plugin.rb +0 -179
  95. data/lib/rails/rack/debugger.rb +0 -23
  96. data/lib/rails/rack/log_tailer.rb +0 -35
  97. data/lib/rails/rack/metal.rb +0 -51
  98. data/lib/rails/rack/static.rb +0 -46
  99. data/lib/rails/rack.rb +0 -8
  100. data/lib/rails/vendor_gem_source_index.rb +0 -140
  101. data/lib/rails/version.rb +0 -9
  102. data/lib/rails_generator/base.rb +0 -266
  103. data/lib/rails_generator/commands.rb +0 -621
  104. data/lib/rails_generator/generated_attribute.rb +0 -47
  105. data/lib/rails_generator/generators/applications/app/USAGE +0 -9
  106. data/lib/rails_generator/generators/applications/app/app_generator.rb +0 -266
  107. data/lib/rails_generator/generators/applications/app/scm/git.rb +0 -18
  108. data/lib/rails_generator/generators/applications/app/scm/scm.rb +0 -8
  109. data/lib/rails_generator/generators/applications/app/scm/svn.rb +0 -7
  110. data/lib/rails_generator/generators/applications/app/template_runner.rb +0 -401
  111. data/lib/rails_generator/generators/components/controller/USAGE +0 -30
  112. data/lib/rails_generator/generators/components/controller/controller_generator.rb +0 -43
  113. data/lib/rails_generator/generators/components/controller/templates/controller.rb +0 -7
  114. data/lib/rails_generator/generators/components/controller/templates/functional_test.rb +0 -8
  115. data/lib/rails_generator/generators/components/controller/templates/helper.rb +0 -2
  116. data/lib/rails_generator/generators/components/controller/templates/helper_test.rb +0 -4
  117. data/lib/rails_generator/generators/components/controller/templates/view.html.erb +0 -2
  118. data/lib/rails_generator/generators/components/helper/USAGE +0 -24
  119. data/lib/rails_generator/generators/components/helper/helper_generator.rb +0 -25
  120. data/lib/rails_generator/generators/components/helper/templates/helper.rb +0 -2
  121. data/lib/rails_generator/generators/components/helper/templates/helper_test.rb +0 -4
  122. data/lib/rails_generator/generators/components/integration_test/USAGE +0 -8
  123. data/lib/rails_generator/generators/components/integration_test/integration_test_generator.rb +0 -16
  124. data/lib/rails_generator/generators/components/integration_test/templates/integration_test.rb +0 -10
  125. data/lib/rails_generator/generators/components/mailer/USAGE +0 -16
  126. data/lib/rails_generator/generators/components/mailer/mailer_generator.rb +0 -30
  127. data/lib/rails_generator/generators/components/mailer/templates/fixture.erb +0 -3
  128. data/lib/rails_generator/generators/components/mailer/templates/fixture.rhtml +0 -0
  129. data/lib/rails_generator/generators/components/mailer/templates/mailer.rb +0 -15
  130. data/lib/rails_generator/generators/components/mailer/templates/unit_test.rb +0 -20
  131. data/lib/rails_generator/generators/components/mailer/templates/view.erb +0 -3
  132. data/lib/rails_generator/generators/components/mailer/templates/view.rhtml +0 -0
  133. data/lib/rails_generator/generators/components/metal/USAGE +0 -8
  134. data/lib/rails_generator/generators/components/metal/metal_generator.rb +0 -8
  135. data/lib/rails_generator/generators/components/metal/templates/metal.rb +0 -12
  136. data/lib/rails_generator/generators/components/migration/USAGE +0 -29
  137. data/lib/rails_generator/generators/components/migration/migration_generator.rb +0 -20
  138. data/lib/rails_generator/generators/components/migration/templates/migration.rb +0 -11
  139. data/lib/rails_generator/generators/components/model/USAGE +0 -27
  140. data/lib/rails_generator/generators/components/model/model_generator.rb +0 -52
  141. data/lib/rails_generator/generators/components/model/templates/fixtures.yml +0 -23
  142. data/lib/rails_generator/generators/components/model/templates/migration.rb +0 -16
  143. data/lib/rails_generator/generators/components/model/templates/model.rb +0 -5
  144. data/lib/rails_generator/generators/components/model/templates/unit_test.rb +0 -8
  145. data/lib/rails_generator/generators/components/observer/USAGE +0 -13
  146. data/lib/rails_generator/generators/components/observer/observer_generator.rb +0 -16
  147. data/lib/rails_generator/generators/components/observer/templates/observer.rb +0 -2
  148. data/lib/rails_generator/generators/components/observer/templates/unit_test.rb +0 -8
  149. data/lib/rails_generator/generators/components/performance_test/USAGE +0 -8
  150. data/lib/rails_generator/generators/components/performance_test/performance_test_generator.rb +0 -16
  151. data/lib/rails_generator/generators/components/performance_test/templates/performance_test.rb +0 -9
  152. data/lib/rails_generator/generators/components/plugin/USAGE +0 -25
  153. data/lib/rails_generator/generators/components/plugin/plugin_generator.rb +0 -39
  154. data/lib/rails_generator/generators/components/plugin/templates/MIT-LICENSE +0 -20
  155. data/lib/rails_generator/generators/components/plugin/templates/README +0 -13
  156. data/lib/rails_generator/generators/components/plugin/templates/Rakefile +0 -23
  157. data/lib/rails_generator/generators/components/plugin/templates/USAGE +0 -8
  158. data/lib/rails_generator/generators/components/plugin/templates/generator.rb +0 -8
  159. data/lib/rails_generator/generators/components/plugin/templates/init.rb +0 -1
  160. data/lib/rails_generator/generators/components/plugin/templates/install.rb +0 -1
  161. data/lib/rails_generator/generators/components/plugin/templates/plugin.rb +0 -1
  162. data/lib/rails_generator/generators/components/plugin/templates/tasks.rake +0 -4
  163. data/lib/rails_generator/generators/components/plugin/templates/test_helper.rb +0 -4
  164. data/lib/rails_generator/generators/components/plugin/templates/uninstall.rb +0 -1
  165. data/lib/rails_generator/generators/components/plugin/templates/unit_test.rb +0 -8
  166. data/lib/rails_generator/generators/components/resource/USAGE +0 -23
  167. data/lib/rails_generator/generators/components/resource/resource_generator.rb +0 -76
  168. data/lib/rails_generator/generators/components/resource/templates/controller.rb +0 -2
  169. data/lib/rails_generator/generators/components/resource/templates/functional_test.rb +0 -8
  170. data/lib/rails_generator/generators/components/resource/templates/helper.rb +0 -2
  171. data/lib/rails_generator/generators/components/resource/templates/helper_test.rb +0 -4
  172. data/lib/rails_generator/generators/components/scaffold/USAGE +0 -29
  173. data/lib/rails_generator/generators/components/scaffold/scaffold_generator.rb +0 -103
  174. data/lib/rails_generator/generators/components/scaffold/templates/controller.rb +0 -83
  175. data/lib/rails_generator/generators/components/scaffold/templates/functional_test.rb +0 -45
  176. data/lib/rails_generator/generators/components/scaffold/templates/helper.rb +0 -2
  177. data/lib/rails_generator/generators/components/scaffold/templates/helper_test.rb +0 -4
  178. data/lib/rails_generator/generators/components/scaffold/templates/layout.html.erb +0 -17
  179. data/lib/rails_generator/generators/components/scaffold/templates/style.css +0 -54
  180. data/lib/rails_generator/generators/components/scaffold/templates/view_edit.html.erb +0 -18
  181. data/lib/rails_generator/generators/components/scaffold/templates/view_index.html.erb +0 -24
  182. data/lib/rails_generator/generators/components/scaffold/templates/view_new.html.erb +0 -17
  183. data/lib/rails_generator/generators/components/scaffold/templates/view_show.html.erb +0 -10
  184. data/lib/rails_generator/generators/components/session_migration/USAGE +0 -10
  185. data/lib/rails_generator/generators/components/session_migration/session_migration_generator.rb +0 -18
  186. data/lib/rails_generator/generators/components/session_migration/templates/migration.rb +0 -16
  187. data/lib/rails_generator/lookup.rb +0 -249
  188. data/lib/rails_generator/manifest.rb +0 -53
  189. data/lib/rails_generator/options.rb +0 -150
  190. data/lib/rails_generator/scripts/destroy.rb +0 -29
  191. data/lib/rails_generator/scripts/generate.rb +0 -7
  192. data/lib/rails_generator/scripts/update.rb +0 -12
  193. data/lib/rails_generator/scripts.rb +0 -89
  194. data/lib/rails_generator/secret_key_generator.rb +0 -24
  195. data/lib/rails_generator/simple_logger.rb +0 -46
  196. data/lib/rails_generator/spec.rb +0 -44
  197. data/lib/rails_generator.rb +0 -46
  198. data/lib/railties_path.rb +0 -1
  199. data/lib/ruby_version_check.rb +0 -17
  200. data/lib/rubyprof_ext.rb +0 -35
  201. data/lib/source_annotation_extractor.rb +0 -102
  202. data/lib/tasks/annotations.rake +0 -20
  203. data/lib/tasks/databases.rake +0 -436
  204. data/lib/tasks/documentation.rake +0 -93
  205. data/lib/tasks/framework.rake +0 -146
  206. data/lib/tasks/gems.rake +0 -78
  207. data/lib/tasks/log.rake +0 -9
  208. data/lib/tasks/middleware.rake +0 -7
  209. data/lib/tasks/misc.rake +0 -63
  210. data/lib/tasks/rails.rb +0 -14
  211. data/lib/tasks/routes.rake +0 -18
  212. data/lib/tasks/statistics.rake +0 -17
  213. data/lib/tasks/testing.rake +0 -139
  214. data/lib/tasks/tmp.rake +0 -37
  215. data/lib/test_help.rb +0 -38
  216. data/lib/webrick_server.rb +0 -156
  217. data/railties.gemspec +0 -22
data/lib/initializer.rb DELETED
@@ -1,1152 +0,0 @@
1
- require 'logger'
2
- require 'set'
3
- require 'pathname'
4
-
5
- $LOAD_PATH.unshift File.dirname(__FILE__)
6
- require 'railties_path'
7
- require 'rails/version'
8
- require 'rails/plugin/locator'
9
- require 'rails/plugin/loader'
10
- require 'rails/gem_dependency'
11
- require 'rails/rack'
12
-
13
-
14
- RAILS_ENV = (ENV['RAILS_ENV'] || 'development').dup unless defined?(RAILS_ENV)
15
-
16
- module Rails
17
- class << self
18
- # The Configuration instance used to configure the Rails environment
19
- def configuration
20
- @@configuration
21
- end
22
-
23
- def configuration=(configuration)
24
- @@configuration = configuration
25
- end
26
-
27
- def initialized?
28
- @initialized || false
29
- end
30
-
31
- def initialized=(initialized)
32
- @initialized ||= initialized
33
- end
34
-
35
- def logger
36
- if defined?(RAILS_DEFAULT_LOGGER)
37
- RAILS_DEFAULT_LOGGER
38
- else
39
- nil
40
- end
41
- end
42
-
43
- def backtrace_cleaner
44
- @@backtrace_cleaner ||= begin
45
- # Relies on ActiveSupport, so we have to lazy load to postpone definition until AS has been loaded
46
- require 'rails/backtrace_cleaner'
47
- Rails::BacktraceCleaner.new
48
- end
49
- end
50
-
51
- def root
52
- Pathname.new(RAILS_ROOT) if defined?(RAILS_ROOT)
53
- end
54
-
55
- def env
56
- @_env ||= ActiveSupport::StringInquirer.new(RAILS_ENV)
57
- end
58
-
59
- def cache
60
- RAILS_CACHE
61
- end
62
-
63
- def version
64
- VERSION::STRING
65
- end
66
-
67
- def public_path
68
- @@public_path ||= self.root ? File.join(self.root, "public") : "public"
69
- end
70
-
71
- def public_path=(path)
72
- @@public_path = path
73
- end
74
- end
75
-
76
- # The Initializer is responsible for processing the Rails configuration, such
77
- # as setting the $LOAD_PATH, requiring the right frameworks, initializing
78
- # logging, and more. It can be run either as a single command that'll just
79
- # use the default configuration, like this:
80
- #
81
- # Rails::Initializer.run
82
- #
83
- # But normally it's more interesting to pass in a custom configuration
84
- # through the block running:
85
- #
86
- # Rails::Initializer.run do |config|
87
- # config.frameworks -= [ :action_mailer ]
88
- # end
89
- #
90
- # This will use the default configuration options from Rails::Configuration,
91
- # but allow for overwriting on select areas.
92
- class Initializer
93
- # The Configuration instance used by this Initializer instance.
94
- attr_reader :configuration
95
-
96
- # The set of loaded plugins.
97
- attr_reader :loaded_plugins
98
-
99
- # Whether or not all the gem dependencies have been met
100
- attr_reader :gems_dependencies_loaded
101
-
102
- # Runs the initializer. By default, this will invoke the #process method,
103
- # which simply executes all of the initialization routines. Alternately,
104
- # you can specify explicitly which initialization routine you want:
105
- #
106
- # Rails::Initializer.run(:set_load_path)
107
- #
108
- # This is useful if you only want the load path initialized, without
109
- # incurring the overhead of completely loading the entire environment.
110
- def self.run(command = :process, configuration = Configuration.new)
111
- yield configuration if block_given?
112
- initializer = new configuration
113
- initializer.send(command)
114
- initializer
115
- end
116
-
117
- # Create a new Initializer instance that references the given Configuration
118
- # instance.
119
- def initialize(configuration)
120
- @configuration = configuration
121
- @loaded_plugins = []
122
- end
123
-
124
- # Sequentially step through all of the available initialization routines,
125
- # in order (view execution order in source).
126
- def process
127
- Rails.configuration = configuration
128
-
129
- check_ruby_version
130
- install_gem_spec_stubs
131
- set_load_path
132
- add_gem_load_paths
133
-
134
- require_frameworks
135
- set_autoload_paths
136
- add_plugin_load_paths
137
- load_environment
138
- preload_frameworks
139
-
140
- initialize_encoding
141
- initialize_database
142
-
143
- initialize_cache
144
- initialize_framework_caches
145
-
146
- initialize_logger
147
- initialize_framework_logging
148
-
149
- initialize_dependency_mechanism
150
- initialize_whiny_nils
151
-
152
- initialize_time_zone
153
- initialize_i18n
154
-
155
- initialize_framework_settings
156
- initialize_framework_views
157
-
158
- initialize_metal
159
-
160
- add_support_load_paths
161
-
162
- check_for_unbuilt_gems
163
-
164
- load_gems
165
- load_plugins
166
-
167
- # pick up any gems that plugins depend on
168
- add_gem_load_paths
169
- load_gems
170
- check_gem_dependencies
171
-
172
- # bail out if gems are missing - note that check_gem_dependencies will have
173
- # already called abort() unless $gems_rake_task is set
174
- return unless gems_dependencies_loaded
175
-
176
- load_application_initializers
177
-
178
- # the framework is now fully initialized
179
- after_initialize
180
-
181
- # Setup database middleware after initializers have run
182
- initialize_database_middleware
183
-
184
- # Prepare dispatcher callbacks and run 'prepare' callbacks
185
- prepare_dispatcher
186
-
187
- # Routing must be initialized after plugins to allow the former to extend the routes
188
- initialize_routing
189
-
190
- # Observers are loaded after plugins in case Observers or observed models are modified by plugins.
191
- load_observers
192
-
193
- # Load view path cache
194
- load_view_paths
195
-
196
- # Load application classes
197
- load_application_classes
198
-
199
- # Disable dependency loading during request cycle
200
- disable_dependency_loading
201
-
202
- # Flag initialized
203
- Rails.initialized = true
204
- end
205
-
206
- # Check for valid Ruby version
207
- # This is done in an external file, so we can use it
208
- # from the `rails` program as well without duplication.
209
- def check_ruby_version
210
- require 'ruby_version_check'
211
- end
212
-
213
- # If Rails is vendored and RubyGems is available, install stub GemSpecs
214
- # for Rails, Active Support, Active Record, Action Pack, Action Mailer, and
215
- # Active Resource. This allows Gem plugins to depend on Rails even when
216
- # the Gem version of Rails shouldn't be loaded.
217
- def install_gem_spec_stubs
218
- unless Rails.respond_to?(:vendor_rails?)
219
- abort %{Your config/boot.rb is outdated: Run "rake rails:update".}
220
- end
221
-
222
- if Rails.vendor_rails?
223
- begin; require "rubygems"; rescue LoadError; return; end
224
-
225
- stubs = %w(rails activesupport activerecord actionpack actionmailer activeresource)
226
- stubs.reject! { |s| Gem.loaded_specs.key?(s) }
227
-
228
- stubs.each do |stub|
229
- Gem.loaded_specs[stub] = Gem::Specification.new do |s|
230
- s.name = stub
231
- s.version = Rails::VERSION::STRING
232
- s.loaded_from = ""
233
- end
234
- end
235
- end
236
- end
237
-
238
- # Set the <tt>$LOAD_PATH</tt> based on the value of
239
- # Configuration#autoload_paths. Duplicates are removed.
240
- def set_load_path
241
- load_paths = configuration.autoload_paths + configuration.framework_paths
242
- load_paths.reverse_each { |dir| $LOAD_PATH.unshift(dir) if File.directory?(dir) }
243
- $LOAD_PATH.uniq!
244
- end
245
-
246
- # Set the paths from which Rails will automatically load source files, and
247
- # the load_once paths.
248
- def set_autoload_paths
249
- ActiveSupport::Dependencies.autoload_paths = configuration.autoload_paths.uniq
250
- ActiveSupport::Dependencies.autoload_once_paths = configuration.autoload_once_paths.uniq
251
-
252
- extra = ActiveSupport::Dependencies.autoload_once_paths - ActiveSupport::Dependencies.autoload_paths
253
- unless extra.empty?
254
- abort <<-end_error
255
- autoload_once_paths must be a subset of the autoload_paths.
256
- Extra items in autoload_once_paths: #{extra * ','}
257
- end_error
258
- end
259
-
260
- # Freeze the arrays so future modifications will fail rather than do nothing mysteriously
261
- configuration.autoload_once_paths.freeze
262
- end
263
-
264
- # Requires all frameworks specified by the Configuration#frameworks
265
- # list. By default, all frameworks (Active Record, Active Support,
266
- # Action Pack, Action Mailer, and Active Resource) are loaded.
267
- def require_frameworks
268
- configuration.frameworks.each { |framework| require(framework.to_s) }
269
- rescue LoadError => e
270
- # Re-raise as RuntimeError because Mongrel would swallow LoadError.
271
- raise e.to_s
272
- end
273
-
274
- # Preload all frameworks specified by the Configuration#frameworks.
275
- # Used by Passenger to ensure everything's loaded before forking and
276
- # to avoid autoload race conditions in JRuby.
277
- def preload_frameworks
278
- if configuration.preload_frameworks
279
- configuration.frameworks.each do |framework|
280
- # String#classify and #constantize aren't available yet.
281
- toplevel = Object.const_get(framework.to_s.gsub(/(?:^|_)(.)/) { $1.upcase })
282
- toplevel.load_all! if toplevel.respond_to?(:load_all!)
283
- end
284
- end
285
- end
286
-
287
- # Add the load paths used by support functions such as the info controller
288
- def add_support_load_paths
289
- end
290
-
291
- # Adds all load paths from plugins to the global set of load paths, so that
292
- # code from plugins can be required (explicitly or automatically via ActiveSupport::Dependencies).
293
- def add_plugin_load_paths
294
- plugin_loader.add_plugin_load_paths
295
- end
296
-
297
- def add_gem_load_paths
298
- Rails::GemDependency.add_frozen_gem_path
299
- unless @configuration.gems.empty?
300
- require "rubygems"
301
- @configuration.gems.each { |gem| gem.add_load_paths }
302
- end
303
- end
304
-
305
- def load_gems
306
- unless $gems_rake_task
307
- @configuration.gems.each { |gem| gem.load }
308
- end
309
- end
310
-
311
- def check_for_unbuilt_gems
312
- unbuilt_gems = @configuration.gems.select(&:frozen?).reject(&:built?)
313
- if unbuilt_gems.size > 0
314
- # don't print if the gems:build rake tasks are being run
315
- unless $gems_build_rake_task
316
- abort <<-end_error
317
- The following gems have native components that need to be built
318
- #{unbuilt_gems.map { |gem| "#{gem.name} #{gem.requirement}" } * "\n "}
319
-
320
- You're running:
321
- ruby #{Gem.ruby_version} at #{Gem.ruby}
322
- rubygems #{Gem::RubyGemsVersion} at #{Gem.path * ', '}
323
-
324
- Run `rake gems:build` to build the unbuilt gems.
325
- end_error
326
- end
327
- end
328
- end
329
-
330
- def check_gem_dependencies
331
- unloaded_gems = @configuration.gems.reject { |g| g.loaded? }
332
- if unloaded_gems.size > 0
333
- @gems_dependencies_loaded = false
334
- # don't print if the gems rake tasks are being run
335
- unless $gems_rake_task
336
- abort <<-end_error
337
- Missing these required gems:
338
- #{unloaded_gems.map { |gem| "#{gem.name} #{gem.requirement}" } * "\n "}
339
-
340
- You're running:
341
- ruby #{Gem.ruby_version} at #{Gem.ruby}
342
- rubygems #{Gem::RubyGemsVersion} at #{Gem.path * ', '}
343
-
344
- Run `rake gems:install` to install the missing gems.
345
- end_error
346
- end
347
- else
348
- @gems_dependencies_loaded = true
349
- end
350
- end
351
-
352
- # Loads all plugins in <tt>config.plugin_paths</tt>. <tt>plugin_paths</tt>
353
- # defaults to <tt>vendor/plugins</tt> but may also be set to a list of
354
- # paths, such as
355
- # config.plugin_paths = ["#{RAILS_ROOT}/lib/plugins", "#{RAILS_ROOT}/vendor/plugins"]
356
- #
357
- # In the default implementation, as each plugin discovered in <tt>plugin_paths</tt> is initialized:
358
- # * its +lib+ directory, if present, is added to the load path (immediately after the applications lib directory)
359
- # * <tt>init.rb</tt> is evaluated, if present
360
- #
361
- # After all plugins are loaded, duplicates are removed from the load path.
362
- # If an array of plugin names is specified in config.plugins, only those plugins will be loaded
363
- # and they plugins will be loaded in that order. Otherwise, plugins are loaded in alphabetical
364
- # order.
365
- #
366
- # if config.plugins ends contains :all then the named plugins will be loaded in the given order and all other
367
- # plugins will be loaded in alphabetical order
368
- def load_plugins
369
- plugin_loader.load_plugins
370
- end
371
-
372
- def plugin_loader
373
- @plugin_loader ||= configuration.plugin_loader.new(self)
374
- end
375
-
376
- # Loads the environment specified by Configuration#environment_path, which
377
- # is typically one of development, test, or production.
378
- def load_environment
379
- silence_warnings do
380
- return if @environment_loaded
381
- @environment_loaded = true
382
-
383
- config = configuration
384
- constants = self.class.constants
385
-
386
- eval(IO.read(configuration.environment_path), binding, configuration.environment_path)
387
-
388
- (self.class.constants - constants).each do |const|
389
- Object.const_set(const, self.class.const_get(const))
390
- end
391
- end
392
- end
393
-
394
- def load_observers
395
- if gems_dependencies_loaded && configuration.frameworks.include?(:active_record)
396
- ActiveRecord::Base.instantiate_observers
397
- end
398
- end
399
-
400
- def load_view_paths
401
- if configuration.frameworks.include?(:action_view)
402
- ActionController::Base.view_paths.load! if configuration.frameworks.include?(:action_controller)
403
- ActionMailer::Base.view_paths.load! if configuration.frameworks.include?(:action_mailer)
404
- end
405
- end
406
-
407
- # Eager load application classes
408
- def load_application_classes
409
- return if $rails_rake_task && configuration.dependency_loading
410
- if configuration.cache_classes
411
- configuration.eager_load_paths.each do |load_path|
412
- matcher = /\A#{Regexp.escape(load_path)}(.*)\.rb\Z/
413
- Dir.glob("#{load_path}/**/*.rb").sort.each do |file|
414
- require_dependency file.sub(matcher, '\1')
415
- end
416
- end
417
- end
418
- end
419
-
420
- # For Ruby 1.8, this initialization sets $KCODE to 'u' to enable the
421
- # multibyte safe operations. Plugin authors supporting other encodings
422
- # should override this behaviour and set the relevant +default_charset+
423
- # on ActionController::Base.
424
- #
425
- # For Ruby 1.9, this does nothing. Specify the default encoding in the Ruby
426
- # shebang line if you don't want UTF-8.
427
- def initialize_encoding
428
- $KCODE='u' if RUBY_VERSION < '1.9'
429
- end
430
-
431
- # This initialization routine does nothing unless <tt>:active_record</tt>
432
- # is one of the frameworks to load (Configuration#frameworks). If it is,
433
- # this sets the database configuration from Configuration#database_configuration
434
- # and then establishes the connection.
435
- def initialize_database
436
- if configuration.frameworks.include?(:active_record)
437
- ActiveRecord::Base.configurations = configuration.database_configuration
438
- ActiveRecord::Base.establish_connection
439
- end
440
- end
441
-
442
- def initialize_database_middleware
443
- if configuration.frameworks.include?(:active_record)
444
- if configuration.frameworks.include?(:action_controller) &&
445
- ActionController::Base.session_store.name == 'ActiveRecord::SessionStore'
446
- configuration.middleware.insert_before :"ActiveRecord::SessionStore", ActiveRecord::ConnectionAdapters::ConnectionManagement
447
- configuration.middleware.insert_before :"ActiveRecord::SessionStore", ActiveRecord::QueryCache
448
- else
449
- configuration.middleware.use ActiveRecord::ConnectionAdapters::ConnectionManagement
450
- configuration.middleware.use ActiveRecord::QueryCache
451
- end
452
- end
453
- end
454
-
455
- def initialize_cache
456
- unless defined?(RAILS_CACHE)
457
- silence_warnings { Object.const_set "RAILS_CACHE", ActiveSupport::Cache.lookup_store(configuration.cache_store) }
458
-
459
- if RAILS_CACHE.respond_to?(:middleware)
460
- # Insert middleware to setup and teardown local cache for each request
461
- configuration.middleware.insert_after(:"ActionController::Failsafe", RAILS_CACHE.middleware)
462
- end
463
- end
464
- end
465
-
466
- def initialize_framework_caches
467
- if configuration.frameworks.include?(:action_controller)
468
- ActionController::Base.cache_store ||= RAILS_CACHE
469
- end
470
- end
471
-
472
- # If the RAILS_DEFAULT_LOGGER constant is already set, this initialization
473
- # routine does nothing. If the constant is not set, and Configuration#logger
474
- # is not +nil+, this also does nothing. Otherwise, a new logger instance
475
- # is created at Configuration#log_path, with a default log level of
476
- # Configuration#log_level.
477
- #
478
- # If the log could not be created, the log will be set to output to
479
- # +STDERR+, with a log level of +WARN+.
480
- def initialize_logger
481
- # if the environment has explicitly defined a logger, use it
482
- return if Rails.logger
483
-
484
- unless logger = configuration.logger
485
- begin
486
- logger = ActiveSupport::BufferedLogger.new(configuration.log_path)
487
- logger.level = ActiveSupport::BufferedLogger.const_get(configuration.log_level.to_s.upcase)
488
- if configuration.environment == "production"
489
- logger.auto_flushing = false
490
- end
491
- rescue StandardError => e
492
- logger = ActiveSupport::BufferedLogger.new(STDERR)
493
- logger.level = ActiveSupport::BufferedLogger::WARN
494
- logger.warn(
495
- "Rails Error: Unable to access log file. Please ensure that #{configuration.log_path} exists and is chmod 0666. " +
496
- "The log level has been raised to WARN and the output directed to STDERR until the problem is fixed."
497
- )
498
- end
499
- end
500
-
501
- silence_warnings { Object.const_set "RAILS_DEFAULT_LOGGER", logger }
502
- end
503
-
504
- # Sets the logger for Active Record, Action Controller, and Action Mailer
505
- # (but only for those frameworks that are to be loaded). If the framework's
506
- # logger is already set, it is not changed, otherwise it is set to use
507
- # RAILS_DEFAULT_LOGGER.
508
- def initialize_framework_logging
509
- for framework in ([ :active_record, :action_controller, :action_mailer ] & configuration.frameworks)
510
- framework.to_s.camelize.constantize.const_get("Base").logger ||= Rails.logger
511
- end
512
-
513
- ActiveSupport::Dependencies.logger ||= Rails.logger
514
- Rails.cache.logger ||= Rails.logger
515
- end
516
-
517
- # Sets +ActionController::Base#view_paths+ and +ActionMailer::Base#template_root+
518
- # (but only for those frameworks that are to be loaded). If the framework's
519
- # paths have already been set, it is not changed, otherwise it is
520
- # set to use Configuration#view_path.
521
- def initialize_framework_views
522
- if configuration.frameworks.include?(:action_view)
523
- view_path = ActionView::PathSet.type_cast(configuration.view_path)
524
- ActionMailer::Base.template_root = view_path if configuration.frameworks.include?(:action_mailer) && ActionMailer::Base.view_paths.blank?
525
- ActionController::Base.view_paths = view_path if configuration.frameworks.include?(:action_controller) && ActionController::Base.view_paths.blank?
526
- end
527
- end
528
-
529
- # If Action Controller is not one of the loaded frameworks (Configuration#frameworks)
530
- # this does nothing. Otherwise, it loads the routing definitions and sets up
531
- # loading module used to lazily load controllers (Configuration#controller_paths).
532
- def initialize_routing
533
- return unless configuration.frameworks.include?(:action_controller)
534
-
535
- ActionController::Routing.controller_paths += configuration.controller_paths
536
- ActionController::Routing::Routes.add_configuration_file(configuration.routes_configuration_file)
537
- ActionController::Routing::Routes.reload!
538
- end
539
-
540
- # Sets the dependency loading mechanism based on the value of
541
- # Configuration#cache_classes.
542
- def initialize_dependency_mechanism
543
- ActiveSupport::Dependencies.mechanism = configuration.cache_classes ? :require : :load
544
- end
545
-
546
- # Loads support for "whiny nil" (noisy warnings when methods are invoked
547
- # on +nil+ values) if Configuration#whiny_nils is true.
548
- def initialize_whiny_nils
549
- require('active_support/whiny_nil') if configuration.whiny_nils
550
- end
551
-
552
- # Sets the default value for Time.zone, and turns on ActiveRecord::Base#time_zone_aware_attributes.
553
- # If assigned value cannot be matched to a TimeZone, an exception will be raised.
554
- def initialize_time_zone
555
- if configuration.time_zone
556
- zone_default = Time.__send__(:get_zone, configuration.time_zone)
557
-
558
- unless zone_default
559
- raise \
560
- 'Value assigned to config.time_zone not recognized.' +
561
- 'Run "rake -D time" for a list of tasks for finding appropriate time zone names.'
562
- end
563
-
564
- Time.zone_default = zone_default
565
-
566
- if configuration.frameworks.include?(:active_record)
567
- ActiveRecord::Base.time_zone_aware_attributes = true
568
- ActiveRecord::Base.default_timezone = :utc
569
- end
570
- end
571
- end
572
-
573
- # Set the i18n configuration from config.i18n but special-case for the load_path which should be
574
- # appended to what's already set instead of overwritten.
575
- def initialize_i18n
576
- configuration.i18n.each do |setting, value|
577
- if setting == :load_path
578
- I18n.load_path += value
579
- else
580
- I18n.send("#{setting}=", value)
581
- end
582
- end
583
- end
584
-
585
- def initialize_metal
586
- Rails::Rack::Metal.requested_metals = configuration.metals
587
- Rails::Rack::Metal.metal_paths += plugin_loader.engine_metal_paths
588
-
589
- configuration.middleware.insert_before(
590
- :"ActionController::ParamsParser",
591
- Rails::Rack::Metal, :if => Rails::Rack::Metal.metals.any?)
592
- end
593
-
594
- # Initializes framework-specific settings for each of the loaded frameworks
595
- # (Configuration#frameworks). The available settings map to the accessors
596
- # on each of the corresponding Base classes.
597
- def initialize_framework_settings
598
- configuration.frameworks.each do |framework|
599
- base_class = framework.to_s.camelize.constantize.const_get("Base")
600
-
601
- configuration.send(framework).each do |setting, value|
602
- base_class.send("#{setting}=", value)
603
- end
604
- end
605
- configuration.active_support.each do |setting, value|
606
- ActiveSupport.send("#{setting}=", value)
607
- end
608
- end
609
-
610
- # Fires the user-supplied after_initialize block (Configuration#after_initialize)
611
- def after_initialize
612
- if gems_dependencies_loaded
613
- configuration.after_initialize_blocks.each do |block|
614
- block.call
615
- end
616
- end
617
- end
618
-
619
- def load_application_initializers
620
- if gems_dependencies_loaded
621
- Dir["#{configuration.root_path}/config/initializers/**/*.rb"].sort.each do |initializer|
622
- load(initializer)
623
- end
624
- end
625
- end
626
-
627
- def prepare_dispatcher
628
- return unless configuration.frameworks.include?(:action_controller)
629
- require 'dispatcher' unless defined?(::Dispatcher)
630
- Dispatcher.define_dispatcher_callbacks(configuration.cache_classes)
631
- Dispatcher.run_prepare_callbacks
632
- end
633
-
634
- def disable_dependency_loading
635
- if configuration.cache_classes && !configuration.dependency_loading
636
- ActiveSupport::Dependencies.unhook!
637
- end
638
- end
639
- end
640
-
641
- # The Configuration class holds all the parameters for the Initializer and
642
- # ships with defaults that suites most Rails applications. But it's possible
643
- # to overwrite everything. Usually, you'll create an Configuration file
644
- # implicitly through the block running on the Initializer, but it's also
645
- # possible to create the Configuration instance in advance and pass it in
646
- # like this:
647
- #
648
- # config = Rails::Configuration.new
649
- # Rails::Initializer.run(:process, config)
650
- class Configuration
651
- # The application's base directory.
652
- attr_reader :root_path
653
-
654
- # A stub for setting options on ActionController::Base.
655
- attr_accessor :action_controller
656
-
657
- # A stub for setting options on ActionMailer::Base.
658
- attr_accessor :action_mailer
659
-
660
- # A stub for setting options on ActionView::Base.
661
- attr_accessor :action_view
662
-
663
- # A stub for setting options on ActiveRecord::Base.
664
- attr_accessor :active_record
665
-
666
- # A stub for setting options on ActiveResource::Base.
667
- attr_accessor :active_resource
668
-
669
- # A stub for setting options on ActiveSupport.
670
- attr_accessor :active_support
671
-
672
- # Whether to preload all frameworks at startup.
673
- attr_accessor :preload_frameworks
674
-
675
- # Whether or not classes should be cached (set to false if you want
676
- # application classes to be reloaded on each request)
677
- attr_accessor :cache_classes
678
-
679
- # The list of paths that should be searched for controllers. (Defaults
680
- # to <tt>app/controllers</tt>.)
681
- attr_accessor :controller_paths
682
-
683
- # The path to the database configuration file to use. (Defaults to
684
- # <tt>config/database.yml</tt>.)
685
- attr_accessor :database_configuration_file
686
-
687
- # The path to the routes configuration file to use. (Defaults to
688
- # <tt>config/routes.rb</tt>.)
689
- attr_accessor :routes_configuration_file
690
-
691
- # The list of rails framework components that should be loaded. (Defaults
692
- # to <tt>:active_record</tt>, <tt>:action_controller</tt>,
693
- # <tt>:action_view</tt>, <tt>:action_mailer</tt>, and
694
- # <tt>:active_resource</tt>).
695
- attr_accessor :frameworks
696
-
697
- # An array of additional paths to prepend to the load path. By default,
698
- # all +app+, +lib+, +vendor+ and mock paths are included in this list.
699
- attr_accessor :autoload_paths
700
-
701
- # Deprecated, use autoload_paths.
702
- def load_paths
703
- $stderr.puts("config.load_paths is deprecated and removed in Rails 3, please use autoload_paths instead")
704
- autoload_paths
705
- end
706
-
707
- # Deprecated, use autoload_paths=.
708
- def load_paths=(paths)
709
- $stderr.puts("config.load_paths= is deprecated and removed in Rails 3, please use autoload_paths= instead")
710
- self.autoload_paths = paths
711
- end
712
-
713
- # An array of paths from which Rails will automatically load from only once.
714
- # All elements of this array must also be in +autoload_paths+.
715
- attr_accessor :autoload_once_paths
716
-
717
- # Deprecated, use autoload_once_paths.
718
- def load_once_paths
719
- $stderr.puts("config.load_once_paths is deprecated and removed in Rails 3, please use autoload_once_paths instead")
720
- autoload_once_paths
721
- end
722
-
723
- # Deprecated, use autoload_once_paths=.
724
- def load_once_paths=(paths)
725
- $stderr.puts("config.load_once_paths= is deprecated and removed in Rails 3, please use autoload_once_paths= instead")
726
- self.autoload_once_paths = paths
727
- end
728
-
729
- # An array of paths from which Rails will eager load on boot if cache
730
- # classes is enabled. All elements of this array must also be in
731
- # +autoload_paths+.
732
- attr_accessor :eager_load_paths
733
-
734
- # The log level to use for the default Rails logger. In production mode,
735
- # this defaults to <tt>:info</tt>. In development mode, it defaults to
736
- # <tt>:debug</tt>.
737
- attr_accessor :log_level
738
-
739
- # The path to the log file to use. Defaults to log/#{environment}.log
740
- # (e.g. log/development.log or log/production.log).
741
- attr_accessor :log_path
742
-
743
- # The specific logger to use. By default, a logger will be created and
744
- # initialized using #log_path and #log_level, but a programmer may
745
- # specifically set the logger to use via this accessor and it will be
746
- # used directly.
747
- attr_accessor :logger
748
-
749
- # The specific cache store to use. By default, the ActiveSupport::Cache::Store will be used.
750
- attr_accessor :cache_store
751
-
752
- # The root of the application's views. (Defaults to <tt>app/views</tt>.)
753
- attr_accessor :view_path
754
-
755
- # Set to +true+ if you want to be warned (noisily) when you try to invoke
756
- # any method of +nil+. Set to +false+ for the standard Ruby behavior.
757
- attr_accessor :whiny_nils
758
-
759
- # The list of plugins to load. If this is set to <tt>nil</tt>, all plugins will
760
- # be loaded. If this is set to <tt>[]</tt>, no plugins will be loaded. Otherwise,
761
- # plugins will be loaded in the order specified.
762
- attr_reader :plugins
763
- def plugins=(plugins)
764
- @plugins = plugins.nil? ? nil : plugins.map { |p| p.to_sym }
765
- end
766
-
767
- # The list of metals to load. If this is set to <tt>nil</tt>, all metals will
768
- # be loaded in alphabetical order. If this is set to <tt>[]</tt>, no metals will
769
- # be loaded. Otherwise metals will be loaded in the order specified
770
- attr_accessor :metals
771
-
772
- # The path to the root of the plugins directory. By default, it is in
773
- # <tt>vendor/plugins</tt>.
774
- attr_accessor :plugin_paths
775
-
776
- # The classes that handle finding the desired plugins that you'd like to load for
777
- # your application. By default it is the Rails::Plugin::FileSystemLocator which finds
778
- # plugins to load in <tt>vendor/plugins</tt>. You can hook into gem location by subclassing
779
- # Rails::Plugin::Locator and adding it onto the list of <tt>plugin_locators</tt>.
780
- attr_accessor :plugin_locators
781
-
782
- # The class that handles loading each plugin. Defaults to Rails::Plugin::Loader, but
783
- # a sub class would have access to fine grained modification of the loading behavior. See
784
- # the implementation of Rails::Plugin::Loader for more details.
785
- attr_accessor :plugin_loader
786
-
787
- # Enables or disables plugin reloading. You can get around this setting per plugin.
788
- # If <tt>reload_plugins?</tt> is false, add this to your plugin's <tt>init.rb</tt>
789
- # to make it reloadable:
790
- #
791
- # ActiveSupport::Dependencies.autoload_once_paths.delete lib_path
792
- #
793
- # If <tt>reload_plugins?</tt> is true, add this to your plugin's <tt>init.rb</tt>
794
- # to only load it once:
795
- #
796
- # ActiveSupport::Dependencies.autoload_once_paths << lib_path
797
- #
798
- attr_accessor :reload_plugins
799
-
800
- # Returns true if plugin reloading is enabled.
801
- def reload_plugins?
802
- !!@reload_plugins
803
- end
804
-
805
- # Enables or disables dependency loading during the request cycle. Setting
806
- # <tt>dependency_loading</tt> to true will allow new classes to be loaded
807
- # during a request. Setting it to false will disable this behavior.
808
- #
809
- # Those who want to run in a threaded environment should disable this
810
- # option and eager load or require all there classes on initialization.
811
- #
812
- # If <tt>cache_classes</tt> is disabled, dependency loaded will always be
813
- # on.
814
- attr_accessor :dependency_loading
815
-
816
- # An array of gems that this rails application depends on. Rails will automatically load
817
- # these gems during installation, and allow you to install any missing gems with:
818
- #
819
- # rake gems:install
820
- #
821
- # You can add gems with the #gem method.
822
- attr_accessor :gems
823
-
824
- # Adds a single Gem dependency to the rails application. By default, it will require
825
- # the library with the same name as the gem. Use :lib to specify a different name.
826
- #
827
- # # gem 'aws-s3', '>= 0.4.0'
828
- # # require 'aws/s3'
829
- # config.gem 'aws-s3', :lib => 'aws/s3', :version => '>= 0.4.0', \
830
- # :source => "http://code.whytheluckystiff.net"
831
- #
832
- # To require a library be installed, but not attempt to load it, pass :lib => false
833
- #
834
- # config.gem 'qrp', :version => '0.4.1', :lib => false
835
- def gem(name, options = {})
836
- @gems << Rails::GemDependency.new(name, options)
837
- end
838
-
839
- # Deprecated options:
840
- def breakpoint_server(_ = nil)
841
- $stderr.puts %(
842
- *******************************************************************
843
- * config.breakpoint_server has been deprecated and has no effect. *
844
- *******************************************************************
845
- )
846
- end
847
- alias_method :breakpoint_server=, :breakpoint_server
848
-
849
- # Sets the default +time_zone+. Setting this will enable +time_zone+
850
- # awareness for Active Record models and set the Active Record default
851
- # timezone to <tt>:utc</tt>.
852
- attr_accessor :time_zone
853
-
854
- # Accessor for i18n settings.
855
- attr_accessor :i18n
856
-
857
- # Create a new Configuration instance, initialized with the default
858
- # values.
859
- def initialize
860
- set_root_path!
861
-
862
- self.frameworks = default_frameworks
863
- self.autoload_paths = default_autoload_paths
864
- self.autoload_once_paths = default_autoload_once_paths
865
- self.eager_load_paths = default_eager_load_paths
866
- self.log_path = default_log_path
867
- self.log_level = default_log_level
868
- self.view_path = default_view_path
869
- self.controller_paths = default_controller_paths
870
- self.preload_frameworks = default_preload_frameworks
871
- self.cache_classes = default_cache_classes
872
- self.dependency_loading = default_dependency_loading
873
- self.whiny_nils = default_whiny_nils
874
- self.plugins = default_plugins
875
- self.plugin_paths = default_plugin_paths
876
- self.plugin_locators = default_plugin_locators
877
- self.plugin_loader = default_plugin_loader
878
- self.database_configuration_file = default_database_configuration_file
879
- self.routes_configuration_file = default_routes_configuration_file
880
- self.gems = default_gems
881
- self.i18n = default_i18n
882
-
883
- for framework in default_frameworks
884
- self.send("#{framework}=", Rails::OrderedOptions.new)
885
- end
886
- self.active_support = Rails::OrderedOptions.new
887
- end
888
-
889
- # Set the root_path to RAILS_ROOT and canonicalize it.
890
- def set_root_path!
891
- raise 'RAILS_ROOT is not set' unless defined?(::RAILS_ROOT)
892
- raise 'RAILS_ROOT is not a directory' unless File.directory?(::RAILS_ROOT)
893
-
894
- @root_path =
895
- # Pathname is incompatible with Windows, but Windows doesn't have
896
- # real symlinks so File.expand_path is safe.
897
- if RUBY_PLATFORM =~ /(:?mswin|mingw)/
898
- File.expand_path(::RAILS_ROOT)
899
-
900
- # Otherwise use Pathname#realpath which respects symlinks.
901
- else
902
- Pathname.new(::RAILS_ROOT).realpath.to_s
903
- end
904
-
905
- Object.const_set(:RELATIVE_RAILS_ROOT, ::RAILS_ROOT.dup) unless defined?(::RELATIVE_RAILS_ROOT)
906
- ::RAILS_ROOT.replace @root_path
907
- end
908
-
909
- # Enable threaded mode. Allows concurrent requests to controller actions and
910
- # multiple database connections. Also disables automatic dependency loading
911
- # after boot, and disables reloading code on every request, as these are
912
- # fundamentally incompatible with thread safety.
913
- def threadsafe!
914
- self.preload_frameworks = true
915
- self.cache_classes = true
916
- self.dependency_loading = false
917
- self.action_controller.allow_concurrency = true
918
- self
919
- end
920
-
921
- # Loads and returns the contents of the #database_configuration_file. The
922
- # contents of the file are processed via ERB before being sent through
923
- # YAML::load.
924
- def database_configuration
925
- require 'erb'
926
- YAML::load(ERB.new(IO.read(database_configuration_file)).result)
927
- end
928
-
929
- # The path to the current environment's file (<tt>development.rb</tt>, etc.). By
930
- # default the file is at <tt>config/environments/#{environment}.rb</tt>.
931
- def environment_path
932
- "#{root_path}/config/environments/#{environment}.rb"
933
- end
934
-
935
- # Return the currently selected environment. By default, it returns the
936
- # value of the RAILS_ENV constant.
937
- def environment
938
- ::RAILS_ENV
939
- end
940
-
941
- # Adds a block which will be executed after rails has been fully initialized.
942
- # Useful for per-environment configuration which depends on the framework being
943
- # fully initialized.
944
- def after_initialize(&after_initialize_block)
945
- after_initialize_blocks << after_initialize_block if after_initialize_block
946
- end
947
-
948
- # Returns the blocks added with Configuration#after_initialize
949
- def after_initialize_blocks
950
- @after_initialize_blocks ||= []
951
- end
952
-
953
- # Add a preparation callback that will run before every request in development
954
- # mode, or before the first request in production.
955
- #
956
- # See Dispatcher#to_prepare.
957
- def to_prepare(&callback)
958
- after_initialize do
959
- require 'dispatcher' unless defined?(::Dispatcher)
960
- Dispatcher.to_prepare(&callback)
961
- end
962
- end
963
-
964
- def middleware
965
- require 'action_controller'
966
- ActionController::Dispatcher.middleware
967
- end
968
-
969
- def builtin_directories
970
- # Include builtins only in the development environment.
971
- (environment == 'development') ? Dir["#{RAILTIES_PATH}/builtin/*/"] : []
972
- end
973
-
974
- def framework_paths
975
- paths = %w(railties railties/lib activesupport/lib)
976
- paths << 'actionpack/lib' if frameworks.include?(:action_controller) || frameworks.include?(:action_view)
977
-
978
- [:active_record, :action_mailer, :active_resource, :action_web_service].each do |framework|
979
- paths << "#{framework.to_s.gsub('_', '')}/lib" if frameworks.include?(framework)
980
- end
981
-
982
- paths.map { |dir| "#{framework_root_path}/#{dir}" }.select { |dir| File.directory?(dir) }
983
- end
984
-
985
- private
986
- def framework_root_path
987
- defined?(::RAILS_FRAMEWORK_ROOT) ? ::RAILS_FRAMEWORK_ROOT : "#{root_path}/vendor/rails"
988
- end
989
-
990
- def default_frameworks
991
- [ :active_record, :action_controller, :action_view, :action_mailer, :active_resource ]
992
- end
993
-
994
- def default_autoload_paths
995
- paths = []
996
-
997
- # Add the old mock paths only if the directories exists
998
- paths.concat(Dir["#{root_path}/test/mocks/#{environment}"]) if File.exists?("#{root_path}/test/mocks/#{environment}")
999
-
1000
- # Add the app's controller directory
1001
- paths.concat(Dir["#{root_path}/app/controllers/"])
1002
-
1003
- # Followed by the standard includes.
1004
- paths.concat %w(
1005
- app
1006
- app/metal
1007
- app/models
1008
- app/controllers
1009
- app/helpers
1010
- app/services
1011
- lib
1012
- vendor
1013
- ).map { |dir| "#{root_path}/#{dir}" }.select { |dir| File.directory?(dir) }
1014
-
1015
- paths.concat builtin_directories
1016
- end
1017
-
1018
- # Doesn't matter since plugins aren't in autoload_paths yet.
1019
- def default_autoload_once_paths
1020
- []
1021
- end
1022
-
1023
- def default_eager_load_paths
1024
- %w(
1025
- app/metal
1026
- app/models
1027
- app/controllers
1028
- app/helpers
1029
- ).map { |dir| "#{root_path}/#{dir}" }.select { |dir| File.directory?(dir) }
1030
- end
1031
-
1032
- def default_log_path
1033
- File.join(root_path, 'log', "#{environment}.log")
1034
- end
1035
-
1036
- def default_log_level
1037
- environment == 'production' ? :info : :debug
1038
- end
1039
-
1040
- def default_database_configuration_file
1041
- File.join(root_path, 'config', 'database.yml')
1042
- end
1043
-
1044
- def default_routes_configuration_file
1045
- File.join(root_path, 'config', 'routes.rb')
1046
- end
1047
-
1048
- def default_view_path
1049
- File.join(root_path, 'app', 'views')
1050
- end
1051
-
1052
- def default_controller_paths
1053
- paths = [File.join(root_path, 'app', 'controllers')]
1054
- paths.concat builtin_directories
1055
- paths
1056
- end
1057
-
1058
- def default_dependency_loading
1059
- true
1060
- end
1061
-
1062
- def default_preload_frameworks
1063
- false
1064
- end
1065
-
1066
- def default_cache_classes
1067
- true
1068
- end
1069
-
1070
- def default_whiny_nils
1071
- false
1072
- end
1073
-
1074
- def default_plugins
1075
- nil
1076
- end
1077
-
1078
- def default_plugin_paths
1079
- ["#{root_path}/vendor/plugins"]
1080
- end
1081
-
1082
- def default_plugin_locators
1083
- locators = []
1084
- locators << Plugin::GemLocator if defined? Gem
1085
- locators << Plugin::FileSystemLocator
1086
- end
1087
-
1088
- def default_plugin_loader
1089
- Plugin::Loader
1090
- end
1091
-
1092
- def default_cache_store
1093
- if File.exist?("#{root_path}/tmp/cache/")
1094
- [ :file_store, "#{root_path}/tmp/cache/" ]
1095
- else
1096
- :memory_store
1097
- end
1098
- end
1099
-
1100
- def default_gems
1101
- []
1102
- end
1103
-
1104
- def default_i18n
1105
- i18n = Rails::OrderedOptions.new
1106
- i18n.load_path = []
1107
-
1108
- if File.exist?(File.join(RAILS_ROOT, 'config', 'locales'))
1109
- i18n.load_path << Dir[File.join(RAILS_ROOT, 'config', 'locales', '*.{rb,yml}')]
1110
- i18n.load_path.flatten!
1111
- end
1112
-
1113
- i18n
1114
- end
1115
- end
1116
- end
1117
-
1118
- # Needs to be duplicated from Active Support since its needed before Active
1119
- # Support is available. Here both Options and Hash are namespaced to prevent
1120
- # conflicts with other implementations AND with the classes residing in Active Support.
1121
- class Rails::OrderedOptions < Array #:nodoc:
1122
- def []=(key, value)
1123
- key = key.to_sym
1124
-
1125
- if pair = find_pair(key)
1126
- pair.pop
1127
- pair << value
1128
- else
1129
- self << [key, value]
1130
- end
1131
- end
1132
-
1133
- def [](key)
1134
- pair = find_pair(key.to_sym)
1135
- pair ? pair.last : nil
1136
- end
1137
-
1138
- def method_missing(name, *args)
1139
- if name.to_s =~ /(.*)=$/
1140
- self[$1.to_sym] = args.first
1141
- else
1142
- self[name]
1143
- end
1144
- end
1145
-
1146
- private
1147
- def find_pair(key)
1148
- self.each { |i| return i if i.first == key }
1149
- return false
1150
- end
1151
- end
1152
-