From ccdbdb26baf397a0704fa2c1aa86b9eaa6472d7b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javi=20Mart=C3=ADn?= Date: Tue, 23 Oct 2018 14:23:10 +0200 Subject: [PATCH] Fix poll question with non-underscored locales Ruby can't have hyphens in method names, so sending something like `title_pt-BR=` would raise an exception. --- app/models/poll/question.rb | 2 +- spec/models/poll/question_spec.rb | 31 ++++++++++++++++++++++++------- 2 files changed, 25 insertions(+), 8 deletions(-) diff --git a/app/models/poll/question.rb b/app/models/poll/question.rb index 4f8988caa..9ffd7ab93 100644 --- a/app/models/poll/question.rb +++ b/app/models/poll/question.rb @@ -45,7 +45,7 @@ class Poll::Question < ActiveRecord::Base self.author = proposal.author self.author_visible_name = proposal.author.name self.proposal_id = proposal.id - send(:"title_#{Globalize.locale}=", proposal.title) + send(:"#{localized_attr_name_for(:title, Globalize.locale)}=", proposal.title) end end diff --git a/spec/models/poll/question_spec.rb b/spec/models/poll/question_spec.rb index c43cedace..5a1265bda 100644 --- a/spec/models/poll/question_spec.rb +++ b/spec/models/poll/question_spec.rb @@ -16,14 +16,31 @@ RSpec.describe Poll::Question, type: :model do end describe "#copy_attributes_from_proposal" do + before { create_list(:geozone, 3) } + let(:proposal) { create(:proposal) } + it "copies the attributes from the proposal" do - create_list(:geozone, 3) - p = create(:proposal) - poll_question.copy_attributes_from_proposal(p) - expect(poll_question.author).to eq(p.author) - expect(poll_question.author_visible_name).to eq(p.author.name) - expect(poll_question.proposal_id).to eq(p.id) - expect(poll_question.title).to eq(p.title) + poll_question.copy_attributes_from_proposal(proposal) + expect(poll_question.author).to eq(proposal.author) + expect(poll_question.author_visible_name).to eq(proposal.author.name) + expect(poll_question.proposal_id).to eq(proposal.id) + expect(poll_question.title).to eq(proposal.title) + end + + context "locale with non-underscored name" do + before do + I18n.locale = :"pt-BR" + Globalize.locale = I18n.locale + end + + it "correctly creates a translation" do + poll_question.copy_attributes_from_proposal(proposal) + translation = poll_question.translations.first + + expect(poll_question.title).to eq(proposal.title) + expect(translation.title).to eq(proposal.title) + expect(translation.locale).to eq(:"pt-BR") + end end end