railties 3.0.0.beta → 3.0.0.beta2

Sign up to get free protection for your applications and to get access to all the features.
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