Class: Gemstar::CratesIOMetadata
- Inherits:
-
Object
- Object
- Gemstar::CratesIOMetadata
- Defined in:
- lib/gemstar/crates_io_metadata.rb
Constant Summary collapse
Instance Attribute Summary collapse
-
#crate_name ⇒ Object
(also: #gem_name)
readonly
Returns the value of attribute crate_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(crate_name) ⇒ CratesIOMetadata
constructor
A new instance of CratesIOMetadata.
- #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(crate_name) ⇒ CratesIOMetadata
Returns a new instance of CratesIOMetadata.
13 14 15 |
# File 'lib/gemstar/crates_io_metadata.rb', line 13 def initialize(crate_name) @crate_name = crate_name end |
Instance Attribute Details
#crate_name ⇒ Object (readonly) Also known as: gem_name
Returns the value of attribute crate_name.
17 18 19 |
# File 'lib/gemstar/crates_io_metadata.rb', line 17 def crate_name @crate_name end |
Instance Method Details
#cache_key ⇒ Object
21 22 23 |
# File 'lib/gemstar/crates_io_metadata.rb', line 21 def cache_key "crates-io-#{crate_name}" end |
#changelog_sections(versions: nil, cache_only: false, force_refresh: false, use_github_cli: false) ⇒ Object
44 45 46 47 48 49 50 51 52 |
# File 'lib/gemstar/crates_io_metadata.rb', line 44 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
73 74 75 |
# File 'lib/gemstar/crates_io_metadata.rb', line 73 def discover_github_tag_sections? true end |
#github_tag_candidates(version) ⇒ Object
77 78 79 80 81 82 83 84 85 86 |
# File 'lib/gemstar/crates_io_metadata.rb', line 77 def github_tag_candidates(version) raw = version.to_s [ raw, (raw.start_with?("v") ? raw : "v#{raw}"), "#{crate_name}-#{raw}", "#{crate_name}-v#{raw}", "#{crate_name}@#{raw}" ].uniq end |
#github_tag_matches?(tag_name) ⇒ Boolean
88 89 90 91 92 93 |
# File 'lib/gemstar/crates_io_metadata.rb', line 88 def github_tag_matches?(tag_name) decoded = URI.decode_www_form_component(tag_name.to_s.split("?").first.to_s) return true if decoded.match?(/\Av?\d/) decoded.match?(/\A#{Regexp.escape(crate_name)}(?:-|@)v?\d/i) end |
#meta(cache_only: false, force_refresh: false) ⇒ Object
25 26 27 28 29 30 31 32 |
# File 'lib/gemstar/crates_io_metadata.rb', line 25 def (cache_only: false, force_refresh: false) return @meta if !cache_only && defined?(@meta) parsed = (cache_only: cache_only, force_refresh: force_refresh) normalized = (parsed) @meta = normalized unless cache_only normalized end |
#registry_release_dates(cache_only: false, force_refresh: false) ⇒ Object
54 55 56 57 58 59 60 61 62 63 64 65 |
# File 'lib/gemstar/crates_io_metadata.rb', line 54 def registry_release_dates(cache_only: false, force_refresh: false) parsed = (cache_only: cache_only, force_refresh: force_refresh) Array(parsed&.dig("versions")).each_with_object({}) do |version, dates| number = version["num"] created_at = version["created_at"] next if number.to_s.empty? || created_at.to_s.empty? dates[number] = Time.parse(created_at).utc.strftime("%b %-d, %Y") end rescue JSON::ParserError, ArgumentError {} end |
#repo_uri(cache_only: false, force_refresh: false) ⇒ Object
34 35 36 37 38 39 40 41 42 |
# File 'lib/gemstar/crates_io_metadata.rb', line 34 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 = normalize_repo_uri(["source_code_uri"]) @repo_uri = uri unless cache_only uri end |
#warm_cache(versions: nil) ⇒ Object
67 68 69 70 71 |
# File 'lib/gemstar/crates_io_metadata.rb', line 67 def warm_cache(versions: nil) repo_uri changelog_sections(versions: versions) end |