Class: Kettle::Dev::PreReleaseCLI::ImageUrlCache

Inherits:
Object
  • Object
show all
Defined in:
lib/kettle/dev/pre_release_cli.rb

Overview

Persistent cache of successfully validated Markdown image URLs.

Constant Summary collapse

VERSION =
1

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(path:, ttl_seconds: IMAGE_URL_CACHE_TTL_SECONDS, clock: -> { Time.now }) ⇒ ImageUrlCache

Returns a new instance of ImageUrlCache.



113
114
115
116
117
118
# File 'lib/kettle/dev/pre_release_cli.rb', line 113

def initialize(path:, ttl_seconds: IMAGE_URL_CACHE_TTL_SECONDS, clock: -> { Time.now })
  @path = path
  @ttl_seconds = ttl_seconds
  @clock = clock
  @data = nil
end

Class Method Details

.default_pathObject



105
106
107
108
109
110
111
# File 'lib/kettle/dev/pre_release_cli.rb', line 105

def self.default_path
  state_home = ENV["XDG_STATE_HOME"]
  state_home = File.join(Dir.home, ".local", "state") if state_home.to_s.empty?
  File.join(state_home, "kettle-dev", "image-url-cache.json")
rescue ArgumentError
  nil
end

Instance Method Details

#fresh_success?(url) ⇒ Boolean

Returns:

  • (Boolean)


120
121
122
123
124
125
126
# File 'lib/kettle/dev/pre_release_cli.rb', line 120

def fresh_success?(url)
  entry = data.fetch("images")[url.to_s]
  return false unless entry.is_a?(Hash)
  return false unless entry["ok"] == true

  fresh_entry?(entry)
end

#to_hObject



139
140
141
# File 'lib/kettle/dev/pre_release_cli.rb', line 139

def to_h
  data
end

#write_success(url) ⇒ Object



128
129
130
131
132
133
134
135
136
137
# File 'lib/kettle/dev/pre_release_cli.rb', line 128

def write_success(url)
  return if @path.to_s.empty?
  return if url.to_s.empty?

  data.fetch("images")[url.to_s] = {
    "ok" => true,
    "cached_at" => @clock.call.utc.iso8601
  }
  save!
end