diff options
| author | Gareth Rees <gareth@mysociety.org> | 2015-01-22 15:05:11 +0000 | 
|---|---|---|
| committer | Gareth Rees <gareth@mysociety.org> | 2015-02-03 16:24:01 +0000 | 
| commit | 40dd8b05787e665d3d5534acfb6208e236240698 (patch) | |
| tree | e54abc92d8ca93312cb4e30f79d93fdb67efecc6 | |
| parent | 7c7b008a0f2c6937b6bf02ab26134bb90aae19ee (diff) | |
Build available locales in the controller
Removes logic from views and obsoletes
AdminPublicBodyHelper#public_body_form_object
| -rw-r--r-- | app/controllers/admin_public_body_controller.rb | 10 | ||||
| -rw-r--r-- | app/helpers/admin_public_body_helper.rb | 22 | ||||
| -rw-r--r-- | app/views/admin_public_body/_form.html.erb | 26 | ||||
| -rw-r--r-- | spec/controllers/admin_public_body_controller_spec.rb | 15 | ||||
| -rw-r--r-- | spec/helpers/admin_public_body_helper_spec.rb | 79 | ||||
| -rw-r--r-- | spec/integration/admin_public_body_edit_spec.rb | 19 | 
6 files changed, 57 insertions, 114 deletions
| diff --git a/app/controllers/admin_public_body_controller.rb b/app/controllers/admin_public_body_controller.rb index f7a80476c..baa5a1d22 100644 --- a/app/controllers/admin_public_body_controller.rb +++ b/app/controllers/admin_public_body_controller.rb @@ -83,6 +83,11 @@ class AdminPublicBodyController < AdminController      def new          @public_body = PublicBody.new + +        I18n.available_locales.each do |locale| +            @public_body.translations.build(:locale => locale) +        end +          if params[:change_request_id]              @change_request = PublicBodyChangeRequest.find(params[:change_request_id])          end @@ -120,6 +125,11 @@ class AdminPublicBodyController < AdminController      def edit          @public_body = PublicBody.find(params[:id]) + +        I18n.available_locales.each do |locale| +            @public_body.translations.find_or_initialize_by_locale(locale) +        end +          if params[:change_request_id]              @change_request = PublicBodyChangeRequest.find(params[:change_request_id])          end diff --git a/app/helpers/admin_public_body_helper.rb b/app/helpers/admin_public_body_helper.rb deleted file mode 100644 index 97f656ddb..000000000 --- a/app/helpers/admin_public_body_helper.rb +++ /dev/null @@ -1,22 +0,0 @@ -module AdminPublicBodyHelper - -    def public_body_form_object(public_body, locale) -        if locale == I18n.default_locale -            # The default locale is submitted as part of the bigger object... -            prefix = 'public_body' -            object = public_body -        else -            # ...but additional locales go "on the side" -            prefix = :translations -            object = if public_body.new_record? -                         PublicBody::Translation.new -                     else -                         public_body.find_translation_by_locale(locale.to_s) -                     end -            object ||= PublicBody::Translation.new -        end - -        { :object => object, :prefix => prefix } -    end - -end diff --git a/app/views/admin_public_body/_form.html.erb b/app/views/admin_public_body/_form.html.erb index 177873984..d01421089 100644 --- a/app/views/admin_public_body/_form.html.erb +++ b/app/views/admin_public_body/_form.html.erb @@ -4,23 +4,27 @@  <div id="div-locales">    <ul class="locales nav nav-tabs"> -  <% I18n.available_locales.each_with_index do |locale, i| %> -    <li><a href="#div-locale-<%=locale.to_s%>" data-toggle="tab" ><%=locale_name(locale.to_s) || _("Default locale")%></a></li> -  <% end %> +    <% @public_body.translations.each_with_index do |translation, i| %> +      <li> +        <a href="#div-locale-<%= translation.locale.to_s %>" data-toggle="tab" > +          <%= locale_name(translation.locale.to_s) || _("Default locale") %> +        </a> +      </li> +    <% end %>    </ul> +    <div class="tab-content"> -  <% I18n.available_locales.each do |locale| %> -      <% context = public_body_form_object(@public_body, locale) %> -      <% if locale.to_s == I18n.default_locale.to_s %> -        <%= fields_for('public_body', context[:object]) do |t| %> -          <%= render :partial => 'locale_fields', :locals => {:t => t, :locale => locale}%> +    <% @public_body.translations.each do |translation| %> +      <% if translation.locale.to_s == I18n.default_locale.to_s %> +        <%= fields_for('public_body', @public_body) do |t| %> +          <%= render :partial => 'locale_fields', :locals => { :t => t, :locale => translation.locale } %>          <% end %>        <% else %> -        <%= f.fields_for(context[:prefix], context[:object], :child_index => locale) do |t| %> -          <%= render :partial => 'locale_fields' , :locals => {:t => t, :locale => locale}%> +        <%= f.fields_for(:translations, translation, :child_index => translation.locale) do |t| %> +          <%= render :partial => 'locale_fields' , :locals => { :t => t, :locale => translation.locale } %>          <% end %>        <% end %> -  <% end %> +    <% end %>    </div>  </div> diff --git a/spec/controllers/admin_public_body_controller_spec.rb b/spec/controllers/admin_public_body_controller_spec.rb index 5b8ed6c55..f176150da 100644 --- a/spec/controllers/admin_public_body_controller_spec.rb +++ b/spec/controllers/admin_public_body_controller_spec.rb @@ -44,6 +44,15 @@ describe AdminPublicBodyController, 'when showing the form for a new public body          assigns[:public_body].should be_a(PublicBody)      end +    it "builds new translations for all locales" do +        get :new + +        translations = assigns[:public_body].translations.map{ |t| t.locale.to_s }.sort +        available = I18n.available_locales.map{ |l| l.to_s }.sort + +        expect(translations).to eq(available) +    end +      context 'when passed a change request id as a param' do          render_views @@ -161,6 +170,12 @@ describe AdminPublicBodyController, "when editing a public body" do          response.should render_template('edit')      end +    it "builds new translations if the body does not already have a translation in the specified locale" do +        public_body = FactoryGirl.create(:public_body) +        get :edit, :id => public_body.id +        expect(assigns[:public_body].translations.map(&:locale)).to include(:fr) +    end +      context 'when passed a change request id as a param' do          render_views diff --git a/spec/helpers/admin_public_body_helper_spec.rb b/spec/helpers/admin_public_body_helper_spec.rb deleted file mode 100644 index c135ef348..000000000 --- a/spec/helpers/admin_public_body_helper_spec.rb +++ /dev/null @@ -1,79 +0,0 @@ -require File.expand_path(File.dirname(__FILE__) + '/../spec_helper') - -describe AdminPublicBodyHelper do - -    include AdminPublicBodyHelper - -    describe :public_body_form_object do - -        context 'in the default locale' do - -            before(:each) do -                @locale = I18n.default_locale -                @public_body = Factory.create(:public_body) -            end - -            it 'provides the original object' do -                object = public_body_form_object(@public_body, @locale)[:object] -                expect(object).to eq(@public_body) -            end - -            it 'provides the prefix public_body' do -                prefix = public_body_form_object(@public_body, @locale)[:prefix] -                expect(prefix).to eq('public_body') -            end - -        end - -        context 'in an alternative locale' do - -            it 'provides the prefix :translations' do -                public_body = FactoryGirl.build(:public_body) -                locale = :es -                prefix = public_body_form_object(public_body, locale)[:prefix] -                expect(prefix).to eq(:translations) -            end - -            context 'when the PublicBody is new' do - -                it 'builds a new PublicBody::Translation' do -                    public_body = FactoryGirl.build(:public_body) -                    locale = :es - -                    object = public_body_form_object(public_body, locale)[:object] - -                    expect(object).to be_instance_of(PublicBody::Translation) -                    expect(object).to be_new_record -                end - -            end - -            context 'when the PublicBody has been persisted' do - -                it 'finds an existing PublicBody::Translation for the locale' do -                    public_body = public_bodies(:geraldine_public_body) -                    locale = :es -                    translation = public_body.find_translation_by_locale(locale) - -                    object = public_body_form_object(public_body, locale)[:object] - -                    expect(object).to eq(translation) -                end - -                it 'builds a new PublicBody::Translation if the record does not have one for that locale' do -                    public_body = FactoryGirl.create(:public_body) -                    locale = :es - -                    object = public_body_form_object(public_body, locale)[:object] - -                    expect(object).to be_instance_of(PublicBody::Translation) -                    expect(object).to be_new_record -                end - -            end - -        end - -    end - -end diff --git a/spec/integration/admin_public_body_edit_spec.rb b/spec/integration/admin_public_body_edit_spec.rb index d75ded6fe..613793dd4 100644 --- a/spec/integration/admin_public_body_edit_spec.rb +++ b/spec/integration/admin_public_body_edit_spec.rb @@ -17,6 +17,15 @@ describe 'Editing a Public Body' do          @body = PublicBody.find_by_name('New Quango')      end +    it 'can edit the default locale' do +        @admin.visit admin_body_edit_path(@body) +        @admin.fill_in 'public_body_name__en', :with => 'New Quango EN' +        @admin.click_button 'Save' + +        pb = @body.reload +        expect(pb.name).to eq('New Quango EN') +    end +      it 'can add a translation for a single locale' do          expect(@body.find_translation_by_locale('fr')).to be_nil @@ -24,13 +33,17 @@ describe 'Editing a Public Body' do          @admin.fill_in 'public_body_translations_attributes_fr_name__fr', :with => 'New Quango FR'          @admin.click_button 'Save' -        pb = PublicBody.find_by_name('New Quango') +        pb = @body.reload          I18n.with_locale(:fr) do              expect(pb.name).to eq('New Quango FR')          end      end      it 'can add a translation for multiple locales', :focus => true do +        @admin.visit admin_body_edit_path(@body) +        @admin.fill_in 'public_body_name__en', :with => 'New Quango EN' +        @admin.click_button 'Save' +          # Add FR translation          expect(@body.find_translation_by_locale('fr')).to be_nil          @admin.visit admin_body_edit_path(@body) @@ -43,7 +56,9 @@ describe 'Editing a Public Body' do          @admin.fill_in 'public_body_translations_attributes_es_name__es', :with => 'New Quango ES'          @admin.click_button 'Save' -        pb = PublicBody.find_by_name('New Quango') +        pb = @body.reload +  +        expect(pb.name).to eq('New Quango EN')          I18n.with_locale(:fr) do              expect(pb.name).to eq('New Quango FR') | 
