Class: Gemstar::CratesIOMetadata

Inherits:
Object
  • Object
show all
Defined in:
lib/gemstar/crates_io_metadata.rb

Constant Summary collapse

USER_AGENT =
"gemstar/#{Gemstar::VERSION} (+https://github.com/FDj/gemstar)"

Instance Attribute Summary collapse

Instance Method Summary collapse

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_nameObject (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_keyObject



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

Returns:

  • (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

Returns:

  • (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 meta(cache_only: false, force_refresh: false)
  return @meta if !cache_only && defined?(@meta)

  parsed = raw_meta(cache_only: cache_only, force_refresh: force_refresh)
  normalized = normalize_meta(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 = raw_meta(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)
  resolved_meta = meta(cache_only: cache_only, force_refresh: force_refresh)
  return nil unless resolved_meta
  return @repo_uri if !cache_only && defined?(@repo_uri)

  uri = normalize_repo_uri(resolved_meta["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)
  meta
  repo_uri
  changelog_sections(versions: versions)
end