diff options
-rw-r--r-- | config/application.rb | 1 | ||||
-rw-r--r-- | config/initializers/alaveteli.rb | 1 | ||||
-rw-r--r-- | lib/alaveteli_localization.rb | 1 | ||||
-rw-r--r-- | lib/routing_filters.rb | 8 | ||||
-rw-r--r-- | spec/integration/localisation_spec.rb | 29 |
5 files changed, 32 insertions, 8 deletions
diff --git a/config/application.rb b/config/application.rb index a514daf3a..ed4f07819 100644 --- a/config/application.rb +++ b/config/application.rb @@ -61,7 +61,6 @@ module Alaveteli config.action_dispatch.rack_cache = nil config.after_initialize do |app| - require 'routing_filters.rb' # Add a catch-all route to force routing errors to be handled by the application, # rather than by middleware. app.routes.append{ match '*path', :to => 'general#not_found' } diff --git a/config/initializers/alaveteli.rb b/config/initializers/alaveteli.rb index 9a151e3e8..3a1220326 100644 --- a/config/initializers/alaveteli.rb +++ b/config/initializers/alaveteli.rb @@ -55,6 +55,7 @@ require 'date_quarter' require 'public_body_csv' require 'category_and_heading_migrator' require 'public_body_categories' +require 'routing_filters' AlaveteliLocalization.set_locales(AlaveteliConfiguration::available_locales, AlaveteliConfiguration::default_locale) diff --git a/lib/alaveteli_localization.rb b/lib/alaveteli_localization.rb index 6daab124a..2b6978c92 100644 --- a/lib/alaveteli_localization.rb +++ b/lib/alaveteli_localization.rb @@ -7,6 +7,7 @@ class AlaveteliLocalization I18n.locale = default_locale I18n.available_locales = available_locales.map { |locale_name| locale_name.to_sym } I18n.default_locale = default_locale + RoutingFilter::Conditionallyprependlocale.locales = available_locales end def set_default_text_domain(name, path) diff --git a/lib/routing_filters.rb b/lib/routing_filters.rb index a9a62b8db..5b5da6870 100644 --- a/lib/routing_filters.rb +++ b/lib/routing_filters.rb @@ -22,5 +22,13 @@ module RoutingFilter prepend_segment!(result, locale) if prepend_locale?(locale) end end + + # Reset the locale pattern when the locales are set. + class << self + def locales=(locales) + @@locales_pattern = nil + @@locales = locales.map(&:to_sym) + end + end end end diff --git a/spec/integration/localisation_spec.rb b/spec/integration/localisation_spec.rb index 4f6b61ae1..037603ad5 100644 --- a/spec/integration/localisation_spec.rb +++ b/spec/integration/localisation_spec.rb @@ -24,14 +24,29 @@ describe "when generating urls" do response.should_not contain @home_link_regex end - it 'should redirect requests for a public body in a locale to the canonical name in that locale' do - get('/es/body/dfh') - response.should redirect_to "/es/body/edfh" - end + context 'when handling public body requests' do + + before do + AlaveteliLocalization.set_locales(available_locales='es en', default_locale='en') + body = FactoryGirl.create(:public_body, :short_name => 'english_short') + I18n.with_locale(:es) do + body.short_name = 'spanish_short' + body.save! + end + end + + it 'should redirect requests for a public body in a locale to the + canonical name in that locale' do + get('/es/body/english_short') + response.should redirect_to "/es/body/spanish_short" + end - it 'should remember a filter view when redirecting a public body request to the canonical name' do - get('/es/body/tgq/successful') - response.should redirect_to "/es/body/etgq/successful" + it 'should remember a filter view when redirecting a public body + request to the canonical name' do + AlaveteliLocalization.set_locales(available_locales='es en', default_locale='en') + get('/es/body/english_short/successful') + response.should redirect_to "/es/body/spanish_short/successful" + end end describe 'when there is more than one locale' do |