Use remote translations objects instead of hashes
This way we can simplify the code dealing with the translatable association.
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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?
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user