railties 6.0.0 → 7.1.3.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (286) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +699 -245
  3. data/MIT-LICENSE +1 -1
  4. data/RDOC_MAIN.md +99 -0
  5. data/README.rdoc +7 -8
  6. data/lib/minitest/rails_plugin.rb +80 -2
  7. data/lib/rails/all.rb +0 -1
  8. data/lib/rails/api/task.rb +37 -5
  9. data/lib/rails/app_updater.rb +9 -6
  10. data/lib/rails/application/bootstrap.rb +52 -14
  11. data/lib/rails/application/configuration.rb +327 -86
  12. data/lib/rails/application/default_middleware_stack.rb +33 -7
  13. data/lib/rails/application/dummy_config.rb +19 -0
  14. data/lib/rails/application/finisher.rb +94 -113
  15. data/lib/rails/application/routes_reloader.rb +17 -3
  16. data/lib/rails/application.rb +258 -201
  17. data/lib/rails/application_controller.rb +3 -4
  18. data/lib/rails/autoloaders/inflector.rb +21 -0
  19. data/lib/rails/autoloaders.rb +42 -42
  20. data/lib/rails/backtrace_cleaner.rb +13 -8
  21. data/lib/rails/cli.rb +5 -2
  22. data/lib/rails/code_statistics.rb +6 -4
  23. data/lib/rails/code_statistics_calculator.rb +16 -7
  24. data/lib/rails/command/actions.rb +10 -12
  25. data/lib/rails/command/base.rb +66 -46
  26. data/lib/rails/command/behavior.rb +3 -3
  27. data/lib/rails/command/environment_argument.rb +33 -17
  28. data/lib/rails/command/helpers/editor.rb +17 -12
  29. data/lib/rails/command.rb +90 -32
  30. data/lib/rails/commands/about/about_command.rb +14 -0
  31. data/lib/rails/commands/application/application_command.rb +2 -0
  32. data/lib/rails/commands/console/console_command.rb +17 -13
  33. data/lib/rails/commands/credentials/USAGE +54 -39
  34. data/lib/rails/commands/credentials/credentials_command/diffing.rb +53 -0
  35. data/lib/rails/commands/credentials/credentials_command.rb +83 -60
  36. data/lib/rails/commands/db/system/change/change_command.rb +8 -2
  37. data/lib/rails/commands/dbconsole/dbconsole_command.rb +39 -124
  38. data/lib/rails/commands/destroy/destroy_command.rb +3 -2
  39. data/lib/rails/commands/dev/dev_command.rb +1 -6
  40. data/lib/rails/commands/encrypted/USAGE +15 -20
  41. data/lib/rails/commands/encrypted/encrypted_command.rb +46 -35
  42. data/lib/rails/commands/gem_help/USAGE +16 -0
  43. data/lib/rails/commands/gem_help/gem_help_command.rb +13 -0
  44. data/lib/rails/commands/generate/generate_command.rb +3 -3
  45. data/lib/rails/commands/help/USAGE +15 -14
  46. data/lib/rails/commands/help/help_command.rb +21 -2
  47. data/lib/rails/commands/initializers/initializers_command.rb +1 -4
  48. data/lib/rails/commands/middleware/middleware_command.rb +17 -0
  49. data/lib/rails/commands/new/new_command.rb +2 -0
  50. data/lib/rails/commands/notes/notes_command.rb +5 -14
  51. data/lib/rails/commands/plugin/plugin_command.rb +2 -0
  52. data/lib/rails/commands/rake/rake_command.rb +27 -23
  53. data/lib/rails/commands/restart/restart_command.rb +14 -0
  54. data/lib/rails/commands/routes/routes_command.rb +13 -1
  55. data/lib/rails/commands/runner/USAGE +14 -12
  56. data/lib/rails/commands/runner/runner_command.rb +34 -21
  57. data/lib/rails/commands/secret/secret_command.rb +13 -0
  58. data/lib/rails/commands/secrets/USAGE +44 -43
  59. data/lib/rails/commands/secrets/secrets_command.rb +20 -38
  60. data/lib/rails/commands/server/server_command.rb +40 -64
  61. data/lib/rails/commands/test/USAGE +14 -0
  62. data/lib/rails/commands/test/test_command.rb +58 -16
  63. data/lib/rails/commands/unused_routes/unused_routes_command.rb +75 -0
  64. data/lib/rails/commands/version/version_command.rb +1 -0
  65. data/lib/rails/configuration.rb +53 -23
  66. data/lib/rails/console/app.rb +1 -4
  67. data/lib/rails/console/helpers.rb +2 -2
  68. data/lib/rails/deprecator.rb +7 -0
  69. data/lib/rails/engine/configuration.rb +54 -9
  70. data/lib/rails/engine/updater.rb +1 -1
  71. data/lib/rails/engine.rb +105 -81
  72. data/lib/rails/gem_version.rb +5 -5
  73. data/lib/rails/generators/actions/create_migration.rb +9 -5
  74. data/lib/rails/generators/actions.rb +275 -97
  75. data/lib/rails/generators/active_model.rb +28 -14
  76. data/lib/rails/generators/app_base.rb +487 -165
  77. data/lib/rails/generators/app_name.rb +3 -14
  78. data/lib/rails/generators/base.rb +42 -31
  79. data/lib/rails/generators/database.rb +41 -4
  80. data/lib/rails/generators/erb/mailer/mailer_generator.rb +0 -1
  81. data/lib/rails/generators/erb/mailer/templates/layout.html.erb.tt +1 -1
  82. data/lib/rails/generators/erb/scaffold/scaffold_generator.rb +2 -1
  83. data/lib/rails/generators/erb/scaffold/templates/_form.html.erb.tt +11 -11
  84. data/lib/rails/generators/erb/scaffold/templates/edit.html.erb.tt +8 -4
  85. data/lib/rails/generators/erb/scaffold/templates/index.html.erb.tt +11 -28
  86. data/lib/rails/generators/erb/scaffold/templates/new.html.erb.tt +7 -3
  87. data/lib/rails/generators/erb/scaffold/templates/partial.html.erb.tt +17 -0
  88. data/lib/rails/generators/erb/scaffold/templates/show.html.erb.tt +8 -17
  89. data/lib/rails/generators/erb.rb +1 -2
  90. data/lib/rails/generators/generated_attribute.rb +60 -19
  91. data/lib/rails/generators/migration.rb +4 -8
  92. data/lib/rails/generators/model_helpers.rb +29 -4
  93. data/lib/rails/generators/named_base.rb +15 -15
  94. data/lib/rails/generators/rails/app/USAGE +23 -6
  95. data/lib/rails/generators/rails/app/app_generator.rb +151 -80
  96. data/lib/rails/generators/rails/app/templates/Dockerfile.tt +103 -0
  97. data/lib/rails/generators/rails/app/templates/Gemfile.tt +44 -54
  98. data/lib/rails/generators/rails/app/templates/Rakefile.tt +1 -1
  99. data/lib/rails/generators/rails/app/templates/app/assets/stylesheets/application.css.tt +2 -2
  100. data/lib/rails/generators/rails/app/templates/app/mailers/application_mailer.rb.tt +2 -2
  101. data/lib/rails/generators/rails/app/templates/app/models/application_record.rb.tt +1 -1
  102. data/lib/rails/generators/rails/app/templates/app/views/layouts/application.html.erb.tt +4 -9
  103. data/lib/rails/generators/rails/app/templates/app/views/layouts/mailer.html.erb.tt +1 -1
  104. data/lib/rails/generators/rails/app/templates/bin/rails.tt +3 -3
  105. data/lib/rails/generators/rails/app/templates/bin/rake.tt +2 -2
  106. data/lib/rails/generators/rails/app/templates/bin/setup.tt +19 -15
  107. data/lib/rails/generators/rails/app/templates/config/application.rb.tt +18 -23
  108. data/lib/rails/generators/rails/app/templates/config/boot.rb.tt +3 -3
  109. data/lib/rails/generators/rails/app/templates/config/databases/jdbc.yml.tt +5 -6
  110. data/lib/rails/generators/rails/app/templates/config/databases/jdbcmysql.yml.tt +12 -11
  111. data/lib/rails/generators/rails/app/templates/config/databases/jdbcpostgresql.yml.tt +17 -16
  112. data/lib/rails/generators/rails/app/templates/config/databases/jdbcsqlite3.yml.tt +5 -5
  113. data/lib/rails/generators/rails/app/templates/config/databases/mysql.yml.tt +12 -11
  114. data/lib/rails/generators/rails/app/templates/config/databases/oracle.yml.tt +12 -11
  115. data/lib/rails/generators/rails/app/templates/config/databases/postgresql.yml.tt +17 -18
  116. data/lib/rails/generators/rails/app/templates/config/databases/sqlite3.yml.tt +4 -4
  117. data/lib/rails/generators/rails/app/templates/config/databases/sqlserver.yml.tt +14 -13
  118. data/lib/rails/generators/rails/app/templates/config/databases/trilogy.yml.tt +59 -0
  119. data/lib/rails/generators/rails/app/templates/config/environment.rb.tt +1 -1
  120. data/lib/rails/generators/rails/app/templates/config/environments/development.rb.tt +32 -14
  121. data/lib/rails/generators/rails/app/templates/config/environments/production.rb.tt +42 -55
  122. data/lib/rails/generators/rails/app/templates/config/environments/test.rb.tt +27 -15
  123. data/lib/rails/generators/rails/app/templates/config/initializers/assets.rb.tt +3 -5
  124. data/lib/rails/generators/rails/app/templates/config/initializers/content_security_policy.rb.tt +21 -28
  125. data/lib/rails/generators/rails/app/templates/config/initializers/cors.rb.tt +3 -3
  126. data/lib/rails/generators/rails/app/templates/config/initializers/filter_parameter_logging.rb.tt +6 -2
  127. data/lib/rails/generators/rails/app/templates/config/initializers/inflections.rb.tt +4 -4
  128. data/lib/rails/generators/rails/app/templates/config/initializers/new_framework_defaults_7_1.rb.tt +284 -0
  129. data/lib/rails/generators/rails/app/templates/config/initializers/permissions_policy.rb.tt +13 -0
  130. data/lib/rails/generators/rails/app/templates/config/locales/en.yml +13 -15
  131. data/lib/rails/generators/rails/app/templates/config/puma.rb.tt +17 -20
  132. data/lib/rails/generators/rails/app/templates/config/routes.rb.tt +8 -1
  133. data/lib/rails/generators/rails/app/templates/config/storage.yml.tt +5 -5
  134. data/lib/rails/generators/rails/app/templates/config.ru.tt +2 -1
  135. data/lib/rails/generators/rails/app/templates/db/seeds.rb.tt +7 -5
  136. data/lib/rails/generators/rails/app/templates/docker-entrypoint.tt +10 -0
  137. data/lib/rails/generators/rails/app/templates/dockerignore.tt +43 -0
  138. data/lib/rails/generators/rails/app/templates/gitattributes.tt +9 -0
  139. data/lib/rails/generators/rails/app/templates/gitignore.tt +12 -9
  140. data/lib/rails/generators/rails/app/templates/node-version.tt +1 -0
  141. data/lib/rails/generators/rails/app/templates/test/channels/application_cable/connection_test.rb.tt +10 -8
  142. data/lib/rails/generators/rails/app/templates/test/test_helper.rb.tt +13 -11
  143. data/lib/rails/generators/rails/application_record/application_record_generator.rb +4 -0
  144. data/lib/rails/generators/rails/benchmark/USAGE +19 -0
  145. data/lib/rails/generators/rails/benchmark/benchmark_generator.rb +30 -0
  146. data/lib/rails/generators/rails/benchmark/templates/benchmark.rb.tt +15 -0
  147. data/lib/rails/generators/rails/controller/USAGE +13 -5
  148. data/lib/rails/generators/rails/controller/controller_generator.rb +7 -42
  149. data/lib/rails/generators/rails/controller/templates/controller.rb.tt +1 -5
  150. data/lib/rails/generators/rails/credentials/credentials_generator.rb +30 -25
  151. data/lib/rails/generators/rails/credentials/templates/credentials.yml.tt +8 -0
  152. data/lib/rails/generators/rails/db/system/change/change_generator.rb +31 -1
  153. data/lib/rails/generators/rails/encrypted_file/encrypted_file_generator.rb +6 -2
  154. data/lib/rails/generators/rails/encryption_key_file/encryption_key_file_generator.rb +1 -2
  155. data/lib/rails/generators/rails/generator/USAGE +2 -2
  156. data/lib/rails/generators/rails/generator/generator_generator.rb +0 -1
  157. data/lib/rails/generators/rails/generator/templates/%file_name%_generator.rb.tt +1 -1
  158. data/lib/rails/generators/rails/generator/templates/USAGE.tt +1 -1
  159. data/lib/rails/generators/rails/helper/USAGE +2 -3
  160. data/lib/rails/generators/rails/integration_test/USAGE +2 -2
  161. data/lib/rails/generators/rails/migration/USAGE +22 -12
  162. data/lib/rails/generators/rails/model/model_generator.rb +4 -0
  163. data/lib/rails/generators/rails/plugin/USAGE +17 -6
  164. data/lib/rails/generators/rails/plugin/plugin_generator.rb +86 -46
  165. data/lib/rails/generators/rails/plugin/templates/%name%.gemspec.tt +15 -20
  166. data/lib/rails/generators/rails/plugin/templates/Gemfile.tt +10 -39
  167. data/lib/rails/generators/rails/plugin/templates/MIT-LICENSE.tt +1 -1
  168. data/lib/rails/generators/rails/plugin/templates/README.md.tt +1 -1
  169. data/lib/rails/generators/rails/plugin/templates/Rakefile.tt +4 -18
  170. data/lib/rails/generators/rails/plugin/templates/app/controllers/%namespaced_name%/application_controller.rb.tt +0 -1
  171. data/lib/rails/generators/rails/plugin/templates/app/mailers/%namespaced_name%/application_mailer.rb.tt +2 -2
  172. data/lib/rails/generators/rails/plugin/templates/app/views/layouts/%namespaced_name%/application.html.erb.tt +0 -3
  173. data/lib/rails/generators/rails/plugin/templates/bin/rails.tt +7 -22
  174. data/lib/rails/generators/rails/plugin/templates/gitignore.tt +10 -14
  175. data/lib/rails/generators/rails/plugin/templates/lib/%namespaced_name%/engine.rb.tt +2 -2
  176. data/lib/rails/generators/rails/plugin/templates/lib/%namespaced_name%/version.rb.tt +1 -1
  177. data/lib/rails/generators/rails/plugin/templates/lib/%namespaced_name%.rb.tt +1 -0
  178. data/lib/rails/generators/rails/plugin/templates/rails/boot.rb.tt +3 -3
  179. data/lib/rails/generators/rails/plugin/templates/test/%namespaced_name%_test.rb.tt +4 -4
  180. data/lib/rails/generators/rails/plugin/templates/test/integration/navigation_test.rb.tt +1 -1
  181. data/lib/rails/generators/rails/plugin/templates/test/test_helper.rb.tt +6 -14
  182. data/lib/rails/generators/rails/resource/USAGE +4 -4
  183. data/lib/rails/generators/rails/resource/resource_generator.rb +6 -0
  184. data/lib/rails/generators/rails/resource_route/resource_route_generator.rb +2 -27
  185. data/lib/rails/generators/rails/scaffold/USAGE +5 -5
  186. data/lib/rails/generators/rails/scaffold/scaffold_generator.rb +2 -20
  187. data/lib/rails/generators/rails/scaffold_controller/USAGE +2 -2
  188. data/lib/rails/generators/rails/scaffold_controller/scaffold_controller_generator.rb +7 -2
  189. data/lib/rails/generators/rails/scaffold_controller/templates/api_controller.rb.tt +2 -6
  190. data/lib/rails/generators/rails/scaffold_controller/templates/controller.rb.tt +7 -11
  191. data/lib/rails/generators/rails/system_test/USAGE +2 -2
  192. data/lib/rails/generators/rails/task/USAGE +3 -3
  193. data/lib/rails/generators/resource_helpers.rb +2 -2
  194. data/lib/rails/generators/test_case.rb +3 -3
  195. data/lib/rails/generators/test_unit/controller/controller_generator.rb +2 -0
  196. data/lib/rails/generators/test_unit/controller/templates/functional_test.rb.tt +3 -3
  197. data/lib/rails/generators/test_unit/generator/generator_generator.rb +0 -1
  198. data/lib/rails/generators/test_unit/generator/templates/generator_test.rb.tt +3 -3
  199. data/lib/rails/generators/test_unit/integration/integration_generator.rb +0 -1
  200. data/lib/rails/generators/test_unit/integration/templates/integration_test.rb.tt +1 -1
  201. data/lib/rails/generators/test_unit/job/templates/unit_test.rb.tt +1 -1
  202. data/lib/rails/generators/test_unit/mailer/templates/functional_test.rb.tt +1 -1
  203. data/lib/rails/generators/test_unit/model/templates/fixtures.yml.tt +3 -3
  204. data/lib/rails/generators/test_unit/model/templates/unit_test.rb.tt +1 -1
  205. data/lib/rails/generators/test_unit/plugin/templates/%file_name%_test.rb.tt +1 -1
  206. data/lib/rails/generators/test_unit/plugin/templates/test_helper.rb +2 -2
  207. data/lib/rails/generators/test_unit/scaffold/scaffold_generator.rb +4 -5
  208. data/lib/rails/generators/test_unit/scaffold/templates/api_functional_test.rb.tt +6 -6
  209. data/lib/rails/generators/test_unit/scaffold/templates/functional_test.rb.tt +8 -8
  210. data/lib/rails/generators/test_unit/scaffold/templates/system_test.rb.tt +9 -11
  211. data/lib/rails/generators/testing/assertions.rb +2 -2
  212. data/lib/rails/generators/testing/{behaviour.rb → behavior.rb} +8 -7
  213. data/lib/rails/generators.rb +43 -45
  214. data/lib/rails/health_controller.rb +55 -0
  215. data/lib/rails/info.rb +4 -4
  216. data/lib/rails/info_controller.rb +30 -13
  217. data/lib/rails/initializable.rb +1 -1
  218. data/lib/rails/mailers_controller.rb +18 -9
  219. data/lib/rails/paths.rb +28 -19
  220. data/lib/rails/rack/logger.rb +17 -17
  221. data/lib/rails/rackup/server.rb +15 -0
  222. data/lib/rails/railtie/configurable.rb +0 -1
  223. data/lib/rails/railtie/configuration.rb +15 -3
  224. data/lib/rails/railtie.rb +80 -37
  225. data/lib/rails/ruby_version_check.rb +5 -3
  226. data/lib/rails/secrets.rb +14 -9
  227. data/lib/rails/source_annotation_extractor.rb +69 -34
  228. data/lib/rails/tasks/engine.rake +8 -11
  229. data/lib/rails/tasks/framework.rake +4 -6
  230. data/lib/rails/tasks/log.rake +1 -1
  231. data/lib/rails/tasks/misc.rake +4 -15
  232. data/lib/rails/tasks/statistics.rake +9 -6
  233. data/lib/rails/tasks/tmp.rake +13 -6
  234. data/lib/rails/tasks/yarn.rake +17 -6
  235. data/lib/rails/tasks/zeitwerk.rake +16 -41
  236. data/lib/rails/tasks.rb +0 -6
  237. data/lib/rails/templates/layouts/application.html.erb +15 -0
  238. data/lib/rails/templates/rails/mailers/email.html.erb +46 -11
  239. data/lib/rails/templates/rails/mailers/index.html.erb +14 -7
  240. data/lib/rails/templates/rails/mailers/mailer.html.erb +11 -5
  241. data/lib/rails/templates/rails/welcome/index.html.erb +65 -48
  242. data/lib/rails/test_help.rb +13 -14
  243. data/lib/rails/test_unit/line_filtering.rb +1 -1
  244. data/lib/rails/test_unit/railtie.rb +0 -4
  245. data/lib/rails/test_unit/reporter.rb +8 -3
  246. data/lib/rails/test_unit/runner.rb +61 -19
  247. data/lib/rails/test_unit/test_parser.rb +88 -0
  248. data/lib/rails/test_unit/testing.rake +17 -36
  249. data/lib/rails/testing/maintain_test_schema.rb +16 -0
  250. data/lib/rails/version.rb +1 -1
  251. data/lib/rails/welcome_controller.rb +1 -0
  252. data/lib/rails/zeitwerk_checker.rb +15 -0
  253. data/lib/rails.rb +31 -23
  254. metadata +89 -58
  255. data/RDOC_MAIN.rdoc +0 -98
  256. data/lib/rails/application/dummy_erb_compiler.rb +0 -18
  257. data/lib/rails/command/spellchecker.rb +0 -58
  258. data/lib/rails/generators/css/assets/assets_generator.rb +0 -15
  259. data/lib/rails/generators/css/assets/templates/stylesheet.css +0 -4
  260. data/lib/rails/generators/css/scaffold/scaffold_generator.rb +0 -18
  261. data/lib/rails/generators/rails/app/templates/app/javascript/channels/consumer.js +0 -6
  262. data/lib/rails/generators/rails/app/templates/app/javascript/channels/index.js +0 -5
  263. data/lib/rails/generators/rails/app/templates/app/javascript/packs/application.js.tt +0 -23
  264. data/lib/rails/generators/rails/app/templates/bin/yarn.tt +0 -10
  265. data/lib/rails/generators/rails/app/templates/config/databases/frontbase.yml.tt +0 -50
  266. data/lib/rails/generators/rails/app/templates/config/databases/ibm_db.yml.tt +0 -86
  267. data/lib/rails/generators/rails/app/templates/config/initializers/application_controller_renderer.rb.tt +0 -8
  268. data/lib/rails/generators/rails/app/templates/config/initializers/backtrace_silencers.rb.tt +0 -7
  269. data/lib/rails/generators/rails/app/templates/config/initializers/cookies_serializer.rb.tt +0 -5
  270. data/lib/rails/generators/rails/app/templates/config/initializers/mime_types.rb.tt +0 -4
  271. data/lib/rails/generators/rails/app/templates/config/initializers/new_framework_defaults_6_0.rb.tt +0 -45
  272. data/lib/rails/generators/rails/app/templates/config/initializers/wrap_parameters.rb.tt +0 -16
  273. data/lib/rails/generators/rails/app/templates/config/spring.rb.tt +0 -6
  274. data/lib/rails/generators/rails/app/templates/package.json.tt +0 -11
  275. data/lib/rails/generators/rails/assets/USAGE +0 -17
  276. data/lib/rails/generators/rails/assets/assets_generator.rb +0 -26
  277. data/lib/rails/generators/rails/assets/templates/stylesheet.css +0 -4
  278. data/lib/rails/generators/rails/model/USAGE +0 -114
  279. data/lib/rails/generators/rails/plugin/templates/rails/application.rb.tt +0 -23
  280. data/lib/rails/generators/rails/scaffold/templates/scaffold.css +0 -80
  281. data/lib/rails/tasks/annotations.rake +0 -22
  282. data/lib/rails/tasks/dev.rake +0 -11
  283. data/lib/rails/tasks/initializers.rake +0 -9
  284. data/lib/rails/tasks/middleware.rake +0 -9
  285. data/lib/rails/tasks/restart.rake +0 -9
  286. data/lib/rails/tasks/routes.rake +0 -9
@@ -1,5 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require "active_support/core_ext/hash/except"
3
4
  require "rails/generators/rails/app/app_generator"
4
5
  require "date"
5
6
 
@@ -24,10 +25,18 @@ module Rails
24
25
  directory "app"
25
26
  empty_directory_with_keep_file "app/assets/images/#{namespaced_name}"
26
27
  end
28
+
29
+ empty_directory_with_keep_file "app/models/concerns"
30
+ empty_directory_with_keep_file "app/controllers/concerns"
31
+ remove_dir "app/mailers" if options[:skip_action_mailer]
32
+ remove_dir "app/jobs" if options[:skip_active_job]
27
33
  elsif full?
28
34
  empty_directory_with_keep_file "app/models"
29
35
  empty_directory_with_keep_file "app/controllers"
30
- empty_directory_with_keep_file "app/mailers"
36
+ empty_directory_with_keep_file "app/models/concerns"
37
+ empty_directory_with_keep_file "app/controllers/concerns"
38
+ empty_directory_with_keep_file "app/mailers" unless options[:skip_action_mailer]
39
+ empty_directory_with_keep_file "app/jobs" unless options[:skip_active_job]
31
40
 
32
41
  unless api?
33
42
  empty_directory_with_keep_file "app/assets/images/#{namespaced_name}"
@@ -46,7 +55,7 @@ module Rails
46
55
  end
47
56
 
48
57
  def license
49
- template "MIT-LICENSE"
58
+ template "MIT-LICENSE" unless inside_application?
50
59
  end
51
60
 
52
61
  def gemspec
@@ -57,6 +66,12 @@ module Rails
57
66
  template "gitignore", ".gitignore"
58
67
  end
59
68
 
69
+ def version_control
70
+ if !options[:skip_git] && !options[:pretend]
71
+ run git_init_command, capture: options[:quiet], abort_on_failure: false
72
+ end
73
+ end
74
+
60
75
  def lib
61
76
  template "lib/%namespaced_name%.rb"
62
77
  template "lib/tasks/%namespaced_name%_tasks.rake"
@@ -76,29 +91,30 @@ module Rails
76
91
  def test
77
92
  template "test/test_helper.rb"
78
93
  template "test/%namespaced_name%_test.rb"
79
- append_file "Rakefile", <<-EOF
80
94
 
81
- #{rakefile_test_tasks}
82
- task default: :test
83
- EOF
84
95
  if engine?
96
+ empty_directory_with_keep_file "test/fixtures/files"
97
+ empty_directory_with_keep_file "test/controllers"
98
+ empty_directory_with_keep_file "test/mailers"
99
+ empty_directory_with_keep_file "test/models"
100
+ empty_directory_with_keep_file "test/integration"
101
+
102
+ unless api?
103
+ empty_directory_with_keep_file "test/helpers"
104
+ end
105
+
85
106
  template "test/integration/navigation_test.rb"
86
107
  end
87
108
  end
88
109
 
89
- PASSTHROUGH_OPTIONS = [
90
- :skip_active_record, :skip_active_storage, :skip_action_mailer, :skip_javascript, :skip_action_cable, :skip_sprockets, :database,
91
- :api, :quiet, :pretend, :skip
92
- ]
110
+ DUMMY_IGNORE_OPTIONS = %i[dev edge master template]
93
111
 
94
112
  def generate_test_dummy(force = false)
95
- opts = (options.dup || {}).keep_if { |k, _| PASSTHROUGH_OPTIONS.map(&:to_s).include?(k) }
113
+ opts = options.transform_keys(&:to_sym).except(*DUMMY_IGNORE_OPTIONS)
96
114
  opts[:force] = force
97
115
  opts[:skip_bundle] = true
98
- opts[:skip_listen] = true
99
116
  opts[:skip_git] = true
100
- opts[:skip_turbolinks] = true
101
- opts[:skip_webpack_install] = true
117
+ opts[:skip_hotwire] = true
102
118
  opts[:dummy_app] = true
103
119
 
104
120
  invoke Rails::Generators::AppGenerator,
@@ -107,20 +123,27 @@ task default: :test
107
123
 
108
124
  def test_dummy_config
109
125
  template "rails/boot.rb", "#{dummy_path}/config/boot.rb", force: true
110
- template "rails/application.rb", "#{dummy_path}/config/application.rb", force: true
126
+
111
127
  if mountable?
112
128
  template "rails/routes.rb", "#{dummy_path}/config/routes.rb", force: true
113
129
  end
130
+ if engine? && !api?
131
+ insert_into_file "#{dummy_path}/config/application.rb", indent(<<~RUBY, 4), after: /^\s*config\.load_defaults.*\n/
132
+
133
+ # For compatibility with applications that use this config
134
+ config.action_controller.include_all_helpers = false
135
+ RUBY
136
+ end
114
137
  end
115
138
 
116
- def test_dummy_assets
117
- template "rails/javascripts.js", "#{dummy_path}/app/javascript/packs/application.js", force: true
139
+ def test_dummy_sprocket_assets
118
140
  template "rails/stylesheets.css", "#{dummy_path}/app/assets/stylesheets/application.css", force: true
119
141
  template "rails/dummy_manifest.js", "#{dummy_path}/app/assets/config/manifest.js", force: true
120
142
  end
121
143
 
122
144
  def test_dummy_clean
123
145
  inside dummy_path do
146
+ remove_file ".ruby-version"
124
147
  remove_file "db/seeds.rb"
125
148
  remove_file "Gemfile"
126
149
  remove_file "lib/tasks"
@@ -176,7 +199,7 @@ task default: :test
176
199
  desc: "Generate a rails engine with bundled Rails application for testing"
177
200
 
178
201
  class_option :mountable, type: :boolean, default: false,
179
- desc: "Generate mountable isolated application"
202
+ desc: "Generate mountable isolated engine"
180
203
 
181
204
  class_option :skip_gemspec, type: :boolean, default: false,
182
205
  desc: "Skip gemspec file"
@@ -191,18 +214,29 @@ task default: :test
191
214
  def initialize(*args)
192
215
  @dummy_path = nil
193
216
  super
217
+ imply_options
218
+
219
+ if !engine? || !with_dummy_app?
220
+ self.options = options.merge(skip_asset_pipeline: true).freeze
221
+ end
194
222
  end
195
223
 
224
+ public_task :report_implied_options
196
225
  public_task :set_default_accessors!
197
226
  public_task :create_root
198
227
 
228
+ def target_rails_prerelease
229
+ super("plugin new")
230
+ end
231
+
199
232
  def create_root_files
200
233
  build(:readme)
201
234
  build(:rakefile)
202
235
  build(:gemspec) unless options[:skip_gemspec]
203
236
  build(:license)
204
237
  build(:gitignore) unless options[:skip_git]
205
- build(:gemfile) unless options[:skip_gemfile]
238
+ build(:gemfile)
239
+ build(:version_control)
206
240
  end
207
241
 
208
242
  def create_app_files
@@ -269,6 +303,33 @@ task default: :test
269
303
  end
270
304
 
271
305
  private
306
+ def gemfile_entries
307
+ [
308
+ rails_gemfile_entry,
309
+ simplify_gemfile_entries(
310
+ web_server_gemfile_entry,
311
+ database_gemfile_entry,
312
+ asset_pipeline_gemfile_entry,
313
+ ),
314
+ ].flatten.compact
315
+ end
316
+
317
+ def rails_gemfile_entry
318
+ if options[:skip_gemspec]
319
+ super
320
+ elsif rails_prerelease?
321
+ super.dup.tap do |entry|
322
+ entry.comment = <<~COMMENT
323
+ Your gem is dependent on a prerelease version of Rails. Once you can lock this
324
+ dependency down to a specific version, move it to your gemspec.
325
+ COMMENT
326
+ end
327
+ end
328
+ end
329
+
330
+ def simplify_gemfile_entries(*gemfile_entries)
331
+ gemfile_entries.flatten.compact.map { |entry| GemfileEntry.floats(entry.name) }
332
+ end
272
333
 
273
334
  def create_dummy_app(path = nil)
274
335
  dummy_path(path) if path
@@ -276,9 +337,8 @@ task default: :test
276
337
  say_status :vendor_app, dummy_path
277
338
  mute do
278
339
  build(:generate_test_dummy)
279
- store_application_definition!
280
340
  build(:test_dummy_config)
281
- build(:test_dummy_assets)
341
+ build(:test_dummy_sprocket_assets) unless skip_sprockets?
282
342
  build(:test_dummy_clean)
283
343
  # ensure that bin/rails has proper dummy_path
284
344
  build(:bin, true)
@@ -360,6 +420,10 @@ task default: :test
360
420
  end
361
421
  end
362
422
 
423
+ def rails_version_specifier(gem_version = Rails.gem_version)
424
+ [">= #{gem_version}"]
425
+ end
426
+
363
427
  def valid_const?
364
428
  if /-\d/.match?(original_name)
365
429
  raise Error, "Invalid plugin name #{original_name}. Please give a name which does not contain a namespace starting with numeric characters."
@@ -376,34 +440,10 @@ task default: :test
376
440
  end
377
441
  end
378
442
 
379
- def application_definition
380
- @application_definition ||= begin
381
-
382
- dummy_application_path = File.expand_path("#{dummy_path}/config/application.rb", destination_root)
383
- unless options[:pretend] || !File.exist?(dummy_application_path)
384
- contents = File.read(dummy_application_path)
385
- contents[(contents.index(/module ([\w]+)\n(.*)class Application/m))..-1]
386
- end
387
- end
388
- end
389
- alias :store_application_definition! :application_definition
390
-
391
443
  def get_builder_class
392
444
  defined?(::PluginBuilder) ? ::PluginBuilder : Rails::PluginBuilder
393
445
  end
394
446
 
395
- def rakefile_test_tasks
396
- <<-RUBY
397
- require 'rake/testtask'
398
-
399
- Rake::TestTask.new(:test) do |t|
400
- t.libs << 'test'
401
- t.pattern = 'test/**/*_test.rb'
402
- t.verbose = false
403
- end
404
- RUBY
405
- end
406
-
407
447
  def dummy_path(path = nil)
408
448
  @dummy_path = path if path
409
449
  @dummy_path || options[:dummy_path]
@@ -423,7 +463,7 @@ end
423
463
 
424
464
  def relative_path
425
465
  return unless inside_application?
426
- app_path.sub(/^#{rails_app_path}\//, "")
466
+ app_path.delete_prefix("#{rails_app_path}/")
427
467
  end
428
468
  end
429
469
  end
@@ -1,33 +1,28 @@
1
- $:.push File.expand_path("lib", __dir__)
1
+ require_relative "lib/<%= namespaced_name %>/version"
2
2
 
3
- # Maintain your gem's version:
4
- require "<%= namespaced_name %>/version"
5
-
6
- # Describe your gem and declare its dependencies:
7
3
  Gem::Specification.new do |spec|
8
- spec.name = "<%= name %>"
4
+ spec.name = <%= name.inspect %>
9
5
  spec.version = <%= camelized_modules %>::VERSION
10
- spec.authors = ["<%= author %>"]
11
- spec.email = ["<%= email %>"]
6
+ spec.authors = [<%= author.inspect %>]
7
+ spec.email = [<%= email.inspect %>]
12
8
  spec.homepage = "TODO"
13
9
  spec.summary = "TODO: Summary of <%= camelized_modules %>."
14
10
  spec.description = "TODO: Description of <%= camelized_modules %>."
11
+ <%- unless inside_application? -%>
15
12
  spec.license = "MIT"
13
+ <%- end -%>
16
14
 
17
- # Prevent pushing this gem to RubyGems.org. To allow pushes either set the 'allowed_push_host'
15
+ # Prevent pushing this gem to RubyGems.org. To allow pushes either set the "allowed_push_host"
18
16
  # to allow pushing to a single host or delete this section to allow pushing to any host.
19
- if spec.respond_to?(:metadata)
20
- spec.metadata["allowed_push_host"] = "TODO: Set to 'http://mygemserver.com'"
21
- else
22
- raise "RubyGems 2.0 or newer is required to protect against " \
23
- "public gem pushes."
24
- end
17
+ spec.metadata["allowed_push_host"] = "TODO: Set to 'http://mygemserver.com'"
25
18
 
26
- spec.files = Dir["{app,config,db,lib}/**/*", "MIT-LICENSE", "Rakefile", "README.md"]
19
+ spec.metadata["homepage_uri"] = spec.homepage
20
+ spec.metadata["source_code_uri"] = "TODO: Put your gem's public repo URL here."
21
+ spec.metadata["changelog_uri"] = "TODO: Put your gem's CHANGELOG.md URL here."
27
22
 
28
- <%= '# ' if options.dev? || options.edge? -%>spec.add_dependency "rails", "<%= Array(rails_version_specifier).join('", "') %>"
29
- <% unless options[:skip_active_record] -%>
23
+ spec.files = Dir.chdir(File.expand_path(__dir__)) do
24
+ Dir["{app,config,db,lib}/**/*", "MIT-LICENSE", "Rakefile", "README.md"]
25
+ end
30
26
 
31
- spec.add_development_dependency "<%= gem_for_database[0] %>"
32
- <% end -%>
27
+ <%= "# " if rails_prerelease? -%>spec.add_dependency "rails", "<%= Array(rails_version_specifier).join('", "') %>"
33
28
  end
@@ -1,48 +1,19 @@
1
- source 'https://rubygems.org'
1
+ source "https://rubygems.org"
2
2
  git_source(:github) { |repo| "https://github.com/#{repo}.git" }
3
+ <% unless options[:skip_gemspec] -%>
3
4
 
4
- <% if options[:skip_gemspec] -%>
5
- <%= '# ' if options.dev? || options.edge? -%>gem 'rails', '<%= Array(rails_version_specifier).join("', '") %>'
6
- <% else -%>
7
- # Declare your gem's dependencies in <%= name %>.gemspec.
8
- # Bundler will treat runtime dependencies like base dependencies, and
9
- # development dependencies will be added by default to the :development group.
5
+ # Specify your gem's dependencies in <%= name %>.gemspec.
10
6
  gemspec
11
7
  <% end -%>
12
-
13
- <% if options[:skip_gemspec] -%>
14
- group :development do
15
- gem '<%= gem_for_database[0] %>'
16
- end
17
- <% else -%>
18
- # Declare any dependencies that are still in development here instead of in
19
- # your gemspec. These might include edge Rails or gems from your path or
20
- # Git. Remember to move these dependencies to your gemspec before releasing
21
- # your gem to rubygems.org.
8
+ <% gemfile_entries.each do |gemfile_entry| %>
9
+ <%= gemfile_entry %>
22
10
  <% end -%>
11
+ <% if RUBY_ENGINE == "ruby" -%>
23
12
 
24
- <% if options.dev? || options.edge? -%>
25
- # Your gem is dependent on dev or edge Rails. Once you can lock this
26
- # dependency down to a specific version, move it to your gemspec.
27
- <% max_width = gemfile_entries.map { |g| g.name.length }.max -%>
28
- <% gemfile_entries.each do |gem| -%>
29
- <% if gem.comment -%>
30
-
31
- # <%= gem.comment %>
32
- <% end -%>
33
- <%= gem.commented_out ? '# ' : '' %>gem '<%= gem.name %>'<%= %(, '#{gem.version}') if gem.version -%>
34
- <% if gem.options.any? -%>
35
- , <%= gem.options.map { |k,v|
36
- "#{k}: #{v.inspect}" }.join(', ') %>
37
- <% end -%>
38
- <% end -%>
39
-
40
- <% end -%>
41
- <% if RUBY_ENGINE == 'ruby' -%>
42
- # To use a debugger
43
- # gem 'byebug', group: [:development, :test]
13
+ # Start debugger with binding.b [https://github.com/ruby/debug]
14
+ # gem "debug", ">= 1.0.0"
44
15
  <% end -%>
45
- <% if RUBY_PLATFORM.match(/bccwin|cygwin|emx|mingw|mswin|wince|java/) -%>
16
+ <% if RUBY_PLATFORM.match?(/mingw|mswin|java/) -%>
46
17
 
47
- gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby]
18
+ gem "tzinfo-data", platforms: %i[ <%= bundler_windows_platforms %> jruby ]
48
19
  <% end -%>
@@ -1,4 +1,4 @@
1
- Copyright <%= Date.today.year %> <%= author %>
1
+ Copyright <%= author %>
2
2
 
3
3
  Permission is hereby granted, free of charge, to any person obtaining
4
4
  a copy of this software and associated documentation files (the
@@ -8,7 +8,7 @@ How to use my plugin.
8
8
  Add this line to your application's Gemfile:
9
9
 
10
10
  ```ruby
11
- gem '<%= name %>'
11
+ gem "<%= name %>"
12
12
  ```
13
13
 
14
14
  And then execute:
@@ -1,28 +1,14 @@
1
- begin
2
- require 'bundler/setup'
3
- rescue LoadError
4
- puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
5
- end
6
-
7
- require 'rdoc/task'
8
-
9
- RDoc::Task.new(:rdoc) do |rdoc|
10
- rdoc.rdoc_dir = 'rdoc'
11
- rdoc.title = '<%= camelized_modules %>'
12
- rdoc.options << '--line-numbers'
13
- rdoc.rdoc_files.include('README.md')
14
- rdoc.rdoc_files.include('lib/**/*.rb')
15
- end
1
+ require "bundler/setup"
16
2
  <% if engine? && !options[:skip_active_record] && with_dummy_app? -%>
17
3
 
18
4
  APP_RAKEFILE = File.expand_path("<%= dummy_path -%>/Rakefile", __dir__)
19
- load 'rails/tasks/engine.rake'
5
+ load "rails/tasks/engine.rake"
20
6
  <% end -%>
21
7
  <% if engine? -%>
22
8
 
23
- load 'rails/tasks/statistics.rake'
9
+ load "rails/tasks/statistics.rake"
24
10
  <% end -%>
25
11
  <% unless options[:skip_gemspec] -%>
26
12
 
27
- require 'bundler/gem_tasks'
13
+ require "bundler/gem_tasks"
28
14
  <% end -%>
@@ -1,6 +1,5 @@
1
1
  <%= wrap_in_modules <<~rb
2
2
  class ApplicationController < ActionController::#{api? ? "API" : "Base"}
3
- #{ api? ? '# ' : '' }protect_from_forgery with: :exception
4
3
  end
5
4
  rb
6
5
  %>
@@ -1,7 +1,7 @@
1
1
  <%= wrap_in_modules <<~rb
2
2
  class ApplicationMailer < ActionMailer::Base
3
- default from: 'from@example.com'
4
- layout 'mailer'
3
+ default from: "from@example.com"
4
+ layout "mailer"
5
5
  end
6
6
  rb
7
7
  %>
@@ -6,9 +6,6 @@
6
6
  <%%= csp_meta_tag %>
7
7
 
8
8
  <%%= stylesheet_link_tag "<%= namespaced_name %>/application", media: "all" %>
9
- <%- unless options[:skip_javascript] -%>
10
- <%%= javascript_include_tag "<%= namespaced_name %>/application" %>
11
- <%- end -%>
12
9
  </head>
13
10
  <body>
14
11
 
@@ -1,30 +1,15 @@
1
1
  # This command will automatically be run when you run "rails" with Rails gems
2
2
  # installed from the root of your application.
3
3
 
4
- ENGINE_ROOT = File.expand_path('..', __dir__)
5
- ENGINE_PATH = File.expand_path('../lib/<%= namespaced_name -%>/engine', __dir__)
4
+ ENGINE_ROOT = File.expand_path("..", __dir__)
5
+ ENGINE_PATH = File.expand_path("../lib/<%= namespaced_name -%>/engine", __dir__)
6
6
  <% if with_dummy_app? -%>
7
- APP_PATH = File.expand_path('../<%= dummy_path -%>/config/application', __dir__)
7
+ APP_PATH = File.expand_path("../<%= dummy_path -%>/config/application", __dir__)
8
8
  <% end -%>
9
9
 
10
10
  # Set up gems listed in the Gemfile.
11
- ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../Gemfile', __dir__)
12
- require 'bundler/setup' if File.exist?(ENV['BUNDLE_GEMFILE'])
11
+ ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../Gemfile", __dir__)
12
+ require "bundler/setup" if File.exist?(ENV["BUNDLE_GEMFILE"])
13
13
 
14
- <% if include_all_railties? -%>
15
- require 'rails/all'
16
- <% else -%>
17
- require "rails"
18
- # Pick the frameworks you want:
19
- require "active_model/railtie"
20
- require "active_job/railtie"
21
- <%= comment_if :skip_active_record %>require "active_record/railtie"
22
- <%= comment_if :skip_active_storage %>require "active_storage/engine"
23
- require "action_controller/railtie"
24
- <%= comment_if :skip_action_mailer %>require "action_mailer/railtie"
25
- require "action_view/railtie"
26
- <%= comment_if :skip_action_cable %>require "action_cable/engine"
27
- <%= comment_if :skip_sprockets %>require "sprockets/railtie"
28
- <%= comment_if :skip_test %>require "rails/test_unit/railtie"
29
- <% end -%>
30
- require 'rails/engine/commands'
14
+ <%= rails_require_statement %>
15
+ require "rails/engine/commands"
@@ -1,18 +1,14 @@
1
- .bundle/
2
- log/*.log
3
- pkg/
1
+ /.bundle/
2
+ /doc/
3
+ /log/*.log
4
+ /pkg/
5
+ /tmp/
4
6
  <% if with_dummy_app? -%>
5
7
  <% if sqlite3? -%>
6
- <%= dummy_path %>/db/*.sqlite3
7
- <%= dummy_path %>/db/*.sqlite3-journal
8
+ /<%= dummy_path %>/db/*.sqlite3
9
+ /<%= dummy_path %>/db/*.sqlite3-*
8
10
  <% end -%>
9
- <%= dummy_path %>/log/*.log
10
- <% unless options[:skip_javascript] -%>
11
- <%= dummy_path %>/node_modules/
12
- <%= dummy_path %>/yarn-error.log
13
- <% end -%>
14
- <% unless skip_active_storage? -%>
15
- <%= dummy_path %>/storage/
16
- <% end -%>
17
- <%= dummy_path %>/tmp/
11
+ /<%= dummy_path %>/log/*.log
12
+ /<%= dummy_path %>/storage/
13
+ /<%= dummy_path %>/tmp/
18
14
  <% end -%>
@@ -1,7 +1,7 @@
1
1
  <%= wrap_in_modules <<~rb
2
2
  class Engine < ::Rails::Engine
3
- #{mountable? ? ' isolate_namespace ' + camelized_modules : ' '}
4
- #{api? ? " config.generators.api_only = true" : ' '}
3
+ #{mountable? ? " isolate_namespace " + camelized_modules : " "}
4
+ #{api? ? " config.generators.api_only = true" : " "}
5
5
  end
6
6
  rb
7
7
  %>
@@ -1 +1 @@
1
- <%= wrap_in_modules "VERSION = '0.1.0'" %>
1
+ <%= wrap_in_modules 'VERSION = "0.1.0"' %>
@@ -1,3 +1,4 @@
1
+ require "<%= namespaced_name %>/version"
1
2
  <% if engine? -%>
2
3
  require "<%= namespaced_name %>/engine"
3
4
  <% else -%>
@@ -1,5 +1,5 @@
1
1
  # Set up gems listed in the Gemfile.
2
- ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../../Gemfile', __dir__)
2
+ ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../../../Gemfile", __dir__)
3
3
 
4
- require 'bundler/setup' if File.exist?(ENV['BUNDLE_GEMFILE'])
5
- $LOAD_PATH.unshift File.expand_path('../../../lib', __dir__)
4
+ require "bundler/setup" if File.exist?(ENV["BUNDLE_GEMFILE"])
5
+ $LOAD_PATH.unshift File.expand_path("../../../lib", __dir__)
@@ -1,7 +1,7 @@
1
- require 'test_helper'
1
+ require "test_helper"
2
2
 
3
- class <%= camelized_modules %>::Test < ActiveSupport::TestCase
4
- test "truth" do
5
- assert_kind_of Module, <%= camelized_modules %>
3
+ class <%= camelized_modules %>Test < ActiveSupport::TestCase
4
+ test "it has a version number" do
5
+ assert <%= camelized_modules %>::VERSION
6
6
  end
7
7
  end
@@ -1,4 +1,4 @@
1
- require 'test_helper'
1
+ require "test_helper"
2
2
 
3
3
  class NavigationTest < ActionDispatch::IntegrationTest
4
4
  # test "the truth" do
@@ -1,29 +1,21 @@
1
1
  # Configure Rails Environment
2
2
  ENV["RAILS_ENV"] = "test"
3
3
 
4
- require_relative "<%= File.join('..', options[:dummy_path], 'config/environment') -%>"
4
+ require_relative "<%= File.join("..", options[:dummy_path], "config/environment") -%>"
5
5
  <% unless options[:skip_active_record] -%>
6
6
  ActiveRecord::Migrator.migrations_paths = [File.expand_path("../<%= options[:dummy_path] -%>/db/migrate", __dir__)]
7
7
  <% if options[:mountable] -%>
8
- ActiveRecord::Migrator.migrations_paths << File.expand_path('../db/migrate', __dir__)
8
+ ActiveRecord::Migrator.migrations_paths << File.expand_path("../db/migrate", __dir__)
9
9
  <% end -%>
10
10
  <% end -%>
11
11
  require "rails/test_help"
12
12
 
13
- # Filter out the backtrace from minitest while preserving the one from other libraries.
14
- Minitest.backtrace_filter = Minitest::BacktraceFilter.new
15
-
16
- <% unless engine? -%>
17
- require "rails/test_unit/reporter"
18
- Rails::TestUnitReporter.executable = 'bin/test'
19
- <% end -%>
20
-
21
13
  <% unless options[:skip_active_record] -%>
22
14
  # Load fixtures from the engine
23
- if ActiveSupport::TestCase.respond_to?(:fixture_path=)
24
- ActiveSupport::TestCase.fixture_path = File.expand_path("fixtures", __dir__)
25
- ActionDispatch::IntegrationTest.fixture_path = ActiveSupport::TestCase.fixture_path
26
- ActiveSupport::TestCase.file_fixture_path = ActiveSupport::TestCase.fixture_path + "/files"
15
+ if ActiveSupport::TestCase.respond_to?(:fixture_paths=)
16
+ ActiveSupport::TestCase.fixture_paths = [File.expand_path("fixtures", __dir__)]
17
+ ActionDispatch::IntegrationTest.fixture_paths = ActiveSupport::TestCase.fixture_paths
18
+ ActiveSupport::TestCase.file_fixture_path = File.expand_path("fixtures", __dir__) + "/files"
27
19
  ActiveSupport::TestCase.fixtures :all
28
20
  end
29
21
  <% end -%>
@@ -1,5 +1,5 @@
1
1
  Description:
2
- Stubs out a new resource including an empty model and controller suitable
2
+ Generates a new resource including an empty model and controller suitable
3
3
  for a RESTful, resource-oriented application. Pass the singular model name,
4
4
  either CamelCased or under_scored, as the first argument, and an optional
5
5
  list of attribute pairs.
@@ -18,6 +18,6 @@ Description:
18
18
  views or add any methods to the generated controller.
19
19
 
20
20
  Examples:
21
- `rails generate resource post` # no attributes
22
- `rails generate resource post title:string body:text published:boolean`
23
- `rails generate resource purchase order_id:integer amount:decimal`
21
+ `bin/rails generate resource post` # no attributes
22
+ `bin/rails generate resource post title:string body:text published:boolean`
23
+ `bin/rails generate resource purchase order_id:integer amount:decimal`
@@ -16,6 +16,12 @@ module Rails
16
16
  desc: "Actions for the resource controller"
17
17
 
18
18
  hook_for :resource_route, required: true
19
+
20
+ class << self
21
+ def desc(description = nil)
22
+ ERB.new(File.read(usage_path)).result(binding)
23
+ end
24
+ end
19
25
  end
20
26
  end
21
27
  end