Class: GemChangelogDiff::Cache

Inherits:
Object
  • Object
show all
Defined in:
lib/gem_changelog_diff/cache.rb

Overview

Disk-based HTTP response cache with ETag revalidation.

Constant Summary collapse

DEFAULT_DIR =
File.join(Dir.home, ".cache", "gem_changelog_diff")
DEFAULT_TTL =
86_400

Instance Method Summary collapse

Constructor Details

#initialize(cache_dir: DEFAULT_DIR, ttl: DEFAULT_TTL, enabled: true) ⇒ Cache

Returns a new instance of Cache.



14
15
16
17
18
# File 'lib/gem_changelog_diff/cache.rb', line 14

def initialize(cache_dir: DEFAULT_DIR, ttl: DEFAULT_TTL, enabled: true)
  @cache_dir = cache_dir
  @ttl = ttl
  @enabled = enabled
end

Instance Method Details

#clearvoid

This method returns an undefined value.

Deletes all cached data.



41
42
43
# File 'lib/gem_changelog_diff/cache.rb', line 41

def clear
  FileUtils.rm_rf(@cache_dir)
end

#get(uri, headers: {}) ⇒ Net::HTTPResponse, CachedResponse

Fetches a response, returning cached data when available.

Parameters:

  • uri (URI::Generic)

    the request URI

  • headers (Hash<String, String>) (defaults to: {})

    additional HTTP headers

Returns:



24
25
26
27
28
29
30
31
32
33
34
35
36
37
# File 'lib/gem_changelog_diff/cache.rb', line 24

def get(uri, headers: {})
  return fetch_from_network(uri, headers) unless @enabled

  key = cache_key(uri)
  entry = read_entry(key)

  if entry && fresh?(entry)
    build_response(entry)
  elsif entry && entry["etag"]
    revalidate(uri, headers, entry, key)
  else
    fetch_and_store(uri, headers, key)
  end
end