From 85caaffa1738074282124341ebacb3b13b55bcae Mon Sep 17 00:00:00 2001 From: John Gesimondo Date: Sat, 24 Dec 2011 15:29:45 -0500 Subject: [PATCH] parse time objects with UTC to match activerecord behavior, remove format from parse datetime/timestamp/date continue to use local time zone, parse method does not accept format param --- lib/rails_admin/config/fields/types/datetime.rb | 7 ++++++- lib/rails_admin/config/fields/types/time.rb | 5 +++++ .../config/edit/rails_admin_config_edit_spec.rb | 10 ++++++++++ 3 files changed, 21 insertions(+), 1 deletion(-) diff --git a/lib/rails_admin/config/fields/types/datetime.rb b/lib/rails_admin/config/fields/types/datetime.rb index b6e6742f2f..697a9b8e2d 100644 --- a/lib/rails_admin/config/fields/types/datetime.rb +++ b/lib/rails_admin/config/fields/types/datetime.rb @@ -41,7 +41,12 @@ def normalize(date_string, format) end end end - ::Time.zone.parse(date_string, format) + parse_date_string(date_string) + end + + # Parse normalized date strings using time zone + def parse_date_string(date_string) + ::Time.zone.parse(date_string) end end diff --git a/lib/rails_admin/config/fields/types/time.rb b/lib/rails_admin/config/fields/types/time.rb index 9821dd1248..10997ca8ab 100644 --- a/lib/rails_admin/config/fields/types/time.rb +++ b/lib/rails_admin/config/fields/types/time.rb @@ -21,6 +21,11 @@ def parse_input(params) params[name] = self.class.normalize(params[name], localized_time_format) if params[name] end + # Parse normalized date (time) strings using UTC + def self.parse_date_string(date_string) + ::DateTime.parse(date_string) + end + register_instance_option(:strftime_format) do (localized_format.include? "%p") ? "%I:%M %p" : "%H:%M" end diff --git a/spec/requests/config/edit/rails_admin_config_edit_spec.rb b/spec/requests/config/edit/rails_admin_config_edit_spec.rb index 8cd315c59e..68b7f3de2b 100644 --- a/spec/requests/config/edit/rails_admin_config_edit_spec.rb +++ b/spec/requests/config/edit/rails_admin_config_edit_spec.rb @@ -617,6 +617,16 @@ class Team @record.time_field.strftime("%H:%M").should eql(@time.strftime("%H:%M")) end + it "should interpret time value as UTC when timezone is specified" do + Time.zone = 'Eastern Time (US & Canada)' # -05:00 + + visit new_path(:model_name => "field_test") + fill_in "field_test[time_field]", :with => @time.strftime("%H:%M") + click_button "Save" + @record = RailsAdmin::AbstractModel.new("FieldTest").first + @record.time_field.strftime("%H:%M").should eql(@time.strftime("%H:%M")) + end + it "should have a customization option" do RailsAdmin.config FieldTest do edit do