railties 3.0.0.beta → 3.0.0.beta2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (232) hide show
  1. data/CHANGELOG +15 -1
  2. data/README +9 -9
  3. data/bin/rails +28 -9
  4. data/guides/images/challenge.png +0 -0
  5. data/guides/images/edge_badge.png +0 -0
  6. data/guides/images/posts_index.png +0 -0
  7. data/guides/images/rails_welcome.png +0 -0
  8. data/guides/rails_guides.rb +9 -22
  9. data/guides/rails_guides/generator.rb +79 -50
  10. data/guides/rails_guides/textile_extensions.rb +3 -3
  11. data/guides/source/2_2_release_notes.textile +1 -1
  12. data/guides/source/2_3_release_notes.textile +1 -1
  13. data/guides/source/3_0_release_notes.textile +46 -38
  14. data/guides/source/action_controller_overview.textile +2 -2
  15. data/guides/source/action_mailer_basics.textile +4 -4
  16. data/guides/source/action_view_overview.textile +2 -2
  17. data/guides/source/active_record_querying.textile +73 -95
  18. data/guides/source/active_support_core_extensions.textile +993 -85
  19. data/guides/source/activerecord_validations_callbacks.textile +3 -3
  20. data/guides/source/caching_with_rails.textile +1 -1
  21. data/guides/source/command_line.textile +90 -88
  22. data/guides/source/configuring.textile +10 -10
  23. data/guides/source/contribute.textile +2 -2
  24. data/guides/source/contributing_to_rails.textile +14 -7
  25. data/guides/source/credits.textile.erb +8 -0
  26. data/guides/source/debugging_rails_applications.textile +6 -6
  27. data/guides/source/form_helpers.textile +1 -1
  28. data/guides/source/generators.textile +14 -14
  29. data/guides/source/getting_started.textile +634 -500
  30. data/guides/source/index.textile.erb +16 -1
  31. data/guides/source/layout.html.erb +7 -1
  32. data/guides/source/layouts_and_rendering.textile +299 -71
  33. data/guides/source/migrations.textile +5 -5
  34. data/guides/source/performance_testing.textile +8 -8
  35. data/guides/source/plugins.textile +26 -24
  36. data/guides/source/rails_on_rack.textile +5 -5
  37. data/guides/source/routing.textile +119 -117
  38. data/guides/source/security.textile +1 -1
  39. data/guides/source/testing.textile +4 -4
  40. data/lib/rails.rb +4 -1
  41. data/lib/rails/application.rb +44 -7
  42. data/lib/rails/application/bootstrap.rb +2 -14
  43. data/lib/rails/application/configuration.rb +69 -5
  44. data/lib/rails/application/finisher.rb +2 -3
  45. data/lib/rails/application/metal_loader.rb +1 -1
  46. data/lib/rails/application/routes_reloader.rb +1 -1
  47. data/lib/rails/backtrace_cleaner.rb +0 -11
  48. data/lib/rails/commands.rb +7 -6
  49. data/lib/rails/commands/application.rb +1 -1
  50. data/lib/rails/commands/console.rb +1 -1
  51. data/lib/rails/commands/dbconsole.rb +12 -0
  52. data/lib/rails/commands/destroy.rb +2 -2
  53. data/lib/rails/commands/generate.rb +2 -2
  54. data/lib/rails/commands/performance/benchmarker.rb +2 -2
  55. data/lib/rails/commands/performance/profiler.rb +2 -2
  56. data/lib/rails/commands/plugin.rb +6 -6
  57. data/lib/rails/commands/runner.rb +2 -0
  58. data/lib/rails/commands/server.rb +23 -8
  59. data/lib/rails/configuration.rb +2 -84
  60. data/lib/rails/console/app.rb +4 -3
  61. data/lib/rails/console/helpers.rb +3 -1
  62. data/lib/rails/engine.rb +107 -12
  63. data/lib/rails/engine/configuration.rb +8 -2
  64. data/lib/rails/generators.rb +22 -7
  65. data/lib/rails/generators/actions.rb +16 -6
  66. data/lib/rails/generators/base.rb +15 -8
  67. data/lib/rails/generators/erb.rb +21 -0
  68. data/lib/{generators → rails/generators}/erb/controller/controller_generator.rb +4 -5
  69. data/lib/{generators → rails/generators}/erb/controller/templates/view.html.erb +0 -0
  70. data/lib/rails/generators/erb/mailer/mailer_generator.rb +13 -0
  71. data/lib/{generators → rails/generators}/erb/mailer/templates/view.text.erb +0 -0
  72. data/lib/{generators → rails/generators}/erb/scaffold/scaffold_generator.rb +14 -26
  73. data/lib/{generators → rails/generators}/erb/scaffold/templates/_form.html.erb +1 -1
  74. data/lib/{generators → rails/generators}/erb/scaffold/templates/edit.html.erb +0 -0
  75. data/lib/{generators → rails/generators}/erb/scaffold/templates/index.html.erb +1 -1
  76. data/lib/{generators → rails/generators}/erb/scaffold/templates/layout.html.erb +1 -0
  77. data/lib/{generators → rails/generators}/erb/scaffold/templates/new.html.erb +0 -0
  78. data/lib/{generators → rails/generators}/erb/scaffold/templates/show.html.erb +0 -0
  79. data/lib/rails/generators/named_base.rb +4 -0
  80. data/lib/{generators → rails/generators}/rails/app/USAGE +0 -0
  81. data/lib/{generators → rails/generators}/rails/app/app_generator.rb +21 -7
  82. data/lib/rails/generators/rails/app/templates/Gemfile +34 -0
  83. data/lib/{generators → rails/generators}/rails/app/templates/README +9 -8
  84. data/lib/{generators → rails/generators}/rails/app/templates/Rakefile +0 -0
  85. data/lib/{generators → rails/generators}/rails/app/templates/app/controllers/application_controller.rb +0 -0
  86. data/lib/{generators → rails/generators}/rails/app/templates/app/helpers/application_helper.rb +0 -0
  87. data/lib/{generators → rails/generators}/rails/app/templates/app/models/.empty_directory +0 -0
  88. data/lib/{generators → rails/generators}/rails/app/templates/app/views/layouts/.empty_directory +0 -0
  89. data/lib/{generators → rails/generators}/rails/app/templates/config.ru +0 -0
  90. data/lib/{generators → rails/generators}/rails/app/templates/config/application.rb +4 -3
  91. data/lib/rails/generators/rails/app/templates/config/boot.rb +14 -0
  92. data/lib/{generators → rails/generators}/rails/app/templates/config/databases/frontbase.yml +0 -0
  93. data/lib/{generators → rails/generators}/rails/app/templates/config/databases/ibm_db.yml +0 -0
  94. data/lib/{generators → rails/generators}/rails/app/templates/config/databases/mysql.yml +0 -0
  95. data/lib/{generators → rails/generators}/rails/app/templates/config/databases/oracle.yml +0 -0
  96. data/lib/{generators → rails/generators}/rails/app/templates/config/databases/postgresql.yml +0 -0
  97. data/lib/{generators → rails/generators}/rails/app/templates/config/databases/sqlite3.yml +0 -0
  98. data/lib/{generators → rails/generators}/rails/app/templates/config/environment.rb +0 -0
  99. data/lib/{generators → rails/generators}/rails/app/templates/config/environments/development.rb.tt +0 -0
  100. data/lib/{generators → rails/generators}/rails/app/templates/config/environments/production.rb.tt +9 -0
  101. data/lib/{generators → rails/generators}/rails/app/templates/config/environments/test.rb.tt +0 -0
  102. data/lib/{generators → rails/generators}/rails/app/templates/config/initializers/backtrace_silencers.rb +0 -0
  103. data/lib/{generators → rails/generators}/rails/app/templates/config/initializers/cookie_verification_secret.rb.tt +1 -1
  104. data/lib/{generators → rails/generators}/rails/app/templates/config/initializers/inflections.rb +0 -0
  105. data/lib/{generators → rails/generators}/rails/app/templates/config/initializers/mime_types.rb +0 -0
  106. data/lib/rails/generators/rails/app/templates/config/initializers/session_store.rb.tt +10 -0
  107. data/lib/{generators → rails/generators}/rails/app/templates/config/locales/en.yml +0 -0
  108. data/lib/{generators → rails/generators}/rails/app/templates/config/routes.rb +0 -0
  109. data/lib/{generators → rails/generators}/rails/app/templates/db/seeds.rb +0 -0
  110. data/lib/{generators → rails/generators}/rails/app/templates/doc/README_FOR_APP +0 -0
  111. data/lib/{generators → rails/generators}/rails/app/templates/gitignore +0 -0
  112. data/lib/{generators → rails/generators}/rails/app/templates/public/404.html +0 -0
  113. data/lib/{generators → rails/generators}/rails/app/templates/public/422.html +0 -0
  114. data/lib/{generators → rails/generators}/rails/app/templates/public/500.html +0 -0
  115. data/lib/{generators → rails/generators}/rails/app/templates/public/favicon.ico +0 -0
  116. data/lib/{generators → rails/generators}/rails/app/templates/public/images/rails.png +0 -0
  117. data/lib/{generators → rails/generators}/rails/app/templates/public/index.html +17 -17
  118. data/lib/{generators → rails/generators}/rails/app/templates/public/javascripts/application.js +0 -0
  119. data/lib/{generators → rails/generators}/rails/app/templates/public/javascripts/controls.js +5 -3
  120. data/lib/{generators → rails/generators}/rails/app/templates/public/javascripts/dragdrop.js +7 -6
  121. data/lib/{generators → rails/generators}/rails/app/templates/public/javascripts/effects.js +8 -13
  122. data/lib/{generators → rails/generators}/rails/app/templates/public/javascripts/prototype.js +1573 -1019
  123. data/lib/{generators → rails/generators}/rails/app/templates/public/javascripts/rails.js +1 -2
  124. data/lib/{generators → rails/generators}/rails/app/templates/public/robots.txt +0 -0
  125. data/lib/{generators → rails/generators}/rails/app/templates/public/stylesheets/.empty_directory +0 -0
  126. data/lib/{generators → rails/generators}/rails/app/templates/script/rails +0 -1
  127. data/lib/{generators → rails/generators}/rails/app/templates/test/fixtures/.empty_directory +0 -0
  128. data/lib/{generators → rails/generators}/rails/app/templates/test/functional/.empty_directory +0 -0
  129. data/lib/{generators → rails/generators}/rails/app/templates/test/integration/.empty_directory +0 -0
  130. data/lib/{generators → rails/generators}/rails/app/templates/test/performance/browsing_test.rb +1 -1
  131. data/lib/{generators → rails/generators}/rails/app/templates/test/test_helper.rb +1 -1
  132. data/lib/{generators → rails/generators}/rails/app/templates/test/unit/.empty_directory +0 -0
  133. data/lib/{generators → rails/generators}/rails/controller/USAGE +1 -1
  134. data/lib/{generators → rails/generators}/rails/controller/controller_generator.rb +6 -0
  135. data/lib/{generators → rails/generators}/rails/controller/templates/controller.rb +0 -0
  136. data/lib/{generators → rails/generators}/rails/generator/USAGE +1 -1
  137. data/lib/{generators → rails/generators}/rails/generator/generator_generator.rb +0 -0
  138. data/lib/{generators → rails/generators}/rails/generator/templates/%file_name%_generator.rb.tt +0 -0
  139. data/lib/{generators → rails/generators}/rails/generator/templates/USAGE.tt +1 -1
  140. data/lib/{generators → rails/generators}/rails/generator/templates/templates/.empty_directory +0 -0
  141. data/lib/{generators → rails/generators}/rails/helper/USAGE +1 -1
  142. data/lib/{generators → rails/generators}/rails/helper/helper_generator.rb +0 -0
  143. data/lib/{generators → rails/generators}/rails/helper/templates/helper.rb +0 -0
  144. data/lib/{generators → rails/generators}/rails/integration_test/USAGE +1 -1
  145. data/lib/{generators → rails/generators}/rails/integration_test/integration_test_generator.rb +0 -0
  146. data/lib/{generators → rails/generators}/rails/mailer/USAGE +1 -1
  147. data/lib/{generators → rails/generators}/rails/mailer/mailer_generator.rb +0 -0
  148. data/lib/{generators → rails/generators}/rails/mailer/templates/mailer.rb +0 -0
  149. data/lib/{generators → rails/generators}/rails/metal/USAGE +1 -1
  150. data/lib/{generators → rails/generators}/rails/metal/metal_generator.rb +0 -0
  151. data/lib/{generators → rails/generators}/rails/metal/templates/metal.rb +0 -0
  152. data/lib/{generators → rails/generators}/rails/migration/USAGE +2 -2
  153. data/lib/{generators → rails/generators}/rails/migration/migration_generator.rb +0 -0
  154. data/lib/{generators → rails/generators}/rails/model/USAGE +2 -2
  155. data/lib/{generators → rails/generators}/rails/model/model_generator.rb +0 -0
  156. data/lib/{generators → rails/generators}/rails/observer/USAGE +1 -1
  157. data/lib/{generators → rails/generators}/rails/observer/observer_generator.rb +0 -0
  158. data/lib/{generators → rails/generators}/rails/performance_test/USAGE +1 -1
  159. data/lib/{generators → rails/generators}/rails/performance_test/performance_test_generator.rb +0 -0
  160. data/lib/{generators → rails/generators}/rails/plugin/USAGE +1 -1
  161. data/lib/{generators → rails/generators}/rails/plugin/plugin_generator.rb +1 -1
  162. data/lib/{generators → rails/generators}/rails/plugin/templates/MIT-LICENSE.tt +0 -0
  163. data/lib/{generators → rails/generators}/rails/plugin/templates/README.tt +0 -0
  164. data/lib/rails/generators/rails/plugin/templates/Rakefile.tt +23 -0
  165. data/lib/{generators → rails/generators}/rails/plugin/templates/init.rb +0 -0
  166. data/lib/{generators → rails/generators}/rails/plugin/templates/install.rb +0 -0
  167. data/lib/{generators → rails/generators}/rails/plugin/templates/lib/%file_name%.rb.tt +0 -0
  168. data/lib/{generators → rails/generators}/rails/plugin/templates/lib/tasks/%file_name%_tasks.rake.tt +0 -0
  169. data/lib/{generators → rails/generators}/rails/plugin/templates/uninstall.rb +0 -0
  170. data/lib/{generators → rails/generators}/rails/resource/USAGE +3 -3
  171. data/lib/{generators → rails/generators}/rails/resource/resource_generator.rb +3 -1
  172. data/lib/{generators → rails/generators}/rails/scaffold/USAGE +4 -4
  173. data/lib/{generators → rails/generators}/rails/scaffold/scaffold_generator.rb +1 -1
  174. data/lib/{generators → rails/generators}/rails/scaffold_controller/USAGE +1 -1
  175. data/lib/{generators → rails/generators}/rails/scaffold_controller/scaffold_controller_generator.rb +0 -0
  176. data/lib/{generators → rails/generators}/rails/scaffold_controller/templates/controller.rb +2 -2
  177. data/lib/{generators → rails/generators}/rails/session_migration/USAGE +1 -1
  178. data/lib/{generators → rails/generators}/rails/session_migration/session_migration_generator.rb +0 -0
  179. data/lib/{generators → rails/generators}/rails/stylesheets/USAGE +1 -1
  180. data/lib/{generators → rails/generators}/rails/stylesheets/stylesheets_generator.rb +0 -0
  181. data/lib/{generators → rails/generators}/rails/stylesheets/templates/scaffold.css +4 -0
  182. data/lib/{generators → rails/generators}/test_unit.rb +0 -0
  183. data/lib/{generators → rails/generators}/test_unit/controller/controller_generator.rb +2 -1
  184. data/lib/rails/generators/test_unit/controller/templates/functional_test.rb +18 -0
  185. data/lib/{generators → rails/generators}/test_unit/helper/helper_generator.rb +1 -1
  186. data/lib/{generators → rails/generators}/test_unit/helper/templates/helper_test.rb +0 -0
  187. data/lib/{generators → rails/generators}/test_unit/integration/integration_generator.rb +1 -1
  188. data/lib/{generators → rails/generators}/test_unit/integration/templates/integration_test.rb +0 -0
  189. data/lib/{generators → rails/generators}/test_unit/mailer/mailer_generator.rb +1 -8
  190. data/lib/rails/generators/test_unit/mailer/templates/functional_test.rb +20 -0
  191. data/lib/{generators → rails/generators}/test_unit/model/model_generator.rb +1 -1
  192. data/lib/{generators → rails/generators}/test_unit/model/templates/fixtures.yml +0 -0
  193. data/lib/{generators → rails/generators}/test_unit/model/templates/unit_test.rb +0 -0
  194. data/lib/{generators → rails/generators}/test_unit/observer/observer_generator.rb +1 -1
  195. data/lib/{generators → rails/generators}/test_unit/observer/templates/unit_test.rb +0 -0
  196. data/lib/{generators → rails/generators}/test_unit/performance/performance_generator.rb +1 -1
  197. data/lib/{generators → rails/generators}/test_unit/performance/templates/performance_test.rb +0 -0
  198. data/lib/{generators → rails/generators}/test_unit/plugin/plugin_generator.rb +1 -1
  199. data/lib/{generators → rails/generators}/test_unit/plugin/templates/%file_name%_test.rb.tt +0 -0
  200. data/lib/{generators → rails/generators}/test_unit/plugin/templates/test_helper.rb +0 -0
  201. data/lib/{generators → rails/generators}/test_unit/scaffold/scaffold_generator.rb +1 -1
  202. data/lib/{generators → rails/generators}/test_unit/scaffold/templates/functional_test.rb +9 -5
  203. data/{builtin/rails_info → lib}/rails/info.rb +0 -0
  204. data/{builtin/rails_info → lib}/rails/info_controller.rb +0 -0
  205. data/{builtin/routes.rb → lib/rails/info_routes.rb} +2 -2
  206. data/lib/rails/{subscriber.rb → log_subscriber.rb} +27 -27
  207. data/lib/rails/{subscriber → log_subscriber}/test_helper.rb +15 -16
  208. data/lib/rails/plugin.rb +31 -8
  209. data/lib/rails/rack/debugger.rb +3 -1
  210. data/lib/rails/rack/logger.rb +4 -4
  211. data/lib/rails/railtie.rb +179 -16
  212. data/lib/rails/railtie/configuration.rb +56 -1
  213. data/lib/rails/tasks/documentation.rake +38 -20
  214. data/lib/rails/tasks/framework.rake +16 -9
  215. data/lib/rails/tasks/misc.rake +3 -5
  216. data/lib/rails/tasks/routes.rake +2 -2
  217. data/lib/rails/test_help.rb +21 -1
  218. data/lib/rails/test_unit/railtie.rb +1 -3
  219. data/lib/rails/version.rb +3 -2
  220. metadata +199 -171
  221. data/builtin/rails_info/rails/info_helper.rb +0 -2
  222. data/lib/generators/erb.rb +0 -8
  223. data/lib/generators/erb/mailer/mailer_generator.rb +0 -20
  224. data/lib/generators/rails/app/templates/Gemfile +0 -34
  225. data/lib/generators/rails/app/templates/config/boot.rb +0 -17
  226. data/lib/generators/rails/app/templates/config/initializers/session_store.rb.tt +0 -15
  227. data/lib/generators/rails/model_subclass/model_subclass_generator.rb +0 -12
  228. data/lib/generators/rails/plugin/templates/Rakefile.tt +0 -10
  229. data/lib/generators/test_unit/controller/templates/functional_test.rb +0 -8
  230. data/lib/generators/test_unit/mailer/templates/fixture +0 -3
  231. data/lib/generators/test_unit/mailer/templates/functional_test.rb +0 -22
  232. data/lib/rails/railties_path.rb +0 -1
@@ -2,7 +2,7 @@
2
2
  #
3
3
  # Installing plugins:
4
4
  #
5
- # $ ./script/plugin install continuous_builder asset_timestamping
5
+ # $ rails plugin install continuous_builder asset_timestamping
6
6
  #
7
7
  # Specifying revisions:
8
8
  #
@@ -319,13 +319,13 @@ module Commands
319
319
  o.separator ""
320
320
  o.separator "EXAMPLES"
321
321
  o.separator " Install a plugin:"
322
- o.separator " #{@script_name} install continuous_builder\n"
322
+ o.separator " #{@script_name} plugin install continuous_builder\n"
323
323
  o.separator " Install a plugin from a subversion URL:"
324
- o.separator " #{@script_name} install http://dev.rubyonrails.com/svn/rails/plugins/continuous_builder\n"
324
+ o.separator " #{@script_name} plugin install http://dev.rubyonrails.com/svn/rails/plugins/continuous_builder\n"
325
325
  o.separator " Install a plugin from a git URL:"
326
- o.separator " #{@script_name} install git://github.com/SomeGuy/my_awesome_plugin.git\n"
326
+ o.separator " #{@script_name} plugin install git://github.com/SomeGuy/my_awesome_plugin.git\n"
327
327
  o.separator " Install a plugin and add a svn:externals entry to vendor/plugins"
328
- o.separator " #{@script_name} install -x continuous_builder\n"
328
+ o.separator " #{@script_name} plugin install -x continuous_builder\n"
329
329
  end
330
330
  end
331
331
 
@@ -381,7 +381,7 @@ module Commands
381
381
  "Exports the plugin, allowing you to check it into your local repository. Does not enable updates, or add an svn:externals entry.") { |v| @method = :export }
382
382
  o.on( "-q", "--quiet",
383
383
  "Suppresses the output from installation.",
384
- "Ignored if -v is passed (./script/plugin -v install ...)") { |v| @options[:quiet] = true }
384
+ "Ignored if -v is passed (rails plugin -v install ...)") { |v| @options[:quiet] = true }
385
385
  o.on( "-r REVISION", "--revision REVISION",
386
386
  "Checks out the given revision from subversion or git.",
387
387
  "Ignored if subversion/git is not used.") { |v| @options[:revision] = v }
@@ -35,6 +35,8 @@ ARGV.delete(code_or_file)
35
35
 
36
36
  ENV["RAILS_ENV"] = options[:environment]
37
37
 
38
+ require ENV_PATH
39
+
38
40
  begin
39
41
  if code_or_file.nil?
40
42
  $stderr.puts "Run '#{$0} -h' for help."
@@ -6,20 +6,21 @@ module Rails
6
6
  class Server < ::Rack::Server
7
7
  class Options
8
8
  def parse!(args)
9
- options = {}
10
- args = args.dup
9
+ args, options = args.dup, {}
10
+
11
11
  opt_parser = OptionParser.new do |opts|
12
+ opts.banner = "Usage: rails server [options]"
12
13
  opts.on("-p", "--port=port", Integer,
13
- "Runs Rails on the specified port.", "Default: #{options[:Port]}") { |v| options[:Port] = v }
14
+ "Runs Rails on the specified port.", "Default: 3000") { |v| options[:Port] = v }
14
15
  opts.on("-b", "--binding=ip", String,
15
- "Binds Rails to the specified ip.", "Default: #{options[:Host]}") { |v| options[:Host] = v }
16
+ "Binds Rails to the specified ip.", "Default: 0.0.0.0") { |v| options[:Host] = v }
16
17
  opts.on("-c", "--config=file", String,
17
18
  "Use custom rackup configuration file") { |v| options[:config] = v }
18
19
  opts.on("-d", "--daemon", "Make server run as a Daemon.") { options[:daemonize] = true }
19
20
  opts.on("-u", "--debugger", "Enable ruby-debugging for the server.") { options[:debugger] = true }
20
21
  opts.on("-e", "--environment=name", String,
21
22
  "Specifies the environment to run this server under (test/development/production).",
22
- "Default: #{options[:environment]}") { |v| options[:environment] = v }
23
+ "Default: development") { |v| options[:environment] = v }
23
24
 
24
25
  opts.separator ""
25
26
 
@@ -33,22 +34,36 @@ module Rails
33
34
  end
34
35
  end
35
36
 
37
+ def initialize(*)
38
+ super
39
+ set_environment
40
+ end
41
+
36
42
  def opt_parser
37
43
  Options.new
38
44
  end
39
45
 
40
- def start
41
- ENV["RAILS_ENV"] = options[:environment]
46
+ def set_environment
47
+ ENV["RAILS_ENV"] ||= options[:environment]
48
+ end
42
49
 
50
+ def start
43
51
  puts "=> Booting #{ActiveSupport::Inflector.demodulize(server)}"
44
52
  puts "=> Rails #{Rails.version} application starting in #{Rails.env} on http://#{options[:Host]}:#{options[:Port]}"
45
53
  puts "=> Call with -d to detach" unless options[:daemonize]
46
54
  trap(:INT) { exit }
47
55
  puts "=> Ctrl-C to shutdown server" unless options[:daemonize]
48
56
 
57
+ #Create required tmp directories if not found
58
+ %w(cache pids sessions sockets).each do |dir_to_make|
59
+ FileUtils.mkdir_p(Rails.root.join('tmp', dir_to_make))
60
+ end
61
+
49
62
  super
50
63
  ensure
51
- puts 'Exiting' unless options[:daemonize]
64
+ # The '-h' option calls exit before @options is set.
65
+ # If we call 'options' with it unset, we get double help banners.
66
+ puts 'Exiting' unless @options && options[:daemonize]
52
67
  end
53
68
 
54
69
  def middleware
@@ -4,96 +4,14 @@ require 'rails/rack'
4
4
 
5
5
  module Rails
6
6
  module Configuration
7
- module Shared
8
- def middleware
9
- @@default_middleware_stack ||= ActionDispatch::MiddlewareStack.new.tap do |middleware|
10
- middleware.use('::ActionDispatch::Static', lambda { Rails.public_path }, :if => lambda { Rails.application.config.serve_static_assets })
11
- middleware.use('::Rack::Lock', :if => lambda { !Rails.application.config.allow_concurrency })
12
- middleware.use('::Rack::Runtime')
13
- middleware.use('::Rails::Rack::Logger')
14
- middleware.use('::ActionDispatch::ShowExceptions', lambda { Rails.application.config.consider_all_requests_local })
15
- middleware.use('::ActionDispatch::Callbacks', lambda { !Rails.application.config.cache_classes })
16
- middleware.use('::ActionDispatch::Cookies')
17
- middleware.use(lambda { ActionController::Base.session_store }, lambda { ActionController::Base.session_options })
18
- middleware.use('::ActionDispatch::Flash', :if => lambda { ActionController::Base.session_store })
19
- middleware.use(lambda { Rails.application.metal_loader.build_middleware(Rails.application.config.metals) }, :if => lambda { Rails.application.metal_loader.metals.any? })
20
- middleware.use('ActionDispatch::ParamsParser')
21
- middleware.use('::Rack::MethodOverride')
22
- middleware.use('::ActionDispatch::Head')
23
- end
24
- end
25
-
26
- # Holds generators configuration:
27
- #
28
- # config.generators do |g|
29
- # g.orm :datamapper, :migration => true
30
- # g.template_engine :haml
31
- # g.test_framework :rspec
32
- # end
33
- #
34
- # If you want to disable color in console, do:
35
- #
36
- # config.generators.colorize_logging = false
37
- #
38
- def generators
39
- @@generators ||= Rails::Configuration::Generators.new
40
- if block_given?
41
- yield @@generators
42
- else
43
- @@generators
44
- end
45
- end
46
-
47
- def after_initialize_blocks
48
- @@after_initialize_blocks ||= []
49
- end
50
-
51
- def after_initialize(&blk)
52
- after_initialize_blocks << blk if blk
53
- end
54
-
55
- def to_prepare_blocks
56
- @@to_prepare_blocks ||= []
57
- end
58
-
59
- def to_prepare(&blk)
60
- to_prepare_blocks << blk if blk
61
- end
62
-
63
- def respond_to?(name)
64
- super || name.to_s =~ config_key_regexp
65
- end
66
-
67
- private
68
-
69
- def method_missing(name, *args, &blk)
70
- if name.to_s =~ config_key_regexp
71
- return $2 == '=' ? options[$1] = args.first : options[$1]
72
- end
73
- super
74
- end
75
-
76
- def config_key_regexp
77
- bits = config_keys.map { |n| Regexp.escape(n.to_s) }.join('|')
78
- /^(#{bits})(?:=)?$/
79
- end
80
-
81
- def config_keys
82
- (Railtie.railtie_names + Engine.engine_names).map { |n| n.to_s }.uniq
83
- end
84
-
85
- def options
86
- @@options ||= Hash.new { |h,k| h[k] = ActiveSupport::OrderedOptions.new }
87
- end
88
- end
89
-
90
7
  class Generators #:nodoc:
91
- attr_accessor :aliases, :options, :fallbacks, :colorize_logging
8
+ attr_accessor :aliases, :options, :templates, :fallbacks, :colorize_logging
92
9
 
93
10
  def initialize
94
11
  @aliases = Hash.new { |h,k| h[k] = {} }
95
12
  @options = Hash.new { |h,k| h[k] = {} }
96
13
  @fallbacks = {}
14
+ @templates = []
97
15
  @colorize_logging = true
98
16
  end
99
17
 
@@ -17,8 +17,8 @@ end
17
17
  # create a new session. If a block is given, the new session will be yielded
18
18
  # to the block before being returned.
19
19
  def new_session
20
- app = ActionController::Dispatcher.new
21
- session = ActionController::Integration::Session.new(app)
20
+ app = Rails.application
21
+ session = ActionDispatch::Integration::Session.new(app)
22
22
  yield session if block_given?
23
23
  session
24
24
  end
@@ -26,7 +26,8 @@ end
26
26
  # reloads the environment
27
27
  def reload!(print=true)
28
28
  puts "Reloading..." if print
29
- ActionDispatch::Callbacks.new(lambda {}, false)
29
+ # This triggers the to_prepare callbacks
30
+ ActionDispatch::Callbacks.new(Proc.new {}, false).call({})
30
31
  true
31
32
  end
32
33
 
@@ -2,4 +2,6 @@ def helper
2
2
  @helper ||= ApplicationController.helpers
3
3
  end
4
4
 
5
- @controller = ApplicationController.new
5
+ def controller
6
+ @controller ||= ApplicationController.new
7
+ end
@@ -1,7 +1,91 @@
1
- require 'active_support/core_ext/module/delegation'
2
1
  require 'rails/railtie'
2
+ require 'active_support/core_ext/module/delegation'
3
+ require 'pathname'
3
4
 
4
5
  module Rails
6
+ # Rails::Engine allows you to wrap a specific Rails application and share it accross
7
+ # different applications. Since Rails 3.0, every Rails::Application is nothing
8
+ # more than an Engine, allowing you to share it very easily.
9
+ #
10
+ # Any Rails::Engine is also a Rails::Railtie, so the same methods (like rake_tasks and
11
+ # generators) and configuration available in the latter can also be used in the former.
12
+ #
13
+ # == Creating an Engine
14
+ #
15
+ # In Rails versions before to 3.0, your gems automatically behaved as Engine, however
16
+ # this coupled Rails to Rubygems. Since Rails 3.0, if you want a gem to automatically
17
+ # behave as Engine, you have to specify an Engine for it somewhere inside your plugin
18
+ # lib folder (similar with how we spceify a Railtie):
19
+ #
20
+ # # lib/my_engine.rb
21
+ # module MyEngine
22
+ # class Engine < Rails::Engine
23
+ # engine_name :my_engine
24
+ # end
25
+ # end
26
+ #
27
+ # Then ensure that this file is loaded at the top of your config/application.rb (or in
28
+ # your Gemfile) and it will automatically load models, controllers, helpers and metals
29
+ # inside app, load routes at "config/routes.rb", load locales at "config/locales/*",
30
+ # load tasks at "lib/tasks/*".
31
+ #
32
+ # == Configuration
33
+ #
34
+ # Besides the Railtie configuration which is shared across the application, in a
35
+ # Rails::Engine you can access load_paths, eager_load_paths and load_once_paths,
36
+ # which differently from a Railtie, are scoped to the current Engine.
37
+ #
38
+ # Example:
39
+ #
40
+ # class MyEngine < Rails::Engine
41
+ # # config.middleware is shared configururation
42
+ # config.middleware.use MyEngine::Middleware
43
+ #
44
+ # # Add a load path for this specific Engine
45
+ # config.load_paths << File.expand_path("../lib/some/path", __FILE__)
46
+ # end
47
+ #
48
+ # == Paths
49
+ #
50
+ # Since Rails 3.0, both your Application and Engines do not have hardcoded paths.
51
+ # This means that you are not required to place your controllers at "app/controllers",
52
+ # but in any place which you find convenient.
53
+ #
54
+ # For example, let's suppose you want to lay your controllers at lib/controllers, all
55
+ # you need to do is:
56
+ #
57
+ # class MyEngine < Rails::Engine
58
+ # paths.app.controllers = "lib/controllers"
59
+ # end
60
+ #
61
+ # You can also have your controllers being loaded from both "app/controllers" and
62
+ # "lib/controllers":
63
+ #
64
+ # class MyEngine < Rails::Engine
65
+ # paths.app.controllers << "lib/controllers"
66
+ # end
67
+ #
68
+ # The available paths in an Engine are:
69
+ #
70
+ # class MyEngine < Rails::Engine
71
+ # paths.app = "app"
72
+ # paths.app.controllers = "app/controllers"
73
+ # paths.app.helpers = "app/helpers"
74
+ # paths.app.models = "app/models"
75
+ # paths.app.metals = "app/metal"
76
+ # paths.app.views = "app/views"
77
+ # paths.lib = "lib"
78
+ # paths.lib.tasks = "lib/tasks"
79
+ # paths.config = "config"
80
+ # paths.config.initializers = "config/initializers"
81
+ # paths.config.locales = "config/locales"
82
+ # paths.config.routes = "config/routes.rb"
83
+ # end
84
+ #
85
+ # Your Application class adds a couple more paths to this set. And as in your Application,
86
+ # all folders under "app" are automatically added to the load path. So if you have
87
+ # "app/observers", it's added by default.
88
+ #
5
89
  class Engine < Railtie
6
90
  autoload :Configurable, "rails/engine/configurable"
7
91
  autoload :Configuration, "rails/engine/configuration"
@@ -9,14 +93,15 @@ module Rails
9
93
  class << self
10
94
  attr_accessor :called_from
11
95
 
12
- alias :engine_name :railtie_name
13
- alias :engine_names :railtie_names
96
+ # TODO Remove this. It's deprecated.
97
+ alias :engine_name :railtie_name
14
98
 
15
99
  def inherited(base)
16
- unless abstract_railtie?(base)
100
+ unless base.abstract_railtie?
17
101
  base.called_from = begin
18
- call_stack = caller.map { |p| p.split(':').first }
19
- File.dirname(call_stack.detect { |p| p !~ %r[railties/lib/rails|rack/lib/rack] })
102
+ # Remove the line number from backtraces making sure we don't leave anything behind
103
+ call_stack = caller.map { |p| p.split(':')[0..-2].join(':') }
104
+ File.dirname(call_stack.detect { |p| p !~ %r[railties[\w\-\.]*/lib/rails|rack[\w\-\.]*/lib/rack] })
20
105
  end
21
106
  end
22
107
 
@@ -42,7 +127,7 @@ module Rails
42
127
  delegate :middleware, :paths, :root, :to => :config
43
128
 
44
129
  def load_tasks
45
- super
130
+ super
46
131
  config.paths.lib.tasks.to_a.sort.each { |ext| load(ext) }
47
132
  end
48
133
 
@@ -76,10 +161,11 @@ module Rails
76
161
  end
77
162
  end
78
163
 
164
+ # DEPRECATED: Remove in 3.1
79
165
  initializer :add_routing_namespaces do |app|
80
166
  paths.app.controllers.to_a.each do |load_path|
81
167
  load_path = File.expand_path(load_path)
82
- Dir["#{load_path}/*/*_controller.rb"].collect do |path|
168
+ Dir["#{load_path}/*/**/*_controller.rb"].collect do |path|
83
169
  namespace = File.dirname(path).sub(/#{load_path}\/?/, '')
84
170
  app.routes.controller_namespaces << namespace unless namespace.empty?
85
171
  end
@@ -89,19 +175,28 @@ module Rails
89
175
  # I18n load paths are a special case since the ones added
90
176
  # later have higher priority.
91
177
  initializer :add_locales do
92
- config.i18n.engines_load_path.concat(paths.config.locales.to_a)
178
+ config.i18n.railties_load_path.concat(paths.config.locales.to_a)
93
179
  end
94
180
 
95
181
  initializer :add_view_paths do
96
182
  views = paths.app.views.to_a
97
- ActionController::Base.view_paths.unshift(*views) if defined?(ActionController)
98
- ActionMailer::Base.view_paths.unshift(*views) if defined?(ActionMailer)
183
+ ActiveSupport.on_load(:action_controller) do
184
+ prepend_view_path(views)
185
+ end
186
+
187
+ ActiveSupport.on_load(:action_mailer) do
188
+ prepend_view_path(views)
189
+ end
99
190
  end
100
191
 
101
192
  initializer :add_metals do |app|
102
193
  app.metal_loader.paths.unshift(*paths.app.metals.to_a)
103
194
  end
104
195
 
196
+ initializer :add_generator_templates do |app|
197
+ config.generators.templates.unshift(*paths.lib.templates.to_a)
198
+ end
199
+
105
200
  initializer :load_application_initializers do
106
201
  paths.config.initializers.to_a.sort.each do |initializer|
107
202
  load(initializer)
@@ -127,4 +222,4 @@ module Rails
127
222
  app.config.reload_engines
128
223
  end
129
224
  end
130
- end
225
+ end
@@ -7,6 +7,7 @@ module Rails
7
7
  attr_writer :eager_load_paths, :load_once_paths, :load_paths
8
8
 
9
9
  def initialize(root=nil)
10
+ super()
10
11
  @root = root
11
12
  end
12
13
 
@@ -17,14 +18,19 @@ module Rails
17
18
  paths.app.controllers "app/controllers", :eager_load => true
18
19
  paths.app.helpers "app/helpers", :eager_load => true
19
20
  paths.app.models "app/models", :eager_load => true
20
- paths.app.metals "app/metal"
21
- paths.app.views "app/views"
21
+ paths.app.mailers "app/mailers", :eager_load => true
22
+ paths.app.metals "app/metal", :eager_load => true
23
+ paths.app.views "app/views", :eager_load => true
22
24
  paths.lib "lib", :load_path => true
23
25
  paths.lib.tasks "lib/tasks", :glob => "**/*.rake"
26
+ paths.lib.templates "lib/templates"
24
27
  paths.config "config"
25
28
  paths.config.initializers "config/initializers", :glob => "**/*.rb"
26
29
  paths.config.locales "config/locales", :glob => "*.{rb,yml}"
27
30
  paths.config.routes "config/routes.rb"
31
+ paths.public "public"
32
+ paths.public.javascripts "public/javascripts"
33
+ paths.public.stylesheets "public/stylesheets"
28
34
  paths
29
35
  end
30
36
  end
@@ -3,17 +3,23 @@ $:.unshift(activesupport_path) if File.directory?(activesupport_path) && !$:.inc
3
3
 
4
4
  require 'active_support'
5
5
  require 'active_support/core_ext/object/blank'
6
- require 'active_support/core_ext/object/metaclass'
6
+ require 'active_support/core_ext/object/singleton_class'
7
7
  require 'active_support/core_ext/array/extract_options'
8
8
  require 'active_support/core_ext/hash/deep_merge'
9
9
  require 'active_support/core_ext/module/attribute_accessors'
10
10
  require 'active_support/core_ext/string/inflections'
11
11
 
12
12
  require 'rails/generators/base'
13
- require 'rails/generators/named_base'
14
13
 
15
14
  module Rails
16
15
  module Generators
16
+ autoload :Actions, 'rails/generators/actions'
17
+ autoload :ActiveModel, 'rails/generators/active_model'
18
+ autoload :Migration, 'rails/generators/migration'
19
+ autoload :NamedBase, 'rails/generators/named_base'
20
+ autoload :ResourceHelpers, 'rails/generators/resource_helpers'
21
+ autoload :TestCase, 'rails/generators/test_case'
22
+
17
23
  DEFAULT_ALIASES = {
18
24
  :rails => {
19
25
  :actions => '-a',
@@ -66,6 +72,11 @@ module Rails
66
72
  aliases.deep_merge! config.aliases
67
73
  options.deep_merge! config.options
68
74
  fallbacks.merge! config.fallbacks
75
+ templates_path.concat config.templates
76
+ end
77
+
78
+ def self.templates_path
79
+ @templates_path ||= []
69
80
  end
70
81
 
71
82
  def self.aliases #:nodoc:
@@ -161,7 +172,7 @@ module Rails
161
172
  end
162
173
 
163
174
  # Show help message with available generators.
164
- def self.help
175
+ def self.help(command = 'generate')
165
176
  lookup!
166
177
 
167
178
  namespaces = subclasses.map{ |k| k.namespace }
@@ -173,7 +184,7 @@ module Rails
173
184
  groups[base] << namespace
174
185
  end
175
186
 
176
- puts "Usage: rails generate GENERATOR [args] [options]"
187
+ puts "Usage: rails #{command} GENERATOR [args] [options]"
177
188
  puts
178
189
  puts "General options:"
179
190
  puts " -h, [--help] # Print generators options and usage"
@@ -191,6 +202,10 @@ module Rails
191
202
  rails.delete("app")
192
203
  print_list("rails", rails)
193
204
 
205
+ groups.delete("active_record") if options[:rails][:orm] == :active_record
206
+ groups.delete("test_unit") if options[:rails][:test_framework] == :test_unit
207
+ groups.delete("erb") if options[:rails][:template_engine] == :erb
208
+
194
209
  groups.sort.each { |b, n| print_list(b, n) }
195
210
  end
196
211
 
@@ -227,7 +242,7 @@ module Rails
227
242
  paths = namespaces_to_paths(namespaces)
228
243
 
229
244
  paths.each do |raw_path|
230
- ["rails_generators", "generators"].each do |base|
245
+ ["rails/generators", "generators"].each do |base|
231
246
  path = "#{base}/#{raw_path}_generator"
232
247
 
233
248
  begin
@@ -250,7 +265,7 @@ module Rails
250
265
  load_generators_from_railties!
251
266
 
252
267
  $LOAD_PATH.each do |base|
253
- Dir[File.join(base, "{generators,rails_generators}", "**", "*_generator.rb")].each do |path|
268
+ Dir[File.join(base, "{rails/generators,generators}", "**", "*_generator.rb")].each do |path|
254
269
  begin
255
270
  require path
256
271
  rescue Exception => e
@@ -286,4 +301,4 @@ end
286
301
 
287
302
  # If the application was already defined, configure generators,
288
303
  # otherwise you have to configure it by hand.
289
- Rails::Generators.configure! if Rails.respond_to?(:application) && Rails.application
304
+ Rails::Generators.configure! if Rails.respond_to?(:application) && Rails.application