-
+
diff --git a/demo/Gemfile b/demo/Gemfile
index 4b141c21..bb87017a 100644
--- a/demo/Gemfile
+++ b/demo/Gemfile
@@ -8,8 +8,8 @@ gem "htmlbeautifier"
gem "jbuilder"
gem "jsbundling-rails"
gem "propshaft"
-gem "puma", ">= 5.0"
-gem "rails", "~> 8.0.0"
+gem "puma"
+gem "rails", "~> 8.1.0"
gem "sqlite3", ">= 2.1"
gem "stimulus-rails"
gem "thruster", require: false
diff --git a/demo/Gemfile.lock b/demo/Gemfile.lock
index 8c9f8d97..008a855f 100644
--- a/demo/Gemfile.lock
+++ b/demo/Gemfile.lock
@@ -8,29 +8,31 @@ PATH
GEM
remote: https://rubygems.org/
specs:
- actioncable (8.0.2)
- actionpack (= 8.0.2)
- activesupport (= 8.0.2)
+ action_text-trix (2.1.15)
+ railties
+ actioncable (8.1.0)
+ actionpack (= 8.1.0)
+ activesupport (= 8.1.0)
nio4r (~> 2.0)
websocket-driver (>= 0.6.1)
zeitwerk (~> 2.6)
- actionmailbox (8.0.2)
- actionpack (= 8.0.2)
- activejob (= 8.0.2)
- activerecord (= 8.0.2)
- activestorage (= 8.0.2)
- activesupport (= 8.0.2)
+ actionmailbox (8.1.0)
+ actionpack (= 8.1.0)
+ activejob (= 8.1.0)
+ activerecord (= 8.1.0)
+ activestorage (= 8.1.0)
+ activesupport (= 8.1.0)
mail (>= 2.8.0)
- actionmailer (8.0.2)
- actionpack (= 8.0.2)
- actionview (= 8.0.2)
- activejob (= 8.0.2)
- activesupport (= 8.0.2)
+ actionmailer (8.1.0)
+ actionpack (= 8.1.0)
+ actionview (= 8.1.0)
+ activejob (= 8.1.0)
+ activesupport (= 8.1.0)
mail (>= 2.8.0)
rails-dom-testing (~> 2.2)
- actionpack (8.0.2)
- actionview (= 8.0.2)
- activesupport (= 8.0.2)
+ actionpack (8.1.0)
+ actionview (= 8.1.0)
+ activesupport (= 8.1.0)
nokogiri (>= 1.8.5)
rack (>= 2.2.4)
rack-session (>= 1.0.1)
@@ -38,42 +40,43 @@ GEM
rails-dom-testing (~> 2.2)
rails-html-sanitizer (~> 1.6)
useragent (~> 0.16)
- actiontext (8.0.2)
- actionpack (= 8.0.2)
- activerecord (= 8.0.2)
- activestorage (= 8.0.2)
- activesupport (= 8.0.2)
+ actiontext (8.1.0)
+ action_text-trix (~> 2.1.15)
+ actionpack (= 8.1.0)
+ activerecord (= 8.1.0)
+ activestorage (= 8.1.0)
+ activesupport (= 8.1.0)
globalid (>= 0.6.0)
nokogiri (>= 1.8.5)
- actionview (8.0.2)
- activesupport (= 8.0.2)
+ actionview (8.1.0)
+ activesupport (= 8.1.0)
builder (~> 3.1)
erubi (~> 1.11)
rails-dom-testing (~> 2.2)
rails-html-sanitizer (~> 1.6)
- activejob (8.0.2)
- activesupport (= 8.0.2)
+ activejob (8.1.0)
+ activesupport (= 8.1.0)
globalid (>= 0.3.6)
- activemodel (8.0.2)
- activesupport (= 8.0.2)
- activerecord (8.0.2)
- activemodel (= 8.0.2)
- activesupport (= 8.0.2)
+ activemodel (8.1.0)
+ activesupport (= 8.1.0)
+ activerecord (8.1.0)
+ activemodel (= 8.1.0)
+ activesupport (= 8.1.0)
timeout (>= 0.4.0)
- activestorage (8.0.2)
- actionpack (= 8.0.2)
- activejob (= 8.0.2)
- activerecord (= 8.0.2)
- activesupport (= 8.0.2)
+ activestorage (8.1.0)
+ actionpack (= 8.1.0)
+ activejob (= 8.1.0)
+ activerecord (= 8.1.0)
+ activesupport (= 8.1.0)
marcel (~> 1.0)
- activesupport (8.0.2)
+ activesupport (8.1.0)
base64
- benchmark (>= 0.3)
bigdecimal
concurrent-ruby (~> 1.0, >= 1.3.1)
connection_pool (>= 2.2.5)
drb
i18n (>= 1.6, < 2)
+ json
logger (>= 1.4.2)
minitest (>= 5.1)
securerandom (>= 0.3)
@@ -81,9 +84,8 @@ GEM
uri (>= 0.13.1)
addressable (2.8.7)
public_suffix (>= 2.0.2, < 7.0)
- base64 (0.2.0)
- benchmark (0.4.0)
- bigdecimal (3.1.9)
+ base64 (0.3.0)
+ bigdecimal (3.3.1)
bindex (0.8.1)
bootsnap (1.18.4)
msgpack (~> 1.2)
@@ -104,7 +106,7 @@ GEM
capybara (>= 2, < 4)
chunky_png (1.4.0)
concurrent-ruby (1.3.5)
- connection_pool (2.5.0)
+ connection_pool (2.5.4)
crass (1.0.6)
cssbundling-rails (1.4.3)
railties (>= 6.0.0)
@@ -112,15 +114,16 @@ GEM
debug (1.10.0)
irb (~> 1.10)
reline (>= 0.3.8)
- drb (2.2.1)
+ drb (2.2.3)
+ erb (5.1.1)
erubi (1.13.1)
- globalid (1.2.1)
+ globalid (1.3.0)
activesupport (>= 6.1)
htmlbeautifier (1.4.3)
i18n (1.14.7)
concurrent-ruby (~> 1.0)
- io-console (0.8.0)
- irb (1.15.1)
+ io-console (0.8.1)
+ irb (1.15.2)
pp (>= 0.6.0)
rdoc (>= 4.0.0)
reline (>= 0.4.2)
@@ -129,22 +132,24 @@ GEM
activesupport (>= 5.0.0)
jsbundling-rails (1.3.1)
railties (>= 6.0.0)
- logger (1.6.6)
- loofah (2.24.0)
+ json (2.15.1)
+ logger (1.7.0)
+ loofah (2.24.1)
crass (~> 1.0.2)
nokogiri (>= 1.12.0)
- mail (2.8.1)
+ mail (2.9.0)
+ logger
mini_mime (>= 0.1.1)
net-imap
net-pop
net-smtp
- marcel (1.0.4)
+ marcel (1.1.0)
matrix (0.4.2)
mini_mime (1.1.5)
- mini_portile2 (2.8.8)
- minitest (5.25.4)
+ mini_portile2 (2.8.9)
+ minitest (5.26.0)
msgpack (1.8.0)
- net-imap (0.5.6)
+ net-imap (0.5.12)
date
net-protocol
net-pop (0.1.2)
@@ -154,20 +159,20 @@ GEM
net-smtp (0.5.1)
net-protocol
nio4r (2.7.4)
- nokogiri (1.18.3)
+ nokogiri (1.18.10)
mini_portile2 (~> 2.8.2)
racc (~> 1.4)
- nokogiri (1.18.3-aarch64-linux-gnu)
+ nokogiri (1.18.10-aarch64-linux-gnu)
racc (~> 1.4)
- nokogiri (1.18.3-arm-linux-gnu)
+ nokogiri (1.18.10-arm-linux-gnu)
racc (~> 1.4)
- nokogiri (1.18.3-arm64-darwin)
+ nokogiri (1.18.10-arm64-darwin)
racc (~> 1.4)
- nokogiri (1.18.3-x86_64-darwin)
+ nokogiri (1.18.10-x86_64-darwin)
racc (~> 1.4)
- nokogiri (1.18.3-x86_64-linux-gnu)
+ nokogiri (1.18.10-x86_64-linux-gnu)
racc (~> 1.4)
- pp (0.6.2)
+ pp (0.6.3)
prettyprint
prettyprint (0.2.0)
propshaft (1.1.0)
@@ -175,55 +180,58 @@ GEM
activesupport (>= 7.0.0)
rack
railties (>= 7.0.0)
- psych (5.2.3)
+ psych (5.2.6)
date
stringio
public_suffix (6.0.1)
puma (6.6.0)
nio4r (~> 2.0)
racc (1.8.1)
- rack (3.1.12)
- rack-session (2.1.0)
+ rack (3.2.3)
+ rack-session (2.1.1)
base64 (>= 0.1.0)
rack (>= 3.0.0)
rack-test (2.2.0)
rack (>= 1.3)
rackup (2.2.1)
rack (>= 3)
- rails (8.0.2)
- actioncable (= 8.0.2)
- actionmailbox (= 8.0.2)
- actionmailer (= 8.0.2)
- actionpack (= 8.0.2)
- actiontext (= 8.0.2)
- actionview (= 8.0.2)
- activejob (= 8.0.2)
- activemodel (= 8.0.2)
- activerecord (= 8.0.2)
- activestorage (= 8.0.2)
- activesupport (= 8.0.2)
+ rails (8.1.0)
+ actioncable (= 8.1.0)
+ actionmailbox (= 8.1.0)
+ actionmailer (= 8.1.0)
+ actionpack (= 8.1.0)
+ actiontext (= 8.1.0)
+ actionview (= 8.1.0)
+ activejob (= 8.1.0)
+ activemodel (= 8.1.0)
+ activerecord (= 8.1.0)
+ activestorage (= 8.1.0)
+ activesupport (= 8.1.0)
bundler (>= 1.15.0)
- railties (= 8.0.2)
- rails-dom-testing (2.2.0)
+ railties (= 8.1.0)
+ rails-dom-testing (2.3.0)
activesupport (>= 5.0.0)
minitest
nokogiri (>= 1.6)
rails-html-sanitizer (1.6.2)
loofah (~> 2.21)
nokogiri (>= 1.15.7, != 1.16.7, != 1.16.6, != 1.16.5, != 1.16.4, != 1.16.3, != 1.16.2, != 1.16.1, != 1.16.0.rc1, != 1.16.0)
- railties (8.0.2)
- actionpack (= 8.0.2)
- activesupport (= 8.0.2)
+ railties (8.1.0)
+ actionpack (= 8.1.0)
+ activesupport (= 8.1.0)
irb (~> 1.13)
rackup (>= 1.0.0)
rake (>= 12.2)
thor (~> 1.0, >= 1.2.2)
+ tsort (>= 0.2)
zeitwerk (~> 2.6)
- rake (13.2.1)
- rdoc (6.12.0)
+ rake (13.3.0)
+ rdoc (6.15.0)
+ erb
psych (>= 4.0.0)
+ tsort
regexp_parser (2.10.0)
- reline (0.6.0)
+ reline (0.6.2)
io-console (~> 0.5)
rexml (3.4.1)
rubyzip (2.4.1)
@@ -242,20 +250,21 @@ GEM
sqlite3 (2.6.0-x86_64-linux-gnu)
stimulus-rails (1.3.4)
railties (>= 6.0.0)
- stringio (3.1.5)
- thor (1.3.2)
+ stringio (3.1.7)
+ thor (1.4.0)
thruster (0.1.14)
thruster (0.1.14-aarch64-linux)
thruster (0.1.14-arm64-darwin)
thruster (0.1.14-x86_64-darwin)
thruster (0.1.14-x86_64-linux)
timeout (0.4.3)
+ tsort (0.2.0)
turbo-rails (2.0.16)
actionpack (>= 7.1.0)
railties (>= 7.1.0)
tzinfo (2.0.6)
concurrent-ruby (~> 1.0)
- uri (1.0.3)
+ uri (1.0.4)
useragent (0.16.11)
web-console (4.2.1)
actionview (>= 6.0.0)
@@ -263,13 +272,13 @@ GEM
bindex (>= 0.4.0)
railties (>= 6.0.0)
websocket (1.2.11)
- websocket-driver (0.7.7)
+ websocket-driver (0.8.0)
base64
websocket-extensions (>= 0.1.0)
websocket-extensions (0.1.5)
xpath (3.2.0)
nokogiri (~> 1.8)
- zeitwerk (2.7.2)
+ zeitwerk (2.7.3)
PLATFORMS
aarch64-linux
@@ -291,8 +300,8 @@ DEPENDENCIES
jbuilder
jsbundling-rails
propshaft
- puma (>= 5.0)
- rails (~> 8.0.0)
+ puma
+ rails (~> 8.1.0)
selenium-webdriver
sqlite3 (>= 2.1)
stimulus-rails
diff --git a/demo/bin/brakeman b/demo/bin/brakeman
new file mode 100755
index 00000000..ace1c9ba
--- /dev/null
+++ b/demo/bin/brakeman
@@ -0,0 +1,7 @@
+#!/usr/bin/env ruby
+require "rubygems"
+require "bundler/setup"
+
+ARGV.unshift("--ensure-latest")
+
+load Gem.bin_path("brakeman", "brakeman")
diff --git a/demo/bin/ci b/demo/bin/ci
new file mode 100755
index 00000000..4137ad5b
--- /dev/null
+++ b/demo/bin/ci
@@ -0,0 +1,6 @@
+#!/usr/bin/env ruby
+require_relative "../config/boot"
+require "active_support/continuous_integration"
+
+CI = ActiveSupport::ContinuousIntegration
+require_relative "../config/ci.rb"
diff --git a/demo/bin/setup b/demo/bin/setup
index be3db3c0..81be011e 100755
--- a/demo/bin/setup
+++ b/demo/bin/setup
@@ -22,6 +22,7 @@ FileUtils.chdir APP_ROOT do
puts "\n== Preparing database =="
system! "bin/rails db:prepare"
+ system! "bin/rails db:reset" if ARGV.include?("--reset")
puts "\n== Removing old logs and tempfiles =="
system! "bin/rails log:clear tmp:clear"
diff --git a/demo/bin/thrust b/demo/bin/thrust
new file mode 100755
index 00000000..36bde2d8
--- /dev/null
+++ b/demo/bin/thrust
@@ -0,0 +1,5 @@
+#!/usr/bin/env ruby
+require "rubygems"
+require "bundler/setup"
+
+load Gem.bin_path("thruster", "thrust")
diff --git a/demo/config/application.rb b/demo/config/application.rb
index 19c508a5..d076e98f 100644
--- a/demo/config/application.rb
+++ b/demo/config/application.rb
@@ -14,6 +14,7 @@ class Application < Rails::Application
# Please, add to the `ignore` list any other `lib` subdirectories that do
# not contain `.rb` files, or that should not be reloaded or eager loaded.
# Common ones are `templates`, `generators`, or `middleware`, for example.
+ # TODO: I think `autoload_lib` was introduced in 7.1, so it can soon be removed.
config.autoload_lib(ignore: %w[assets tasks]) if config.respond_to?(:autoload_lib)
# Configuration for the application, engines, and railties goes here.
diff --git a/demo/config/boot.rb b/demo/config/boot.rb
index e334ad37..6d349b91 100644
--- a/demo/config/boot.rb
+++ b/demo/config/boot.rb
@@ -1,5 +1,5 @@
# Set up gems listed in the Gemfile.
-ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __dir__)
+ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../../Gemfile", __dir__)
-require 'bundler/setup' if File.exist?(ENV['BUNDLE_GEMFILE'])
-$LOAD_PATH.unshift File.expand_path('../../lib', __dir__)
+require "bundler/setup" if File.exist?(ENV["BUNDLE_GEMFILE"])
+$LOAD_PATH.unshift File.expand_path("../../lib", __dir__)
diff --git a/demo/config/ci.rb b/demo/config/ci.rb
new file mode 100644
index 00000000..b4f256e9
--- /dev/null
+++ b/demo/config/ci.rb
@@ -0,0 +1,20 @@
+# Run using bin/ci
+
+CI.run do
+ step "Setup", "bin/setup --skip-server"
+
+ step "Security: Importmap vulnerability audit", "bin/importmap audit"
+ step "Security: Brakeman code analysis", "bin/brakeman --quiet --no-pager --exit-on-warn --exit-on-error"
+
+ step "Tests: Rails", "bin/rails test"
+ step "Tests: System", "bin/rails test:system"
+ step "Tests: Seeds", "env RAILS_ENV=test bin/rails db:seed:replant"
+
+ # Optional: set a green GitHub commit status to unblock PR merge.
+ # Requires the `gh` CLI and `gh extension install basecamp/gh-signoff`.
+ # if success?
+ # step "Signoff: All systems go. Ready for merge and deploy.", "gh signoff"
+ # else
+ # failure "Signoff: CI failed. Do not merge or deploy.", "Fix the issues and try again."
+ # end
+end
diff --git a/demo/config/environments/development.rb b/demo/config/environments/development.rb
index 63cf6835..35a17d24 100644
--- a/demo/config/environments/development.rb
+++ b/demo/config/environments/development.rb
@@ -28,8 +28,8 @@
# Change to :null_store to avoid any caching.
config.cache_store = :memory_store
- # Store uploaded files on the local file system (see config/storage.yml for options)
- config.active_storage.service = :local if config.respond_to?(:active_storage)
+ # Store uploaded files on the local file system (see config/storage.yml for options).
+ config.active_storage.service = :local
# Don't care if the mailer can't send.
config.action_mailer.raise_delivery_errors = false
@@ -55,6 +55,12 @@
# Highlight code that enqueued background job in logs.
config.active_job.verbose_enqueue_logs = true
+ # Highlight code that triggered redirect in logs.
+ config.action_dispatch.verbose_redirect_logs = true
+
+ # Suppress logger output for asset requests.
+ config.assets.quiet = true
+
# Raises error for missing translations.
# config.i18n.raise_on_missing_translations = true
diff --git a/demo/config/environments/production.rb b/demo/config/environments/production.rb
index d4cf79f4..f3aefd0d 100644
--- a/demo/config/environments/production.rb
+++ b/demo/config/environments/production.rb
@@ -37,7 +37,7 @@
config.log_tags = [:request_id]
config.logger = ActiveSupport::TaggedLogging.logger($stdout)
- # Change to "debug" to log everything (including potentially personally-identifiable information!)
+ # Change to "debug" to log everything (including potentially personally-identifiable information!).
config.log_level = ENV.fetch("RAILS_LOG_LEVEL", "info")
# Prevent health checks from clogging up the logs.
@@ -59,7 +59,7 @@
# Set host to be used by links generated in mailer templates.
config.action_mailer.default_url_options = { host: "example.com" }
- # Specify outgoing SMTP server. Remember to add smtp/* credentials via rails credentials:edit.
+ # Specify outgoing SMTP server. Remember to add smtp/* credentials via bin/rails credentials:edit.
# config.action_mailer.smtp_settings = {
# user_name: Rails.application.credentials.dig(:smtp, :user_name),
# password: Rails.application.credentials.dig(:smtp, :password),
diff --git a/demo/config/initializers/content_security_policy.rb b/demo/config/initializers/content_security_policy.rb
index b3076b38..d51d7139 100644
--- a/demo/config/initializers/content_security_policy.rb
+++ b/demo/config/initializers/content_security_policy.rb
@@ -20,6 +20,10 @@
# config.content_security_policy_nonce_generator = ->(request) { request.session.id.to_s }
# config.content_security_policy_nonce_directives = %w(script-src style-src)
#
+# # Automatically add `nonce` to `javascript_tag`, `javascript_include_tag`, and `stylesheet_link_tag`
+# # if the corresponding directives are specified in `content_security_policy_nonce_directives`.
+# # config.content_security_policy_nonce_auto = true
+#
# # Report violations without enforcing the policy.
# # config.content_security_policy_report_only = true
# end
diff --git a/demo/config/initializers/filter_parameter_logging.rb b/demo/config/initializers/filter_parameter_logging.rb
index f72dcdfa..c0b717f7 100644
--- a/demo/config/initializers/filter_parameter_logging.rb
+++ b/demo/config/initializers/filter_parameter_logging.rb
@@ -3,6 +3,6 @@
# Configure parameters to be partially matched (e.g. passw matches password) and filtered from the log file.
# Use this to limit dissemination of sensitive information.
# See the ActiveSupport::ParameterFilter documentation for supported notations and behaviors.
-Rails.application.config.filter_parameters += %i[
- passw email secret token _key crypt salt certificate otp ssn cvv cvc
+Rails.application.config.filter_parameters += [
+ :passw, :email, :secret, :token, :_key, :crypt, :salt, :certificate, :otp, :ssn, :cvv, :cvc
]
diff --git a/demo/config/puma.rb b/demo/config/puma.rb
index a248513b..38c4b865 100644
--- a/demo/config/puma.rb
+++ b/demo/config/puma.rb
@@ -7,7 +7,8 @@
#
# You can control the number of workers using ENV["WEB_CONCURRENCY"]. You
# should only set this value when you want to run 2 or more workers. The
-# default is already 1.
+# default is already 1. You can set it to `auto` to automatically start a worker
+# for each available processor.
#
# The ideal number of threads per worker depends both on how much time the
# application spends waiting for IO operations and on how much you wish to
@@ -33,7 +34,7 @@
# Allow puma to be restarted by `bin/rails restart` command.
plugin :tmp_restart
-# Run the Solid Queue supervisor inside of Puma for single-server deployments
+# Run the Solid Queue supervisor inside of Puma for single-server deployments.
plugin :solid_queue if ENV["SOLID_QUEUE_IN_PUMA"]
# Specify the PID file. Defaults to tmp/pids/server.pid in development.
diff --git a/demo/package.json b/demo/package.json
index e9359675..39818ec3 100644
--- a/demo/package.json
+++ b/demo/package.json
@@ -3,14 +3,13 @@
"private": true,
"dependencies": {
"@popperjs/core": "^2.11.8",
- "@rails/actioncable": "^8.0.0",
- "@rails/actiontext": "^8.0.0",
- "@rails/activestorage": "^8.0.0",
- "@rails/ujs": "^7.1.0",
+ "@rails/actioncable": "^8.1.0",
+ "@rails/actiontext": "^8.1.0",
+ "@rails/activestorage": "^8.1.0",
"bootstrap": "^5.3.2",
"bootstrap-icons": "^1.11.1",
"esbuild": "^0.19.4",
- "sass": "^1.69.0",
+ "sass": "1.77.6",
"trix": "^2.0.7",
"turbolinks": "^5.2.0"
},
diff --git a/demo/public/400.html b/demo/public/400.html
index 282dbc8c..640de033 100644
--- a/demo/public/400.html
+++ b/demo/public/400.html
@@ -35,12 +35,35 @@
font-weight: 400;
letter-spacing: -0.0025em;
line-height: 1.4;
- min-height: 100vh;
+ min-height: 100dvh;
place-items: center;
text-rendering: optimizeLegibility;
-webkit-text-size-adjust: 100%;
}
+ #error-description {
+ fill: #d30001;
+ }
+
+ #error-id {
+ fill: #f0eff0;
+ }
+
+ @media (prefers-color-scheme: dark) {
+ body {
+ background: #101010;
+ color: #e0e0e0;
+ }
+
+ #error-description {
+ fill: #FF6161;
+ }
+
+ #error-id {
+ fill: #2c2c2c;
+ }
+ }
+
a {
color: inherit;
font-weight: 700;
@@ -83,13 +106,11 @@
}
main article br {
-
display: none;
@media(min-width: 48em) {
display: inline;
}
-
}
@@ -102,10 +123,10 @@
- The server cannot process the request due to a client error. Please check the request and try again. If you’re the application owner check the logs for more information.
+ The server cannot process the request due to a client error. Please check the request and try again. If you're the application owner check the logs for more information.
diff --git a/demo/public/404.html b/demo/public/404.html
index c0670bc8..d7f0f142 100644
--- a/demo/public/404.html
+++ b/demo/public/404.html
@@ -4,7 +4,7 @@
-
The page you were looking for doesn’t exist (404 Not found)
+
The page you were looking for doesn't exist (404 Not found)
@@ -35,12 +35,35 @@
font-weight: 400;
letter-spacing: -0.0025em;
line-height: 1.4;
- min-height: 100vh;
+ min-height: 100dvh;
place-items: center;
text-rendering: optimizeLegibility;
-webkit-text-size-adjust: 100%;
}
+ #error-description {
+ fill: #d30001;
+ }
+
+ #error-id {
+ fill: #f0eff0;
+ }
+
+ @media (prefers-color-scheme: dark) {
+ body {
+ background: #101010;
+ color: #e0e0e0;
+ }
+
+ #error-description {
+ fill: #FF6161;
+ }
+
+ #error-id {
+ fill: #2c2c2c;
+ }
+ }
+
a {
color: inherit;
font-weight: 700;
@@ -83,13 +106,11 @@
}
main article br {
-
display: none;
@media(min-width: 48em) {
display: inline;
}
-
}
@@ -102,10 +123,10 @@
- The page you were looking for doesn’t exist. You may have mistyped the address or the page may have moved. If you’re the application owner check the logs for more information.
+ The page you were looking for doesn't exist. You may have mistyped the address or the page may have moved. If you're the application owner check the logs for more information.
diff --git a/demo/public/406-unsupported-browser.html b/demo/public/406-unsupported-browser.html
index 9532a9cc..43d2811e 100644
--- a/demo/public/406-unsupported-browser.html
+++ b/demo/public/406-unsupported-browser.html
@@ -35,12 +35,35 @@
font-weight: 400;
letter-spacing: -0.0025em;
line-height: 1.4;
- min-height: 100vh;
+ min-height: 100dvh;
place-items: center;
text-rendering: optimizeLegibility;
-webkit-text-size-adjust: 100%;
}
+ #error-description {
+ fill: #d30001;
+ }
+
+ #error-id {
+ fill: #f0eff0;
+ }
+
+ @media (prefers-color-scheme: dark) {
+ body {
+ background: #101010;
+ color: #e0e0e0;
+ }
+
+ #error-description {
+ fill: #FF6161;
+ }
+
+ #error-id {
+ fill: #2c2c2c;
+ }
+ }
+
a {
color: inherit;
font-weight: 700;
@@ -83,13 +106,11 @@
}
main article br {
-
display: none;
@media(min-width: 48em) {
display: inline;
}
-
}
@@ -102,7 +123,7 @@
Your browser is not supported.
Please upgrade your browser to continue.
diff --git a/demo/public/422.html b/demo/public/422.html
index 8bcf0601..f12fb4aa 100644
--- a/demo/public/422.html
+++ b/demo/public/422.html
@@ -35,12 +35,35 @@
font-weight: 400;
letter-spacing: -0.0025em;
line-height: 1.4;
- min-height: 100vh;
+ min-height: 100dvh;
place-items: center;
text-rendering: optimizeLegibility;
-webkit-text-size-adjust: 100%;
}
+ #error-description {
+ fill: #d30001;
+ }
+
+ #error-id {
+ fill: #f0eff0;
+ }
+
+ @media (prefers-color-scheme: dark) {
+ body {
+ background: #101010;
+ color: #e0e0e0;
+ }
+
+ #error-description {
+ fill: #FF6161;
+ }
+
+ #error-id {
+ fill: #2c2c2c;
+ }
+ }
+
a {
color: inherit;
font-weight: 700;
@@ -83,13 +106,11 @@
}
main article br {
-
display: none;
@media(min-width: 48em) {
display: inline;
}
-
}
@@ -102,10 +123,10 @@
- The change you wanted was rejected. Maybe you tried to change something you didn’t have access to. If you’re the application owner check the logs for more information.
+ The change you wanted was rejected. Maybe you tried to change something you didn't have access to. If you're the application owner check the logs for more information.
diff --git a/demo/public/500.html b/demo/public/500.html
index d77718c3..e4eb18a7 100644
--- a/demo/public/500.html
+++ b/demo/public/500.html
@@ -4,7 +4,7 @@
- We’re sorry, but something went wrong (500 Internal Server Error)
+ We're sorry, but something went wrong (500 Internal Server Error)
@@ -35,12 +35,35 @@
font-weight: 400;
letter-spacing: -0.0025em;
line-height: 1.4;
- min-height: 100vh;
+ min-height: 100dvh;
place-items: center;
text-rendering: optimizeLegibility;
-webkit-text-size-adjust: 100%;
}
+ #error-description {
+ fill: #d30001;
+ }
+
+ #error-id {
+ fill: #f0eff0;
+ }
+
+ @media (prefers-color-scheme: dark) {
+ body {
+ background: #101010;
+ color: #e0e0e0;
+ }
+
+ #error-description {
+ fill: #FF6161;
+ }
+
+ #error-id {
+ fill: #2c2c2c;
+ }
+ }
+
a {
color: inherit;
font-weight: 700;
@@ -83,13 +106,11 @@
}
main article br {
-
display: none;
@media(min-width: 48em) {
display: inline;
}
-
}
@@ -102,10 +123,10 @@
- We’re sorry, but something went wrong.
If you’re the application owner check the logs for more information.
+ We're sorry, but something went wrong.
If you're the application owner check the logs for more information.
diff --git a/demo/yarn.lock b/demo/yarn.lock
index a1217656..48fd0346 100644
--- a/demo/yarn.lock
+++ b/demo/yarn.lock
@@ -117,30 +117,25 @@
resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.11.8.tgz#6b79032e760a0899cd4204710beede972a3a185f"
integrity sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==
-"@rails/actioncable@^8.0.0":
- version "8.0.200"
- resolved "https://registry.yarnpkg.com/@rails/actioncable/-/actioncable-8.0.200.tgz#1d27d9d55e45266e061190db045925e0b4d53d6b"
- integrity sha512-EDqWyxck22BHmv1e+mD8Kl6GmtNkhEPdRfGFT7kvsv1yoXd9iYrqHDVAaR8bKmU/syC5eEZ2I5aWWxtB73ukMw==
-
-"@rails/actiontext@^8.0.0":
- version "8.0.200"
- resolved "https://registry.yarnpkg.com/@rails/actiontext/-/actiontext-8.0.200.tgz#b0ed8ba50ec31dd8fcc7a8885403c58b2b4f378d"
- integrity sha512-p9SVulDmWKMChQpNYFrRBGa2aIfMSw8vyCRW9bwHzihFB8eAZ1NE6ak88nr037gwurbCBv4UVdnwndtuh2piAA==
+"@rails/actioncable@^8.1.0":
+ version "8.1.0"
+ resolved "https://registry.yarnpkg.com/@rails/actioncable/-/actioncable-8.1.0.tgz#cd884d50a34af9a8c9149ec4e256fbb99a67b37f"
+ integrity sha512-9WSbN548dplVkfCFJFi/CKrJ+P4runAHZLlpXFn0xL+Y6tFJvo3zp92fr4ON9WOhNt8inetu8NJG1xDDAJ8N8g==
+
+"@rails/actiontext@^8.1.0":
+ version "8.1.0"
+ resolved "https://registry.yarnpkg.com/@rails/actiontext/-/actiontext-8.1.0.tgz#6e783128a8ec5ba61e149727d9075d6138224d65"
+ integrity sha512-N5liu+rVlYQixDGydzm+TnT1N5dsgwvSjk1EL8Frnzp0girTWAVU5LjJa7k2g63RxoPcY4S7JZhnjoyJw4ocJA==
dependencies:
- "@rails/activestorage" ">= 8.0.0-alpha"
+ "@rails/activestorage" ">= 8.1.0-alpha"
-"@rails/activestorage@>= 8.0.0-alpha", "@rails/activestorage@^8.0.0":
- version "8.0.200"
- resolved "https://registry.yarnpkg.com/@rails/activestorage/-/activestorage-8.0.200.tgz#147c088e2b4167d6d49292431bdbdf10b118d5bd"
- integrity sha512-V7GnZXsAMPDWVOBv4/XpHwj5sOw5bWjidWCuUbK3Zx1xt2pOfFaeJDUG7fEWb1MwP4aW1oVVlGkJBdXVyvru0A==
+"@rails/activestorage@>= 8.1.0-alpha", "@rails/activestorage@^8.1.0":
+ version "8.1.0"
+ resolved "https://registry.yarnpkg.com/@rails/activestorage/-/activestorage-8.1.0.tgz#f4b76e73ee5de59923c7395efb7ce63679866ada"
+ integrity sha512-D2T6flCX+W3dGMzqHNikVgw1D1xpVb5wvxnQB/naHUpxgZ55Ch4D8yb246umSA3SDvk4qhuwU7knQF79VMG/Eg==
dependencies:
spark-md5 "^3.0.1"
-"@rails/ujs@^7.1.0":
- version "7.1.400"
- resolved "https://registry.yarnpkg.com/@rails/ujs/-/ujs-7.1.400.tgz#b2a76bdccb5197b9e866954536106386c87cfab5"
- integrity sha512-YwvXm3BR5tn+VCAKYGycLejMRVZE3Ionj5gFjEeGXCZnI0Rpi+7dKpmyu90kdUY7dRUFpHTdu9zZceEzFLl38w==
-
anymatch@~3.1.2:
version "3.1.3"
resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e"
@@ -279,10 +274,10 @@ readdirp@~3.6.0:
dependencies:
picomatch "^2.2.1"
-sass@^1.69.0:
- version "1.69.5"
- resolved "https://registry.yarnpkg.com/sass/-/sass-1.69.5.tgz#23e18d1c757a35f2e52cc81871060b9ad653dfde"
- integrity sha512-qg2+UCJibLr2LCVOt3OlPhr/dqVHWOa9XtZf2OjbLs/T4VPSJ00udtgJxH3neXZm+QqX8B+3cU7RaLqp1iVfcQ==
+sass@1.77.6:
+ version "1.77.6"
+ resolved "https://registry.yarnpkg.com/sass/-/sass-1.77.6.tgz#898845c1348078c2e6d1b64f9ee06b3f8bd489e4"
+ integrity sha512-ByXE1oLD79GVq9Ht1PeHWCPMPB8XHpBuz1r85oByKHjZY6qV6rWnQovQzXJXuQ/XyE1Oj3iPk3lo28uzaRA2/Q==
dependencies:
chokidar ">=3.0.0 <4.0.0"
immutable "^4.0.0"
diff --git a/gemfiles/7.1.gemfile b/gemfiles/8.1.gemfile
similarity index 77%
rename from gemfiles/7.1.gemfile
rename to gemfiles/8.1.gemfile
index 903f1878..731241e7 100644
--- a/gemfiles/7.1.gemfile
+++ b/gemfiles/8.1.gemfile
@@ -4,6 +4,6 @@ eval File.read(gems), binding, gems # rubocop: disable Security/Eval
gem "bigdecimal" if Gem::Version.new(RUBY_VERSION) >= Gem::Version.new("3.4.0")
gem "drb" if Gem::Version.new(RUBY_VERSION) >= Gem::Version.new("3.4.0")
gem "mutex_m" if Gem::Version.new(RUBY_VERSION) >= Gem::Version.new("3.4.0")
-gem "rails", "~> 7.1.0"
-gem "sprockets-rails", require: "sprockets/railtie"
-gem "sqlite3", "~> 1.4"
+gem "propshaft"
+gem "rails", "~> 8.1.0"
+gem "sqlite3"
diff --git a/test/bootstrap_checkbox_test.rb b/test/bootstrap_checkbox_test.rb
index 9c9063e6..882ef822 100644
--- a/test/bootstrap_checkbox_test.rb
+++ b/test/bootstrap_checkbox_test.rb
@@ -169,7 +169,7 @@ class BootstrapCheckboxTest < ActionView::TestCase
test "collection_check_boxes renders the form_group correctly" do
collection = [Address.new(id: 1, street: "Foobar")]
expected = <<~HTML
-
+