railties 6.1.0 → 7.0.0

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 (161) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +121 -276
  3. data/MIT-LICENSE +1 -1
  4. data/RDOC_MAIN.rdoc +16 -16
  5. data/README.rdoc +1 -2
  6. data/lib/rails/all.rb +0 -1
  7. data/lib/rails/api/task.rb +1 -1
  8. data/lib/rails/app_updater.rb +3 -5
  9. data/lib/rails/application/bootstrap.rb +21 -5
  10. data/lib/rails/application/configuration.rb +79 -33
  11. data/lib/rails/application/default_middleware_stack.rb +7 -3
  12. data/lib/rails/application/finisher.rb +42 -85
  13. data/lib/rails/application/routes_reloader.rb +8 -0
  14. data/lib/rails/application.rb +32 -51
  15. data/lib/rails/application_controller.rb +2 -2
  16. data/lib/rails/autoloaders/inflector.rb +21 -0
  17. data/lib/rails/autoloaders.rb +12 -16
  18. data/lib/rails/code_statistics.rb +2 -2
  19. data/lib/rails/code_statistics_calculator.rb +10 -1
  20. data/lib/rails/command/base.rb +26 -12
  21. data/lib/rails/command/behavior.rb +1 -1
  22. data/lib/rails/command/environment_argument.rb +1 -1
  23. data/lib/rails/command.rb +11 -10
  24. data/lib/rails/commands/credentials/USAGE +4 -2
  25. data/lib/rails/commands/credentials/credentials_command/diffing.rb +26 -16
  26. data/lib/rails/commands/credentials/credentials_command.rb +8 -3
  27. data/lib/rails/commands/dbconsole/dbconsole_command.rb +10 -11
  28. data/lib/rails/commands/help/USAGE +3 -2
  29. data/lib/rails/commands/notes/notes_command.rb +2 -2
  30. data/lib/rails/commands/runner/runner_command.rb +3 -2
  31. data/lib/rails/commands/server/server_command.rb +2 -5
  32. data/lib/rails/configuration.rb +18 -23
  33. data/lib/rails/engine/configuration.rb +3 -3
  34. data/lib/rails/engine.rb +18 -24
  35. data/lib/rails/gem_version.rb +2 -2
  36. data/lib/rails/generators/actions/create_migration.rb +4 -4
  37. data/lib/rails/generators/actions.rb +35 -13
  38. data/lib/rails/generators/app_base.rb +140 -102
  39. data/lib/rails/generators/app_name.rb +1 -1
  40. data/lib/rails/generators/base.rb +9 -13
  41. data/lib/rails/generators/erb/scaffold/scaffold_generator.rb +2 -0
  42. data/lib/rails/generators/erb/scaffold/templates/_form.html.erb.tt +8 -8
  43. data/lib/rails/generators/erb/scaffold/templates/edit.html.erb.tt +8 -4
  44. data/lib/rails/generators/erb/scaffold/templates/index.html.erb.tt +11 -28
  45. data/lib/rails/generators/erb/scaffold/templates/new.html.erb.tt +7 -3
  46. data/lib/rails/generators/erb/scaffold/templates/partial.html.erb.tt +17 -0
  47. data/lib/rails/generators/erb/scaffold/templates/show.html.erb.tt +8 -17
  48. data/lib/rails/generators/erb.rb +1 -1
  49. data/lib/rails/generators/generated_attribute.rb +45 -9
  50. data/lib/rails/generators/migration.rb +2 -6
  51. data/lib/rails/generators/model_helpers.rb +1 -1
  52. data/lib/rails/generators/named_base.rb +11 -11
  53. data/lib/rails/generators/rails/app/app_generator.rb +54 -93
  54. data/lib/rails/generators/rails/app/templates/Gemfile.tt +42 -52
  55. data/lib/rails/generators/rails/app/templates/app/assets/stylesheets/application.css.tt +2 -2
  56. data/lib/rails/generators/rails/app/templates/app/mailers/application_mailer.rb.tt +2 -2
  57. data/lib/rails/generators/rails/app/templates/app/models/application_record.rb.tt +1 -1
  58. data/lib/rails/generators/rails/app/templates/app/views/layouts/application.html.erb.tt +3 -9
  59. data/lib/rails/generators/rails/app/templates/bin/rails.tt +1 -4
  60. data/lib/rails/generators/rails/app/templates/bin/rake.tt +0 -3
  61. data/lib/rails/generators/rails/app/templates/bin/setup.tt +9 -14
  62. data/lib/rails/generators/rails/app/templates/config/application.rb.tt +0 -1
  63. data/lib/rails/generators/rails/app/templates/config/boot.rb.tt +1 -1
  64. data/lib/rails/generators/rails/app/templates/config/databases/jdbc.yml.tt +2 -2
  65. data/lib/rails/generators/rails/app/templates/config/databases/jdbcmysql.yml.tt +3 -3
  66. data/lib/rails/generators/rails/app/templates/config/databases/jdbcpostgresql.yml.tt +3 -3
  67. data/lib/rails/generators/rails/app/templates/config/databases/jdbcsqlite3.yml.tt +2 -2
  68. data/lib/rails/generators/rails/app/templates/config/databases/mysql.yml.tt +3 -3
  69. data/lib/rails/generators/rails/app/templates/config/databases/oracle.yml.tt +2 -2
  70. data/lib/rails/generators/rails/app/templates/config/databases/postgresql.yml.tt +3 -3
  71. data/lib/rails/generators/rails/app/templates/config/databases/sqlite3.yml.tt +1 -1
  72. data/lib/rails/generators/rails/app/templates/config/databases/sqlserver.yml.tt +5 -5
  73. data/lib/rails/generators/rails/app/templates/config/environments/development.rb.tt +6 -12
  74. data/lib/rails/generators/rails/app/templates/config/environments/production.rb.tt +11 -38
  75. data/lib/rails/generators/rails/app/templates/config/environments/test.rb.tt +6 -11
  76. data/lib/rails/generators/rails/app/templates/config/initializers/assets.rb.tt +1 -5
  77. data/lib/rails/generators/rails/app/templates/config/initializers/content_security_policy.rb.tt +19 -25
  78. data/lib/rails/generators/rails/app/templates/config/initializers/cors.rb.tt +2 -2
  79. data/lib/rails/generators/rails/app/templates/config/initializers/inflections.rb.tt +4 -4
  80. data/lib/rails/generators/rails/app/templates/config/initializers/new_framework_defaults_7_0.rb.tt +117 -0
  81. data/lib/rails/generators/rails/app/templates/config/locales/en.yml +3 -3
  82. data/lib/rails/generators/rails/app/templates/config/puma.rb.tt +1 -1
  83. data/lib/rails/generators/rails/app/templates/config/routes.rb.tt +4 -1
  84. data/lib/rails/generators/rails/app/templates/config/storage.yml.tt +5 -5
  85. data/lib/rails/generators/rails/app/templates/db/seeds.rb.tt +2 -2
  86. data/lib/rails/generators/rails/app/templates/gitattributes.tt +0 -5
  87. data/lib/rails/generators/rails/app/templates/gitignore.tt +3 -1
  88. data/lib/rails/generators/rails/app/templates/test/test_helper.rb.tt +1 -1
  89. data/lib/rails/generators/rails/controller/controller_generator.rb +1 -2
  90. data/lib/rails/generators/rails/controller/templates/controller.rb.tt +0 -4
  91. data/lib/rails/generators/rails/db/system/change/change_generator.rb +1 -1
  92. data/lib/rails/generators/rails/generator/templates/%file_name%_generator.rb.tt +1 -1
  93. data/lib/rails/generators/rails/plugin/plugin_generator.rb +42 -24
  94. data/lib/rails/generators/rails/plugin/templates/%name%.gemspec.tt +7 -3
  95. data/lib/rails/generators/rails/plugin/templates/Gemfile.tt +11 -20
  96. data/lib/rails/generators/rails/plugin/templates/README.md.tt +1 -1
  97. data/lib/rails/generators/rails/plugin/templates/app/mailers/%namespaced_name%/application_mailer.rb.tt +2 -2
  98. data/lib/rails/generators/rails/plugin/templates/app/views/layouts/%namespaced_name%/application.html.erb.tt +0 -3
  99. data/lib/rails/generators/rails/plugin/templates/bin/rails.tt +4 -5
  100. data/lib/rails/generators/rails/plugin/templates/gitignore.tt +0 -5
  101. data/lib/rails/generators/rails/plugin/templates/lib/%namespaced_name%/engine.rb.tt +2 -2
  102. data/lib/rails/generators/rails/plugin/templates/lib/%namespaced_name%/version.rb.tt +1 -1
  103. data/lib/rails/generators/rails/plugin/templates/rails/boot.rb.tt +2 -2
  104. data/lib/rails/generators/rails/plugin/templates/test/test_helper.rb.tt +2 -7
  105. data/lib/rails/generators/rails/scaffold/scaffold_generator.rb +0 -19
  106. data/lib/rails/generators/rails/scaffold_controller/templates/api_controller.rb.tt +1 -5
  107. data/lib/rails/generators/rails/scaffold_controller/templates/controller.rb.tt +6 -10
  108. data/lib/rails/generators/resource_helpers.rb +2 -2
  109. data/lib/rails/generators/test_unit/generator/templates/generator_test.rb.tt +1 -1
  110. data/lib/rails/generators/test_unit/model/templates/fixtures.yml.tt +2 -2
  111. data/lib/rails/generators/test_unit/scaffold/scaffold_generator.rb +3 -3
  112. data/lib/rails/generators/test_unit/scaffold/templates/api_functional_test.rb.tt +5 -5
  113. data/lib/rails/generators/test_unit/scaffold/templates/functional_test.rb.tt +7 -7
  114. data/lib/rails/generators/test_unit/scaffold/templates/system_test.rb.tt +9 -11
  115. data/lib/rails/generators/testing/behaviour.rb +3 -4
  116. data/lib/rails/generators.rb +9 -22
  117. data/lib/rails/info.rb +1 -1
  118. data/lib/rails/info_controller.rb +1 -3
  119. data/lib/rails/initializable.rb +1 -1
  120. data/lib/rails/mailers_controller.rb +2 -4
  121. data/lib/rails/rack/logger.rb +0 -1
  122. data/lib/rails/railtie/configuration.rb +1 -2
  123. data/lib/rails/railtie.rb +31 -14
  124. data/lib/rails/ruby_version_check.rb +3 -3
  125. data/lib/rails/secrets.rb +4 -1
  126. data/lib/rails/source_annotation_extractor.rb +1 -1
  127. data/lib/rails/tasks/framework.rake +2 -8
  128. data/lib/rails/tasks/statistics.rake +3 -1
  129. data/lib/rails/tasks/tmp.rake +8 -1
  130. data/lib/rails/tasks/yarn.rake +10 -7
  131. data/lib/rails/tasks/zeitwerk.rake +2 -10
  132. data/lib/rails/templates/layouts/application.html.erb +15 -0
  133. data/lib/rails/templates/rails/mailers/email.html.erb +13 -11
  134. data/lib/rails/templates/rails/welcome/index.html.erb +62 -47
  135. data/lib/rails/test_unit/railtie.rb +0 -4
  136. data/lib/rails/test_unit/runner.rb +16 -9
  137. data/lib/rails/test_unit/testing.rake +4 -9
  138. data/lib/rails/welcome_controller.rb +1 -0
  139. data/lib/rails.rb +5 -0
  140. metadata +33 -36
  141. data/lib/rails/command/spellchecker.rb +0 -57
  142. data/lib/rails/generators/css/assets/assets_generator.rb +0 -15
  143. data/lib/rails/generators/css/assets/templates/stylesheet.css +0 -4
  144. data/lib/rails/generators/css/scaffold/scaffold_generator.rb +0 -18
  145. data/lib/rails/generators/rails/app/templates/app/javascript/channels/consumer.js +0 -6
  146. data/lib/rails/generators/rails/app/templates/app/javascript/channels/index.js +0 -5
  147. data/lib/rails/generators/rails/app/templates/app/javascript/packs/application.js.tt +0 -23
  148. data/lib/rails/generators/rails/app/templates/bin/spring.tt +0 -9
  149. data/lib/rails/generators/rails/app/templates/bin/yarn.tt +0 -18
  150. data/lib/rails/generators/rails/app/templates/config/initializers/application_controller_renderer.rb.tt +0 -8
  151. data/lib/rails/generators/rails/app/templates/config/initializers/backtrace_silencers.rb.tt +0 -8
  152. data/lib/rails/generators/rails/app/templates/config/initializers/cookies_serializer.rb.tt +0 -5
  153. data/lib/rails/generators/rails/app/templates/config/initializers/mime_types.rb.tt +0 -4
  154. data/lib/rails/generators/rails/app/templates/config/initializers/new_framework_defaults_6_1.rb.tt +0 -63
  155. data/lib/rails/generators/rails/app/templates/config/initializers/wrap_parameters.rb.tt +0 -16
  156. data/lib/rails/generators/rails/app/templates/config/spring.rb.tt +0 -6
  157. data/lib/rails/generators/rails/app/templates/package.json.tt +0 -11
  158. data/lib/rails/generators/rails/assets/USAGE +0 -16
  159. data/lib/rails/generators/rails/assets/assets_generator.rb +0 -26
  160. data/lib/rails/generators/rails/assets/templates/stylesheet.css +0 -4
  161. data/lib/rails/generators/rails/scaffold/templates/scaffold.css +0 -80
@@ -4,11 +4,11 @@
4
4
  #
5
5
  # To use the locales, use `I18n.t`:
6
6
  #
7
- # I18n.t 'hello'
7
+ # I18n.t "hello"
8
8
  #
9
9
  # In views, this is aliased to just `t`:
10
10
  #
11
- # <%= t('hello') %>
11
+ # <%= t("hello") %>
12
12
  #
13
13
  # To use a different locale, set it with `I18n.locale`:
14
14
  #
@@ -24,7 +24,7 @@
24
24
  # Instead, surround them with single quotes.
25
25
  #
26
26
  # en:
27
- # 'true': 'foo'
27
+ # "true": "foo"
28
28
  #
29
29
  # To learn more, please read the Rails Internationalization guide
30
30
  # available at https://guides.rubyonrails.org/i18n.html.
@@ -39,5 +39,5 @@ pidfile ENV.fetch("PIDFILE") { "tmp/pids/server.pid" }
39
39
  #
40
40
  # preload_app!
41
41
 
42
- # Allow puma to be restarted by `rails restart` command.
42
+ # Allow puma to be restarted by `bin/rails restart` command.
43
43
  plugin :tmp_restart
@@ -1,3 +1,6 @@
1
1
  Rails.application.routes.draw do
2
- # For details on the DSL available within this file, see https://guides.rubyonrails.org/routing.html
2
+ # Define your application routes per the DSL in https://guides.rubyonrails.org/routing.html
3
+
4
+ # Defines the root path route ("/")
5
+ # root "articles#index"
3
6
  end
@@ -6,27 +6,27 @@ local:
6
6
  service: Disk
7
7
  root: <%%= Rails.root.join("storage") %>
8
8
 
9
- # Use rails credentials:edit to set the AWS secrets (as aws:access_key_id|secret_access_key)
9
+ # Use bin/rails credentials:edit to set the AWS secrets (as aws:access_key_id|secret_access_key)
10
10
  # amazon:
11
11
  # service: S3
12
12
  # access_key_id: <%%= Rails.application.credentials.dig(:aws, :access_key_id) %>
13
13
  # secret_access_key: <%%= Rails.application.credentials.dig(:aws, :secret_access_key) %>
14
14
  # region: us-east-1
15
- # bucket: your_own_bucket
15
+ # bucket: your_own_bucket-<%%= Rails.env %>
16
16
 
17
17
  # Remember not to checkin your GCS keyfile to a repository
18
18
  # google:
19
19
  # service: GCS
20
20
  # project: your_project
21
21
  # credentials: <%%= Rails.root.join("path/to/gcs.keyfile") %>
22
- # bucket: your_own_bucket
22
+ # bucket: your_own_bucket-<%%= Rails.env %>
23
23
 
24
- # Use rails credentials:edit to set the Azure Storage secret (as azure_storage:storage_access_key)
24
+ # Use bin/rails credentials:edit to set the Azure Storage secret (as azure_storage:storage_access_key)
25
25
  # microsoft:
26
26
  # service: AzureStorage
27
27
  # storage_account_name: your_account_name
28
28
  # storage_access_key: <%%= Rails.application.credentials.dig(:azure_storage, :storage_access_key) %>
29
- # container: your_container_name
29
+ # container: your_container_name-<%%= Rails.env %>
30
30
 
31
31
  # mirror:
32
32
  # service: Mirror
@@ -3,5 +3,5 @@
3
3
  #
4
4
  # Examples:
5
5
  #
6
- # movies = Movie.create([{ name: 'Star Wars' }, { name: 'Lord of the Rings' }])
7
- # Character.create(name: 'Luke', movie: movies.first)
6
+ # movies = Movie.create([{ name: "Star Wars" }, { name: "Lord of the Rings" }])
7
+ # Character.create(name: "Luke", movie: movies.first)
@@ -5,10 +5,5 @@
5
5
  db/schema.rb linguist-generated
6
6
  <% end -%>
7
7
 
8
- <% unless options[:skip_javascript] -%>
9
- # Mark the yarn lockfile as having been generated.
10
- yarn.lock linguist-generated
11
- <% end -%>
12
-
13
8
  # Mark any vendored files as having been vendored.
14
9
  vendor/* linguist-vendored
@@ -31,10 +31,12 @@
31
31
  /storage/*
32
32
  <% if keeps? -%>
33
33
  !/storage/.keep
34
+ /tmp/storage/*
35
+ !/tmp/storage/
36
+ !/tmp/storage/.keep
34
37
  <% end -%>
35
38
  <% end -%>
36
39
  <% unless options.api? -%>
37
40
 
38
41
  /public/assets
39
42
  <% end -%>
40
- .byebug_history
@@ -1,4 +1,4 @@
1
- ENV['RAILS_ENV'] ||= 'test'
1
+ ENV["RAILS_ENV"] ||= "test"
2
2
  require_relative "../config/environment"
3
3
  require "rails/test_help"
4
4
 
@@ -6,7 +6,6 @@ module Rails
6
6
  argument :actions, type: :array, default: [], banner: "action action"
7
7
  class_option :skip_routes, type: :boolean, desc: "Don't add routes to config/routes.rb."
8
8
  class_option :helper, type: :boolean
9
- class_option :assets, type: :boolean
10
9
 
11
10
  check_class_collision suffix: "Controller"
12
11
 
@@ -21,7 +20,7 @@ module Rails
21
20
  route routing_code, namespace: regular_class_path
22
21
  end
23
22
 
24
- hook_for :template_engine, :test_framework, :helper, :assets do |generator|
23
+ hook_for :template_engine, :test_framework, :helper do |generator|
25
24
  invoke generator, [ remove_possible_suffix(name), actions ]
26
25
  end
27
26
 
@@ -1,7 +1,3 @@
1
- <% if namespaced? -%>
2
- require_dependency "<%= namespaced_path %>/application_controller"
3
-
4
- <% end -%>
5
1
  <% module_namespacing do -%>
6
2
  class <%= class_name %>Controller < ApplicationController
7
3
  <% actions.each do |action| -%>
@@ -55,7 +55,7 @@ module Rails
55
55
  end
56
56
 
57
57
  def gem_entry_for(*gem_name_and_version)
58
- gem_name_and_version.map! { |segment| "'#{segment}'" }
58
+ gem_name_and_version.map! { |segment| "\"#{segment}\"" }
59
59
  "gem #{gem_name_and_version.join(", ")}"
60
60
  end
61
61
  end
@@ -1,3 +1,3 @@
1
1
  class <%= class_name %>Generator < Rails::Generators::NamedBase
2
- source_root File.expand_path('templates', __dir__)
2
+ source_root File.expand_path("templates", __dir__)
3
3
  end
@@ -26,11 +26,15 @@ module Rails
26
26
  empty_directory_with_keep_file "app/assets/images/#{namespaced_name}"
27
27
  end
28
28
 
29
+ empty_directory_with_keep_file "app/models/concerns"
30
+ empty_directory_with_keep_file "app/controllers/concerns"
29
31
  remove_dir "app/mailers" if options[:skip_action_mailer]
30
32
  remove_dir "app/jobs" if options[:skip_active_job]
31
33
  elsif full?
32
34
  empty_directory_with_keep_file "app/models"
33
35
  empty_directory_with_keep_file "app/controllers"
36
+ empty_directory_with_keep_file "app/models/concerns"
37
+ empty_directory_with_keep_file "app/controllers/concerns"
34
38
  empty_directory_with_keep_file "app/mailers" unless options[:skip_action_mailer]
35
39
  empty_directory_with_keep_file "app/jobs" unless options[:skip_active_job]
36
40
 
@@ -51,7 +55,7 @@ module Rails
51
55
  end
52
56
 
53
57
  def license
54
- template "MIT-LICENSE"
58
+ template "MIT-LICENSE" unless inside_application?
55
59
  end
56
60
 
57
61
  def gemspec
@@ -65,6 +69,9 @@ module Rails
65
69
  def version_control
66
70
  if !options[:skip_git] && !options[:pretend]
67
71
  run "git init", capture: options[:quiet], abort_on_failure: false
72
+ if user_default_branch.strip.empty?
73
+ `git symbolic-ref HEAD refs/heads/main`
74
+ end
68
75
  end
69
76
  end
70
77
 
@@ -87,12 +94,18 @@ module Rails
87
94
  def test
88
95
  template "test/test_helper.rb"
89
96
  template "test/%namespaced_name%_test.rb"
90
- append_file "Rakefile", <<-EOF
91
97
 
92
- #{rakefile_test_tasks}
93
- task default: :test
94
- EOF
95
98
  if engine?
99
+ empty_directory_with_keep_file "test/fixtures/files"
100
+ empty_directory_with_keep_file "test/controllers"
101
+ empty_directory_with_keep_file "test/mailers"
102
+ empty_directory_with_keep_file "test/models"
103
+ empty_directory_with_keep_file "test/integration"
104
+
105
+ unless api?
106
+ empty_directory_with_keep_file "test/helpers"
107
+ end
108
+
96
109
  template "test/integration/navigation_test.rb"
97
110
  end
98
111
  end
@@ -103,10 +116,8 @@ task default: :test
103
116
  opts = options.transform_keys(&:to_sym).except(*DUMMY_IGNORE_OPTIONS)
104
117
  opts[:force] = force
105
118
  opts[:skip_bundle] = true
106
- opts[:skip_listen] = true
107
119
  opts[:skip_git] = true
108
- opts[:skip_turbolinks] = true
109
- opts[:skip_webpack_install] = true
120
+ opts[:skip_hotwire] = true
110
121
  opts[:dummy_app] = true
111
122
 
112
123
  invoke Rails::Generators::AppGenerator,
@@ -123,10 +134,16 @@ task default: :test
123
134
  if mountable?
124
135
  template "rails/routes.rb", "#{dummy_path}/config/routes.rb", force: true
125
136
  end
137
+ if engine? && !api?
138
+ insert_into_file "#{dummy_path}/config/application.rb", indent(<<~RUBY, 4), after: /^\s*config\.load_defaults.*\n/
139
+
140
+ # For compatibility with applications that use this config
141
+ config.action_controller.include_all_helpers = false
142
+ RUBY
143
+ end
126
144
  end
127
145
 
128
- def test_dummy_assets
129
- template "rails/javascripts.js", "#{dummy_path}/app/javascript/packs/application.js", force: true
146
+ def test_dummy_sprocket_assets
130
147
  template "rails/stylesheets.css", "#{dummy_path}/app/assets/stylesheets/application.css", force: true
131
148
  template "rails/dummy_manifest.js", "#{dummy_path}/app/assets/config/manifest.js", force: true
132
149
  end
@@ -174,6 +191,11 @@ task default: :test
174
191
  append_file gemfile_in_app_path, entry
175
192
  end
176
193
  end
194
+
195
+ private
196
+ def user_default_branch
197
+ @user_default_branch ||= `git config init.defaultbranch`
198
+ end
177
199
  end
178
200
 
179
201
  module Generators
@@ -209,13 +231,17 @@ task default: :test
209
231
  public_task :set_default_accessors!
210
232
  public_task :create_root
211
233
 
234
+ def target_rails_prerelease
235
+ super("plugin new")
236
+ end
237
+
212
238
  def create_root_files
213
239
  build(:readme)
214
240
  build(:rakefile)
215
241
  build(:gemspec) unless options[:skip_gemspec]
216
242
  build(:license)
217
243
  build(:gitignore) unless options[:skip_git]
218
- build(:gemfile) unless options[:skip_gemfile]
244
+ build(:gemfile)
219
245
  build(:version_control)
220
246
  end
221
247
 
@@ -290,7 +316,7 @@ task default: :test
290
316
  mute do
291
317
  build(:generate_test_dummy)
292
318
  build(:test_dummy_config)
293
- build(:test_dummy_assets)
319
+ build(:test_dummy_sprocket_assets) unless skip_sprockets?
294
320
  build(:test_dummy_clean)
295
321
  # ensure that bin/rails has proper dummy_path
296
322
  build(:bin, true)
@@ -372,6 +398,10 @@ task default: :test
372
398
  end
373
399
  end
374
400
 
401
+ def rails_version_specifier(gem_version = Rails.gem_version)
402
+ [">= #{gem_version}"]
403
+ end
404
+
375
405
  def valid_const?
376
406
  if /-\d/.match?(original_name)
377
407
  raise Error, "Invalid plugin name #{original_name}. Please give a name which does not contain a namespace starting with numeric characters."
@@ -392,18 +422,6 @@ task default: :test
392
422
  defined?(::PluginBuilder) ? ::PluginBuilder : Rails::PluginBuilder
393
423
  end
394
424
 
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
425
  def dummy_path(path = nil)
408
426
  @dummy_path = path if path
409
427
  @dummy_path || options[:dummy_path]
@@ -8,9 +8,11 @@ Gem::Specification.new do |spec|
8
8
  spec.homepage = "TODO"
9
9
  spec.summary = "TODO: Summary of <%= camelized_modules %>."
10
10
  spec.description = "TODO: Description of <%= camelized_modules %>."
11
+ <% unless inside_application? -%>
11
12
  spec.license = "MIT"
13
+ <% end -%>
12
14
 
13
- # 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"
14
16
  # to allow pushing to a single host or delete this section to allow pushing to any host.
15
17
  spec.metadata["allowed_push_host"] = "TODO: Set to 'http://mygemserver.com'"
16
18
 
@@ -18,7 +20,9 @@ Gem::Specification.new do |spec|
18
20
  spec.metadata["source_code_uri"] = "TODO: Put your gem's public repo URL here."
19
21
  spec.metadata["changelog_uri"] = "TODO: Put your gem's CHANGELOG.md URL here."
20
22
 
21
- spec.files = Dir["{app,config,db,lib}/**/*", "MIT-LICENSE", "Rakefile", "README.md"]
23
+ spec.files = Dir.chdir(File.expand_path(__dir__)) do
24
+ Dir["{app,config,db,lib}/**/*", "MIT-LICENSE", "Rakefile", "README.md"]
25
+ end
22
26
 
23
- <%= '# ' if options.dev? || options.edge? || options.master? -%>spec.add_dependency "rails", "<%= Array(rails_version_specifier).join('", "') %>"
27
+ <%= "# " if rails_prerelease? -%>spec.add_dependency "rails", "<%= Array(rails_version_specifier).join('", "') %>"
24
28
  end
@@ -1,8 +1,8 @@
1
- source 'https://rubygems.org'
1
+ source "https://rubygems.org"
2
2
  git_source(:github) { |repo| "https://github.com/#{repo}.git" }
3
3
 
4
4
  <% if options[:skip_gemspec] -%>
5
- <%= '# ' if options.dev? || options.edge? || options.master? -%>gem 'rails', '<%= Array(rails_version_specifier).join("', '") %>'
5
+ <%= "# " if rails_prerelease? -%>gem "rails", "<%= Array(rails_version_specifier).join("', '") %>"
6
6
  <% else -%>
7
7
  # Specify your gem's dependencies in <%= name %>.gemspec.
8
8
  gemspec
@@ -10,32 +10,23 @@ gemspec
10
10
  <% unless options[:skip_active_record] -%>
11
11
 
12
12
  group :development do
13
- gem '<%= gem_for_database[0] %>'
13
+ gem "<%= gem_for_database[0] %>"
14
14
  end
15
15
  <% end -%>
16
16
 
17
- <% if options.dev? || options.edge? -%>
18
- # Your gem is dependent on dev or edge Rails. Once you can lock this
17
+ <% if rails_prerelease? -%>
18
+ # Your gem is dependent on a prerelease version of Rails. Once you can lock this
19
19
  # dependency down to a specific version, move it to your gemspec.
20
- <% max_width = gemfile_entries.map { |g| g.name.length }.max -%>
21
- <% gemfile_entries.each do |gem| -%>
22
- <% if gem.comment -%>
23
-
24
- # <%= gem.comment %>
25
- <% end -%>
26
- <%= gem.commented_out ? '# ' : '' %>gem '<%= gem.name %>'<%= %(, '#{gem.version}') if gem.version -%>
27
- <% if gem.options.any? -%>
28
- , <%= gem.options.map { |k,v|
29
- "#{k}: #{v.inspect}" }.join(', ') %>
30
- <% end -%>
20
+ <% gemfile_entries.each do |gemfile_entry| -%>
21
+ <%= gemfile_entry %>
31
22
  <% end -%>
32
23
 
33
24
  <% end -%>
34
- <% if RUBY_ENGINE == 'ruby' -%>
35
- # To use a debugger
36
- # gem 'byebug', group: [:development, :test]
25
+ <% if RUBY_ENGINE == "ruby" -%>
26
+ # Start debugger with binding.b -- Read more: https://github.com/ruby/debug
27
+ # gem "debug", ">= 1.0.0", group: %i[ development test ]
37
28
  <% end -%>
38
29
  <% if RUBY_PLATFORM.match(/bccwin|cygwin|emx|mingw|mswin|wince|java/) -%>
39
30
 
40
- gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby]
31
+ gem "tzinfo-data", platforms: %i[ mingw mswin x64_mingw jruby]
41
32
  <% end -%>
@@ -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,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,14 +1,14 @@
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__)
11
+ ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../Gemfile", __dir__)
12
12
  require "bundler/setup" if File.exist?(ENV["BUNDLE_GEMFILE"])
13
13
 
14
14
  <% if include_all_railties? -%>
@@ -24,7 +24,6 @@ require "action_controller/railtie"
24
24
  <%= comment_if :skip_action_mailer %>require "action_mailer/railtie"
25
25
  require "action_view/railtie"
26
26
  <%= comment_if :skip_action_cable %>require "action_cable/engine"
27
- <%= comment_if :skip_sprockets %>require "sprockets/railtie"
28
27
  <%= comment_if :skip_test %>require "rails/test_unit/railtie"
29
28
  <% end -%>
30
29
  require "rails/engine/commands"
@@ -9,13 +9,8 @@
9
9
  /<%= dummy_path %>/db/*.sqlite3-*
10
10
  <% end -%>
11
11
  /<%= dummy_path %>/log/*.log
12
- <% unless options[:skip_javascript] -%>
13
- /<%= dummy_path %>/node_modules/
14
- /<%= dummy_path %>/yarn-error.log
15
- <% end -%>
16
12
  <% unless skip_active_storage? -%>
17
13
  /<%= dummy_path %>/storage/
18
14
  <% end -%>
19
15
  /<%= dummy_path %>/tmp/
20
16
  <% end -%>
21
- .byebug_history
@@ -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,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
4
  require "bundler/setup" if File.exist?(ENV["BUNDLE_GEMFILE"])
5
- $LOAD_PATH.unshift File.expand_path('../../../lib', __dir__)
5
+ $LOAD_PATH.unshift File.expand_path("../../../lib", __dir__)
@@ -1,20 +1,15 @@
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
- <% unless engine? -%>
14
- require "rails/test_unit/reporter"
15
- Rails::TestUnitReporter.executable = 'bin/test'
16
- <% end -%>
17
-
18
13
  <% unless options[:skip_active_record] -%>
19
14
  # Load fixtures from the engine
20
15
  if ActiveSupport::TestCase.respond_to?(:fixture_path=)
@@ -9,28 +9,9 @@ module Rails
9
9
  remove_class_option :actions
10
10
 
11
11
  class_option :api, type: :boolean
12
- class_option :stylesheets, type: :boolean, desc: "Generate Stylesheets"
13
- class_option :stylesheet_engine, desc: "Engine for Stylesheets"
14
- class_option :assets, type: :boolean
15
12
  class_option :resource_route, type: :boolean
16
- class_option :scaffold_stylesheet, type: :boolean
17
-
18
- def handle_skip
19
- @options = @options.merge(stylesheets: false) unless options[:assets]
20
- @options = @options.merge(stylesheet_engine: false) unless options[:stylesheets] && options[:scaffold_stylesheet]
21
- end
22
13
 
23
14
  hook_for :scaffold_controller, required: true
24
-
25
- hook_for :assets do |assets|
26
- invoke assets, [controller_name]
27
- end
28
-
29
- hook_for :stylesheet_engine do |stylesheet_engine|
30
- if behavior == :invoke
31
- invoke stylesheet_engine, [controller_name]
32
- end
33
- end
34
15
  end
35
16
  end
36
17
  end
@@ -1,10 +1,6 @@
1
- <% if namespaced? -%>
2
- require_dependency "<%= namespaced_path %>/application_controller"
3
-
4
- <% end -%>
5
1
  <% module_namespacing do -%>
6
2
  class <%= controller_class_name %>Controller < ApplicationController
7
- before_action :set_<%= singular_table_name %>, only: [:show, :update, :destroy]
3
+ before_action :set_<%= singular_table_name %>, only: %i[ show update destroy ]
8
4
 
9
5
  # GET <%= route_url %>
10
6
  def index
@@ -1,10 +1,6 @@
1
- <% if namespaced? -%>
2
- require_dependency "<%= namespaced_path %>/application_controller"
3
-
4
- <% end -%>
5
1
  <% module_namespacing do -%>
6
2
  class <%= controller_class_name %>Controller < ApplicationController
7
- before_action :set_<%= singular_table_name %>, only: [:show, :edit, :update, :destroy]
3
+ before_action :set_<%= singular_table_name %>, only: %i[ show edit update destroy ]
8
4
 
9
5
  # GET <%= route_url %>
10
6
  def index
@@ -29,25 +25,25 @@ class <%= controller_class_name %>Controller < ApplicationController
29
25
  @<%= singular_table_name %> = <%= orm_class.build(class_name, "#{singular_table_name}_params") %>
30
26
 
31
27
  if @<%= orm_instance.save %>
32
- redirect_to <%= redirect_resource_name %>, notice: <%= "'#{human_name} was successfully created.'" %>
28
+ redirect_to <%= redirect_resource_name %>, notice: <%= %("#{human_name} was successfully created.") %>
33
29
  else
34
- render :new
30
+ render :new, status: :unprocessable_entity
35
31
  end
36
32
  end
37
33
 
38
34
  # PATCH/PUT <%= route_url %>/1
39
35
  def update
40
36
  if @<%= orm_instance.update("#{singular_table_name}_params") %>
41
- redirect_to <%= redirect_resource_name %>, notice: <%= "'#{human_name} was successfully updated.'" %>
37
+ redirect_to <%= redirect_resource_name %>, notice: <%= %("#{human_name} was successfully updated.") %>
42
38
  else
43
- render :edit
39
+ render :edit, status: :unprocessable_entity
44
40
  end
45
41
  end
46
42
 
47
43
  # DELETE <%= route_url %>/1
48
44
  def destroy
49
45
  @<%= orm_instance.destroy %>
50
- redirect_to <%= index_helper %>_url, notice: <%= "'#{human_name} was successfully destroyed.'" %>
46
+ redirect_to <%= index_helper %>_url, notice: <%= %("#{human_name} was successfully destroyed.") %>
51
47
  end
52
48
 
53
49
  private
@@ -8,13 +8,13 @@ module Rails
8
8
  # Deal with controller names on scaffold and add some helpers to deal with
9
9
  # ActiveModel.
10
10
  module ResourceHelpers # :nodoc:
11
- def self.included(base) #:nodoc:
11
+ def self.included(base) # :nodoc:
12
12
  base.include(Rails::Generators::ModelHelpers)
13
13
  base.class_option :model_name, type: :string, desc: "ModelName to be used"
14
14
  end
15
15
 
16
16
  # Set controller variables on initialization.
17
- def initialize(*args) #:nodoc:
17
+ def initialize(*args) # :nodoc:
18
18
  super
19
19
  controller_name = name
20
20
  if options[:model_name]
@@ -4,7 +4,7 @@ require "<%= generator_path %>"
4
4
  <% module_namespacing do -%>
5
5
  class <%= class_name %>GeneratorTest < Rails::Generators::TestCase
6
6
  tests <%= class_name %>Generator
7
- destination Rails.root.join('tmp/generators')
7
+ destination Rails.root.join("tmp/generators")
8
8
  setup :prepare_destination
9
9
 
10
10
  # test "generator runs without errors" do
@@ -4,7 +4,7 @@
4
4
  <%= name %>:
5
5
  <% attributes.each do |attribute| -%>
6
6
  <%- if attribute.password_digest? -%>
7
- password_digest: <%%= BCrypt::Password.create('secret') %>
7
+ password_digest: <%%= BCrypt::Password.create("secret") %>
8
8
  <%- elsif attribute.reference? -%>
9
9
  <%= yaml_key_value(attribute.column_name.delete_suffix("_id"), attribute.default || name) %>
10
10
  <%- elsif !attribute.virtual? -%>
@@ -18,7 +18,7 @@
18
18
  <% else -%>
19
19
 
20
20
  # This model initially had no columns defined. If you add columns to the
21
- # model remove the '{}' from the fixture names and add the columns immediately
21
+ # model remove the "{}" from the fixture names and add the columns immediately
22
22
  # below each fixture, per the syntax in the comments below
23
23
  #
24
24
  one: {}