Class: Async::HTTP::Cache::Response
- Inherits:
-
Protocol::HTTP::Response
- Object
- Protocol::HTTP::Response
- Async::HTTP::Cache::Response
- Defined in:
- lib/async/http/cache/response.rb
Constant Summary collapse
- CACHE_CONTROL =
'cache-control'
- SET_COOKIE =
'set-cookie'
- ETAG =
'etag'
- X_CACHE =
'x-cache'
Instance Attribute Summary collapse
-
#generated_at ⇒ Object
readonly
Returns the value of attribute generated_at.
Instance Method Summary collapse
- #age ⇒ Object
- #cachable? ⇒ Boolean
- #dup ⇒ Object
- #etag ⇒ Object
- #expired? ⇒ Boolean
-
#initialize(response, body) ⇒ Response
constructor
A new instance of Response.
Constructor Details
#initialize(response, body) ⇒ Response
Returns a new instance of Response.
36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
# File 'lib/async/http/cache/response.rb', line 36 def initialize(response, body) @generated_at = Async::Clock.now super( response.version, response.status, response.headers.flatten, body, response.protocol ) @max_age = @headers[CACHE_CONTROL]&.max_age @etag = nil @headers.set(X_CACHE, 'hit') end |
Instance Attribute Details
#generated_at ⇒ Object (readonly)
Returns the value of attribute generated_at.
53 54 55 |
# File 'lib/async/http/cache/response.rb', line 53 def generated_at @generated_at end |
Instance Method Details
#age ⇒ Object
77 78 79 |
# File 'lib/async/http/cache/response.rb', line 77 def age Async::Clock.now - @generated_at end |
#cachable? ⇒ Boolean
59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 |
# File 'lib/async/http/cache/response.rb', line 59 def cachable? if cache_control = @headers[CACHE_CONTROL] if cache_control.private? || !cache_control.public? return false end else # No cache control header... return false end if = @headers[SET_COOKIE] Async.logger.warn(self) {"Cannot cache response with set-cookie header!"} return false end return true end |
#dup ⇒ Object
87 88 89 90 91 92 93 94 |
# File 'lib/async/http/cache/response.rb', line 87 def dup dup = super dup.body = @body.dup dup.headers = @headers.dup return dup end |
#etag ⇒ Object
55 56 57 |
# File 'lib/async/http/cache/response.rb', line 55 def etag @etag ||= @headers[ETAG] end |
#expired? ⇒ Boolean
81 82 83 84 85 |
# File 'lib/async/http/cache/response.rb', line 81 def expired? if @max_age self.age > @max_age end end |