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