Module: Kettle::Dev::RubyGemsVersions
- Defined in:
- lib/kettle/dev/ruby_gems_versions.rb
Constant Summary collapse
- CACHE_BUST_TTL_SECONDS =
30 * 24 * 60 * 60
- VERSION_CACHE_TTL_SECONDS =
30 * 24 * 60 * 60
- ENV_REFRESH =
"KETTLE_RUBYGEMS_REFRESH"- ENV_MARKER_PATH =
"KETTLE_RUBYGEMS_CACHE_BUST_PATH"- ENV_VERSION_CACHE_PATH =
"KETTLE_RUBYGEMS_VERSION_CACHE_PATH"- ENV_LEGACY_VERSION_CACHE_PATH =
"KETTLE_JEM_DEPS_FLOOR_CACHE"
Class Method Summary collapse
- .fetch(gem_name, version_hint: nil, refresh: false) ⇒ Object
- .mark_released(gem_name, version) ⇒ Object
- .marker_path ⇒ Object
- .version_cache_path ⇒ Object
Class Method Details
.fetch(gem_name, version_hint: nil, refresh: false) ⇒ Object
23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
# File 'lib/kettle/dev/ruby_gems_versions.rb', line 23 def fetch(gem_name, version_hint: nil, refresh: false) name = gem_name.to_s cached = cached_versions(name) cache_bust = refresh || env_refresh? || fresh_release_marker?(name, version_hint) return cached if cached && !cache_bust 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 cached unless response.is_a?(Net::HTTPSuccess) data = JSON.parse(response.body) write_versions(name, data) if data.is_a?(Array) data rescue => error return cached if cached raise error end |
.mark_released(gem_name, version) ⇒ Object
49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
# File 'lib/kettle/dev/ruby_gems_versions.rb', line 49 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 RubyGems.org cache-bust marker: #{error.class}: #{error.}") if Kettle::Dev::DEBUGGING end |
.marker_path ⇒ Object
65 66 67 68 69 70 71 72 |
# File 'lib/kettle/dev/ruby_gems_versions.rb', line 65 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", "rubygems-cache-bust.json") end |
.version_cache_path ⇒ Object
74 75 76 77 78 79 80 81 82 83 84 85 86 |
# File 'lib/kettle/dev/ruby_gems_versions.rb', line 74 def version_cache_path configured = ENV.fetch(ENV_VERSION_CACHE_PATH, "").to_s return "" if configured.match?(/\A(?:false|0|no|off|disabled)\z/i) return configured unless configured.empty? legacy_configured = ENV.fetch(ENV_LEGACY_VERSION_CACHE_PATH, "").to_s return "" if legacy_configured.match?(/\A(?:false|0|no|off|disabled)\z/i) return legacy_configured unless legacy_configured.empty? cache_home = ENV["XDG_CACHE_HOME"] cache_home = File.join(Dir.home, ".cache") if cache_home.to_s.empty? File.join(cache_home, "kettle-jem", "deps-floor-rubygems-versions.json") end |