diff --git a/app/lib/active_storage/virus_scanner.rb b/app/lib/active_storage/virus_scanner.rb index 23cbd1c91..b51b05855 100644 --- a/app/lib/active_storage/virus_scanner.rb +++ b/app/lib/active_storage/virus_scanner.rb @@ -1,6 +1,4 @@ class ActiveStorage::VirusScanner - include ActiveStorage::Downloading - def initialize(blob) @blob = blob end @@ -32,7 +30,7 @@ class ActiveStorage::VirusScanner end def metadata - download_blob_to_tempfile do |file| + blob.open do |file| if ClamavService.safe_file?(file.path) { virus_scan_result: SAFE, scanned_at: Time.zone.now } else diff --git a/app/models/concerns/blob_signed_id_concern.rb b/app/models/concerns/blob_signed_id_concern.rb index 64b981993..8e7d1e09b 100644 --- a/app/models/concerns/blob_signed_id_concern.rb +++ b/app/models/concerns/blob_signed_id_concern.rb @@ -6,7 +6,7 @@ module BlobSignedIdConcern # This is a measure to ensure that we never under any circumstance # expose permanent attachment url def signed_id - ActiveStorage.verifier.generate(id, purpose: :blob_id, expires_in: ActiveStorage::Service.url_expires_in) + ActiveStorage.verifier.generate(id, purpose: :blob_id, expires_in: Rails.application.config.active_storage.service_urls_expire_in) end end end diff --git a/bin/rails b/bin/rails index 5badb2fde..073966023 100755 --- a/bin/rails +++ b/bin/rails @@ -1,9 +1,4 @@ #!/usr/bin/env ruby -begin - load File.expand_path('../spring', __FILE__) -rescue LoadError => e - raise unless e.message.include?('spring') -end APP_PATH = File.expand_path('../config/application', __dir__) require_relative '../config/boot' require 'rails/commands' diff --git a/bin/rake b/bin/rake index d87d5f578..17240489f 100755 --- a/bin/rake +++ b/bin/rake @@ -1,9 +1,4 @@ #!/usr/bin/env ruby -begin - load File.expand_path('../spring', __FILE__) -rescue LoadError => e - raise unless e.message.include?('spring') -end require_relative '../config/boot' require 'rake' Rake.application.run diff --git a/bin/yarn b/bin/yarn index 542c351ad..460dd565b 100755 --- a/bin/yarn +++ b/bin/yarn @@ -4,8 +4,8 @@ Dir.chdir(APP_ROOT) do begin exec "yarnpkg", *ARGV rescue Errno::ENOENT - warn "Yarn executable was not detected in the system." - warn "Download Yarn at https://yarnpkg.com/en/docs/install" + $stderr.puts "Yarn executable was not detected in the system." + $stderr.puts "Download Yarn at https://yarnpkg.com/en/docs/install" exit 1 end end diff --git a/config/application.rb b/config/application.rb index 2ecce58c2..6667166a7 100644 --- a/config/application.rb +++ b/config/application.rb @@ -10,6 +10,7 @@ Dotenv::Railtie.load module TPS class Application < Rails::Application + config.load_defaults 5.0 # Settings in config/environments/* take precedence over those specified here. # Application configuration should go into files in config/initializers # -- all .rb files in that directory are automatically loaded. @@ -33,7 +34,9 @@ module TPS config.active_job.queue_adapter = :delayed_job - config.action_view.sanitized_allowed_tags = ActionView::Base.sanitized_allowed_tags + ['u'] + config.action_view.sanitized_allowed_tags = ['u'] + + config.active_record.belongs_to_required_by_default = false # Some mobile browsers have a behaviour where, although they will delete the session # cookie when the browser shutdowns, they will still serve a cached version diff --git a/config/environment.rb b/config/environment.rb index 0b8bdd828..426333bb4 100644 --- a/config/environment.rb +++ b/config/environment.rb @@ -1,5 +1,5 @@ # Load the Rails application. -require File.expand_path('application', __dir__) +require_relative 'application' # Initialize the Rails application. Rails.application.initialize! diff --git a/config/environments/development.rb b/config/environments/development.rb index 82ee10641..e4476fb01 100644 --- a/config/environments/development.rb +++ b/config/environments/development.rb @@ -30,6 +30,9 @@ Rails.application.configure do # Raise an error on page load if there are pending migrations. 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. # This option may cause significant delays in view rendering with a large # number of complex assets. @@ -84,4 +87,6 @@ Rails.application.configure do if ENV['RAILS_QUEUE_ADAPTER'] config.active_job.queue_adapter = ENV['RAILS_QUEUE_ADAPTER'].to_sym end + + config.file_watcher = ActiveSupport::EventedFileUpdateChecker end diff --git a/config/environments/test.rb b/config/environments/test.rb index 7f100ca27..b977118e3 100644 --- a/config/environments/test.rb +++ b/config/environments/test.rb @@ -31,7 +31,7 @@ Rails.application.configure do # ActionMailer::Base.deliveries array. config.action_mailer.delivery_method = :test - config.active_storage.service = :local + config.active_storage.service = :test # Randomize the order test cases are executed. config.active_support.test_order = :random diff --git a/config/initializers/active_storage.rb b/config/initializers/active_storage.rb index c5cef6e7f..5cc61f6c1 100644 --- a/config/initializers/active_storage.rb +++ b/config/initializers/active_storage.rb @@ -1,4 +1,4 @@ -ActiveStorage::Service.url_expires_in = 1.hour +Rails.application.config.active_storage.service_urls_expire_in = 1.hour # In Rails 5.2, we have to hook at `on_load` on the blob themeselves, which is # not ideal. diff --git a/config/initializers/application_controller_renderer.rb b/config/initializers/application_controller_renderer.rb new file mode 100644 index 000000000..89d2efab2 --- /dev/null +++ b/config/initializers/application_controller_renderer.rb @@ -0,0 +1,8 @@ +# Be sure to restart your server when you modify this file. + +# ActiveSupport::Reloader.to_prepare do +# ApplicationController.renderer.defaults.merge!( +# http_host: 'example.org', +# https: false +# ) +# end diff --git a/config/initializers/cookies_serializer.rb b/config/initializers/cookies_serializer.rb index 7f70458de..5a6a32d37 100644 --- a/config/initializers/cookies_serializer.rb +++ b/config/initializers/cookies_serializer.rb @@ -1,3 +1,5 @@ # Be sure to restart your server when you modify this file. +# Specify a serializer for the signed and encrypted cookie jars. +# Valid options are :json, :marshal, and :hybrid. Rails.application.config.action_dispatch.cookies_serializer = :json diff --git a/config/initializers/new_framework_defaults_6_0.rb b/config/initializers/new_framework_defaults_6_0.rb new file mode 100644 index 000000000..92240ef5f --- /dev/null +++ b/config/initializers/new_framework_defaults_6_0.rb @@ -0,0 +1,45 @@ +# Be sure to restart your server when you modify this file. +# +# This file contains migration options to ease your Rails 6.0 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. + +# Don't force requests from old versions of IE to be UTF-8 encoded. +# Rails.application.config.action_view.default_enforce_utf8 = false + +# Embed purpose and expiry metadata inside signed and 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 6.0. +# Rails.application.config.action_dispatch.use_cookies_with_metadata = true + +# Change the return value of `ActionDispatch::Response#content_type` to Content-Type header without modification. +# Rails.application.config.action_dispatch.return_only_media_type_on_content_type = false + +# Return false instead of self when enqueuing is aborted from a callback. +# Rails.application.config.active_job.return_false_on_aborted_enqueue = true + +# Send Active Storage analysis and purge jobs to dedicated queues. +# Rails.application.config.active_storage.queues.analysis = :active_storage_analysis +# Rails.application.config.active_storage.queues.purge = :active_storage_purge + +# When assigning to a collection of attachments declared via `has_many_attached`, replace existing +# attachments instead of appending. Use #attach to add new attachments without replacing existing ones. +# Rails.application.config.active_storage.replace_on_assign_to_many = true + +# Use ActionMailer::MailDeliveryJob for sending parameterized and normal mail. +# +# The default delivery jobs (ActionMailer::Parameterized::DeliveryJob, ActionMailer::DeliveryJob), +# will be removed in Rails 6.1. This setting is not backwards compatible with earlier Rails versions. +# If you send mail in the background, job workers need to have a copy of +# MailDeliveryJob to ensure all delivery jobs are processed properly. +# Make sure your entire app is migrated and stable on 6.0 before using this setting. +# Rails.application.config.action_mailer.delivery_job = "ActionMailer::MailDeliveryJob" + +# Enable the same cache key to be reused when the object being cached of type +# `ActiveRecord::Relation` changes by moving the volatile information (max updated at and count) +# of the relation's cache key into the cache version to support recycling cache key. +# Rails.application.config.active_record.collection_cache_versioning = true diff --git a/config/spring.rb b/config/spring.rb new file mode 100644 index 000000000..db5bf1307 --- /dev/null +++ b/config/spring.rb @@ -0,0 +1,6 @@ +Spring.watch( + ".ruby-version", + ".rbenv-vars", + "tmp/restart.txt", + "tmp/caching-dev.txt" +) diff --git a/spec/models/procedure_spec.rb b/spec/models/procedure_spec.rb index a00fbf177..73c96c84b 100644 --- a/spec/models/procedure_spec.rb +++ b/spec/models/procedure_spec.rb @@ -380,18 +380,13 @@ describe Procedure do let!(:assign_to_2) { create(:assign_to, procedure: procedure, groupe_instructeur: groupe_instructeur_1, instructeur: instructeur_2) } before do - @logo = File.open('spec/fixtures/files/white.png') - @signature = File.open('spec/fixtures/files/black.png') + @logo = Rack::Test::UploadedFile.new('spec/fixtures/files/white.png', 'image/png') + @signature = Rack::Test::UploadedFile.new('spec/fixtures/files/black.png', 'image/png') @attestation_template = create(:attestation_template, procedure: procedure, logo: @logo, signature: @signature) @procedure = procedure.clone(administrateur, from_library) @procedure.save end - after do - @logo.close - @signature.close - end - subject { @procedure } it { expect(subject.parent_procedure).to eq(procedure) }