railties 6.1.6 → 7.0.0.alpha1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (152) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +93 -412
  3. data/MIT-LICENSE +1 -1
  4. data/RDOC_MAIN.rdoc +16 -16
  5. data/README.rdoc +0 -1
  6. data/lib/rails/app_updater.rb +2 -4
  7. data/lib/rails/application/bootstrap.rb +17 -5
  8. data/lib/rails/application/configuration.rb +52 -31
  9. data/lib/rails/application/default_middleware_stack.rb +6 -3
  10. data/lib/rails/application/finisher.rb +43 -85
  11. data/lib/rails/application/routes_reloader.rb +8 -0
  12. data/lib/rails/application.rb +24 -50
  13. data/lib/rails/application_controller.rb +2 -2
  14. data/lib/rails/autoloaders/inflector.rb +21 -0
  15. data/lib/rails/autoloaders.rb +12 -16
  16. data/lib/rails/code_statistics.rb +2 -2
  17. data/lib/rails/code_statistics_calculator.rb +10 -1
  18. data/lib/rails/command/base.rb +26 -12
  19. data/lib/rails/command/behavior.rb +1 -1
  20. data/lib/rails/command/environment_argument.rb +1 -1
  21. data/lib/rails/command.rb +8 -5
  22. data/lib/rails/commands/credentials/USAGE +4 -2
  23. data/lib/rails/commands/credentials/credentials_command/diffing.rb +26 -16
  24. data/lib/rails/commands/credentials/credentials_command.rb +6 -2
  25. data/lib/rails/commands/dbconsole/dbconsole_command.rb +16 -15
  26. data/lib/rails/commands/help/USAGE +3 -2
  27. data/lib/rails/commands/runner/runner_command.rb +3 -2
  28. data/lib/rails/commands/server/server_command.rb +2 -5
  29. data/lib/rails/configuration.rb +18 -23
  30. data/lib/rails/engine/configuration.rb +2 -2
  31. data/lib/rails/engine.rb +23 -27
  32. data/lib/rails/gem_version.rb +4 -4
  33. data/lib/rails/generators/actions/create_migration.rb +2 -4
  34. data/lib/rails/generators/actions.rb +35 -13
  35. data/lib/rails/generators/app_base.rb +66 -102
  36. data/lib/rails/generators/app_name.rb +1 -1
  37. data/lib/rails/generators/base.rb +9 -13
  38. data/lib/rails/generators/erb/scaffold/scaffold_generator.rb +2 -0
  39. data/lib/rails/generators/erb/scaffold/templates/edit.html.erb.tt +8 -4
  40. data/lib/rails/generators/erb/scaffold/templates/index.html.erb.tt +5 -27
  41. data/lib/rails/generators/erb/scaffold/templates/new.html.erb.tt +7 -3
  42. data/lib/rails/generators/erb/scaffold/templates/partial.html.erb.tt +20 -0
  43. data/lib/rails/generators/erb/scaffold/templates/show.html.erb.tt +7 -16
  44. data/lib/rails/generators/erb.rb +1 -1
  45. data/lib/rails/generators/generated_attribute.rb +40 -4
  46. data/lib/rails/generators/migration.rb +2 -6
  47. data/lib/rails/generators/model_helpers.rb +1 -1
  48. data/lib/rails/generators/named_base.rb +1 -1
  49. data/lib/rails/generators/rails/app/app_generator.rb +44 -88
  50. data/lib/rails/generators/rails/app/templates/Gemfile.tt +41 -52
  51. data/lib/rails/generators/rails/app/templates/app/assets/stylesheets/application.css.tt +2 -2
  52. data/lib/rails/generators/rails/app/templates/app/mailers/application_mailer.rb.tt +2 -2
  53. data/lib/rails/generators/rails/app/templates/app/models/application_record.rb.tt +1 -1
  54. data/lib/rails/generators/rails/app/templates/app/views/layouts/application.html.erb.tt +3 -10
  55. data/lib/rails/generators/rails/app/templates/bin/rails.tt +1 -4
  56. data/lib/rails/generators/rails/app/templates/bin/rake.tt +0 -3
  57. data/lib/rails/generators/rails/app/templates/bin/setup.tt +9 -14
  58. data/lib/rails/generators/rails/app/templates/config/boot.rb.tt +1 -1
  59. data/lib/rails/generators/rails/app/templates/config/databases/jdbc.yml.tt +2 -2
  60. data/lib/rails/generators/rails/app/templates/config/databases/jdbcmysql.yml.tt +3 -3
  61. data/lib/rails/generators/rails/app/templates/config/databases/jdbcpostgresql.yml.tt +3 -3
  62. data/lib/rails/generators/rails/app/templates/config/databases/jdbcsqlite3.yml.tt +2 -2
  63. data/lib/rails/generators/rails/app/templates/config/databases/mysql.yml.tt +3 -3
  64. data/lib/rails/generators/rails/app/templates/config/databases/oracle.yml.tt +2 -2
  65. data/lib/rails/generators/rails/app/templates/config/databases/postgresql.yml.tt +3 -3
  66. data/lib/rails/generators/rails/app/templates/config/databases/sqlite3.yml.tt +1 -1
  67. data/lib/rails/generators/rails/app/templates/config/databases/sqlserver.yml.tt +5 -5
  68. data/lib/rails/generators/rails/app/templates/config/environments/development.rb.tt +2 -11
  69. data/lib/rails/generators/rails/app/templates/config/environments/production.rb.tt +9 -15
  70. data/lib/rails/generators/rails/app/templates/config/environments/test.rb.tt +2 -7
  71. data/lib/rails/generators/rails/app/templates/config/initializers/assets.rb.tt +1 -5
  72. data/lib/rails/generators/rails/app/templates/config/initializers/content_security_policy.rb.tt +0 -5
  73. data/lib/rails/generators/rails/app/templates/config/initializers/cors.rb.tt +2 -2
  74. data/lib/rails/generators/rails/app/templates/config/initializers/inflections.rb.tt +4 -4
  75. data/lib/rails/generators/rails/app/templates/config/initializers/new_framework_defaults_7_0.rb.tt +85 -0
  76. data/lib/rails/generators/rails/app/templates/config/locales/en.yml +3 -3
  77. data/lib/rails/generators/rails/app/templates/config/puma.rb.tt +1 -1
  78. data/lib/rails/generators/rails/app/templates/config/routes.rb.tt +3 -0
  79. data/lib/rails/generators/rails/app/templates/config/storage.yml.tt +5 -5
  80. data/lib/rails/generators/rails/app/templates/db/seeds.rb.tt +2 -2
  81. data/lib/rails/generators/rails/app/templates/gitattributes.tt +0 -5
  82. data/lib/rails/generators/rails/app/templates/gitignore.tt +0 -1
  83. data/lib/rails/generators/rails/app/templates/test/test_helper.rb.tt +1 -1
  84. data/lib/rails/generators/rails/controller/controller_generator.rb +1 -2
  85. data/lib/rails/generators/rails/controller/templates/controller.rb.tt +0 -4
  86. data/lib/rails/generators/rails/db/system/change/change_generator.rb +1 -1
  87. data/lib/rails/generators/rails/generator/templates/%file_name%_generator.rb.tt +1 -1
  88. data/lib/rails/generators/rails/plugin/plugin_generator.rb +40 -15
  89. data/lib/rails/generators/rails/plugin/templates/%name%.gemspec.tt +4 -2
  90. data/lib/rails/generators/rails/plugin/templates/Gemfile.tt +9 -9
  91. data/lib/rails/generators/rails/plugin/templates/README.md.tt +1 -1
  92. data/lib/rails/generators/rails/plugin/templates/app/mailers/%namespaced_name%/application_mailer.rb.tt +2 -2
  93. data/lib/rails/generators/rails/plugin/templates/app/models/%namespaced_name%/application_record.rb.tt +1 -1
  94. data/lib/rails/generators/rails/plugin/templates/app/views/layouts/%namespaced_name%/application.html.erb.tt +0 -3
  95. data/lib/rails/generators/rails/plugin/templates/bin/rails.tt +4 -4
  96. data/lib/rails/generators/rails/plugin/templates/gitignore.tt +0 -5
  97. data/lib/rails/generators/rails/plugin/templates/lib/%namespaced_name%/engine.rb.tt +2 -2
  98. data/lib/rails/generators/rails/plugin/templates/lib/%namespaced_name%/version.rb.tt +1 -1
  99. data/lib/rails/generators/rails/plugin/templates/rails/boot.rb.tt +2 -2
  100. data/lib/rails/generators/rails/plugin/templates/test/test_helper.rb.tt +3 -3
  101. data/lib/rails/generators/rails/scaffold/scaffold_generator.rb +0 -19
  102. data/lib/rails/generators/rails/scaffold_controller/templates/api_controller.rb.tt +1 -5
  103. data/lib/rails/generators/rails/scaffold_controller/templates/controller.rb.tt +6 -10
  104. data/lib/rails/generators/resource_helpers.rb +2 -2
  105. data/lib/rails/generators/test_unit/generator/templates/generator_test.rb.tt +1 -1
  106. data/lib/rails/generators/test_unit/model/templates/fixtures.yml.tt +2 -2
  107. data/lib/rails/generators/test_unit/scaffold/scaffold_generator.rb +3 -3
  108. data/lib/rails/generators/test_unit/scaffold/templates/api_functional_test.rb.tt +5 -5
  109. data/lib/rails/generators/test_unit/scaffold/templates/functional_test.rb.tt +2 -2
  110. data/lib/rails/generators/test_unit/scaffold/templates/system_test.rb.tt +3 -3
  111. data/lib/rails/generators/testing/behaviour.rb +1 -2
  112. data/lib/rails/generators.rb +9 -22
  113. data/lib/rails/info.rb +1 -1
  114. data/lib/rails/info_controller.rb +1 -3
  115. data/lib/rails/initializable.rb +1 -1
  116. data/lib/rails/mailers_controller.rb +2 -4
  117. data/lib/rails/rack/logger.rb +0 -1
  118. data/lib/rails/railtie/configuration.rb +1 -2
  119. data/lib/rails/railtie.rb +9 -9
  120. data/lib/rails/ruby_version_check.rb +3 -3
  121. data/lib/rails/tasks/framework.rake +2 -8
  122. data/lib/rails/tasks/statistics.rake +3 -1
  123. data/lib/rails/tasks/tmp.rake +8 -1
  124. data/lib/rails/tasks/yarn.rake +5 -1
  125. data/lib/rails/tasks/zeitwerk.rake +2 -10
  126. data/lib/rails/templates/layouts/application.html.erb +15 -0
  127. data/lib/rails/templates/rails/mailers/email.html.erb +12 -10
  128. data/lib/rails/templates/rails/welcome/index.html.erb +3 -0
  129. data/lib/rails/test_unit/railtie.rb +0 -4
  130. data/lib/rails/test_unit/runner.rb +7 -5
  131. data/lib/rails/test_unit/testing.rake +4 -9
  132. data/lib/rails.rb +1 -0
  133. metadata +37 -40
  134. data/lib/rails/.DS_Store +0 -0
  135. data/lib/rails/command/spellchecker.rb +0 -57
  136. data/lib/rails/generators/css/assets/assets_generator.rb +0 -15
  137. data/lib/rails/generators/css/assets/templates/stylesheet.css +0 -4
  138. data/lib/rails/generators/css/scaffold/scaffold_generator.rb +0 -18
  139. data/lib/rails/generators/rails/app/templates/app/javascript/channels/consumer.js +0 -6
  140. data/lib/rails/generators/rails/app/templates/app/javascript/channels/index.js +0 -5
  141. data/lib/rails/generators/rails/app/templates/app/javascript/packs/application.js.tt +0 -23
  142. data/lib/rails/generators/rails/app/templates/bin/spring.tt +0 -13
  143. data/lib/rails/generators/rails/app/templates/bin/yarn.tt +0 -16
  144. data/lib/rails/generators/rails/app/templates/config/initializers/application_controller_renderer.rb.tt +0 -8
  145. data/lib/rails/generators/rails/app/templates/config/initializers/cookies_serializer.rb.tt +0 -5
  146. data/lib/rails/generators/rails/app/templates/config/initializers/new_framework_defaults_6_1.rb.tt +0 -67
  147. data/lib/rails/generators/rails/app/templates/config/spring.rb.tt +0 -6
  148. data/lib/rails/generators/rails/app/templates/package.json.tt +0 -11
  149. data/lib/rails/generators/rails/assets/USAGE +0 -16
  150. data/lib/rails/generators/rails/assets/assets_generator.rb +0 -26
  151. data/lib/rails/generators/rails/assets/templates/stylesheet.css +0 -4
  152. data/lib/rails/generators/rails/scaffold/templates/scaffold.css +0 -80
@@ -37,4 +37,3 @@
37
37
 
38
38
  /public/assets
39
39
  <% 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,22 @@ 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
-
92
- #{rakefile_test_tasks}
93
- task default: :test
97
+ append_file "Rakefile", <<~EOF
98
+ #{rakefile_test_tasks}
99
+ task default: :test
94
100
  EOF
101
+
95
102
  if engine?
103
+ empty_directory_with_keep_file "test/fixtures/files"
104
+ empty_directory_with_keep_file "test/controllers"
105
+ empty_directory_with_keep_file "test/mailers"
106
+ empty_directory_with_keep_file "test/models"
107
+ empty_directory_with_keep_file "test/integration"
108
+
109
+ unless api?
110
+ empty_directory_with_keep_file "test/helpers"
111
+ end
112
+
96
113
  template "test/integration/navigation_test.rb"
97
114
  end
98
115
  end
@@ -103,11 +120,8 @@ task default: :test
103
120
  opts = options.transform_keys(&:to_sym).except(*DUMMY_IGNORE_OPTIONS)
104
121
  opts[:force] = force
105
122
  opts[:skip_bundle] = true
106
- opts[:skip_spring] = true
107
- opts[:skip_listen] = true
108
123
  opts[:skip_git] = true
109
- opts[:skip_turbolinks] = true
110
- opts[:skip_webpack_install] = true
124
+ opts[:skip_hotwire] = true
111
125
  opts[:dummy_app] = true
112
126
 
113
127
  invoke Rails::Generators::AppGenerator,
@@ -124,10 +138,16 @@ task default: :test
124
138
  if mountable?
125
139
  template "rails/routes.rb", "#{dummy_path}/config/routes.rb", force: true
126
140
  end
141
+ if engine? && !api?
142
+ insert_into_file "#{dummy_path}/config/application.rb", indent(<<~RUBY, 4), after: /^\s*config\.load_defaults.*\n/
143
+
144
+ # For compatibility with applications that use this config
145
+ config.action_controller.include_all_helpers = false
146
+ RUBY
147
+ end
127
148
  end
128
149
 
129
- def test_dummy_assets
130
- template "rails/javascripts.js", "#{dummy_path}/app/javascript/packs/application.js", force: true
150
+ def test_dummy_sprocket_assets
131
151
  template "rails/stylesheets.css", "#{dummy_path}/app/assets/stylesheets/application.css", force: true
132
152
  template "rails/dummy_manifest.js", "#{dummy_path}/app/assets/config/manifest.js", force: true
133
153
  end
@@ -175,6 +195,11 @@ task default: :test
175
195
  append_file gemfile_in_app_path, entry
176
196
  end
177
197
  end
198
+
199
+ private
200
+ def user_default_branch
201
+ @user_default_branch ||= `git config init.defaultbranch`
202
+ end
178
203
  end
179
204
 
180
205
  module Generators
@@ -216,7 +241,7 @@ task default: :test
216
241
  build(:gemspec) unless options[:skip_gemspec]
217
242
  build(:license)
218
243
  build(:gitignore) unless options[:skip_git]
219
- build(:gemfile) unless options[:skip_gemfile]
244
+ build(:gemfile)
220
245
  build(:version_control)
221
246
  end
222
247
 
@@ -291,7 +316,7 @@ task default: :test
291
316
  mute do
292
317
  build(:generate_test_dummy)
293
318
  build(:test_dummy_config)
294
- build(:test_dummy_assets)
319
+ build(:test_dummy_sprocket_assets) unless options[:skip_sprockets]
295
320
  build(:test_dummy_clean)
296
321
  # ensure that bin/rails has proper dummy_path
297
322
  build(:bin, true)
@@ -398,8 +423,8 @@ task default: :test
398
423
  require "rake/testtask"
399
424
 
400
425
  Rake::TestTask.new(:test) do |t|
401
- t.libs << 'test'
402
- t.pattern = 'test/**/*_test.rb'
426
+ t.libs << "test"
427
+ t.pattern = "test/**/*_test.rb"
403
428
  t.verbose = false
404
429
  end
405
430
  RUBY
@@ -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
 
@@ -20,5 +22,5 @@ Gem::Specification.new do |spec|
20
22
 
21
23
  spec.files = Dir["{app,config,db,lib}/**/*", "MIT-LICENSE", "Rakefile", "README.md"]
22
24
 
23
- <%= '# ' if options.dev? || options.edge? || options.master? -%>spec.add_dependency "rails", "<%= Array(rails_version_specifier).join('", "') %>"
25
+ <%= "# " if options.dev? || options.edge? || options.main? -%>spec.add_dependency "rails", "<%= Array(rails_version_specifier).join('", "') %>"
24
26
  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 options.dev? || options.edge? || options.main? -%>gem "rails", "<%= Array(rails_version_specifier).join("', '") %>"
6
6
  <% else -%>
7
7
  # Specify your gem's dependencies in <%= name %>.gemspec.
8
8
  gemspec
@@ -10,7 +10,7 @@ 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
 
@@ -23,19 +23,19 @@ end
23
23
 
24
24
  # <%= gem.comment %>
25
25
  <% end -%>
26
- <%= gem.commented_out ? '# ' : '' %>gem '<%= gem.name %>'<%= %(, '#{gem.version}') if gem.version -%>
26
+ <%= gem.commented_out ? "# " : "" %>gem "<%= gem.name %>"<%= %(, "#{gem.version}") if gem.version -%>
27
27
  <% if gem.options.any? -%>
28
28
  , <%= gem.options.map { |k,v|
29
- "#{k}: #{v.inspect}" }.join(', ') %>
29
+ "#{k}: #{v.inspect}" }.join(", ") %>
30
30
  <% end -%>
31
31
  <% end -%>
32
32
 
33
33
  <% end -%>
34
- <% if RUBY_ENGINE == 'ruby' -%>
35
- # To use a debugger
36
- # gem 'byebug', group: [:development, :test]
34
+ <% if RUBY_ENGINE == "ruby" -%>
35
+ # Start debugger with binding.b -- Read more: https://github.com/ruby/debug
36
+ # gem "debug", ">= 1.0.0", group: %i[ development test ]
37
37
  <% end -%>
38
38
  <% if RUBY_PLATFORM.match(/bccwin|cygwin|emx|mingw|mswin|wince|java/) -%>
39
39
 
40
- gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby]
40
+ gem "tzinfo-data", platforms: %i[ mingw mswin x64_mingw jruby]
41
41
  <% 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
  %>
@@ -1,6 +1,6 @@
1
1
  <%= wrap_in_modules <<~rb
2
2
  class ApplicationRecord < ActiveRecord::Base
3
- self.abstract_class = true
3
+ primary_abstract_class
4
4
  end
5
5
  rb
6
6
  %>
@@ -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? -%>
@@ -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,18 +1,18 @@
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
13
  <% unless engine? -%>
14
14
  require "rails/test_unit/reporter"
15
- Rails::TestUnitReporter.executable = 'bin/test'
15
+ Rails::TestUnitReporter.executable = "bin/test"
16
16
  <% end -%>
17
17
 
18
18
  <% unless options[:skip_active_record] -%>
@@ -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: {}
@@ -45,13 +45,13 @@ module TestUnit # :nodoc:
45
45
  def attributes_hash
46
46
  return {} if attributes_names.empty?
47
47
 
48
- attributes_names.map do |name|
48
+ attributes_names.filter_map do |name|
49
49
  if %w(password password_confirmation).include?(name) && attributes.any?(&:password_digest?)
50
- ["#{name}", "'secret'"]
50
+ ["#{name}", '"secret"']
51
51
  elsif !virtual?(name)
52
52
  ["#{name}", "@#{singular_table_name}.#{name}"]
53
53
  end
54
- end.compact.sort.to_h
54
+ end.sort.to_h
55
55
  end
56
56
 
57
57
  def boolean?(name)
@@ -16,11 +16,11 @@ class <%= controller_class_name %>ControllerTest < ActionDispatch::IntegrationTe
16
16
  end
17
17
 
18
18
  test "should create <%= singular_table_name %>" do
19
- assert_difference('<%= class_name %>.count') do
19
+ assert_difference("<%= class_name %>.count") do
20
20
  post <%= index_helper %>_url, params: { <%= "#{singular_table_name}: { #{attributes_string} }" %> }, as: :json
21
21
  end
22
22
 
23
- assert_response 201
23
+ assert_response :created
24
24
  end
25
25
 
26
26
  test "should show <%= singular_table_name %>" do
@@ -30,15 +30,15 @@ class <%= controller_class_name %>ControllerTest < ActionDispatch::IntegrationTe
30
30
 
31
31
  test "should update <%= singular_table_name %>" do
32
32
  patch <%= show_helper %>, params: { <%= "#{singular_table_name}: { #{attributes_string} }" %> }, as: :json
33
- assert_response 200
33
+ assert_response :success
34
34
  end
35
35
 
36
36
  test "should destroy <%= singular_table_name %>" do
37
- assert_difference('<%= class_name %>.count', -1) do
37
+ assert_difference("<%= class_name %>.count", -1) do
38
38
  delete <%= show_helper %>, as: :json
39
39
  end
40
40
 
41
- assert_response 204
41
+ assert_response :no_content
42
42
  end
43
43
  end
44
44
  <% end -%>
@@ -21,7 +21,7 @@ class <%= controller_class_name %>ControllerTest < ActionDispatch::IntegrationTe
21
21
  end
22
22
 
23
23
  test "should create <%= singular_table_name %>" do
24
- assert_difference('<%= class_name %>.count') do
24
+ assert_difference("<%= class_name %>.count") do
25
25
  post <%= index_helper %>_url, params: { <%= "#{singular_table_name}: { #{attributes_string} }" %> }
26
26
  end
27
27
 
@@ -44,7 +44,7 @@ class <%= controller_class_name %>ControllerTest < ActionDispatch::IntegrationTe
44
44
  end
45
45
 
46
46
  test "should destroy <%= singular_table_name %>" do
47
- assert_difference('<%= class_name %>.count', -1) do
47
+ assert_difference("<%= class_name %>.count", -1) do
48
48
  delete <%= show_helper %>
49
49
  end
50
50
 
@@ -11,7 +11,7 @@ class <%= class_name.pluralize %>Test < ApplicationSystemTestCase
11
11
  assert_selector "h1", text: "<%= class_name.pluralize.titleize %>"
12
12
  end
13
13
 
14
- test "creating a <%= human_name %>" do
14
+ test "should create <%= human_name %>" do
15
15
  visit <%= plural_table_name %>_url
16
16
  click_on "New <%= class_name.titleize %>"
17
17
 
@@ -28,7 +28,7 @@ class <%= class_name.pluralize %>Test < ApplicationSystemTestCase
28
28
  click_on "Back"
29
29
  end
30
30
 
31
- test "updating a <%= human_name %>" do
31
+ test "should update <%= human_name %>" do
32
32
  visit <%= plural_table_name %>_url
33
33
  click_on "Edit", match: :first
34
34
 
@@ -45,7 +45,7 @@ class <%= class_name.pluralize %>Test < ApplicationSystemTestCase
45
45
  click_on "Back"
46
46
  end
47
47
 
48
- test "destroying a <%= human_name %>" do
48
+ test "should destroy <%= human_name %>" do
49
49
  visit <%= plural_table_name %>_url
50
50
  page.accept_confirm do
51
51
  click_on "Destroy", match: :first
@@ -68,7 +68,6 @@ module Rails
68
68
  capture(:stdout) do
69
69
  args += ["--skip-bundle"] unless args.include? "--dev"
70
70
  args |= ["--skip-bootsnap"] unless args.include? "--no-skip-bootsnap"
71
- args |= ["--skip-webpack-install"] unless args.include? "--no-skip-webpack-install"
72
71
 
73
72
  generator_class.start(args, config.reverse_merge(destination_root: destination_root))
74
73
  end
@@ -82,7 +81,7 @@ module Rails
82
81
  # Create a Rails::Generators::GeneratedAttribute by supplying the
83
82
  # attribute type and, optionally, the attribute name:
84
83
  #
85
- # create_generated_attribute(:string, 'name')
84
+ # create_generated_attribute(:string, "name")
86
85
  def create_generated_attribute(attribute_type, name = "test", index = nil)
87
86
  Rails::Generators::GeneratedAttribute.parse([name, attribute_type, index].compact.join(":"))
88
87
  end