Module: Grape::CacheControl
- Defined in:
- lib/grape/cache_control.rb,
lib/grape/cache_control/helpers.rb,
lib/grape/cache_control/version.rb
Defined Under Namespace
Modules: Helpers
Constant Summary collapse
- CACHE_CONTROL =
'Cache-Control'.freeze
- EXPIRES =
'Expires'.freeze
- TRUE =
'true'.freeze
- SETTABLE_DIRECTIVES =
[:max_age, :s_maxage, :stale_while_revalidate, :stale_while_error].freeze
- TRUTHY_DIRECTIVES =
[:public, :private, :no_cache, :no_store, :no_transform, :must_revalidate, :proxy_revalidate].freeze
- ALL_DIRECTIVES =
(TRUTHY_DIRECTIVES | SETTABLE_DIRECTIVES).freeze
- VERSION =
'1.0.1'
Class Method Summary collapse
Class Method Details
.cache_control(request, *values) ⇒ Object
22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
# File 'lib/grape/cache_control.rb', line 22 def cache_control(request, *values) cc_directives = {} (cache_control_segments(request.header(CACHE_CONTROL)) | cache_control_values(*values)).each do |segment| directive, argument = segment.split('=', 2) cc_directives[directive.tr('-', '_').to_sym] = argument || true end if !cc_directives.empty? cc_header = [] cc_directives.delete(:public) if cc_directives.key? :private cc_directives.delete(:private) if cc_directives.key? :public cc_directives.each do |k, v| if SETTABLE_DIRECTIVES.include?(k) cc_header << "#{Grape::CacheControl.const_get(k.upcase)}=#{v.to_i}" elsif TRUTHY_DIRECTIVES.include?(k) && v == TRUE cc_header << Grape::CacheControl.const_get(k.upcase) end end request.header(CACHE_CONTROL, cc_header.join(', ')) end end |
.expires(request, amount, *values) ⇒ Object
45 46 47 48 49 50 51 52 53 54 55 56 57 |
# File 'lib/grape/cache_control.rb', line 45 def expires(request, amount, *values) if amount.is_a? Integer time = Time.now + amount.to_i max_age = amount else time = amount max_age = time - Time.now end values << { max_age: max_age } request.header(EXPIRES, time.httpdate) cache_control(request, *values) end |