Upgrade to Rails 5.2

All the code in the `bin/` and the `config/` folder has been generated
running `rake app:update`, except the `escape_javascript_fix` file,
which we've removed since the code there is already included in Rails
5.2.
This commit is contained in:
Javi Martín
2020-05-15 15:19:10 +02:00
parent e4d21ba148
commit 3267c81ba0
14 changed files with 128 additions and 96 deletions

View File

@@ -253,7 +253,6 @@ Rails/OutputSafety:
Severity: warning Severity: warning
Exclude: Exclude:
- app/helpers/text_with_links_helper.rb - app/helpers/text_with_links_helper.rb
- config/initializers/escape_javascript_fix.rb
Rails/PluralizationGrammar: Rails/PluralizationGrammar:
Enabled: true Enabled: true

View File

@@ -1,6 +1,6 @@
source "https://rubygems.org" source "https://rubygems.org"
gem "rails", "5.1.7" gem "rails", "5.2.4.4"
gem "acts-as-taggable-on", "~> 6.5.0" gem "acts-as-taggable-on", "~> 6.5.0"
gem "acts_as_votable", "~> 0.12.1" gem "acts_as_votable", "~> 0.12.1"

View File

@@ -10,39 +10,43 @@ GEM
remote: https://rubygems.org/ remote: https://rubygems.org/
remote: https://rails-assets.org/ remote: https://rails-assets.org/
specs: specs:
actioncable (5.1.7) actioncable (5.2.4.4)
actionpack (= 5.1.7) actionpack (= 5.2.4.4)
nio4r (~> 2.0) nio4r (~> 2.0)
websocket-driver (~> 0.6.1) websocket-driver (>= 0.6.1)
actionmailer (5.1.7) actionmailer (5.2.4.4)
actionpack (= 5.1.7) actionpack (= 5.2.4.4)
actionview (= 5.1.7) actionview (= 5.2.4.4)
activejob (= 5.1.7) activejob (= 5.2.4.4)
mail (~> 2.5, >= 2.5.4) mail (~> 2.5, >= 2.5.4)
rails-dom-testing (~> 2.0) rails-dom-testing (~> 2.0)
actionpack (5.1.7) actionpack (5.2.4.4)
actionview (= 5.1.7) actionview (= 5.2.4.4)
activesupport (= 5.1.7) activesupport (= 5.2.4.4)
rack (~> 2.0) rack (~> 2.0, >= 2.0.8)
rack-test (>= 0.6.3) rack-test (>= 0.6.3)
rails-dom-testing (~> 2.0) rails-dom-testing (~> 2.0)
rails-html-sanitizer (~> 1.0, >= 1.0.2) rails-html-sanitizer (~> 1.0, >= 1.0.2)
actionview (5.1.7) actionview (5.2.4.4)
activesupport (= 5.1.7) activesupport (= 5.2.4.4)
builder (~> 3.1) builder (~> 3.1)
erubi (~> 1.4) erubi (~> 1.4)
rails-dom-testing (~> 2.0) rails-dom-testing (~> 2.0)
rails-html-sanitizer (~> 1.0, >= 1.0.3) rails-html-sanitizer (~> 1.0, >= 1.0.3)
activejob (5.1.7) activejob (5.2.4.4)
activesupport (= 5.1.7) activesupport (= 5.2.4.4)
globalid (>= 0.3.6) globalid (>= 0.3.6)
activemodel (5.1.7) activemodel (5.2.4.4)
activesupport (= 5.1.7) activesupport (= 5.2.4.4)
activerecord (5.1.7) activerecord (5.2.4.4)
activemodel (= 5.1.7) activemodel (= 5.2.4.4)
activesupport (= 5.1.7) activesupport (= 5.2.4.4)
arel (~> 8.0) arel (>= 9.0)
activesupport (5.1.7) activestorage (5.2.4.4)
actionpack (= 5.2.4.4)
activerecord (= 5.2.4.4)
marcel (~> 0.3.1)
activesupport (5.2.4.4)
concurrent-ruby (~> 1.0, >= 1.0.2) concurrent-ruby (~> 1.0, >= 1.0.2)
i18n (>= 0.7, < 2) i18n (>= 0.7, < 2)
minitest (~> 5.1) minitest (~> 5.1)
@@ -73,7 +77,7 @@ GEM
nokogiri nokogiri
ancestry (3.2.1) ancestry (3.2.1)
activerecord (>= 4.2.0) activerecord (>= 4.2.0)
arel (8.0.0) arel (9.0.0)
ast (2.4.1) ast (2.4.1)
audited (4.9.0) audited (4.9.0)
activerecord (>= 4.2, < 6.1) activerecord (>= 4.2, < 6.1)
@@ -338,6 +342,8 @@ GEM
nokogiri (>= 1.5.9) nokogiri (>= 1.5.9)
mail (2.7.1) mail (2.7.1)
mini_mime (>= 0.1.1) mini_mime (>= 0.1.1)
marcel (0.3.3)
mimemagic (~> 0.3.2)
mdl (0.11.0) mdl (0.11.0)
kramdown (~> 2.3) kramdown (~> 2.3)
kramdown-parser-gfm (~> 1.1) kramdown-parser-gfm (~> 1.1)
@@ -427,17 +433,18 @@ GEM
rack rack
rack-test (1.1.0) rack-test (1.1.0)
rack (>= 1.0, < 3) rack (>= 1.0, < 3)
rails (5.1.7) rails (5.2.4.4)
actioncable (= 5.1.7) actioncable (= 5.2.4.4)
actionmailer (= 5.1.7) actionmailer (= 5.2.4.4)
actionpack (= 5.1.7) actionpack (= 5.2.4.4)
actionview (= 5.1.7) actionview (= 5.2.4.4)
activejob (= 5.1.7) activejob (= 5.2.4.4)
activemodel (= 5.1.7) activemodel (= 5.2.4.4)
activerecord (= 5.1.7) activerecord (= 5.2.4.4)
activesupport (= 5.1.7) activestorage (= 5.2.4.4)
activesupport (= 5.2.4.4)
bundler (>= 1.3.0) bundler (>= 1.3.0)
railties (= 5.1.7) railties (= 5.2.4.4)
sprockets-rails (>= 2.0.0) sprockets-rails (>= 2.0.0)
rails-assets-leaflet (1.5.1) rails-assets-leaflet (1.5.1)
rails-assets-markdown-it (9.0.1) rails-assets-markdown-it (9.0.1)
@@ -449,12 +456,12 @@ GEM
rails-i18n (5.1.3) rails-i18n (5.1.3)
i18n (>= 0.7, < 2) i18n (>= 0.7, < 2)
railties (>= 5.0, < 6) railties (>= 5.0, < 6)
railties (5.1.7) railties (5.2.4.4)
actionpack (= 5.1.7) actionpack (= 5.2.4.4)
activesupport (= 5.1.7) activesupport (= 5.2.4.4)
method_source method_source
rake (>= 0.8.7) rake (>= 0.8.7)
thor (>= 0.18.1, < 2.0) thor (>= 0.19.0, < 2.0)
rainbow (3.0.0) rainbow (3.0.0)
rake (13.0.1) rake (13.0.1)
rb-fsevent (0.10.4) rb-fsevent (0.10.4)
@@ -615,7 +622,7 @@ GEM
nokogiri (~> 1.6) nokogiri (~> 1.6)
rubyzip (>= 1.3.0) rubyzip (>= 1.3.0)
selenium-webdriver (>= 3.0, < 4.0) selenium-webdriver (>= 3.0, < 4.0)
websocket-driver (0.6.5) websocket-driver (0.7.3)
websocket-extensions (>= 0.1.0) websocket-extensions (>= 0.1.0)
websocket-extensions (0.1.5) websocket-extensions (0.1.5)
whenever (1.0.0) whenever (1.0.0)
@@ -694,7 +701,7 @@ DEPENDENCIES
pg (~> 1.0.0) pg (~> 1.0.0)
pg_search (~> 2.3.0) pg_search (~> 2.3.0)
puma (~> 4.3.6) puma (~> 4.3.6)
rails (= 5.1.7) rails (= 5.2.4.4)
rails-assets-leaflet! rails-assets-leaflet!
rails-assets-markdown-it (~> 9.0.1)! rails-assets-markdown-it (~> 9.0.1)!
recipient_interceptor (~> 0.2.0) recipient_interceptor (~> 0.2.0)

View File

@@ -1,3 +1,3 @@
#!/usr/bin/env ruby #!/usr/bin/env ruby
ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../../Gemfile", __FILE__) ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../Gemfile", __dir__)
load Gem.bin_path("bundler", "bundle") load Gem.bin_path("bundler", "bundle")

View File

@@ -1,10 +1,9 @@
#!/usr/bin/env ruby #!/usr/bin/env ruby
require "pathname"
require "fileutils" require "fileutils"
include FileUtils include FileUtils
# path to your application root. # path to your application root.
APP_ROOT = Pathname.new File.expand_path("../../", __FILE__) APP_ROOT = File.expand_path("..", __dir__)
def system!(*args) def system!(*args)
system(*args) || abort("\n== Command #{args} failed ==") system(*args) || abort("\n== Command #{args} failed ==")

View File

@@ -1,10 +1,9 @@
#!/usr/bin/env ruby #!/usr/bin/env ruby
require "pathname"
require "fileutils" require "fileutils"
include FileUtils include FileUtils
# path to your application root. # path to your application root.
APP_ROOT = Pathname.new File.expand_path("../../", __FILE__) APP_ROOT = File.expand_path("..", __dir__)
def system!(*args) def system!(*args)
system(*args) || abort("\n== Command #{args} failed ==") system(*args) || abort("\n== Command #{args} failed ==")

View File

@@ -13,12 +13,13 @@ Rails.application.configure do
config.consider_all_requests_local = true config.consider_all_requests_local = true
# Enable/disable caching. By default caching is disabled. # Enable/disable caching. By default caching is disabled.
if Rails.root.join("tmp/caching-dev.txt").exist? # Run rails dev:cache to toggle caching.
if Rails.root.join("tmp", "caching-dev.txt").exist?
config.action_controller.perform_caching = true config.action_controller.perform_caching = true
config.cache_store = :memory_store config.cache_store = :memory_store
config.public_file_server.headers = { config.public_file_server.headers = {
"Cache-Control" => "public, max-age=172800" "Cache-Control" => "public, max-age=#{2.days.to_i}"
} }
else else
config.action_controller.perform_caching = false config.action_controller.perform_caching = false
@@ -41,6 +42,9 @@ Rails.application.configure do
# Raise an error on page load if there are pending migrations. # Raise an error on page load if there are pending migrations.
config.active_record.migration_error = :page_load config.active_record.migration_error = :page_load
# Highlight code that triggered database queries in logs.
config.active_record.verbose_query_logs = true
# Debug mode disables concatenation and preprocessing of assets. # Debug mode disables concatenation and preprocessing of assets.
# This option may cause significant delays in view rendering with a large # This option may cause significant delays in view rendering with a large
# number of complex assets. # number of complex assets.

View File

@@ -20,7 +20,7 @@ Rails.application.configure do
# Configure public file server for tests with Cache-Control for performance. # Configure public file server for tests with Cache-Control for performance.
config.public_file_server.enabled = true config.public_file_server.enabled = true
config.public_file_server.headers = { config.public_file_server.headers = {
"Cache-Control" => "public, max-age=3600" "Cache-Control" => "public, max-age=#{1.hour.to_i}"
} }
# Show full error reports and disable caching. # Show full error reports and disable caching.

View File

@@ -1,6 +1,8 @@
# Be sure to restart your server when you modify this file. # Be sure to restart your server when you modify this file.
# ApplicationController.renderer.defaults.merge!( # ActiveSupport::Reloader.to_prepare do
# http_host: 'example.org', # ApplicationController.renderer.defaults.merge!(
# https: false # http_host: 'example.org',
# ) # https: false
# )
# end

View File

@@ -0,0 +1,25 @@
# Be sure to restart your server when you modify this file.
# Define an application-wide content security policy
# For further information see the following documentation
# https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy
# Rails.application.config.content_security_policy do |policy|
# policy.default_src :self, :https
# policy.font_src :self, :https, :data
# policy.img_src :self, :https, :data
# policy.object_src :none
# policy.script_src :self, :https
# policy.style_src :self, :https
# # Specify URI for violation reports
# # policy.report_uri "/csp-violation-report-endpoint"
# end
# If you are using UJS then enable automatic nonce generation
# Rails.application.config.content_security_policy_nonce_generator = -> request { SecureRandom.base64(16) }
# Report CSP violations to a specified URI
# For further information see the following documentation:
# https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy-Report-Only
# Rails.application.config.content_security_policy_report_only = true

View File

@@ -1,25 +0,0 @@
# Code taken from https://github.com/rails/rails/security/advisories/GHSA-65cv-r6x7-79hv
# Remove this code after upgrading to Rails 5.2
ActionView::Helpers::JavaScriptHelper::JS_ESCAPE_MAP.merge!(
{
"`" => "\\`",
"$" => "\\$"
}
)
module ActionView::Helpers::JavaScriptHelper
alias :old_ej :escape_javascript
alias :old_j :j
def escape_javascript(javascript)
javascript = javascript.to_s
if javascript.empty?
result = ""
else
result = javascript.gsub(/(\\|<\/|\r\n|\342\200\250|\342\200\251|[\n\r"']|[`]|[$])/u, JS_ESCAPE_MAP)
end
javascript.html_safe? ? result.html_safe : result
end
alias :j :escape_javascript
end

View File

@@ -0,0 +1,38 @@
# Be sure to restart your server when you modify this file.
#
# This file contains migration options to ease your Rails 5.2 upgrade.
#
# Once upgraded flip defaults one by one to migrate to the new default.
#
# Read the Guide for Upgrading Ruby on Rails for more info on each option.
# Make Active Record use stable #cache_key alongside new #cache_version method.
# This is needed for recyclable cache keys.
# Rails.application.config.active_record.cache_versioning = true
# Use AES-256-GCM authenticated encryption for encrypted cookies.
# Also, embed cookie expiry in signed or encrypted cookies for increased security.
#
# This option is not backwards compatible with earlier Rails versions.
# It's best enabled when your entire app is migrated and stable on 5.2.
#
# Existing cookies will be converted on read then written with the new scheme.
# Rails.application.config.action_dispatch.use_authenticated_cookie_encryption = true
# Use AES-256-GCM authenticated encryption as default cipher for encrypting messages
# instead of AES-256-CBC, when use_authenticated_message_encryption is set to true.
# Rails.application.config.active_support.use_authenticated_message_encryption = true
# Add default protection from forgery to ActionController::Base instead of in
# ApplicationController.
# Rails.application.config.action_controller.default_protect_from_forgery = true
# Store boolean values are in sqlite3 databases as 1 and 0 instead of 't' and
# 'f' after migrating old data.
# Rails.application.config.active_record.sqlite3.represent_boolean_as_integer = true
# Use SHA-1 instead of MD5 to generate non-sensitive digests, such as the ETag header.
# Rails.application.config.active_support.use_sha1_digests = true
# Make `form_with` generate id attributes for any generated HTML tags.
# Rails.application.config.action_view.form_with_generates_ids = true

View File

@@ -19,18 +19,6 @@ Warden.test_mode!
ActiveRecord::Migration.maintain_test_schema! ActiveRecord::Migration.maintain_test_schema!
# Monkey patch from https://github.com/rails/rails/pull/32293
# Remove when we upgrade to Rails 5.2
require "action_dispatch/system_testing/test_helpers/setup_and_teardown"
module ActionDispatch::SystemTesting::TestHelpers::SetupAndTeardown
def after_teardown
take_failed_screenshot
Capybara.reset_sessions!
ensure
super
end
end
RSpec.configure do |config| RSpec.configure do |config|
config.infer_spec_type_from_file_location! config.infer_spec_type_from_file_location!
config.after do config.after do

View File

@@ -82,12 +82,8 @@ RSpec.configure do |config|
.to receive(:available_locales).and_return(I18n.available_locales.map(&:to_s)) .to receive(:available_locales).and_return(I18n.available_locales.map(&:to_s))
end end
config.before(:each, :with_frozen_time) do config.around(:each, :with_frozen_time) do |example|
travel_to Time.current # TODO: use `freeze_time` after migrating to Rails 5.2. freeze_time { example.run }
end
config.after(:each, :with_frozen_time) do
travel_back
end end
config.before(:each, :application_zone_west_of_system_zone) do config.before(:each, :application_zone_west_of_system_zone) do