Files
grecia/config/application.rb
Javi Martín ffc14e499a Upgrade to Rails 6.0
All the code in the `bin/` and the `config/` folders has been generated
running `rake app:update`. The only exception is the code in
`config/application.rb` where we've excluded the engines that Rails 6.0
has added, since we don't use them.

There are a few changes in Active Storage which aren't compatible with
the code we were using until now.

Since the method to assign an attachment in ActiveStorage has changed
and is incompatible with the hack we used to allow assigning `nil`
attachments, and since ActiveStorage now supports assigning `nil`
attachments, we're removing the mentioned hack. This makes the
HasAttachment module redundant, so we're removing it.

Another change in ActiveStorage is files are no longer saved before
saving the `ActiveStorage::Attachment` record. This means we need to
manually upload the file when using direct uploads. We also have to
change the width and height validations we used for images; however,
doing so results in very complex code, and we currently have to write
that code for both images and site customization images.

So, for now, we're just uploading the file before checking its
dimensions. Not ideal, though. We might use active_storage_validations
in the future to fix this issue (when they support a proc/lambda, as
mentioned in commit 600f5c35e).

We also need to update a couple of tests due to a small change in
response headers. Now the content disposition returns something like:

```
attachment; filename="budget_investments.csv"; filename*=UTF-8''budget_investments.csv
```

So we're updating regular expression we use to check the filename.

Finally, Rails 6.0.1 changed the way the host is set in integration
tests [1] and so both `Capybara.app_host` and `Capybara.default_host`
were ignored when generating URLs in the relationable examples. The only
way I've found to make it work is to explicitely assign the host to the
integration session. Rails 6.1 will change this setup again, so maybe
then we can remove this hack.

[1] https://github.com/rails/rails/pull/36283/commits/fe00711e9
2022-08-24 14:33:02 +02:00

142 lines
4.3 KiB
Ruby

require_relative "boot"
require "rails"
# Pick the frameworks you want:
require "active_model/railtie"
require "active_job/railtie"
require "active_record/railtie"
require "active_storage/engine"
require "action_controller/railtie"
require "action_mailer/railtie"
# require "action_mailbox/engine"
# require "action_text/engine"
require "action_view/railtie"
require "action_cable/engine"
require "sprockets/railtie"
require "rails/test_unit/railtie"
# Require the gems listed in Gemfile, including any gems
# you've limited to :test, :development, or :production.
Bundler.require(*Rails.groups)
module Consul
class Application < Rails::Application
config.load_defaults 5.2
# Keep belongs_to fields optional by default, because that's the way
# Rails 4 models worked
config.active_record.belongs_to_required_by_default = false
# Use local forms with `form_with`, so it works like `form_for`
config.action_view.form_with_generates_remote_forms = false
# Keep using AES-256-CBC for message encryption in case it's used
# in any CONSUL installations
config.active_support.use_authenticated_message_encryption = false
# Keep reading existing data in the legislation_annotations ranges column
config.active_record.yaml_column_permitted_classes = [ActiveSupport::HashWithIndifferentAccess, Symbol]
# Handle custom exceptions
config.action_dispatch.rescue_responses["FeatureFlags::FeatureDisabled"] = :forbidden
# Store uploaded files on the local file system (see config/storage.yml for options).
config.active_storage.service = :local
# Set Time.zone default to the specified zone and make Active Record auto-convert to this zone.
# Run "rake -D time" for a list of tasks for finding time zone names. Default is UTC.
# config.time_zone = 'Central Time (US & Canada)'
# The default locale is :en and all translations from config/locales/*.rb,yml are auto loaded.
# config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}').to_s]
config.i18n.default_locale = :en
available_locales = [
"ar",
"bg",
"bs",
"ca",
"cs",
"da",
"de",
"el",
"en",
"es",
"es-PE",
"eu",
"fa",
"fr",
"gl",
"he",
"hr",
"id",
"it",
"ka",
"nl",
"oc",
"pl",
"pt-BR",
"ro",
"ru",
"sl",
"sq",
"so",
"sr",
"sv",
"tr",
"uk-UA",
"val",
"zh-CN",
"zh-TW"]
config.i18n.available_locales = available_locales
config.i18n.fallbacks = {
"ca" => "es",
"es-PE" => "es",
"eu" => "es",
"fr" => "es",
"gl" => "es",
"it" => "es",
"oc" => "fr",
"pt-BR" => "es",
"val" => "es"
}
config.i18n.load_path += Dir[Rails.root.join("config", "locales", "**[^custom]*", "*.{rb,yml}")]
config.i18n.load_path += Dir[Rails.root.join("config", "locales", "custom", "**", "*.{rb,yml}")]
config.after_initialize do
Globalize.set_fallbacks_to_all_available_locales
end
config.assets.paths << Rails.root.join("app", "assets", "fonts")
config.assets.paths << Rails.root.join("vendor", "assets", "fonts")
# Add lib to the autoload path
config.autoload_paths << Rails.root.join("lib")
config.time_zone = "Madrid"
config.active_job.queue_adapter = :delayed_job
# CONSUL specific custom overrides
# Read more on documentation:
# * English: https://github.com/consul/consul/blob/master/CUSTOMIZE_EN.md
# * Spanish: https://github.com/consul/consul/blob/master/CUSTOMIZE_ES.md
#
config.autoload_paths << "#{Rails.root}/app/components/custom"
config.autoload_paths << "#{Rails.root}/app/controllers/custom"
config.autoload_paths << "#{Rails.root}/app/graphql/custom"
config.autoload_paths << "#{Rails.root}/app/models/custom"
config.paths["app/views"].unshift(Rails.root.join("app", "views", "custom"))
end
end
class Rails::Engine
initializer :prepend_custom_assets_path, group: :all do |app|
if self.class.name == "Consul::Application"
%w[images fonts].each do |asset|
app.config.assets.paths.unshift(Rails.root.join("app", "assets", asset, "custom").to_s)
end
end
end
end
require "./config/application_custom"