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

Changeset 6160

Show
Ignore:
Timestamp:
02/18/07 00:47:18 (1 year ago)
Author:
bitsweat
Message:

Etagging ignores appended and block responses.

Files:

Legend:

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

    r6158 r6160  
    88require 'drb' 
    99require 'set' 
    10 require 'md5' 
     10require 'digest/md5' 
    1111 
    1212module ActionController #:nodoc: 
     
    877877        else 
    878878          response.body = text 
    879         end 
    880  
    881         if response.headers['Status'] == "200 OK" && response.body.size > 0 
    882           response.headers['Etag'] = "\"#{MD5.new(text).to_s}\"" 
    883            
    884           if request.headers['HTTP_IF_NONE_MATCH'] == response.headers['Etag'] 
    885             response.headers['Status'] = "304 Not Modified" 
    886             response.body = '' 
     879 
     880          if text.is_a?(String) 
     881            if response.headers['Status'][0..2] == '200' && !response.body.empty? 
     882              response.headers['Etag'] = %("#{Digest::MD5.hexdigest(text)}") 
     883 
     884              if request.headers['HTTP_IF_NONE_MATCH'] == response.headers['Etag'] 
     885                response.headers['Status'] = "304 Not Modified" 
     886                response.body = '' 
     887              end 
     888            end 
    887889          end 
    888890        end 
    889          
     891 
    890892        response.body 
    891893      end 
  • trunk/actionpack/test/controller/render_test.rb

    r6158 r6160  
    312312  def test_render_with_etag 
    313313    get :render_hello_world_from_variable 
    314     expected_etag = "\"#{MD5.new("hello david").to_s}\"" 
     314    expected_etag = etag_for('hello david') 
    315315    assert_equal expected_etag, @response.headers['Etag'] 
    316      
     316 
    317317    @request.headers["HTTP_IF_NONE_MATCH"] = expected_etag 
    318318    get :render_hello_world_from_variable 
    319319    assert_equal "304 Not Modified", @response.headers['Status'] 
    320      
     320 
    321321    @request.headers["HTTP_IF_NONE_MATCH"] = "\"diftag\"" 
    322322    get :render_hello_world_from_variable 
     
    333333      assert_deprecated(/render/, &block) 
    334334    end 
    335      
     335 
    336336    def etag_for(text) 
    337       "\"#{MD5.new(text).to_s}\"" 
     337      %("#{Digest::MD5.hexdigest(text)}") 
    338338    end 
    339339end