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:
29
app/controllers/concerns/remotely_translatable.rb
Normal file
29
app/controllers/concerns/remotely_translatable.rb
Normal 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
|
||||
66
spec/controllers/concerns/remotely_translatable_spec.rb
Normal file
66
spec/controllers/concerns/remotely_translatable_spec.rb
Normal 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
|
||||
Reference in New Issue
Block a user