Class: Gemstar::PyPIMetadata
- Inherits:
-
Object
- Object
- Gemstar::PyPIMetadata
- Defined in:
- lib/gemstar/pypi_metadata.rb
Instance Attribute Summary collapse
-
#package_name ⇒ Object
(also: #gem_name)
readonly
Returns the value of attribute package_name.
Instance Method Summary collapse
- #cache_key ⇒ Object
- #changelog_sections(versions: nil, cache_only: false, force_refresh: false, use_github_cli: false) ⇒ Object
- #discover_github_tag_sections? ⇒ Boolean
- #github_tag_candidates(version) ⇒ Object
- #github_tag_matches?(_tag_name) ⇒ Boolean
-
#initialize(package_name) ⇒ PyPIMetadata
constructor
A new instance of PyPIMetadata.
- #meta(cache_only: false, force_refresh: false) ⇒ Object
- #registry_release_dates(cache_only: false, force_refresh: false) ⇒ Object
- #repo_uri(cache_only: false, force_refresh: false) ⇒ Object
- #warm_cache(versions: nil) ⇒ Object
Constructor Details
#initialize(package_name) ⇒ PyPIMetadata
Returns a new instance of PyPIMetadata.
8 9 10 |
# File 'lib/gemstar/pypi_metadata.rb', line 8 def initialize(package_name) @package_name = package_name end |
Instance Attribute Details
#package_name ⇒ Object (readonly) Also known as: gem_name
Returns the value of attribute package_name.
12 13 14 |
# File 'lib/gemstar/pypi_metadata.rb', line 12 def package_name @package_name end |
Instance Method Details
#cache_key ⇒ Object
16 17 18 |
# File 'lib/gemstar/pypi_metadata.rb', line 16 def cache_key "pypi-#{package_name}" end |
#changelog_sections(versions: nil, cache_only: false, force_refresh: false, use_github_cli: false) ⇒ Object
57 58 59 60 61 62 63 64 65 |
# File 'lib/gemstar/pypi_metadata.rb', line 57 def changelog_sections(versions: nil, cache_only: false, force_refresh: false, use_github_cli: false) requested_versions = Array(versions).compact changelog = Gemstar::ChangeLog.new(self) if requested_versions.empty? changelog.sections(cache_only: cache_only, force_refresh: force_refresh) else changelog.sections_for_versions(requested_versions, cache_only: cache_only, force_refresh: force_refresh, use_github_cli: use_github_cli) end end |
#discover_github_tag_sections? ⇒ Boolean
85 86 87 |
# File 'lib/gemstar/pypi_metadata.rb', line 85 def discover_github_tag_sections? true end |
#github_tag_candidates(version) ⇒ Object
89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 |
# File 'lib/gemstar/pypi_metadata.rb', line 89 def github_tag_candidates(version) raw = version.to_s candidates = [raw, (raw.start_with?("v") ? raw : "v#{raw}")] candidates << "release_#{raw}" candidates << "release_v#{raw}" unless raw.start_with?("v") if raw.match?(/\A\d+\.\d\z/) padded_minor = "#{raw}0" candidates << padded_minor candidates << "v#{padded_minor}" candidates << "release_#{padded_minor}" candidates << "release_v#{padded_minor}" end if raw.match?(/\A\d{4}\.\d{1,2}\.\d{1,2}\z/) year, month, day = raw.split(".") dotted_date = [year, month.rjust(2, "0"), day.rjust(2, "0")].join(".") candidates << dotted_date candidates << "v#{dotted_date}" candidates << "release_#{dotted_date}" candidates << "release_v#{dotted_date}" end candidates.uniq end |
#github_tag_matches?(_tag_name) ⇒ Boolean
115 116 117 |
# File 'lib/gemstar/pypi_metadata.rb', line 115 def github_tag_matches?(_tag_name) true end |
#meta(cache_only: false, force_refresh: false) ⇒ Object
20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
# File 'lib/gemstar/pypi_metadata.rb', line 20 def (cache_only: false, force_refresh: false) return @meta if !cache_only && defined?(@meta) json = if cache_only Cache.peek(cache_key) else url = "https://pypi.org/pypi/#{URI.encode_www_form_component(package_name)}/json" Cache.fetch(cache_key, force: force_refresh) do URI.parse(url).open(read_timeout: 8).read end end parsed = begin JSON.parse(json) if json rescue nil end normalized = (parsed) @meta = normalized unless cache_only normalized end |
#registry_release_dates(cache_only: false, force_refresh: false) ⇒ Object
67 68 69 70 71 72 73 74 75 76 77 |
# File 'lib/gemstar/pypi_metadata.rb', line 67 def registry_release_dates(cache_only: false, force_refresh: false) parsed = (cache_only: cache_only, force_refresh: force_refresh) Array(parsed&.dig("releases")).each_with_object({}) do |(version, files), dates| uploaded_at = Array(files).filter_map { |file| file["upload_time_iso_8601"] || file["upload_time"] }.min next if version.to_s.empty? || uploaded_at.to_s.empty? dates[version] = Time.parse(uploaded_at).utc.strftime("%b %-d, %Y") end rescue JSON::ParserError, ArgumentError {} end |
#repo_uri(cache_only: false, force_refresh: false) ⇒ Object
43 44 45 46 47 48 49 50 51 52 53 54 55 |
# File 'lib/gemstar/pypi_metadata.rb', line 43 def repo_uri(cache_only: false, force_refresh: false) = (cache_only: cache_only, force_refresh: force_refresh) return nil unless return @repo_uri if !cache_only && defined?(@repo_uri) uri = ["source_code_uri"] uri ||= ["homepage_uri"] if ["homepage_uri"].to_s.include?("github.com") uri = normalize_repo_uri(uri) @repo_uri = uri unless cache_only uri end |
#warm_cache(versions: nil) ⇒ Object
79 80 81 82 83 |
# File 'lib/gemstar/pypi_metadata.rb', line 79 def warm_cache(versions: nil) repo_uri changelog_sections(versions: versions) end |