module ActionDispatch::Http::Cache::Response
Constants
- CACHE_CONTROL
- DEFAULT_CACHE_CONTROL
- ETAG
- LAST_MODIFIED
- MUST_REVALIDATE
- NO_CACHE
- PRIVATE
- PUBLIC
- SPECIAL_KEYS
Attributes
cache_control[R]
etag[R]
etag?[R]
Public Instance Methods
date()
click to toggle source
# File lib/action_dispatch/http/cache.rb, line 71 def date if date_header = headers['Date'] Time.httpdate(date_header) end end
date=(utc_time)
click to toggle source
# File lib/action_dispatch/http/cache.rb, line 81 def date=(utc_time) headers['Date'] = utc_time.httpdate end
date?()
click to toggle source
# File lib/action_dispatch/http/cache.rb, line 77 def date? headers.include?('Date') end
etag=(etag)
click to toggle source
# File lib/action_dispatch/http/cache.rb, line 85 def etag=(etag) key = ActiveSupport::Cache.expand_cache_key(etag) @etag = self[ETAG] = %Q("#{Digest::MD5.hexdigest(key)}") end
last_modified()
click to toggle source
# File lib/action_dispatch/http/cache.rb, line 57 def last_modified if last = headers[LAST_MODIFIED] Time.httpdate(last) end end
last_modified=(utc_time)
click to toggle source
# File lib/action_dispatch/http/cache.rb, line 67 def last_modified=(utc_time) headers[LAST_MODIFIED] = utc_time.httpdate end
last_modified?()
click to toggle source
# File lib/action_dispatch/http/cache.rb, line 63 def last_modified? headers.include?(LAST_MODIFIED) end
Private Instance Methods
cache_control_headers()
click to toggle source
# File lib/action_dispatch/http/cache.rb, line 105 def cache_control_headers cache_control = {} cache_control_segments.each do |segment| directive, argument = segment.split('=', 2) if SPECIAL_KEYS.include? directive key = directive.tr('-', '_') cache_control[key.to_sym] = argument || true else cache_control[:extras] ||= [] cache_control[:extras] << segment end end cache_control end
cache_control_segments()
click to toggle source
# File lib/action_dispatch/http/cache.rb, line 97 def cache_control_segments if cache_control = self[CACHE_CONTROL] cache_control.delete(' ').split(',') else [] end end
handle_conditional_get!()
click to toggle source
# File lib/action_dispatch/http/cache.rb, line 128 def handle_conditional_get! if etag? || last_modified? || !@cache_control.empty? set_conditional_cache_control! end end
prepare_cache_control!()
click to toggle source
# File lib/action_dispatch/http/cache.rb, line 123 def prepare_cache_control! @cache_control = cache_control_headers @etag = self[ETAG] end
set_conditional_cache_control!()
click to toggle source
# File lib/action_dispatch/http/cache.rb, line 140 def set_conditional_cache_control! control = {} cc_headers = cache_control_headers if extras = cc_headers.delete(:extras) @cache_control[:extras] ||= [] @cache_control[:extras] += extras @cache_control[:extras].uniq! end control.merge! cc_headers control.merge! @cache_control if control.empty? headers[CACHE_CONTROL] = DEFAULT_CACHE_CONTROL elsif control[:no_cache] headers[CACHE_CONTROL] = NO_CACHE if control[:extras] headers[CACHE_CONTROL] += ", #{control[:extras].join(', ')}" end else extras = control[:extras] max_age = control[:max_age] options = [] options << "max-age=#{max_age.to_i}" if max_age options << (control[:public] ? PUBLIC : PRIVATE) options << MUST_REVALIDATE if control[:must_revalidate] options.concat(extras) if extras headers[CACHE_CONTROL] = options.join(", ") end end