diff --git a/app/components/layout/remote_translations_button_component.rb b/app/components/layout/remote_translations_button_component.rb index ebae39d23..44e3a380f 100644 --- a/app/components/layout/remote_translations_button_component.rb +++ b/app/components/layout/remote_translations_button_component.rb @@ -13,8 +13,6 @@ class Layout::RemoteTranslationsButtonComponent < ApplicationComponent private def display_remote_translation_button? - remote_translations.none? do |remote_translation| - RemoteTranslation.remote_translation_enqueued?(remote_translation) - end + remote_translations.none?(&:enqueued?) end end diff --git a/app/controllers/concerns/remotely_translatable.rb b/app/controllers/concerns/remotely_translatable.rb index 2524566fc..9c61b1ef2 100644 --- a/app/controllers/concerns/remotely_translatable.rb +++ b/app/controllers/concerns/remotely_translatable.rb @@ -4,7 +4,7 @@ module RemotelyTranslatable def detect_remote_translations(*args) return [] unless Setting["feature.remote_translations"].present? && api_key_has_been_set_in_secrets? - RemoteTranslation.remote_translations_for(*args) + RemoteTranslation.for(*args) end def api_key_has_been_set_in_secrets? diff --git a/app/models/remote_translation.rb b/app/models/remote_translation.rb index 97d53216c..b186a9d3a 100644 --- a/app/models/remote_translation.rb +++ b/app/models/remote_translation.rb @@ -12,16 +12,9 @@ class RemoteTranslation < ApplicationRecord RemoteTranslations::Caller.new(self).delay.call end - def self.remote_translation_enqueued?(remote_translation) - where(remote_translatable_id: remote_translation["remote_translatable_id"], - remote_translatable_type: remote_translation["remote_translatable_type"], - locale: remote_translation["locale"], - error_message: nil).any? - end - - def self.remote_translations_for(*args) + def self.for(*args) resources_groups(*args).flatten.select { |resource| translation_empty?(resource) }.map do |resource| - remote_translation_for(resource) + new(remote_translatable: resource, locale: I18n.locale) end end @@ -31,20 +24,14 @@ class RemoteTranslation < ApplicationRecord args.compact - [feeds] + feeds.map(&:items) end - def self.remote_translation_for(resource) - { "remote_translatable_id" => resource.id.to_s, - "remote_translatable_type" => resource.class.to_s, - "locale" => I18n.locale } - end - def self.translation_empty?(resource) resource.class.translates? && resource.translations.where(locale: I18n.locale).empty? end def self.create_all(remote_translations_params) - remote_translations_params.each do |remote_translation_params| - create!(remote_translation_params) unless remote_translation_enqueued?(remote_translation_params) - end + remote_translations_params.map do |remote_translation_params| + new(remote_translation_params) + end.reject(&:enqueued?).each(&:save!) end def already_translated_resource @@ -52,4 +39,10 @@ class RemoteTranslation < ApplicationRecord errors.add(:locale, :already_translated) end end + + def enqueued? + self.class.where(remote_translatable: remote_translatable, + locale: locale, + error_message: nil).any? + end end diff --git a/spec/components/layout/remote_translations_button_component_spec.rb b/spec/components/layout/remote_translations_button_component_spec.rb index f60544500..a427b4a64 100644 --- a/spec/components/layout/remote_translations_button_component_spec.rb +++ b/spec/components/layout/remote_translations_button_component_spec.rb @@ -1,7 +1,7 @@ require "rails_helper" describe Layout::RemoteTranslationsButtonComponent do - let(:translations) { [{}] } + let(:translations) { [RemoteTranslation.new] } let(:component) { Layout::RemoteTranslationsButtonComponent.new(translations) } before do