Skip to content

Instantly share code, notes, and snippets.

@methodmissing
Created August 14, 2008 17:58
Show Gist options
  • Save methodmissing/5459 to your computer and use it in GitHub Desktop.
Save methodmissing/5459 to your computer and use it in GitHub Desktop.
class ApplicationController < AC::Base
def with_etags( *etag, &block )
etag = supplement_etag!( etag ).compact
logger.info "** Etag source: #{etag.inspect}"
response.last_modified = last_modified_for_etag( etag ).sort.last || now
logger.info "** Response Last Modified: #{response.last_modified}"
response.etag = etag
logger.info "** Response Etag: #{response.etag.inspect}"
if request.fresh?(response)
logger.info "** Not Modified"
head :not_modified
else
logger.info "** Modified"
yield if block_given?
end
end
def supplement_etag!( etag )
etag.flatten + etag_current_user + etag_session + etag_params + etag_revision
end
def etag_current_user
Array( current_user )
end
def etag_session
Array( session.data.values )
end
def etag_params
params.values
end
def etag_revision
Array( ENV["RAILS_ASSET_ID"] || 'none' )
end
def last_modified_for_etag( etag )
etag.flatten.reject{|e| !e.respond_to?(:updated_at) }.map{|e| e.updated_at }
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment