From 5d0784dc504e3bd3f1e2d2cf77993007209fc3b0 Mon Sep 17 00:00:00 2001 From: Franco Catena Date: Tue, 23 Nov 2010 14:22:09 -0300 Subject: [PATCH] Fix for ActiveSupport's i18n config loading [#5522 state:resolved] --- activesupport/lib/active_support/i18n_railtie.rb | 8 ++-- railties/lib/rails/application/finisher.rb | 4 ++ railties/lib/rails/railtie/configuration.rb | 6 ++- .../test/application/initializers/hooks_test.rb | 12 +++-- .../test/application/initializers/i18n_test.rb | 52 +++++++++++++++++++- 5 files changed, 71 insertions(+), 11 deletions(-) diff --git a/activesupport/lib/active_support/i18n_railtie.rb b/activesupport/lib/active_support/i18n_railtie.rb index f8a5616..3961ffc 100644 --- a/activesupport/lib/active_support/i18n_railtie.rb +++ b/activesupport/lib/active_support/i18n_railtie.rb @@ -24,9 +24,9 @@ module I18n end end - # Set the i18n configuration only after initialization since a lot of - # configuration is still usually done in application initializers. - config.after_initialize do |app| + # Set the i18n configuration only after_configuration since a lot of + # changes are usually done in application initializers. + config.after_configuration do |app| fallbacks = app.config.i18n.delete(:fallbacks) app.config.i18n.each do |setting, value| @@ -78,4 +78,4 @@ module I18n end end end -end \ No newline at end of file +end diff --git a/railties/lib/rails/application/finisher.rb b/railties/lib/rails/application/finisher.rb index 8fd2aa0..778b2ac 100644 --- a/railties/lib/rails/application/finisher.rb +++ b/railties/lib/rails/application/finisher.rb @@ -3,6 +3,10 @@ module Rails module Finisher include Initializable + initializer :before_finisher_hook do + ActiveSupport.run_load_hooks(:after_configuration, self) + end + initializer :add_generator_templates do config.generators.templates.unshift(*paths.lib.templates.to_a) end diff --git a/railties/lib/rails/railtie/configuration.rb b/railties/lib/rails/railtie/configuration.rb index 22ed5b1..201637d 100644 --- a/railties/lib/rails/railtie/configuration.rb +++ b/railties/lib/rails/railtie/configuration.rb @@ -50,6 +50,10 @@ module Rails ActiveSupport.on_load(:before_initialize, :yield => true, &block) end + def after_configuration(&block) + ActiveSupport.on_load(:after_configuration, :yield => true, &block) + end + def after_initialize(&block) ActiveSupport.on_load(:after_initialize, :yield => true, &block) end @@ -79,4 +83,4 @@ module Rails end end end -end \ No newline at end of file +end diff --git a/railties/test/application/initializers/hooks_test.rb b/railties/test/application/initializers/hooks_test.rb index 198abbe..ee7735d 100644 --- a/railties/test/application/initializers/hooks_test.rb +++ b/railties/test/application/initializers/hooks_test.rb @@ -23,12 +23,13 @@ module ApplicationTests config.cache_classes = false config.before_configuration { $initialization_callbacks << 1 } config.before_initialize { $initialization_callbacks << 2 } + config.after_configuration { $initialization_callbacks << 3 } config.before_eager_load { Boom } - config.after_initialize { $initialization_callbacks << 3 } + config.after_initialize { $initialization_callbacks << 4 } RUBY require "#{app_path}/config/environment" - assert_equal [1,2,3], $initialization_callbacks + assert_equal [1,2,3,4], $initialization_callbacks end test "hooks block works correctly with cache classes" do @@ -38,12 +39,13 @@ module ApplicationTests config.cache_classes = true config.before_configuration { $initialization_callbacks << 1 } config.before_initialize { $initialization_callbacks << 2 } - config.before_eager_load { $initialization_callbacks << 3 } - config.after_initialize { $initialization_callbacks << 4 } + config.after_configuration { $initialization_callbacks << 3 } + config.before_eager_load { $initialization_callbacks << 4 } + config.after_initialize { $initialization_callbacks << 5 } RUBY require "#{app_path}/config/environment" - assert_equal [1,2,3,4], $initialization_callbacks + assert_equal [1,2,3,4,5], $initialization_callbacks end test "after_initialize runs after frameworks have been initialized" do diff --git a/railties/test/application/initializers/i18n_test.rb b/railties/test/application/initializers/i18n_test.rb index 4baa8a8..789f8a5 100644 --- a/railties/test/application/initializers/i18n_test.rb +++ b/railties/test/application/initializers/i18n_test.rb @@ -95,6 +95,56 @@ en: assert_equal "2", last_response.body end + test "locales are correctly loaded if cache_classes is true" do + add_to_config <<-RUBY + config.cache_classes = true + RUBY + + app_file "config/locales/es.yml", <<-YAML +es: + hello: "Hola mundo" + YAML + + app_file 'app/model/my_model.rb', <<-RUBY + class MyModel < ActiveRecord::Base + @@available_locales ||= I18n.available_locales.map(&:to_s).sort + + def self.available_locales + @@available_locales + end + end + RUBY + + load_app + + assert_equal ['en', 'es'], MyModel.available_locales + end + + test "locales are correctly loaded if cache_classes is false" do + add_to_config <<-RUBY + config.cache_classes = false + RUBY + + app_file "config/locales/es.yml", <<-YAML +es: + hello: "Hola mundo" + YAML + + app_file 'app/model/my_model.rb', <<-RUBY + class MyModel < ActiveRecord::Base + @@available_locales ||= I18n.available_locales.map(&:to_s).sort + + def self.available_locales + @@available_locales + end + end + RUBY + + load_app + + assert_equal ['en', 'es'], MyModel.available_locales + end + # Fallbacks test "not using config.i18n.fallbacks does not initialize I18n.fallbacks" do I18n.backend = Class.new { include I18n::Backend::Base }.new @@ -147,4 +197,4 @@ en: assert_fallbacks :ca => [:ca, :"es-ES", :es, :'en-US', :en] end end -end \ No newline at end of file +end -- 1.7.1