From 67b7c3cd840952dd920743ea52fb44bd7622955b Mon Sep 17 00:00:00 2001 From: James Mead Date: Tue, 18 Oct 2022 17:28:39 +0100 Subject: [PATCH] WIP: Fix some Mocha deprecation warnings This fixes some of the warnings related to strict keyword argument matching, like this one: Mocha deprecation warning at app/services/asset_manager/attachment_updater/update.rb:15:in `call': Expectation defined at test/unit/services/asset_manager/attachment_updater/draft_status_updates_test.rb:28: in `block (3 levels) in ' expected keyword arguments ("draft" => true), but received positional hash ({"draft" => true}). These will stop matching when strict keyword argument matching is enabled. See the documentation for Mocha::Configuration#strict_keyword_argument_matching=. In order to fix the warnings, I've changed the signature of AssetManager::AssetUpdater#call so that new_attributes parameter must be supplied as keyword arguments rather than a positional Hash. This had the advantage that I only needed to change AssetManager::AttachmentUpdater::Update#call to convert the deep_stringify_keys into keyword arguments using a double-splat; I didn't need to change all the places where AssetManager::AssetUpdater#call is stubbed. An alternative would be to leave the signature of AssetManager::AssetUpdater#call unchanged and change the calls to Expectation#with for all the relevant stubs to pass a positional Hash, i.e. wrapped in braces. This article [1] is a very useful reference. [1]: https://www.ruby-lang.org/en/news/2019/12/12/separation-of-positional-and-keyword-arguments-in-ruby-3-0/ --- app/services/asset_manager/asset_updater.rb | 6 +++--- app/services/asset_manager/attachment_updater/update.rb | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/app/services/asset_manager/asset_updater.rb b/app/services/asset_manager/asset_updater.rb index f1798d2769ac..ff96dafd1fd1 100644 --- a/app/services/asset_manager/asset_updater.rb +++ b/app/services/asset_manager/asset_updater.rb @@ -13,11 +13,11 @@ def initialize(attachment_data_id, legacy_url_path) end end - def self.call(*args) - new.call(*args) + def self.call(...) + new.call(...) end - def call(asset_data, legacy_url_path, new_attributes = {}) + def call(asset_data, legacy_url_path, **new_attributes) attributes = find_asset_by(legacy_url_path) asset_deleted = attributes["deleted"] diff --git a/app/services/asset_manager/attachment_updater/update.rb b/app/services/asset_manager/attachment_updater/update.rb index 2be39e4de56d..941b27489812 100644 --- a/app/services/asset_manager/attachment_updater/update.rb +++ b/app/services/asset_manager/attachment_updater/update.rb @@ -15,7 +15,7 @@ def call AssetManager::AssetUpdater.call( attachment_data, legacy_url_path, - new_attributes.deep_stringify_keys, + **new_attributes.deep_stringify_keys, ) end