From cb10c0e1d05a3384ab18b12b57b6260c59a66bd9 Mon Sep 17 00:00:00 2001 From: Daniela Soares Feitosa Date: Fri, 16 Nov 2012 00:07:55 -0200 Subject: [PATCH] Fixed language_chooser to avoid crashes of themes --- app/helpers/language_helper.rb | 9 +++++---- test/unit/language_helper_test.rb | 16 ++++++++++++++++ 2 files changed, 21 insertions(+), 4 deletions(-) diff --git a/app/helpers/language_helper.rb b/app/helpers/language_helper.rb index ff65ffe..0d6ea24 100644 --- a/app/helpers/language_helper.rb +++ b/app/helpers/language_helper.rb @@ -13,19 +13,20 @@ module LanguageHelper alias :calendar_date_select_language :tinymce_language - def language_chooser(environment, options = {}) - return if environment.locales.size < 2 + def language_chooser(environment=nil, options = {}) + locales = environment.nil? ? Noosfero.locales : environment.locales + return if locales.size < 2 current = language separator = options[:separator] || ' — ' if options[:element] == 'dropdown' select_tag('lang', - options_for_select(environment.locales.map{|code,name| [name, code]}, current), + options_for_select(locales.map{|code,name| [name, code]}, current), :onchange => "document.location.href= #{url_for(params.merge(:lang => 'LANGUAGE')).inspect}.replace(/LANGUAGE/, this.value) ;", :help => _('The language you choose here is the language used for options, buttons, etc. It does not affect the language of the content created by other users.') ) else - languages = environment.locales.map do |code,name| + languages = locales.map do |code,name| if code == current content_tag('strong', name) else diff --git a/test/unit/language_helper_test.rb b/test/unit/language_helper_test.rb index dfafed0..18db520 100644 --- a/test/unit/language_helper_test.rb +++ b/test/unit/language_helper_test.rb @@ -65,6 +65,22 @@ class LanguageHelperTest < ActiveSupport::TestCase assert result.blank? end + should 'get noosfero locales if environment is not defined' do + self.expects(:language).returns('en') + Noosfero.expects(:locales).returns({ 'en' => 'English', 'pt_BR' => 'Português Brasileiro' }).at_least_once + result = self.language_chooser + assert_match /Português Brasileiro/, result + assert_match /English/, result + end + + should 'get noosfero locales if environment is not defined and has options' do + self.expects(:language).returns('en') + Noosfero.expects(:locales).returns({ 'en' => 'English', 'pt_BR' => 'Português Brasileiro' }).at_least_once + result = self.language_chooser(nil, :separator=>"") + assert_match /Português Brasileiro/, result + assert_match /English/, result + end + protected include NoosferoTestHelper include ActionView::Helpers::FormOptionsHelper -- libgit2 0.21.2