Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

Set the default timezone after the initialization since the configura…

…tion

now lives in the application initializers.

Fix #8711
  • Loading branch information...
commit 39374aa925a7d670b039c0c0c9aa9f4aef19466b 1 parent dd3360e
@rafaelfranca rafaelfranca authored
View
30 activesupport/lib/active_support/railtie.rb
@@ -13,20 +13,6 @@ class Railtie < Rails::Railtie # :nodoc:
end
end
- # Sets the default value for Time.zone
- # If assigned value cannot be matched to a TimeZone, an exception will be raised.
- initializer "active_support.initialize_time_zone" do |app|
- require 'active_support/core_ext/time/zones'
- zone_default = Time.find_zone!(app.config.time_zone)
-
- unless zone_default
- raise 'Value assigned to config.time_zone not recognized. ' \
- 'Run "rake -D time" for a list of tasks for finding appropriate time zone names.'
- end
-
- Time.zone_default = zone_default
- end
-
# Sets the default week start
# If assigned value is not a valid day symbol (e.g. :sunday, :monday, ...), an exception will be raised.
initializer "active_support.initialize_beginning_of_week" do |app|
@@ -42,5 +28,21 @@ class Railtie < Rails::Railtie # :nodoc:
ActiveSupport.send(k, v) if ActiveSupport.respond_to? k
end
end
+
+ # Sets the default value for Time.zone after initialization since the default configuration
+ # lives in application initializers.
+ # If assigned value cannot be matched to a TimeZone, an exception will be raised.
+ config.after_initialize do |app|
+ require 'active_support/core_ext/time/zones'
+ zone_default = Time.find_zone!(app.config.time_zone)
+
+ unless zone_default
+ raise 'Value assigned to config.time_zone not recognized. ' \
+ 'Run "rake -D time" for a list of tasks for finding appropriate time zone names.'
+ end
+
+ Time.zone_default = zone_default
+ end
+
end
end
View
12 railties/test/application/configuration_test.rb
@@ -407,7 +407,17 @@ def index
require "#{app_path}/config/environment"
- assert_equal "Wellington", Rails.application.config.time_zone
+ assert_equal Time.find_zone!("Wellington"), Time.zone_default
+ end
+
+ test "timezone can be set on initializers" do
+ app_file "config/initializers/locale.rb", <<-RUBY
+ Rails.application.config.time_zone = "Central Time (US & Canada)"
+ RUBY
+
+ require "#{app_path}/config/environment"
+
+ assert_equal Time.find_zone!("Central Time (US & Canada)"), Time.zone_default
end
test "raises when an invalid timezone is defined in the config" do

4 comments on commit 39374aa

@carlosantoniodasilva

Could this break the assumption that in an initializer the Time zone would already be set? Just wondering if someone somewhere isn't doing anything crazy with Time zones in an initializer.

@rafaelfranca

Yes. I thought the same, but I didn't saw any case where you would expect time zone to be set in an initializer. Do you have any idea?

@carlosantoniodasilva

None actually, but users can do crazy things :smile:. We'll have to wait to see I guess.

Please sign in to comment.
Something went wrong with that request. Please try again.