Skip to content

Commit

Permalink
Set the default timezone after the initialization since the configura…
Browse files Browse the repository at this point in the history
…tion

now lives in the application initializers.

Fix #8711
  • Loading branch information
rafaelfranca committed Jan 4, 2013
1 parent dd3360e commit 39374aa
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 15 deletions.
30 changes: 16 additions & 14 deletions activesupport/lib/active_support/railtie.rb
Expand Up @@ -13,20 +13,6 @@ class Railtie < Rails::Railtie # :nodoc:
end end
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 # Sets the default week start
# If assigned value is not a valid day symbol (e.g. :sunday, :monday, ...), an exception will be raised. # 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| initializer "active_support.initialize_beginning_of_week" do |app|
Expand All @@ -42,5 +28,21 @@ class Railtie < Rails::Railtie # :nodoc:
ActiveSupport.send(k, v) if ActiveSupport.respond_to? k ActiveSupport.send(k, v) if ActiveSupport.respond_to? k
end end
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
end end
12 changes: 11 additions & 1 deletion railties/test/application/configuration_test.rb
Expand Up @@ -407,7 +407,17 @@ def index


require "#{app_path}/config/environment" 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 end


test "raises when an invalid timezone is defined in the config" do test "raises when an invalid timezone is defined in the config" do
Expand Down

4 comments on commit 39374aa

@carlosantoniodasilva
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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

@rafaelfranca
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

😢

Please sign in to comment.