railties 7.0.8 → 7.1.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (168) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +651 -208
  3. data/MIT-LICENSE +1 -1
  4. data/RDOC_MAIN.md +99 -0
  5. data/README.rdoc +4 -4
  6. data/lib/minitest/rails_plugin.rb +63 -0
  7. data/lib/rails/api/task.rb +35 -4
  8. data/lib/rails/app_updater.rb +1 -1
  9. data/lib/rails/application/bootstrap.rb +19 -4
  10. data/lib/rails/application/configuration.rb +179 -67
  11. data/lib/rails/application/default_middleware_stack.rb +8 -2
  12. data/lib/rails/application/dummy_config.rb +19 -0
  13. data/lib/rails/application/finisher.rb +40 -33
  14. data/lib/rails/application.rb +127 -25
  15. data/lib/rails/backtrace_cleaner.rb +1 -1
  16. data/lib/rails/cli.rb +5 -2
  17. data/lib/rails/command/actions.rb +10 -12
  18. data/lib/rails/command/base.rb +55 -53
  19. data/lib/rails/command/environment_argument.rb +32 -16
  20. data/lib/rails/command/helpers/editor.rb +17 -12
  21. data/lib/rails/command.rb +84 -33
  22. data/lib/rails/commands/about/about_command.rb +14 -0
  23. data/lib/rails/commands/application/application_command.rb +2 -0
  24. data/lib/rails/commands/console/console_command.rb +14 -14
  25. data/lib/rails/commands/credentials/USAGE +53 -55
  26. data/lib/rails/commands/credentials/credentials_command/diffing.rb +5 -3
  27. data/lib/rails/commands/credentials/credentials_command.rb +64 -70
  28. data/lib/rails/commands/db/system/change/change_command.rb +2 -1
  29. data/lib/rails/commands/dbconsole/dbconsole_command.rb +25 -115
  30. data/lib/rails/commands/destroy/destroy_command.rb +3 -2
  31. data/lib/rails/commands/dev/dev_command.rb +1 -6
  32. data/lib/rails/commands/encrypted/USAGE +15 -20
  33. data/lib/rails/commands/encrypted/encrypted_command.rb +46 -35
  34. data/lib/rails/commands/gem_help/USAGE +16 -0
  35. data/lib/rails/commands/gem_help/gem_help_command.rb +13 -0
  36. data/lib/rails/commands/generate/generate_command.rb +2 -2
  37. data/lib/rails/commands/help/USAGE +13 -13
  38. data/lib/rails/commands/help/help_command.rb +21 -2
  39. data/lib/rails/commands/initializers/initializers_command.rb +1 -4
  40. data/lib/rails/commands/middleware/middleware_command.rb +17 -0
  41. data/lib/rails/commands/new/new_command.rb +2 -0
  42. data/lib/rails/commands/notes/notes_command.rb +2 -1
  43. data/lib/rails/commands/plugin/plugin_command.rb +2 -0
  44. data/lib/rails/commands/rake/rake_command.rb +25 -22
  45. data/lib/rails/commands/restart/restart_command.rb +14 -0
  46. data/lib/rails/commands/routes/routes_command.rb +13 -1
  47. data/lib/rails/commands/runner/USAGE +14 -12
  48. data/lib/rails/commands/runner/runner_command.rb +32 -20
  49. data/lib/rails/commands/secret/secret_command.rb +13 -0
  50. data/lib/rails/commands/secrets/USAGE +44 -49
  51. data/lib/rails/commands/secrets/secrets_command.rb +20 -38
  52. data/lib/rails/commands/server/server_command.rb +33 -32
  53. data/lib/rails/commands/test/USAGE +14 -0
  54. data/lib/rails/commands/test/test_command.rb +56 -14
  55. data/lib/rails/commands/unused_routes/unused_routes_command.rb +75 -0
  56. data/lib/rails/commands/version/version_command.rb +1 -0
  57. data/lib/rails/configuration.rb +5 -5
  58. data/lib/rails/console/app.rb +1 -4
  59. data/lib/rails/deprecator.rb +7 -0
  60. data/lib/rails/engine/configuration.rb +50 -6
  61. data/lib/rails/engine.rb +38 -17
  62. data/lib/rails/gem_version.rb +3 -3
  63. data/lib/rails/generators/actions.rb +6 -15
  64. data/lib/rails/generators/active_model.rb +28 -14
  65. data/lib/rails/generators/app_base.rb +358 -83
  66. data/lib/rails/generators/app_name.rb +3 -14
  67. data/lib/rails/generators/base.rb +12 -4
  68. data/lib/rails/generators/database.rb +39 -1
  69. data/lib/rails/generators/erb/mailer/templates/layout.html.erb.tt +1 -1
  70. data/lib/rails/generators/generated_attribute.rb +12 -0
  71. data/lib/rails/generators/migration.rb +1 -2
  72. data/lib/rails/generators/model_helpers.rb +2 -1
  73. data/lib/rails/generators/rails/app/USAGE +22 -6
  74. data/lib/rails/generators/rails/app/app_generator.rb +84 -64
  75. data/lib/rails/generators/rails/app/templates/Dockerfile.tt +103 -0
  76. data/lib/rails/generators/rails/app/templates/Gemfile.tt +9 -11
  77. data/lib/rails/generators/rails/app/templates/app/views/layouts/mailer.html.erb.tt +1 -1
  78. data/lib/rails/generators/rails/app/templates/bin/setup.tt +10 -1
  79. data/lib/rails/generators/rails/app/templates/config/application.rb.tt +6 -17
  80. data/lib/rails/generators/rails/app/templates/config/databases/jdbcpostgresql.yml.tt +4 -4
  81. data/lib/rails/generators/rails/app/templates/config/databases/jdbcsqlite3.yml.tt +3 -3
  82. data/lib/rails/generators/rails/app/templates/config/databases/postgresql.yml.tt +4 -6
  83. data/lib/rails/generators/rails/app/templates/config/databases/sqlite3.yml.tt +3 -3
  84. data/lib/rails/generators/rails/app/templates/config/databases/trilogy.yml.tt +59 -0
  85. data/lib/rails/generators/rails/app/templates/config/environments/development.rb.tt +12 -2
  86. data/lib/rails/generators/rails/app/templates/config/environments/production.rb.tt +31 -27
  87. data/lib/rails/generators/rails/app/templates/config/environments/test.rb.tt +13 -9
  88. data/lib/rails/generators/rails/app/templates/config/initializers/assets.rb.tt +2 -0
  89. data/lib/rails/generators/rails/app/templates/config/initializers/content_security_policy.rb.tt +2 -2
  90. data/lib/rails/generators/rails/app/templates/config/initializers/cors.rb.tt +1 -1
  91. data/lib/rails/generators/rails/app/templates/config/initializers/filter_parameter_logging.rb.tt +3 -3
  92. data/lib/rails/generators/rails/app/templates/config/initializers/new_framework_defaults_7_1.rb.tt +283 -0
  93. data/lib/rails/generators/rails/app/templates/config/initializers/permissions_policy.rb.tt +11 -9
  94. data/lib/rails/generators/rails/app/templates/config/locales/en.yml +11 -13
  95. data/lib/rails/generators/rails/app/templates/config/puma.rb.tt +11 -19
  96. data/lib/rails/generators/rails/app/templates/config/routes.rb.tt +5 -1
  97. data/lib/rails/generators/rails/app/templates/db/seeds.rb.tt +6 -4
  98. data/lib/rails/generators/rails/app/templates/docker-entrypoint.tt +10 -0
  99. data/lib/rails/generators/rails/app/templates/dockerignore.tt +43 -0
  100. data/lib/rails/generators/rails/app/templates/gitignore.tt +4 -8
  101. data/lib/rails/generators/rails/app/templates/node-version.tt +1 -0
  102. data/lib/rails/generators/rails/app/templates/test/channels/application_cable/connection_test.rb.tt +10 -8
  103. data/lib/rails/generators/rails/app/templates/test/test_helper.rb.tt +9 -7
  104. data/lib/rails/generators/rails/application_record/application_record_generator.rb +4 -0
  105. data/lib/rails/generators/rails/benchmark/benchmark_generator.rb +2 -1
  106. data/lib/rails/generators/rails/controller/USAGE +12 -4
  107. data/lib/rails/generators/rails/controller/controller_generator.rb +5 -0
  108. data/lib/rails/generators/rails/controller/templates/controller.rb.tt +1 -1
  109. data/lib/rails/generators/rails/credentials/credentials_generator.rb +29 -24
  110. data/lib/rails/generators/rails/credentials/templates/credentials.yml.tt +8 -0
  111. data/lib/rails/generators/rails/db/system/change/change_generator.rb +30 -0
  112. data/lib/rails/generators/rails/encryption_key_file/encryption_key_file_generator.rb +1 -2
  113. data/lib/rails/generators/rails/migration/USAGE +21 -11
  114. data/lib/rails/generators/rails/model/model_generator.rb +4 -0
  115. data/lib/rails/generators/rails/plugin/USAGE +17 -6
  116. data/lib/rails/generators/rails/plugin/plugin_generator.rb +5 -15
  117. data/lib/rails/generators/rails/plugin/templates/Gemfile.tt +2 -2
  118. data/lib/rails/generators/rails/plugin/templates/MIT-LICENSE.tt +1 -1
  119. data/lib/rails/generators/rails/plugin/templates/bin/rails.tt +1 -17
  120. data/lib/rails/generators/rails/plugin/templates/gitignore.tt +0 -2
  121. data/lib/rails/generators/rails/plugin/templates/test/test_helper.rb.tt +4 -4
  122. data/lib/rails/generators/rails/resource/resource_generator.rb +6 -0
  123. data/lib/rails/generators/rails/scaffold/scaffold_generator.rb +2 -1
  124. data/lib/rails/generators/rails/scaffold_controller/scaffold_controller_generator.rb +1 -1
  125. data/lib/rails/generators/test_case.rb +2 -2
  126. data/lib/rails/generators/test_unit/scaffold/scaffold_generator.rb +1 -1
  127. data/lib/rails/generators/testing/{behaviour.rb → behavior.rb} +4 -1
  128. data/lib/rails/generators.rb +5 -13
  129. data/lib/rails/health_controller.rb +55 -0
  130. data/lib/rails/info.rb +1 -1
  131. data/lib/rails/info_controller.rb +31 -11
  132. data/lib/rails/mailers_controller.rb +15 -5
  133. data/lib/rails/paths.rb +13 -10
  134. data/lib/rails/rack/logger.rb +15 -12
  135. data/lib/rails/rackup/server.rb +15 -0
  136. data/lib/rails/railtie/configuration.rb +14 -1
  137. data/lib/rails/railtie.rb +18 -18
  138. data/lib/rails/ruby_version_check.rb +2 -0
  139. data/lib/rails/source_annotation_extractor.rb +67 -18
  140. data/lib/rails/tasks/engine.rake +8 -8
  141. data/lib/rails/tasks/framework.rake +4 -10
  142. data/lib/rails/tasks/log.rake +1 -1
  143. data/lib/rails/tasks/misc.rake +3 -14
  144. data/lib/rails/tasks/statistics.rake +5 -4
  145. data/lib/rails/tasks/tmp.rake +5 -5
  146. data/lib/rails/tasks/zeitwerk.rake +15 -35
  147. data/lib/rails/tasks.rb +0 -2
  148. data/lib/rails/templates/rails/mailers/email.html.erb +32 -0
  149. data/lib/rails/templates/rails/mailers/index.html.erb +14 -7
  150. data/lib/rails/templates/rails/mailers/mailer.html.erb +11 -5
  151. data/lib/rails/templates/rails/welcome/index.html.erb +1 -0
  152. data/lib/rails/test_help.rb +9 -14
  153. data/lib/rails/test_unit/line_filtering.rb +1 -1
  154. data/lib/rails/test_unit/reporter.rb +6 -2
  155. data/lib/rails/test_unit/runner.rb +36 -18
  156. data/lib/rails/test_unit/test_parser.rb +88 -0
  157. data/lib/rails/test_unit/testing.rake +13 -33
  158. data/lib/rails/testing/maintain_test_schema.rb +16 -0
  159. data/lib/rails/version.rb +1 -1
  160. data/lib/rails/zeitwerk_checker.rb +15 -0
  161. data/lib/rails.rb +15 -15
  162. metadata +65 -28
  163. data/RDOC_MAIN.rdoc +0 -97
  164. data/lib/rails/application/dummy_erb_compiler.rb +0 -18
  165. data/lib/rails/generators/rails/app/templates/config/initializers/new_framework_defaults_7_0.rb.tt +0 -143
  166. data/lib/rails/generators/rails/model/USAGE +0 -113
  167. data/lib/rails/tasks/middleware.rake +0 -9
  168. data/lib/rails/tasks/restart.rake +0 -9
@@ -0,0 +1,283 @@
1
+ # Be sure to restart your server when you modify this file.
2
+ #
3
+ # This file eases your Rails 7.1 framework defaults upgrade.
4
+ #
5
+ # Uncomment each configuration one by one to switch to the new default.
6
+ # Once your application is ready to run with all new defaults, you can remove
7
+ # this file and set the `config.load_defaults` to `7.1`.
8
+ #
9
+ # Read the Guide for Upgrading Ruby on Rails for more info on each option.
10
+ # https://guides.rubyonrails.org/upgrading_ruby_on_rails.html
11
+
12
+ ###
13
+ # No longer add autoloaded paths into `$LOAD_PATH`. This means that you won't be able
14
+ # to manually require files that are managed by the autoloader, which you shouldn't do anyway.
15
+ #
16
+ # This will reduce the size of the load path, making `require` faster if you don't use bootsnap, or reduce the size
17
+ # of the bootsnap cache if you use it.
18
+ #++
19
+ # Rails.application.config.add_autoload_paths_to_load_path = false
20
+
21
+ ###
22
+ # Remove the default X-Download-Options headers since it is used only by Internet Explorer.
23
+ # If you need to support Internet Explorer, add back `"X-Download-Options" => "noopen"`.
24
+ #++
25
+ # Rails.application.config.action_dispatch.default_headers = {
26
+ # "X-Frame-Options" => "SAMEORIGIN",
27
+ # "X-XSS-Protection" => "0",
28
+ # "X-Content-Type-Options" => "nosniff",
29
+ # "X-Permitted-Cross-Domain-Policies" => "none",
30
+ # "Referrer-Policy" => "strict-origin-when-cross-origin"
31
+ # }
32
+
33
+ ###
34
+ # Do not treat an `ActionController::Parameters` instance
35
+ # as equal to an equivalent `Hash` by default.
36
+ #++
37
+ # Rails.application.config.action_controller.allow_deprecated_parameters_hash_equality = false
38
+
39
+ ###
40
+ # Active Record Encryption now uses SHA-256 as its hash digest algorithm.
41
+ #
42
+ # There are 3 scenarios to consider.
43
+ #
44
+ # 1. If you have data encrypted with previous Rails versions, and you have
45
+ # +config.active_support.key_generator_hash_digest_class+ configured as SHA1 (the default
46
+ # before Rails 7.0), you need to configure SHA-1 for Active Record Encryption too:
47
+ #++
48
+ # Rails.application.config.active_record.encryption.hash_digest_class = OpenSSL::Digest::SHA1
49
+ #
50
+ # 2. If you have +config.active_support.key_generator_hash_digest_class+ configured as SHA256 (the new default
51
+ # in 7.0), then you need to configure SHA-256 for Active Record Encryption:
52
+ #++
53
+ # Rails.application.config.active_record.encryption.hash_digest_class = OpenSSL::Digest::SHA256
54
+ #
55
+ # 3. If you don't currently have data encrypted with Active Record encryption, you can disable this setting to
56
+ # configure the default behavior starting 7.1+:
57
+ #++
58
+ # Rails.application.config.active_record.encryption.support_sha1_for_non_deterministic_encryption = false
59
+
60
+ ###
61
+ # No longer run after_commit callbacks on the first of multiple Active Record
62
+ # instances to save changes to the same database row within a transaction.
63
+ # Instead, run these callbacks on the instance most likely to have internal
64
+ # state which matches what was committed to the database, typically the last
65
+ # instance to save.
66
+ #++
67
+ # Rails.application.config.active_record.run_commit_callbacks_on_first_saved_instances_in_transaction = false
68
+
69
+ ###
70
+ # Configures SQLite with a strict strings mode, which disables double-quoted string literals.
71
+ #
72
+ # SQLite has some quirks around double-quoted string literals.
73
+ # It first tries to consider double-quoted strings as identifier names, but if they don't exist
74
+ # it then considers them as string literals. Because of this, typos can silently go unnoticed.
75
+ # For example, it is possible to create an index for a non existing column.
76
+ # See https://www.sqlite.org/quirks.html#double_quoted_string_literals_are_accepted for more details.
77
+ #++
78
+ # Rails.application.config.active_record.sqlite3_adapter_strict_strings_by_default = true
79
+
80
+ ###
81
+ # Disable deprecated singular associations names.
82
+ #++
83
+ # Rails.application.config.active_record.allow_deprecated_singular_associations_name = false
84
+
85
+ ###
86
+ # Enable the Active Job `BigDecimal` argument serializer, which guarantees
87
+ # roundtripping. Without this serializer, some queue adapters may serialize
88
+ # `BigDecimal` arguments as simple (non-roundtrippable) strings.
89
+ #
90
+ # When deploying an application with multiple replicas, old (pre-Rails 7.1)
91
+ # replicas will not be able to deserialize `BigDecimal` arguments from this
92
+ # serializer. Therefore, this setting should only be enabled after all replicas
93
+ # have been successfully upgraded to Rails 7.1.
94
+ #++
95
+ # Rails.application.config.active_job.use_big_decimal_serializer = true
96
+
97
+ ###
98
+ # Specify if an `ArgumentError` should be raised if `Rails.cache` `fetch` or
99
+ # `write` are given an invalid `expires_at` or `expires_in` time.
100
+ # Options are `true`, and `false`. If `false`, the exception will be reported
101
+ # as `handled` and logged instead.
102
+ #++
103
+ # Rails.application.config.active_support.raise_on_invalid_cache_expiration_time = true
104
+
105
+ ###
106
+ # Specify whether Query Logs will format tags using the SQLCommenter format
107
+ # (https://open-telemetry.github.io/opentelemetry-sqlcommenter/), or using the legacy format.
108
+ # Options are `:legacy` and `:sqlcommenter`.
109
+ #++
110
+ # Rails.application.config.active_record.query_log_tags_format = :sqlcommenter
111
+
112
+ ###
113
+ # Specify the default serializer used by `MessageEncryptor` and `MessageVerifier`
114
+ # instances.
115
+ #
116
+ # The legacy default is `:marshal`, which is a potential vector for
117
+ # deserialization attacks in cases where a message signing secret has been
118
+ # leaked.
119
+ #
120
+ # In Rails 7.1, the new default is `:json_allow_marshal` which serializes and
121
+ # deserializes with `ActiveSupport::JSON`, but can fall back to deserializing
122
+ # with `Marshal` so that legacy messages can still be read.
123
+ #
124
+ # In Rails 7.2, the default will become `:json` which serializes and
125
+ # deserializes with `ActiveSupport::JSON` only.
126
+ #
127
+ # Alternatively, you can choose `:message_pack` or `:message_pack_allow_marshal`,
128
+ # which serialize with `ActiveSupport::MessagePack`. `ActiveSupport::MessagePack`
129
+ # can roundtrip some Ruby types that are not supported by JSON, and may provide
130
+ # improved performance, but it requires the `msgpack` gem.
131
+ #
132
+ # For more information, see
133
+ # https://guides.rubyonrails.org/v7.1/configuring.html#config-active-support-message-serializer
134
+ #
135
+ # If you are performing a rolling deploy of a Rails 7.1 upgrade, wherein servers
136
+ # that have not yet been upgraded must be able to read messages from upgraded
137
+ # servers, first deploy without changing the serializer, then set the serializer
138
+ # in a subsequent deploy.
139
+ #++
140
+ # Rails.application.config.active_support.message_serializer = :json_allow_marshal
141
+
142
+ ###
143
+ # Enable a performance optimization that serializes message data and metadata
144
+ # together. This changes the message format, so messages serialized this way
145
+ # cannot be read by older versions of Rails. However, messages that use the old
146
+ # format can still be read, regardless of whether this optimization is enabled.
147
+ #
148
+ # To perform a rolling deploy of a Rails 7.1 upgrade, wherein servers that have
149
+ # not yet been upgraded must be able to read messages from upgraded servers,
150
+ # leave this optimization off on the first deploy, then enable it on a
151
+ # subsequent deploy.
152
+ #++
153
+ # Rails.application.config.active_support.use_message_serializer_for_metadata = true
154
+
155
+ ###
156
+ # Set the maximum size for Rails log files.
157
+ #
158
+ # `config.load_defaults 7.1` does not set this value for environments other than
159
+ # development and test.
160
+ #++
161
+ # if Rails.env.local?
162
+ # Rails.application.config.log_file_size = 100 * 1024 * 1024
163
+ # end
164
+
165
+ ###
166
+ # Enable raising on assignment to attr_readonly attributes. The previous
167
+ # behavior would allow assignment but silently not persist changes to the
168
+ # database.
169
+ #++
170
+ # Rails.application.config.active_record.raise_on_assign_to_attr_readonly = true
171
+
172
+ ###
173
+ # Enable validating only parent-related columns for presence when the parent is mandatory.
174
+ # The previous behavior was to validate the presence of the parent record, which performed an extra query
175
+ # to get the parent every time the child record was updated, even when parent has not changed.
176
+ #++
177
+ # Rails.application.config.active_record.belongs_to_required_validates_foreign_key = false
178
+
179
+ ###
180
+ # Enable precompilation of `config.filter_parameters`. Precompilation can
181
+ # improve filtering performance, depending on the quantity and types of filters.
182
+ #++
183
+ # Rails.application.config.precompile_filter_parameters = true
184
+
185
+ ###
186
+ # Enable before_committed! callbacks on all enrolled records in a transaction.
187
+ # The previous behavior was to only run the callbacks on the first copy of a record
188
+ # if there were multiple copies of the same record enrolled in the transaction.
189
+ #++
190
+ # Rails.application.config.active_record.before_committed_on_all_records = true
191
+
192
+ ###
193
+ # Disable automatic column serialization into YAML.
194
+ # To keep the historic behavior, you can set it to `YAML`, however it is
195
+ # recommended to explicitly define the serialization method for each column
196
+ # rather than to rely on a global default.
197
+ #++
198
+ # Rails.application.config.active_record.default_column_serializer = nil
199
+
200
+ ###
201
+ # Enable a performance optimization that serializes Active Record models
202
+ # in a faster and more compact way.
203
+ #
204
+ # To perform a rolling deploy of a Rails 7.1 upgrade, wherein servers that have
205
+ # not yet been upgraded must be able to read caches from upgraded servers,
206
+ # leave this optimization off on the first deploy, then enable it on a
207
+ # subsequent deploy.
208
+ #++
209
+ # Rails.application.config.active_record.marshalling_format_version = 7.1
210
+
211
+ ###
212
+ # Run `after_commit` and `after_*_commit` callbacks in the order they are defined in a model.
213
+ # This matches the behaviour of all other callbacks.
214
+ # In previous versions of Rails, they ran in the inverse order.
215
+ #++
216
+ # Rails.application.config.active_record.run_after_transaction_callbacks_in_order_defined = true
217
+
218
+ ###
219
+ # Whether a `transaction` block is committed or rolled back when exited via `return`, `break` or `throw`.
220
+ #++
221
+ # Rails.application.config.active_record.commit_transaction_on_non_local_return = true
222
+
223
+ ###
224
+ # Controls when to generate a value for <tt>has_secure_token</tt> declarations.
225
+ #++
226
+ # Rails.application.config.active_record.generate_secure_token_on = :initialize
227
+
228
+ ###
229
+ # ** Please read carefully, this must be configured in config/application.rb **
230
+ #
231
+ # Change the format of the cache entry.
232
+ #
233
+ # Changing this default means that all new cache entries added to the cache
234
+ # will have a different format that is not supported by Rails 7.0
235
+ # applications.
236
+ #
237
+ # Only change this value after your application is fully deployed to Rails 7.1
238
+ # and you have no plans to rollback.
239
+ # When you're ready to change format, add this to `config/application.rb` (NOT
240
+ # this file):
241
+ # config.active_support.cache_format_version = 7.1
242
+
243
+
244
+ ###
245
+ # Configure Action View to use HTML5 standards-compliant sanitizers when they are supported on your
246
+ # platform.
247
+ #
248
+ # `Rails::HTML::Sanitizer.best_supported_vendor` will cause Action View to use HTML5-compliant
249
+ # sanitizers if they are supported, else fall back to HTML4 sanitizers.
250
+ #
251
+ # In previous versions of Rails, Action View always used `Rails::HTML4::Sanitizer` as its vendor.
252
+ #++
253
+ # Rails.application.config.action_view.sanitizer_vendor = Rails::HTML::Sanitizer.best_supported_vendor
254
+
255
+
256
+ ###
257
+ # Configure Action Text to use an HTML5 standards-compliant sanitizer when it is supported on your
258
+ # platform.
259
+ #
260
+ # `Rails::HTML::Sanitizer.best_supported_vendor` will cause Action Text to use HTML5-compliant
261
+ # sanitizers if they are supported, else fall back to HTML4 sanitizers.
262
+ #
263
+ # In previous versions of Rails, Action Text always used `Rails::HTML4::Sanitizer` as its vendor.
264
+ #++
265
+ # Rails.application.config.action_text.sanitizer_vendor = Rails::HTML::Sanitizer.best_supported_vendor
266
+
267
+
268
+ ###
269
+ # Configure the log level used by the DebugExceptions middleware when logging
270
+ # uncaught exceptions during requests.
271
+ #++
272
+ # Rails.application.config.action_dispatch.debug_exception_log_level = :error
273
+
274
+
275
+ ###
276
+ # Configure the test helpers in Action View, Action Dispatch, and rails-dom-testing to use HTML5
277
+ # parsers.
278
+ #
279
+ # Nokogiri::HTML5 isn't supported on JRuby, so JRuby applications must set this to :html4.
280
+ #
281
+ # In previous versions of Rails, these test helpers always used an HTML4 parser.
282
+ #++
283
+ # Rails.application.config.dom_testing_default_html_version = :html5
@@ -1,11 +1,13 @@
1
+ # Be sure to restart your server when you modify this file.
2
+
1
3
  # Define an application-wide HTTP permissions policy. For further
2
- # information see https://developers.google.com/web/updates/2018/06/feature-policy
3
- #
4
- # Rails.application.config.permissions_policy do |f|
5
- # f.camera :none
6
- # f.gyroscope :none
7
- # f.microphone :none
8
- # f.usb :none
9
- # f.fullscreen :self
10
- # f.payment :self, "https://secure.example.com"
4
+ # information see: https://developers.google.com/web/updates/2018/06/feature-policy
5
+
6
+ # Rails.application.config.permissions_policy do |policy|
7
+ # policy.camera :none
8
+ # policy.gyroscope :none
9
+ # policy.microphone :none
10
+ # policy.usb :none
11
+ # policy.fullscreen :self
12
+ # policy.payment :self, "https://secure.example.com"
11
13
  # end
@@ -1,6 +1,6 @@
1
- # Files in the config/locales directory are used for internationalization
2
- # and are automatically loaded by Rails. If you want to use locales other
3
- # than English, add the necessary files in this directory.
1
+ # Files in the config/locales directory are used for internationalization and
2
+ # are automatically loaded by Rails. If you want to use locales other than
3
+ # English, add the necessary files in this directory.
4
4
  #
5
5
  # To use the locales, use `I18n.t`:
6
6
  #
@@ -16,18 +16,16 @@
16
16
  #
17
17
  # This would use the information in config/locales/es.yml.
18
18
  #
19
- # The following keys must be escaped otherwise they will not be retrieved by
20
- # the default I18n backend:
19
+ # To learn more about the API, please read the Rails Internationalization guide
20
+ # at https://guides.rubyonrails.org/i18n.html.
21
21
  #
22
- # true, false, on, off, yes, no
22
+ # Be aware that YAML interprets the following case-insensitive strings as
23
+ # booleans: `true`, `false`, `on`, `off`, `yes`, `no`. Therefore, these strings
24
+ # must be quoted to be interpreted as strings. For example:
23
25
  #
24
- # Instead, surround them with single quotes.
25
- #
26
- # en:
27
- # "true": "foo"
28
- #
29
- # To learn more, please read the Rails Internationalization guide
30
- # available at https://guides.rubyonrails.org/i18n.html.
26
+ # en:
27
+ # "yes": yup
28
+ # enabled: "ON"
31
29
 
32
30
  en:
33
31
  hello: "Hello world"
@@ -1,43 +1,35 @@
1
+ # This configuration file will be evaluated by Puma. The top-level methods that
2
+ # are invoked here are part of Puma's configuration DSL. For more information
3
+ # about methods provided by the DSL, see https://puma.io/puma/Puma/DSL.html.
4
+
1
5
  # Puma can serve each request in a thread from an internal thread pool.
2
6
  # The `threads` method setting takes two numbers: a minimum and maximum.
3
7
  # Any libraries that use thread pools should be configured to match
4
8
  # the maximum value specified for Puma. Default is set to 5 threads for minimum
5
9
  # and maximum; this matches the default thread size of Active Record.
6
- #
7
10
  max_threads_count = ENV.fetch("RAILS_MAX_THREADS") { 5 }
8
11
  min_threads_count = ENV.fetch("RAILS_MIN_THREADS") { max_threads_count }
9
12
  threads min_threads_count, max_threads_count
10
13
 
14
+ # Specifies that the worker count should equal the number of processors in production.
15
+ if ENV["RAILS_ENV"] == "production"
16
+ require "concurrent-ruby"
17
+ worker_count = Integer(ENV.fetch("WEB_CONCURRENCY") { Concurrent.physical_processor_count })
18
+ workers worker_count if worker_count > 1
19
+ end
20
+
11
21
  # Specifies the `worker_timeout` threshold that Puma will use to wait before
12
22
  # terminating a worker in development environments.
13
- #
14
23
  worker_timeout 3600 if ENV.fetch("RAILS_ENV", "development") == "development"
15
24
 
16
25
  # Specifies the `port` that Puma will listen on to receive requests; default is 3000.
17
- #
18
26
  port ENV.fetch("PORT") { 3000 }
19
27
 
20
28
  # Specifies the `environment` that Puma will run in.
21
- #
22
29
  environment ENV.fetch("RAILS_ENV") { "development" }
23
30
 
24
31
  # Specifies the `pidfile` that Puma will use.
25
32
  pidfile ENV.fetch("PIDFILE") { "tmp/pids/server.pid" }
26
33
 
27
- # Specifies the number of `workers` to boot in clustered mode.
28
- # Workers are forked web server processes. If using threads and workers together
29
- # the concurrency of the application would be max `threads` * `workers`.
30
- # Workers do not work on JRuby or Windows (both of which do not support
31
- # processes).
32
- #
33
- # workers ENV.fetch("WEB_CONCURRENCY") { 2 }
34
-
35
- # Use the `preload_app!` method when specifying a `workers` number.
36
- # This directive tells Puma to first boot the application and load code
37
- # before forking the application. This takes advantage of Copy On Write
38
- # process behavior so workers use less memory.
39
- #
40
- # preload_app!
41
-
42
34
  # Allow puma to be restarted by `bin/rails restart` command.
43
35
  plugin :tmp_restart
@@ -1,6 +1,10 @@
1
1
  Rails.application.routes.draw do
2
2
  # Define your application routes per the DSL in https://guides.rubyonrails.org/routing.html
3
3
 
4
+ # Reveal health status on /up that returns 200 if the app boots with no exceptions, otherwise 500.
5
+ # Can be used by load balancers and uptime monitors to verify that the app is live.
6
+ get "up" => "rails/health#show", as: :rails_health_check
7
+
4
8
  # Defines the root path route ("/")
5
- # root "articles#index"
9
+ # root "posts#index"
6
10
  end
@@ -1,7 +1,9 @@
1
- # This file should contain all the record creation needed to seed the database with its default values.
1
+ # This file should ensure the existence of records required to run the application in every environment (production,
2
+ # development, test). The code here should be idempotent so that it can be executed at any point in every environment.
2
3
  # The data can then be loaded with the bin/rails db:seed command (or created alongside the database with db:setup).
3
4
  #
4
- # Examples:
5
+ # Example:
5
6
  #
6
- # movies = Movie.create([{ name: "Star Wars" }, { name: "Lord of the Rings" }])
7
- # Character.create(name: "Luke", movie: movies.first)
7
+ # ["Action", "Comedy", "Drama", "Horror"].each do |genre_name|
8
+ # MovieGenre.find_or_create_by!(name: genre_name)
9
+ # end
@@ -0,0 +1,10 @@
1
+ #!/bin/bash -e
2
+
3
+ <% unless skip_active_record? -%>
4
+ # If running the rails server then create or migrate existing database
5
+ if [ "${1}" == "./bin/rails" ] && [ "${2}" == "server" ]; then
6
+ ./bin/rails db:prepare
7
+ fi
8
+
9
+ <% end -%>
10
+ exec "${@}"
@@ -0,0 +1,43 @@
1
+ # See https://docs.docker.com/engine/reference/builder/#dockerignore-file for more about ignoring files.
2
+
3
+ # Ignore git directory.
4
+ /.git/
5
+
6
+ # Ignore bundler config.
7
+ /.bundle
8
+
9
+ # Ignore all environment files (except templates).
10
+ /.env*
11
+ !/.env*.erb
12
+
13
+ # Ignore all default key files.
14
+ /config/master.key
15
+ /config/credentials/*.key
16
+
17
+ # Ignore all logfiles and tempfiles.
18
+ /log/*
19
+ /tmp/*
20
+ <% if keeps? -%>
21
+ !/log/.keep
22
+ !/tmp/.keep
23
+
24
+ # Ignore pidfiles, but keep the directory.
25
+ /tmp/pids/*
26
+ !/tmp/pids/.keep
27
+ <% end -%>
28
+
29
+ # Ignore storage (uploaded files in development and any SQLite databases).
30
+ /storage/*
31
+ <% if keeps? -%>
32
+ !/storage/.keep
33
+ /tmp/storage/*
34
+ !/tmp/storage/.keep
35
+ <% end -%>
36
+ <% unless options.api? -%>
37
+
38
+ # Ignore assets.
39
+ /node_modules/
40
+ /app/assets/builds/*
41
+ !/app/assets/builds/.keep
42
+ /public/assets
43
+ <% end -%>
@@ -7,12 +7,10 @@
7
7
  # Ignore bundler config.
8
8
  /.bundle
9
9
 
10
- <% if sqlite3? -%>
11
- # Ignore the default SQLite database.
12
- /db/*.sqlite3
13
- /db/*.sqlite3-*
10
+ # Ignore all environment files (except templates).
11
+ /.env*
12
+ !/.env*.erb
14
13
 
15
- <% end -%>
16
14
  # Ignore all logfiles and tempfiles.
17
15
  /log/*
18
16
  /tmp/*
@@ -26,8 +24,7 @@
26
24
  !/tmp/pids/.keep
27
25
  <% end -%>
28
26
 
29
- <% unless skip_active_storage? -%>
30
- # Ignore uploaded files in development.
27
+ # Ignore storage (uploaded files in development and any SQLite databases).
31
28
  /storage/*
32
29
  <% if keeps? -%>
33
30
  !/storage/.keep
@@ -35,7 +32,6 @@
35
32
  !/tmp/storage/
36
33
  !/tmp/storage/.keep
37
34
  <% end -%>
38
- <% end -%>
39
35
  <% unless options.api? -%>
40
36
 
41
37
  /public/assets
@@ -0,0 +1 @@
1
+ <%= node_version %>
@@ -1,11 +1,13 @@
1
1
  require "test_helper"
2
2
 
3
- class ApplicationCable::ConnectionTest < ActionCable::Connection::TestCase
4
- # test "connects with cookies" do
5
- # cookies.signed[:user_id] = 42
6
- #
7
- # connect
8
- #
9
- # assert_equal connection.user_id, "42"
10
- # end
3
+ module ApplicationCable
4
+ class ConnectionTest < ActionCable::Connection::TestCase
5
+ # test "connects with cookies" do
6
+ # cookies.signed[:user_id] = 42
7
+ #
8
+ # connect
9
+ #
10
+ # assert_equal connection.user_id, "42"
11
+ # end
12
+ end
11
13
  end
@@ -2,18 +2,20 @@ ENV["RAILS_ENV"] ||= "test"
2
2
  require_relative "../config/environment"
3
3
  require "rails/test_help"
4
4
 
5
- class ActiveSupport::TestCase
6
- # Run tests in parallel with specified workers
5
+ module ActiveSupport
6
+ class TestCase
7
+ # Run tests in parallel with specified workers
7
8
  <% if Process.respond_to?(:fork) && !Gem.win_platform? -%>
8
- parallelize(workers: :number_of_processors)
9
+ parallelize(workers: :number_of_processors)
9
10
  <%- else -%>
10
- parallelize(workers: :number_of_processors, with: :threads)
11
+ parallelize(workers: :number_of_processors, with: :threads)
11
12
  <% end -%>
12
13
 
13
14
  <% unless options[:skip_active_record] -%>
14
- # Setup all fixtures in test/fixtures/*.yml for all tests in alphabetical order.
15
- fixtures :all
15
+ # Setup all fixtures in test/fixtures/*.yml for all tests in alphabetical order.
16
+ fixtures :all
16
17
 
17
18
  <% end -%>
18
- # Add more helper methods to be used by all tests here...
19
+ # Add more helper methods to be used by all tests here...
20
+ end
19
21
  end
@@ -4,6 +4,10 @@ module Rails
4
4
  module Generators
5
5
  class ApplicationRecordGenerator < Base # :nodoc:
6
6
  hook_for :orm, required: true, desc: "ORM to be invoked"
7
+
8
+ class << self
9
+ delegate(:desc, to: :orm_generator)
10
+ end
7
11
  end
8
12
  end
9
13
  end
@@ -6,6 +6,7 @@ module Rails
6
6
  module Generators
7
7
  class BenchmarkGenerator < NamedBase
8
8
  IPS_GEM_NAME = "benchmark-ips"
9
+ IPS_GEM_USED_REGEXP = /gem.*\b#{IPS_GEM_NAME}\b.*/
9
10
 
10
11
  argument :reports, type: :array, default: ["before", "after"]
11
12
 
@@ -21,7 +22,7 @@ module Rails
21
22
 
22
23
  def ips_installed?
23
24
  in_root do
24
- return File.read("Gemfile").match?(/gem.*\b#{IPS_GEM_NAME}\b.*/)
25
+ return File.read("Gemfile").match?(IPS_GEM_USED_REGEXP)
25
26
  end
26
27
  end
27
28
  end
@@ -1,6 +1,6 @@
1
1
  Description:
2
2
  Generates a new controller and its views. Pass the controller name, either
3
- CamelCased or under_scored, and a list of views as arguments.
3
+ CamelCased or under_scored, and a list of actions as arguments.
4
4
 
5
5
  To create a controller within a module, specify the controller name as a
6
6
  path like 'parent_module/controller_name'.
@@ -8,11 +8,19 @@ Description:
8
8
  This generates a controller class in app/controllers and invokes helper,
9
9
  template engine, assets, and test framework generators.
10
10
 
11
- Example:
12
- `bin/rails generate controller CreditCards open debit credit close`
11
+ Examples:
12
+ `bin/rails generate controller credit_cards open debit credit close`
13
13
 
14
- CreditCards controller with URLs like /credit_cards/debit.
14
+ This generates a `CreditCardsController` with routes like /credit_cards/debit.
15
15
  Controller: app/controllers/credit_cards_controller.rb
16
16
  Test: test/controllers/credit_cards_controller_test.rb
17
17
  Views: app/views/credit_cards/debit.html.erb [...]
18
18
  Helper: app/helpers/credit_cards_helper.rb
19
+
20
+ `bin/rails generate controller users index --skip-routes`
21
+
22
+ This generates a `UsersController` with an index action and no routes.
23
+
24
+ `bin/rails generate controller admin/dashboard --parent=admin_controller`
25
+
26
+ This generates a `Admin::DashboardController` with an `AdminController` parent class.
@@ -6,6 +6,7 @@ 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 :parent, type: :string, default: "ApplicationController", desc: "The parent class for the generated controller"
9
10
 
10
11
  check_class_collision suffix: "Controller"
11
12
 
@@ -25,6 +26,10 @@ module Rails
25
26
  end
26
27
 
27
28
  private
29
+ def parent_class_name
30
+ options[:parent]
31
+ end
32
+
28
33
  def file_name
29
34
  @_file_name ||= remove_possible_suffix(super)
30
35
  end
@@ -1,5 +1,5 @@
1
1
  <% module_namespacing do -%>
2
- class <%= class_name %>Controller < ApplicationController
2
+ class <%= class_name %>Controller < <%= parent_class_name.classify %>
3
3
  <% actions.each do |action| -%>
4
4
  def <%= action %>
5
5
  end