Create RemotelyTranslatable concern controller

- Create concern to reuse the logic of detection of non-existent
  translations in Controllers.
- Add detect_remote_translation method:
  * This method will be called from controllers to recover resources
    without translation.
  * Receive arrays of resources.
  * Return an array with hashes of remote_translations values for
    every resources that have not translations.
  * This array will be the param that will be sent from view to
    RemoteTranslationController for create remote translations instances.
This commit is contained in:
taitus
2019-01-25 14:51:30 +01:00
committed by voodoorai2000
parent 264b3f0f82
commit 25e9c358ad
2 changed files with 95 additions and 0 deletions

View File

@@ -0,0 +1,29 @@
module RemotelyTranslatable
private
def detect_remote_translations(*args)
return [] unless Setting["feature.remote_translations"].present?
resources_groups(*args).flatten.select { |resource| translation_empty?(resource) }.map do |resource|
remote_translation_for(resource)
end
end
def remote_translation_for(resource)
{ 'remote_translatable_id' => resource.id.to_s,
'remote_translatable_type' => resource.class.to_s,
'locale' => I18n.locale }
end
def translation_empty?(resource)
resource.translations.where(locale: I18n.locale).empty?
end
def resources_groups(*args)
feeds = args.detect { |arg| arg&.first.class == Widget::Feed } || []
args.compact - [feeds] + feeds.map(&:items)
end
end

View File

@@ -0,0 +1,66 @@
require "rails_helper"
include RemotelyTranslatable
describe RemotelyTranslatable do
before do
Setting["feature.remote_translations"] = true
end
after do
Setting["feature.remote_translations"] = nil
end
describe "#detect_remote_translations" do
describe "Should detect remote_translations" do
it "When collections and featured_proposals are not defined in current locale" do
proposals = create_list(:proposal, 3)
featured_proposals = create_featured_proposals
I18n.with_locale(:es) do
expect(detect_remote_translations(proposals, featured_proposals).count).to eq 6
end
end
it "When we have nil as argument and collections are not defined in current locale" do
proposals = create_list(:proposal, 3)
I18n.with_locale(:es) do
expect(detect_remote_translations(proposals, nil).count).to eq 3
end
end
it "When we have [] as argument and collections are not defined in current locale" do
proposals = create_list(:proposal, 3)
I18n.with_locale(:es) do
expect(detect_remote_translations(proposals, []).count).to eq 3
end
end
it "When widget feeds are not defined in current locale" do
create_list(:proposal, 3)
create_list(:debate, 3)
create_list(:legislation_process, 3)
create(:widget_feed, kind: "proposals")
create(:widget_feed, kind: "debates")
create(:widget_feed, kind: "processes")
widget_feeds = Widget::Feed.active
I18n.with_locale(:es) do
expect(detect_remote_translations(widget_feeds).count).to eq 9
end
end
end
it "When defined in current locale should not detect remote_translations" do
proposal = create(:proposal)
comment = create(:comment, commentable: proposal)
expect(detect_remote_translations([proposal, comment])).to eq []
end
end
end