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

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

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



125
126
127
128
129
130
# File 'lib/kettle/dev/pre_release_cli.rb', line 125

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_pathString?



117
118
119
120
121
122
123
# File 'lib/kettle/dev/pre_release_cli.rb', line 117

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



132
133
134
135
136
137
138
# File 'lib/kettle/dev/pre_release_cli.rb', line 132

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_hHash[String, untyped]



151
152
153
# File 'lib/kettle/dev/pre_release_cli.rb', line 151

def to_h
  data
end

#write_success(url) ⇒ void



140
141
142
143
144
145
146
147
148
149
# File 'lib/kettle/dev/pre_release_cli.rb', line 140

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