Ruby on Rails | Screencasts | Download | Documentation | Weblog | Community | Source

Changeset 1682

Show
Ignore:
Timestamp:
07/04/05 21:26:54 (3 years ago)
Author:
bitsweat
Message:

r2810@asus: jeremy | 2005-07-04 19:29:54 -0700
correct marshaling and fingerprinting logic

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/actionpack/lib/action_controller/session/active_record_store.rb

    r1679 r1682  
    8686        end 
    8787 
    88         # Lazy-unmarshal session state. 
     88        # Lazy-unmarshal session state.  Take a fingerprint so we can detect 
     89        # whether to save changes later. 
    8990        def data 
    9091          unless @data 
    91             marshaled_data = read_attribute('data') 
    92             @fingerprint = self.class.fingerprint(marshaled_data) 
    93             @data = self.class.unmarshal(marshaled_data) 
     92            case @data = read_attribute('data') 
     93              when String 
     94                @fingerprint = self.class.fingerprint(@data) 
     95                @data = self.class.unmarshal(@data) 
     96              when nil 
     97                @data = {} 
     98                @fingerprint = nil 
     99            end 
    94100          end 
    95101          @data 
     
    173179        def initialize(attributes) 
    174180          @session_id, @data, @marshaled_data = attributes[:session_id], attributes[:data], attributes[:marshaled_data] 
    175           @new_record = !@marshaled_data.nil? 
     181          @new_record = @marshaled_data.nil? 
     182        end 
     183 
     184        def new_record? 
     185          @new_record 
    176186        end 
    177187 
     
    179189        # whether to save changes later. 
    180190        def data 
    181           if @marshaled_data 
    182             @fingerprint = self.class.fingerprint(@marshaled_data) 
    183             @data, @marshaled_data = self.class.unmarshal(@marshaled_data), nil 
     191          unless @data 
     192            if @marshaled_data 
     193              @fingerprint = self.class.fingerprint(@marshaled_data) 
     194              @data, @marshaled_data = self.class.unmarshal(@marshaled_data), nil 
     195            else 
     196              @data = {} 
     197              @fingerprint = nil 
     198            end 
    184199          end 
    185200          @data