Module: Kettle::Dev::GemCoopVersions

Defined in:
lib/kettle/dev/gem_coop_versions.rb

Constant Summary collapse

CACHE_BUST_TTL_SECONDS =
15 * 60
ENV_REFRESH =
"KETTLE_GEM_COOP_REFRESH"
ENV_MARKER_PATH =
"KETTLE_GEM_COOP_CACHE_BUST_PATH"

Class Method Summary collapse

Class Method Details

.fetch(gem_name, version_hint: nil, refresh: false) ⇒ Object



17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# File 'lib/kettle/dev/gem_coop_versions.rb', line 17

def fetch(gem_name, version_hint: nil, refresh: false)
  cache_bust = refresh || env_refresh? || fresh_release_marker?(gem_name, version_hint)
  uri = versions_uri(gem_name, cache_bust: cache_bust)
  request = Net::HTTP::Get.new(uri)
  if cache_bust
    request["Cache-Control"] = "no-cache"
    request["Pragma"] = "no-cache"
  end
  response = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == "https") do |http|
    http.request(request)
  end
  return nil unless response.is_a?(Net::HTTPSuccess)

  JSON.parse(response.body)
end

.mark_released(gem_name, version) ⇒ Object



33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
# File 'lib/kettle/dev/gem_coop_versions.rb', line 33

def mark_released(gem_name, version)
  return if gem_name.to_s.empty? || version.to_s.empty?

  path = marker_path
  data = read_marker(path)
  data["releases"] ||= {}
  data["releases"][gem_name.to_s] = {
    "version" => version.to_s,
    "released_at" => Time.now.utc.iso8601
  }
  FileUtils.mkdir_p(File.dirname(path))
  File.write(path, JSON.pretty_generate(data) << "\n")
rescue => error
  warn("[kettle-dev] could not update gem.coop cache-bust marker: #{error.class}: #{error.message}") if Kettle::Dev::DEBUGGING
end

.marker_pathObject



49
50
51
52
53
54
55
56
# File 'lib/kettle/dev/gem_coop_versions.rb', line 49

def marker_path
  configured = ENV.fetch(ENV_MARKER_PATH, "").to_s
  return configured unless configured.empty?

  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", "gem-coop-cache-bust.json")
end