railties 7.0.8.7 → 7.1.5.1

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 (168) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +723 -215
  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 +14 -2
  9. data/lib/rails/application/bootstrap.rb +23 -4
  10. data/lib/rails/application/configuration.rb +190 -69
  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 +43 -33
  14. data/lib/rails/application.rb +141 -33
  15. data/lib/rails/backtrace_cleaner.rb +5 -3
  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 +49 -21
  62. data/lib/rails/gem_version.rb +4 -4
  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 +355 -82
  66. data/lib/rails/generators/app_name.rb +3 -14
  67. data/lib/rails/generators/base.rb +17 -9
  68. data/lib/rails/generators/database.rb +40 -2
  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 +4 -5
  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 +85 -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 +32 -28
  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 +280 -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 +21 -20
  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 +6 -14
  129. data/lib/rails/health_controller.rb +55 -0
  130. data/lib/rails/info.rb +1 -1
  131. data/lib/rails/info_controller.rb +33 -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 +31 -31
  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 +64 -27
  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,280 @@
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
+ # To set this configuration, add the following line to `config/application.rb` (NOT this file):
20
+ # config.add_autoload_paths_to_load_path = false
21
+
22
+ ###
23
+ # Remove the default X-Download-Options headers since it is used only by Internet Explorer.
24
+ # If you need to support Internet Explorer, add back `"X-Download-Options" => "noopen"`.
25
+ #++
26
+ # Rails.application.config.action_dispatch.default_headers = {
27
+ # "X-Frame-Options" => "SAMEORIGIN",
28
+ # "X-XSS-Protection" => "0",
29
+ # "X-Content-Type-Options" => "nosniff",
30
+ # "X-Permitted-Cross-Domain-Policies" => "none",
31
+ # "Referrer-Policy" => "strict-origin-when-cross-origin"
32
+ # }
33
+
34
+ ###
35
+ # Do not treat an `ActionController::Parameters` instance
36
+ # as equal to an equivalent `Hash` by default.
37
+ #++
38
+ # Rails.application.config.action_controller.allow_deprecated_parameters_hash_equality = false
39
+
40
+ ###
41
+ # Active Record Encryption now uses SHA-256 as its hash digest algorithm.
42
+ #
43
+ # There are 3 scenarios to consider.
44
+ #
45
+ # 1. If you have data encrypted with previous Rails versions, and you have
46
+ # +config.active_support.key_generator_hash_digest_class+ configured as SHA1 (the default
47
+ # before Rails 7.0), you need to configure SHA-1 for Active Record Encryption too:
48
+ #++
49
+ # Rails.application.config.active_record.encryption.hash_digest_class = OpenSSL::Digest::SHA1
50
+ #
51
+ # 2. If you have +config.active_support.key_generator_hash_digest_class+ configured as SHA256 (the new default
52
+ # in 7.0), then you need to configure SHA-256 for Active Record Encryption:
53
+ #++
54
+ # Rails.application.config.active_record.encryption.hash_digest_class = OpenSSL::Digest::SHA256
55
+ #
56
+ # 3. If you don't currently have data encrypted with Active Record encryption, you can disable this setting to
57
+ # configure the default behavior starting 7.1+:
58
+ #++
59
+ # Rails.application.config.active_record.encryption.support_sha1_for_non_deterministic_encryption = false
60
+
61
+ ###
62
+ # No longer run after_commit callbacks on the first of multiple Active Record
63
+ # instances to save changes to the same database row within a transaction.
64
+ # Instead, run these callbacks on the instance most likely to have internal
65
+ # state which matches what was committed to the database, typically the last
66
+ # instance to save.
67
+ #++
68
+ # Rails.application.config.active_record.run_commit_callbacks_on_first_saved_instances_in_transaction = false
69
+
70
+ ###
71
+ # Configures SQLite with a strict strings mode, which disables double-quoted string literals.
72
+ #
73
+ # SQLite has some quirks around double-quoted string literals.
74
+ # It first tries to consider double-quoted strings as identifier names, but if they don't exist
75
+ # it then considers them as string literals. Because of this, typos can silently go unnoticed.
76
+ # For example, it is possible to create an index for a non existing column.
77
+ # See https://www.sqlite.org/quirks.html#double_quoted_string_literals_are_accepted for more details.
78
+ #++
79
+ # Rails.application.config.active_record.sqlite3_adapter_strict_strings_by_default = true
80
+
81
+ ###
82
+ # Disable deprecated singular associations names.
83
+ #++
84
+ # Rails.application.config.active_record.allow_deprecated_singular_associations_name = false
85
+
86
+ ###
87
+ # Enable the Active Job `BigDecimal` argument serializer, which guarantees
88
+ # roundtripping. Without this serializer, some queue adapters may serialize
89
+ # `BigDecimal` arguments as simple (non-roundtrippable) strings.
90
+ #
91
+ # When deploying an application with multiple replicas, old (pre-Rails 7.1)
92
+ # replicas will not be able to deserialize `BigDecimal` arguments from this
93
+ # serializer. Therefore, this setting should only be enabled after all replicas
94
+ # have been successfully upgraded to Rails 7.1.
95
+ #++
96
+ # Rails.application.config.active_job.use_big_decimal_serializer = true
97
+
98
+ ###
99
+ # Specify if an `ArgumentError` should be raised if `Rails.cache` `fetch` or
100
+ # `write` are given an invalid `expires_at` or `expires_in` time.
101
+ # Options are `true`, and `false`. If `false`, the exception will be reported
102
+ # as `handled` and logged instead.
103
+ #++
104
+ # Rails.application.config.active_support.raise_on_invalid_cache_expiration_time = true
105
+
106
+ ###
107
+ # Specify whether Query Logs will format tags using the SQLCommenter format
108
+ # (https://open-telemetry.github.io/opentelemetry-sqlcommenter/), or using the legacy format.
109
+ # Options are `:legacy` and `:sqlcommenter`.
110
+ #++
111
+ # Rails.application.config.active_record.query_log_tags_format = :sqlcommenter
112
+
113
+ ###
114
+ # Specify the default serializer used by `MessageEncryptor` and `MessageVerifier`
115
+ # instances.
116
+ #
117
+ # The legacy default is `:marshal`, which is a potential vector for
118
+ # deserialization attacks in cases where a message signing secret has been
119
+ # leaked.
120
+ #
121
+ # In Rails 7.1, the new default is `:json_allow_marshal` which serializes and
122
+ # deserializes with `ActiveSupport::JSON`, but can fall back to deserializing
123
+ # with `Marshal` so that legacy messages can still be read.
124
+ #
125
+ # In Rails 7.2, the default will become `:json` which serializes and
126
+ # deserializes with `ActiveSupport::JSON` only.
127
+ #
128
+ # Alternatively, you can choose `:message_pack` or `:message_pack_allow_marshal`,
129
+ # which serialize with `ActiveSupport::MessagePack`. `ActiveSupport::MessagePack`
130
+ # can roundtrip some Ruby types that are not supported by JSON, and may provide
131
+ # improved performance, but it requires the `msgpack` gem.
132
+ #
133
+ # For more information, see
134
+ # https://guides.rubyonrails.org/v7.1/configuring.html#config-active-support-message-serializer
135
+ #
136
+ # If you are performing a rolling deploy of a Rails 7.1 upgrade, wherein servers
137
+ # that have not yet been upgraded must be able to read messages from upgraded
138
+ # servers, first deploy without changing the serializer, then set the serializer
139
+ # in a subsequent deploy.
140
+ #++
141
+ # Rails.application.config.active_support.message_serializer = :json_allow_marshal
142
+
143
+ ###
144
+ # Enable a performance optimization that serializes message data and metadata
145
+ # together. This changes the message format, so messages serialized this way
146
+ # cannot be read by older versions of Rails. However, messages that use the old
147
+ # format can still be read, regardless of whether this optimization is enabled.
148
+ #
149
+ # To perform a rolling deploy of a Rails 7.1 upgrade, wherein servers that have
150
+ # not yet been upgraded must be able to read messages from upgraded servers,
151
+ # leave this optimization off on the first deploy, then enable it on a
152
+ # subsequent deploy.
153
+ #++
154
+ # Rails.application.config.active_support.use_message_serializer_for_metadata = true
155
+
156
+ ###
157
+ # Set the maximum size for Rails log files.
158
+ #
159
+ # `config.load_defaults 7.1` does not set this value for environments other than
160
+ # development and test.
161
+ #++
162
+ # if Rails.env.local?
163
+ # Rails.application.config.log_file_size = 100 * 1024 * 1024
164
+ # end
165
+
166
+ ###
167
+ # Enable raising on assignment to attr_readonly attributes. The previous
168
+ # behavior would allow assignment but silently not persist changes to the
169
+ # database.
170
+ #++
171
+ # Rails.application.config.active_record.raise_on_assign_to_attr_readonly = true
172
+
173
+ ###
174
+ # Enable validating only parent-related columns for presence when the parent is mandatory.
175
+ # The previous behavior was to validate the presence of the parent record, which performed an extra query
176
+ # to get the parent every time the child record was updated, even when parent has not changed.
177
+ #++
178
+ # Rails.application.config.active_record.belongs_to_required_validates_foreign_key = false
179
+
180
+ ###
181
+ # Enable precompilation of `config.filter_parameters`. Precompilation can
182
+ # improve filtering performance, depending on the quantity and types of filters.
183
+ #++
184
+ # Rails.application.config.precompile_filter_parameters = true
185
+
186
+ ###
187
+ # Enable before_committed! callbacks on all enrolled records in a transaction.
188
+ # The previous behavior was to only run the callbacks on the first copy of a record
189
+ # if there were multiple copies of the same record enrolled in the transaction.
190
+ #++
191
+ # Rails.application.config.active_record.before_committed_on_all_records = true
192
+
193
+ ###
194
+ # Disable automatic column serialization into YAML.
195
+ # To keep the historic behavior, you can set it to `YAML`, however it is
196
+ # recommended to explicitly define the serialization method for each column
197
+ # rather than to rely on a global default.
198
+ #++
199
+ # Rails.application.config.active_record.default_column_serializer = nil
200
+
201
+ ###
202
+ # Enable a performance optimization that serializes Active Record models
203
+ # in a faster and more compact way.
204
+ #
205
+ # To perform a rolling deploy of a Rails 7.1 upgrade, wherein servers that have
206
+ # not yet been upgraded must be able to read caches from upgraded servers,
207
+ # leave this optimization off on the first deploy, then enable it on a
208
+ # subsequent deploy.
209
+ #++
210
+ # Rails.application.config.active_record.marshalling_format_version = 7.1
211
+
212
+ ###
213
+ # Run `after_commit` and `after_*_commit` callbacks in the order they are defined in a model.
214
+ # This matches the behaviour of all other callbacks.
215
+ # In previous versions of Rails, they ran in the inverse order.
216
+ #++
217
+ # Rails.application.config.active_record.run_after_transaction_callbacks_in_order_defined = true
218
+
219
+ ###
220
+ # Whether a `transaction` block is committed or rolled back when exited via `return`, `break` or `throw`.
221
+ #++
222
+ # Rails.application.config.active_record.commit_transaction_on_non_local_return = true
223
+
224
+ ###
225
+ # Controls when to generate a value for <tt>has_secure_token</tt> declarations.
226
+ #++
227
+ # Rails.application.config.active_record.generate_secure_token_on = :initialize
228
+
229
+ ###
230
+ # ** Please read carefully, this must be configured in config/application.rb **
231
+ #
232
+ # Change the format of the cache entry.
233
+ #
234
+ # Changing this default means that all new cache entries added to the cache
235
+ # will have a different format that is not supported by Rails 7.0
236
+ # applications.
237
+ #
238
+ # Only change this value after your application is fully deployed to Rails 7.1
239
+ # and you have no plans to rollback.
240
+ # When you're ready to change format, add this to `config/application.rb` (NOT
241
+ # this file):
242
+ # config.active_support.cache_format_version = 7.1
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
+ # Configure Action Text to use an HTML5 standards-compliant sanitizer when it is supported on your
257
+ # platform.
258
+ #
259
+ # `Rails::HTML::Sanitizer.best_supported_vendor` will cause Action Text to use HTML5-compliant
260
+ # sanitizers if they are supported, else fall back to HTML4 sanitizers.
261
+ #
262
+ # In previous versions of Rails, Action Text always used `Rails::HTML4::Sanitizer` as its vendor.
263
+ #++
264
+ # Rails.application.config.action_text.sanitizer_vendor = Rails::HTML::Sanitizer.best_supported_vendor
265
+
266
+ ###
267
+ # Configure the log level used by the DebugExceptions middleware when logging
268
+ # uncaught exceptions during requests.
269
+ #++
270
+ # Rails.application.config.action_dispatch.debug_exception_log_level = :error
271
+
272
+ ###
273
+ # Configure the test helpers in Action View, Action Dispatch, and rails-dom-testing to use HTML5
274
+ # parsers.
275
+ #
276
+ # Nokogiri::HTML5 isn't supported on JRuby, so JRuby applications must set this to :html4.
277
+ #
278
+ # In previous versions of Rails, these test helpers always used an HTML4 parser.
279
+ #++
280
+ # 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,44 @@
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
+ rails_env = ENV.fetch("RAILS_ENV") { "development" }
15
+
16
+ if rails_env == "production"
17
+ # If you are running more than 1 thread per process, the workers count
18
+ # should be equal to the number of processors (CPU cores) in production.
19
+ #
20
+ # It defaults to 1 because it's impossible to reliably detect how many
21
+ # CPU cores are available. Make sure to set the `WEB_CONCURRENCY` environment
22
+ # variable to match the number of processors.
23
+ worker_count = Integer(ENV.fetch("WEB_CONCURRENCY") { 1 })
24
+ if worker_count > 1
25
+ workers worker_count
26
+ else
27
+ preload_app!
28
+ end
29
+ end
11
30
  # Specifies the `worker_timeout` threshold that Puma will use to wait before
12
31
  # terminating a worker in development environments.
13
- #
14
32
  worker_timeout 3600 if ENV.fetch("RAILS_ENV", "development") == "development"
15
33
 
16
34
  # Specifies the `port` that Puma will listen on to receive requests; default is 3000.
17
- #
18
35
  port ENV.fetch("PORT") { 3000 }
19
36
 
20
37
  # Specifies the `environment` that Puma will run in.
21
- #
22
- environment ENV.fetch("RAILS_ENV") { "development" }
38
+ environment rails_env
23
39
 
24
40
  # Specifies the `pidfile` that Puma will use.
25
41
  pidfile ENV.fetch("PIDFILE") { "tmp/pids/server.pid" }
26
42
 
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
43
  # Allow puma to be restarted by `bin/rails restart` command.
43
44
  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