Заметки о релизе Ruby on Rails 6.0
Ключевые новинки в Rails 6.0:
Ключевые новинки в Rails 6.0:
- Action Mailbox
- Action Text
- Параллельное тестирование
- Тестирование Action Cable
Эти заметки о релизе покрывают только основные изменения. Чтобы узнать о других обновлениях, различных исправлениях программных ошибок и изменениях, обратитесь к логам изменений или к списку коммитов в главном репозитории Rails на GitHub.
Апгрейд до Rails 6.0
Прежде чем апгрейднуть существующее приложение, было бы хорошо иметь перед этим покрытие тестами. Также, до попытки обновиться до Rails 6.0, необходимо сначала произвести апгрейд до Rails 5.2 и убедиться, что приложение все еще выполняется так, как нужно. Список вещей, которые нужно выполнить для апгрейда доступен в руководстве Апгрейд Ruby on Rails.
Основные особенности
Action Mailbox
Action Mailbox позволяет направлять входящие письма в подобные контроллерам почтовые ящики. Подробнее об Action Mailbox можно прочитать в руководстве Основы Action Mailbox.
Action Text
Action Text добавляет возможность хранения и редактирования обогащенного текста в Rails. Это включает редактор Trix, обрабатывающий все от форматирования до ссылок, цитирования, списков, вложенных изображений и галерей. Содержимое обогащенного текста, сгенерированного редактором Trix, сохраняется в собственной модели RichText, которая связывается с существующими моделями Active Record в приложении. Любые встроенные изображения (или другие вложения) автоматически сохраняются с помощью Active Storage и связываются с включающей моделью RichText.
Подробнее об Action Text можно прочитать в руководстве Обзор Action Text.
Параллельное тестирование
Параллельное тестирование позволяет распараллелить тестовый набор. Хотя форк процессов является методом по умолчанию, треды также поддерживаются. Запуск тестов параллельно сокращает время, затрачиваемое на запуск всего тестового набора.
Тестирование Action Cable
Инструменты тестирования Action Cable позволяют тестировать функционал Action Cable на любом уровне: соединения, каналы, трансляции.
Railties
За подробностями обратитесь к Changelog.
Удалено
-
Удален устаревший хелпер
after_bundleв шаблонах плагинов. (Commit) -
Удалена устаревшая поддержка
config.ru, использующая класс приложения в качестве аргумента дляrun. (Commit) -
Удален устаревший аргумент
environmentиз команд rails. (Commit) -
Удален устаревший метод
capify!в генераторах и шаблонах. (Commit) -
Удален устаревший
config.secret_token. (Commit)
Устарело
-
Устарела передача имени сервера Rack в качестве обычного аргумента в
rails server. (Pull Request) -
Устарела поддержка использования переменной среды
HOSTдля определения IP сервера. (Pull Request) -
Устарел доступ к кэшам, возвращаемым
config_for, по не символьным ключам. (Pull Request)
Значимые изменения
-
Добавлена явная опция
--usingили-uдля указания сервера для командыrails server. (Pull Request) -
Добавлена возможность увидеть вывод
rails routesв расширенном формате. (Pull Request) -
Запуск задачи заполнения базы данных с помощью встроенного адаптера Active Job. (Pull Request)
-
Добавлена команда
rails db:system:changeдля изменения базы данных приложения. (Pull Request) -
Добавлена команда
rails test:channelsдля тестирования только каналов Action Cable. (Pull Request) -
Представлена защита против атак перепривязывания DNS. (Pull Request)
-
Добавлена возможность прерваться при неудаче во время запуска команд генератора. (Pull Request)
-
Webpacker сделан компилятором JavaScript по умолчанию в Rails 6. (Pull Request)
-
Добавлена поддержка нескольких баз данных для команды
rails db:migrate:status. (Pull Request) -
Добавлена возможность использования различных путей миграции из нескольких баз данных в генераторах. (Pull Request)
-
Добавлена поддержка учетных данных для нескольких сред. (Pull Request)
-
null_storeсделан хранилищем кэша по умолчанию в тестовой среде. (Pull Request)
Action Cable
За подробностями обратитесь к Changelog.
Удалено
- Заменены
ActionCable.startDebugging()иActionCable.stopDebugging()с помощьюActionCable.logger.enabled. (Pull Request)
Устарело
- Для Action Cable не было устареваний в Rails 6.0.
Значимые изменения
-
Добавлена поддержка опции
channel_prefixдля адаптеров подписки PostgreSQL вcable.yml. (Pull Request) -
Разрешена передача произвольной конфигурации в
ActionCable::Server::Base. (Pull Request) -
Добавлены хуки загрузки
:action_cable_connectionи:action_cable_channel. (Pull Request) -
Добавлены
Channel::Base#broadcast_toиChannel::Base.broadcasting_for. (Pull Request) -
Закрытие соединения при вызове
reject_unauthorized_connectionизActionCable::Connection. (Pull Request) -
Пакет Action Cable JavaScript преобразован из CoffeeScript в ES2015, и его исходники опубликованы в npm. (Pull Request)
-
Конфигурация адаптера WebSocket и адаптера logger перемещена из свойств
ActionCableвActionCable.adapters. (Pull Request) -
Добавлена опция
idв адаптере Redis для различения Redis-соединений Action Cable. (Pull Request)
Action Pack
За подробностями обратитесь к Changelog.
Удалено
-
Удален устаревший хелпер
fragment_cache_keyв пользуcombined_fragment_cache_key. (Commit) -
Удалены устаревшие методы в
ActionDispatch::TestResponse:#success?в пользу#successful?,#missing?в пользу#not_found?,#error?в пользу#server_error?. (Commit)
Устарело
-
Устарел
ActionDispatch::Http::ParameterFilterв пользуActiveSupport::ParameterFilter. (Pull Request) -
Устарел
force_sslна уровне контроллера в пользуconfig.force_ssl. (Pull Request)
Значимые изменения
-
Изменен
ActionDispatch::Response#content_type. возвращающий заголовок Content-Type как есть. (Pull Request) -
Вызывается
ArgumentError, если параметр ресурса содержит двоеточие. (Pull Request) -
Разрешено вызывать
ActionDispatch::SystemTestCase.driven_byс блоком для определения специфичных возможностей браузера. (Pull Request) -
Добавлена промежуточная программа
ActionDispatch::HostAuthorization, защищающая от атак перепривязывания DNS. (Pull Request) -
Разрешено использование
parsed_bodyвActionController::TestCase. (Pull Request) -
Вызывается
ArgumentError, когда существуют несколько корневых маршрутов в том же контексте без использования указаний именованияas:. (Pull Request) -
Разрешено использование
#rescue_fromдля обработки ошибок парсинга параметра. (Pull Request) -
Добавлен
ActionController::Parameters#each_valueдля перебора параметров. (Pull Request) -
Имена файлов кодируются в Content-Disposition при
send_dataиsend_file. (Pull Request) -
Раскрыт
ActionController::Parameters#each_key. (Pull Request) -
Добавлены метаданные назначения и прекращения внутри подписанных/зашифрованных куки для предотвращения копирования значения из одного в другое куки. (Pull Request)
-
Вызывается
ActionController::RespondToMismatchErrorдля конфликтующих вызововrespond_to. (Pull Request) -
Добавлена явная страница ошибки когда отсутствует шаблон для формата запроса. (Pull Request)
-
Представлен
ActionDispatch::DebugExceptions.register_interceptor, способ вклиниться в DebugExceptions и обработать исключение, перед тем, как оно будет отрендерено. (Pull Request) -
Выводится только один заголовок Content-Security-Policy на запрос. (Pull Request)
-
Добавлен модуль, специальный для конфигурации Rails для заголовков по умолчанию, который может быть явно включен в контроллерах. (Pull Request)
-
Добавлен
#digвActionDispatch::Request::Session. (Pull Request)
Action View
За подробностями обратитесь к Changelog.
Удалено
-
Удален устаревший хелпер
image_alt. (Commit) -
Убран пустой модуль
RecordTagHelper, функционал которого уже был перенесен в гемrecord_tag_helper. (Commit)
Устарело
-
Устарел
ActionView::Template.finalize_compiled_template_methodsбез замены. (Pull Request) -
Устарел
config.action_view.finalize_compiled_template_methodsбез замены. (Pull Request) -
Устарел вызов приватных методов модели из хелпера вью
options_from_collection_for_select. (Pull Request)
Значимые изменения
-
Кэш Action View очищается в разработке только при изменении файла, что ускоряет режим разработки. (Pull Request)
-
Все npm-пакеты Rails перемещены в пространстве имен
@rails. (Pull Request) -
Принимаются только форматы из зарегистрированных типов MIME. (Pull Request, Pull Request)
-
В вывод сервера о рендере шаблона и партиала добавлены allocations. (Pull Request)
-
В тег
date_selectдобавлена опцияyear_format, позволяющая настроить имена годов. (Pull Request) -
Для хелпера
javascript_include_tagдобавлена опцияnonce: trueдля поддержки автоматической генерации nonce для Политики безопасности контента. (Pull Request) -
Добавлена конфигурация
action_view.finalize_compiled_template_methods, чтобы включить или отключить финализаторыActionView::Template. (Pull Request) -
Вызов JavaScript
confirmизвлечен в собственный переопределяемый метод вrails_ujs. (Pull Request) -
Добавлена конфигурационная опция
action_controller.default_enforce_utf8для управления принуждением кодировки UTF-8. По умолчаниюfalse. (Pull Request) -
Добавлена поддержка ключей локалей I18n для тегов submit. (Pull Request)
Action Mailer
За подробностями обратитесь к Changelog.
Удалено
Устарело
-
Устарел
ActionMailer::Base.receiveв пользу Action Mailbox. (Commit) -
Устарели
DeliveryJobиParameterized::DeliveryJobв пользуMailDeliveryJob. (Pull Request)
Значимые изменения
-
Добавлен
MailDeliveryJobдля отправки и обычных, и параметризованных писем. (Pull Request) -
Позволена работа произвольных заданий доставки с тестовыми утверждениями Action Mailer. (Pull Request)
-
Позволено указание имени шаблона для multipart писем с блоками вместо просто имени экшна. (Pull Request)
-
В полезную нагрузку уведомления
deliver.action_mailerдобавленыperform_deliveries. (Pull Request) -
Улучшено сообщение лога, когда
perform_deliveriesявляется false, чтобы указать, что отправка письма была пропущена. (Pull Request) -
Позволен вызов
assert_enqueued_email_withбез блока. (Pull Request) -
Выполняются задания доставки писем из очереди в блоке
assert_emails. (Pull Request) -
ActionMailer::Baseпозволено отменять регистрацию обсерверов и перехватчиков. (Pull Request)
Active Record
За подробностями обратитесь к Changelog.
Удалено
-
Убран устаревший
#set_stateиз объекта транзакции. (Commit) -
Убран устаревший
#supports_statement_cache?из адаптеров базы данных. (Commit) -
Убран устаревший
#insert_fixturesиз адаптеров базы данных. (Commit) -
Убран устаревший
ActiveRecord::ConnectionAdapters::SQLite3Adapter#valid_alter_table_type?. (Commit) -
Убрана поддержка передачи имени столбца в
sum, когда передан блок. (Commit) -
Убрана поддержка передачи имени столбца в
count, когда передан блок. (Commit) -
Убрана поддержка делегации отсутствующих методов в relation к Arel. (Commit)
-
Убрана поддержка делегации отсутствующих методов в relation к приватным методам класса. (Commit)
-
Убрана поддержка указания имени временной метки для
#cache_key. (Commit) -
Убран устаревший
ActiveRecord::Migrator.migrations_path=. (Commit) -
Убран устаревший
expand_hash_conditions_for_aggregates. (Commit)
Устарело
-
Устарели сопоставительные сравнения с несоответствующей чувствительностью к регистру для валидатора уникальности. (Commit)
-
Устарело использование запрашивающих методов, если получающий скоуп утек. (Pull Request)
-
Устарел
config.active_record.sqlite3.represent_boolean_as_integer. (Commit) -
Устарела передача
migrations_pathsвconnection.assume_migrated_upto_version. (Commit) -
Устарел
ActiveRecord::Result#to_hashв пользуActiveRecord::Result#to_a. (Commit) -
Устарели методы в
DatabaseLimits:column_name_length,table_name_length,columns_per_table,indexes_per_table,columns_per_multicolumn_index,sql_query_lengthиjoins_per_query. (Commit) -
Устарел
update_attributes/!в пользуupdate/!. (Commit)
Значимые изменения
-
Установлена минимальная версия гема
sqlite31.4. (Pull Request) -
Добавлена
rails db:prepare, чтобы создать базу данных, если она не существует, и запустить ее миграции. (Pull Request) -
Добавлен колбэк
after_save_commitв качестве сокращения дляafter_commit :hook, on: [ :create, :update ]. (Pull Request) -
Добавлен
ActiveRecord::Relation#extract_associatedдля извлечения связанных записей из relation. (Pull Request) -
Добавлен
ActiveRecord::Relation#annotateдля добавления комментариев SQL в запросы ActiveRecord::Relation. (Pull Request) -
Добавлена поддержка для настройки Optimizer Hints на базах данных. (Pull Request)
-
Добавлены методы
insert_all/insert_all!/upsert_allдля выполнения массовых вставок. (Pull Request) -
Добавлена
rails db:seed:replant, которая очищает таблицы каждой базы данных для текущего окружения и загружает сиды. (Pull Request) -
Добавлен метод
reselect, являющийся сокращением дляunscope(:select).select(fields). (Pull Request) -
Добавлены отрицающие скоупы для всех значений enum. (Pull Request)
-
Добавлены
#destroy_byи#delete_byдля условных удалений. (Pull Request) -
Добавлена возможность автоматически переключать соединения с базой данной. (Pull Request)
-
Добавлена возможность предотвращать записи в базу данных на протяжении блока. (Pull Request)
-
Добавлен API для переключения соединений для поддержки нескольких баз данных. (Pull Request)
-
Временные метки с точностью сделаны по умолчанию в миграциях. (Pull Request)
-
Поддерживается опция
:sizeдля изменения размера текста и бинарного объекта в MySQL. (Pull Request) -
Столбцы внешнего ключа и внешнего типа устанавливаются NULL для полиморфных связей при стратегии
dependent: :nullify. (Pull Request) -
Разрешенному экземпляру
ActionController::Parametersразрешается быть переданным в качестве аргумента вActiveRecord::Relation#exists?. (Pull Request) -
В
#whereдобавлена поддержка бесконечных диапазонов, представленных в Ruby 2.6. (Pull Request) -
ROW_FORMAT=DYNAMICсделан опцией создания таблиц по умолчанию для MySQL. (Pull Request) -
Добавлена возможность отключить скоупы, генерируемые
ActiveRecord.enum. (Pull Request) -
Неявное упорядочивание для столбца сделано настраиваемым. (Pull Request)
-
Установлена минимальная версия PostgreSQL как 9.3, отброшена поддержка для 9.1 и 9.2. (Pull Request)
-
Значения перечисления сделаны замороженными, вызывая ошибку при попытке их изменить. (Pull Request)
-
SQL ошибок
ActiveRecord::StatementInvalidсделан свойством ошибки, и подстановки в SQL отдельным свойством ошибки. (Pull Request) -
В
create_tableдобавлена опция:if_not_exists. (Pull Request) -
Добавлена поддержка нескольких баз данных в
rails db:schema:cache:dumpиrails db:schema:cache:clear. (Pull Request) -
Добавлена поддержка хэшей и конфигов url в хэше базы данных
ActiveRecord::Base.connected_to. (Pull Request) -
Добавлена поддержка для выражений по умолчанию и индексов выражений для MySQL. (Pull Request)
-
Добавлена опция
indexдля хелперов миграцииchange_table. (Pull Request) -
Починен откат
transactionдля миграций. Ранее команды внутриtransactionв откатываемой миграции запускались не в обратном порядке. Изменение чинит это. (Pull Request) -
Разрешено настраивать
ActiveRecord::Base.configurations=с помощью символьного хэша. (Pull Request) -
Починен кэш счетчика, чтобы он обновлялся, только когда запись фактически сохраняется. (Pull Request)
-
Добавлена поддержка индексов выражений для адаптера SQLite. (Pull Request)
-
Подклассам разрешено переопределять колбэки автоматического сохранения для связанных записей. (Pull Request)
-
Установлена минимальная версия MySQL как 5.5.8. (Pull Request)
-
В MySQL используется кодировка по умолчанию utf8mb4. (Pull Request)
-
Добавлена возможность фильтровать чувствительные данные в
#inspect(Pull Request, Pull Request) -
Изменен
ActiveRecord::Base.configurations, чтобы возвращать объект вместо хэша. (Pull Request) -
Добавлена настройка базы данных, чтобы отключать рекомендательные блокировки. (Pull Request)
-
Обновлен метод адаптера SQLite3
alter_table, чтобы восстанавливались внешние ключи. (Pull Request) -
Опции
:to_tableметодаremove_foreign_keyразрешено быть откатанной. (Pull Request) -
Починено значение по умолчанию для типов времени MySQL с указанной точностью. (Pull Request)
-
Починена опция
touch, чтобы вести себя в соответствии с методомPersistence#touch. (Pull Request) -
Вызывается исключение для определений дубликата столбца в миграциях. (Pull Request)
-
Установлена минимальная версия SQLite как 3.8. (Pull Request)
-
Починено, что родительские записи не сохранялись с дубликатами дочерних записей. (Pull Request)
-
Гарантируется, что
Associations::CollectionAssociation#sizeиAssociations::CollectionAssociation#empty?используют загруженные связи, если они присутствуют. (Pull Request) -
Добавлена поддержка предварительной загрузки полиморфных связей, когда не у всех записей имеются требуемые связи. (Commit)
-
В
ActiveRecord::Relationдобавлен методtouch_all. (Pull Request) -
Добавлен предикат
ActiveRecord::Base.base_class?. (Pull Request) -
Добавлены опции пользовательского префикса/суффикса в
ActiveRecord::Store.store_accessor. (Pull Request) -
Добавлены
ActiveRecord::Base.create_or_find_by/!, чтобы разобраться с SELECT/INSERT состоянием гонки вActiveRecord::Base.find_or_create_by/!на основе ограничений уникальности в базе данных. (Pull Request) -
Добавлен
Relation#pickв качестве сокращения для pluck одиночного значения. (Pull Request)
Active Storage
За подробностями обратитесь к Changelog.
Удалено
Устарело
-
Устарел
config.active_storage.queueв пользуconfig.active_storage.queues.analysisиconfig.active_storage.queues.purge. (Pull Request) -
Устарел
ActiveStorage::Downloadingв пользуActiveStorage::Blob#open. (Commit) -
Устарело непосредственное использование
mini_magickдля генерации вариантов изображения в пользуimage_processing. (Commit) -
Устарела
:combine_optionsв преобразователе ImageProcessing в Active Storage без замены. (Commit)
Значимые изменения
-
Добавлена поддержка для генерации вариантов изображения BMP. (Pull Request)
-
Добавлена поддержка для генерации вариантов изображения TIFF. (Pull Request)
-
Добавлена поддержка для генерации вариантов изображения прогрессивного JPEG. (Pull Request)
-
Добавлен
ActiveStorage.routes_prefixдля настройки генерируемых маршрутов Active Storage. (Pull Request) -
В
ActiveStorage::DiskController#showгенерируется отклик 404 Not Found, когда запрашиваемый файл отсутствует на дисковом сервисе. (Pull Request) -
Для
ActiveStorage::Blob#downloadиActiveStorage::Blob#openвызываетсяActiveStorage::FileNotFoundError, когда запрашиваемый файл отсутствует. (Pull Request) -
Добавлен общий класс
ActiveStorage::Error, от которого наследуются исключения Active Storage. (Commit) -
Файлы модели, предназначенные для хранения, сохраняются, когда сохраняется модель, а не немедленно. (Pull Request)
-
Существующие изображения опционально заменяются вместо добавления к ним при присвоении к коллекции вложений (как в
@user.update!(images: [ … ])). Используйтеconfig.active_storage.replace_on_assign_to_manyдля контроля этого поведения. (Pull Request, Pull Request) -
Добавлена способность отражать на определенных вложениях с помощью существующего механизма отражения Active Record. (Pull Request)
-
Добавлен
ActiveStorage::Blob#open, который загружает бинарный объект во временный файл на диске, и передает этот временный файл. (Commit) -
Поддержка потоковых загрузок из Google Cloud Storage. Требуется версия 1.11+ гема
google-cloud-storage. (Pull Request) -
Использован гем
image_processingдля вариантов Active Storage. Это заменяет непосредственное использованиеmini_magick. (Pull Request)
Active Model
За подробностями обратитесь к Changelog.
Удалено
Устарело
Значимые изменения
-
Добавлена конфигурационная опция для настройки формата
ActiveModel::Errors#full_message. (Pull Request) -
Добавлена поддержка настройки имени атрибута для
has_secure_password. (Pull Request) -
В
ActiveModel::Errorsдобавлен метод#slice!. (Pull Request) -
Добавлен
ActiveModel::Errors#of_kind?для проверки существования конкретной ошибки. (Pull Request) -
Починен метод
ActiveModel::Serializers::JSON#as_jsonдля временных меток. (Pull Request) -
Починен валидатор численности, чтобы использовать значение до приведения типов, кроме Active Record. (Pull Request)
-
Починена валидация равенства численности для
BigDecimalиFloat, приводя кBigDecimalобе стороны валидации. (Pull Request) -
Починено значение года при приведении многопараметрового хэша времени. (Pull Request)
-
Ложные булевы символы на булевых атрибутах приводятся как false. (Pull Request)
-
Возвращается правильная дата при конвертировании параметров в
value_from_multiparameter_assignmentдляActiveModel::Type::Date. (Pull Request) -
Берется родительская локаль, перед тем как взять пространство имен
:errorsпри извлечении переводов ошибки. (Pull Request)
Active Support
За подробностями обратитесь к Changelog.
Удалено
-
Удален устаревший метод
#acronym_regexизInflections. (Commit) -
Удален устаревший метод
Module#reachable?. (Commit) -
Удален
Kernel#`без каких-либо замен. (Pull Request)
Устарело
-
Устарело использование отрицательных числовых аргументов для
String#firstиString#last. (Pull Request) -
Устарел
ActiveSupport::Multibyte::Unicode#downcase/upcase/swapcaseв пользуString#downcase/upcase/swapcase. (Pull Request) -
Устарели
ActiveSupport::Multibyte::Unicode#normalizeиActiveSupport::Multibyte::Chars#normalizeв пользуString#unicode_normalize. (Pull Request) -
Устарел
ActiveSupport::Multibyte::Chars.consumes?в пользуString#is_utf8?. (Pull Request) -
Устарели
ActiveSupport::Multibyte::Unicode#pack_graphemes(array)иActiveSupport::Multibyte::Unicode#unpack_graphemes(string)в пользуarray.flatten.pack("U*")иstring.scan(/\X/).map(&:codepoints)соответственно. (Pull Request)
Значимые изменения
-
Добавлена поддержка параллельного тестирования. (Pull Request)
-
Обеспечивается, что
String#strip_heredocсохраняет замороженность строк. (Pull Request) -
Добавлен
String#truncate_bytesдля обрезания строки до максимального байтового размера без разбивания многобайтовых символов или кластеров графемы. (Pull Request) -
В метод
delegateдобавлена опцияprivate, чтобы делегировать к приватным методам. Эта опция принимает значенияtrue/false. (Pull Request) -
Добавлена поддержка переводов с помощью I18n для
ActiveSupport::Inflector#ordinalиActiveSupport::Inflector#ordinalize. (Pull Request) -
В
Date,DateTime,TimeиTimeWithZoneдобавлены методыbefore?иafter?. (Pull Request) -
Починена ошибка, когда
URI.unescapeмог упасть при смешанном Unicode/escaped символьном вводе. (Pull Request) -
Починена ошибка, когда
ActiveSupport::Cacheмог сильно раздуть размер хранилища, когда включено сжатие. (Pull Request) -
Хранилище кэша Redis:
delete_matchedбольше не блокирует сервер Redis. (Pull Request) -
Починена ошибка, когда
ActiveSupport::TimeZone.allмог упасть, когда отсутствовали данные tzinfo для любой временной зоны, определенной вActiveSupport::TimeZone::MAPPING. (Pull Request) -
Добавлен
Enumerable#index_with, позволяющий создать хэш из перечисления с помощью значения из переданного блока или аргумента по умолчанию. (Pull Request) -
Методам
Range#===иRange#cover?разрешено работать с аргументомRange. (Pull Request) -
Поддерживается устаревание ключа в операциях
increment/decrementв RedisCacheStore. (Pull Request) -
В события подписчика лога добавлены время cpu, время простоя и особенности аллокаций. (Pull Request)
-
В систему нотификаций Active Support добавлена поддержка объекта события. (Pull Request)
-
Добавлена поддержка для отсутствия кэширования вхождений
nil, с помощью новой опцииskip_nilдляActiveSupport::Cache#fetch. (Pull Request) -
Добавлен метод
Array#extract!, убирающий и возвращающий элементы, для которых блок возвращает истинное значение. (Pull Request) -
HTML-безопасная строка остается HTML-безопасной после нарезки (slice). (Pull Request)
-
Добавлена поддержка отслеживания автозагрузки констант с помощью логирования. (Commit)
-
Определен
unfreeze_timeв качестве псевдонима дляtravel_back. (Pull Request) -
Изменен
ActiveSupport::TaggedLogging.new, чтобы возвращался экземпляр нового логгера вместо мутации полученного в качестве аргумента. (Pull Request) -
Методы
#delete_prefix,#delete_suffixи#unicode_normalizeтрактуются не как HTML-безопасные. (Pull Request) -
Починена ошибка, когда
#withoutдляActiveSupport::HashWithIndifferentAccessпадал с символьными аргументам. (Pull Request) -
Переименованы
Module#parent,Module#parentsиModule#parent_nameвmodule_parent,module_parentsиmodule_parent_name. (Pull Request) -
Добавлен
ActiveSupport::ParameterFilter. (Pull Request) -
Починена проблема, когда продолжительность округлялась до полной секунды, когда float добавлялось к продолжительности. (Pull Request)
-
#to_optionsсделан псевдонимом#symbolize_keysвActiveSupport::HashWithIndifferentAccess. (Pull Request) -
БОльше не вызывается ошибка, если тот же самый блок включается несколько раз для Concern. (Pull Request)
-
Сохраняется порядок ключей, переданных в
ActiveSupport::CacheStore#fetch_multi. (Pull Request) -
Починен
String#safe_constantize, чтобы не вызываласьLoadErrorдля ссылок на константу в некорректном регистре. (Pull Request) -
Добавлены
Hash#deep_transform_valuesиHash#deep_transform_values!. (Commit) -
Добавлен
ActiveSupport::HashWithIndifferentAccess#assoc. (Pull Request) -
Добавлен колбэк
before_resetвCurrentAttributesи симметрично определенafter_resetкак псевдонимresets. (Pull Request) -
Пересмотрен
ActiveSupport::Notifications.unsubscribe, чтобы корректно обрабатывать Regex или другие multiple-pattern подписчики. (Pull Request) -
Добавлен новый механизм автозагрузки с помощью Zeitwerk. (Commit)
-
Добавлены
Array#includingиEnumerable#includingдля удобства увеличения коллекции. (Commit) -
Переименованы
Array#withoutиEnumerable#withoutвArray#excludingиEnumerable#excluding. Старые имена методов оставлены в качестве псевдонимов. (Commit) -
Добавлена поддержка доставления
localeвtransliterateиparameterize. (Pull Request) -
Починен
Time#advanceдля работы с датами до 1001-03-07. (Pull Request) -
Обновлен
ActiveSupport::Notifications::Instrumenter#instrument. чтобы позволить не передавать блок. (Pull Request) -
В трекере потомков используются слабые ссылки, чтобы позволить анонимным подклассам быть собранным сборщиком мусора. (Pull Request)
-
Вызов тестовых методов с помощью метода
with_info_handler, чтобы позволить работать плагинам minitest-hooks. (Commit) -
Сохраняется статус
html_safe?наActiveSupport::SafeBuffer#*. (Pull Request)
Active Job
За подробностями обратитесь к Changelog.
Удалено
- удалена поддержка гема Qu. (Pull Request)
Устарело
Значимые изменения
-
Добавлена поддержка пользовательских сериализаторов для аргументов Active Job. (Pull Request)
-
Добавлена поддержка для запуска Active Jobs во временной зоне, в которой они были поставлены в очередь. (Pull Request)
-
Разрешена передача нескольких исключений в
retry_on/discard_on. (Commit) -
Разрешен вызов
assert_enqueued_withиassert_enqueued_email_withбез блока. (Pull Request) -
Уведомления для
enqueueиenqueue_atобернуты в колбэкaround_enqueueвместо колбэкаafter_enqueue. (Pull Request) -
Разрешен вызов
perform_enqueued_jobsбез блока. (Pull Request) -
Разрешен вызов
assert_performed_withбез блока. (Pull Request) -
Добавлена опция
:queueк хелперам и утверждениям задач. (Pull Request) -
Добавлены хуки вокруг попыток и отмен Active Job. (Pull Request)
-
Добавлен способ тестирования для набора аргументов при выполнении задач. (Pull Request)
-
В задания, возвращаемых тестовыми хелперами Active Job, включаются десериализованные аргументы. (Pull Request)
-
Хелперам утверждений Active Job разрешается принимать Proc для ключевого слова
only. (Pull Request) -
В хелперах утверждений отбрасываются микросекунды и наносекунды из аргументов задачи. (Pull Request)
Руководства Ruby on Rails
За подробностями обратитесь к Changelog.
Значимые изменения
-
Добавлено руководство по нескольким базам данных с Active Record. (Pull Request)
-
Добавлен раздел о разрешении проблем автозагрузки констант. (Commit)
-
Добавлено руководство по основам Action Mailbox. (Pull Request)
-
Добавлено обзорное руководство по Action Text. (Pull Request)
Благодарности
Взгляните на полный список контрибьюторов Rails, на людей, которые потратили много часов, сделав Rails стабильнее и надёжнее. Спасибо им всем.