Changeset 52

Show
Ignore:
Timestamp:
11/27/07 12:24:50 (12 months ago)
Author:
jweiss
Message:

fix tztime to not corrupt timestamps - see Rails ticket http://dev.rubyonrails.org/ticket/10058

Location:
trunk/vendor/plugins/tztime
Files:
2 modified

Legend:

Unmodified
Added
Removed
  • trunk/vendor/plugins/tztime/lib/tz_time_helpers/active_record_methods.rb

    r51 r52  
    1919            end 
    2020          end 
     21          define_method "#{attribute}=" do |local_time| 
     22            fixed = (local_time.acts_like?(:time) || local_time.acts_like?(:date)) ? TzTime.at(local_time) : nil 
     23            write_attribute(attribute, fixed) 
     24          end 
    2125        end 
    22          
    23         protected 
    24           def fix_timezone 
    25             tz_time_attributes.each do |attribute| 
    26               time  = read_attribute(attribute) 
    27               fixed = (time.acts_like?(:time) || time.acts_like?(:date)) ? TzTime.at(time) : nil 
    28               write_attribute(attribute, fixed) 
    29             end 
    30           end 
    3126      end 
    32       before_validation :fix_timezone 
    3327    end 
    3428  end 
  • trunk/vendor/plugins/tztime/test/active_record_methods_test.rb

    r51 r52  
    2828     
    2929    def test_should_access_utc_time_as_local_with_getter_method 
    30       @record.due_on = Time.utc(2006, 1, 1) 
     30      @record.instance_variable_set(:@due_on, Time.utc(2006, 1, 1)) 
    3131      assert_equal @record.due_on, TzTime.local(2005, 12, 31, 18) 
    3232    end 
     
    3434    def test_should_fix_timezones 
    3535      @record.due_on = Time.utc(2006, 1, 1) 
    36       @record.send :fix_timezone 
    3736      assert_equal @record.due_on, TzTime.local(2006, 1, 1) 
     37    end 
     38     
     39    def test_should_only_fix_timezones_that_have_been_written 
     40      @record.instance_variable_set(:@due_on, Time.utc(2006, 1, 1)) 
     41      assert_equal TzTime.utc(2006, 1, 1), @record.due_on 
    3842    end 
    3943  end