gemstar 1.0.2 → 1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,23 +1,38 @@
1
1
  require "open-uri"
2
2
  require "uri"
3
3
  require "json"
4
+ require_relative "remote_repository"
4
5
 
5
6
  module Gemstar
6
7
  class RubyGemsMetadata
8
+ RUBY_GEMS_METADATA_PATH = File.expand_path("data/ruby_gems_metadata.json", __dir__)
9
+
7
10
  def initialize(gem_name)
8
11
  @gem_name = gem_name
9
12
  end
10
13
 
11
14
  attr_reader :gem_name
12
15
 
16
+ def self.package_metadata
17
+ @package_metadata ||= begin
18
+ JSON.parse(File.read(RUBY_GEMS_METADATA_PATH))
19
+ rescue Errno::ENOENT, JSON::ParserError
20
+ {}
21
+ end
22
+ end
23
+
24
+ def cache_key
25
+ "rubygems-#{gem_name}"
26
+ end
27
+
13
28
  def meta(cache_only: false, force_refresh: false)
14
29
  return @meta if !cache_only && defined?(@meta)
15
30
 
16
31
  json = if cache_only
17
- Cache.peek("rubygems-#{gem_name}")
32
+ Cache.peek(cache_key)
18
33
  else
19
34
  url = "https://rubygems.org/api/v1/gems/#{URI.encode_www_form_component(gem_name)}.json"
20
- Cache.fetch("rubygems-#{gem_name}", force: force_refresh) do
35
+ Cache.fetch(cache_key, force: force_refresh) do
21
36
  URI.open(url).read
22
37
  end
23
38
  end
@@ -71,5 +86,65 @@ module Gemstar
71
86
  repo
72
87
  end
73
88
 
89
+ def changelog_sections(versions: nil, cache_only: false, force_refresh: false)
90
+ Gemstar::ChangeLog.new(self).sections(cache_only: cache_only, force_refresh: force_refresh)
91
+ end
92
+
93
+ def warm_cache(versions: nil)
94
+ meta
95
+ repo_uri
96
+ changelog_sections(versions: versions)
97
+ end
98
+
99
+ def discover_github_tag_sections?
100
+ false
101
+ end
102
+
103
+ def github_tag_candidates(version)
104
+ raw = version.to_s
105
+ [raw, (raw.start_with?("v") ? raw : "v#{raw}")].uniq
106
+ end
107
+
108
+ def github_tag_matches?(tag_name)
109
+ true
110
+ end
111
+
112
+ def changelog_source(repo_uri:, cache_only: false, force_refresh: false)
113
+ override = package_metadata.dig("changelog")
114
+ if override
115
+ override_paths = Array(override["paths"]).compact
116
+ override_branches = Array(override["branches"]).compact
117
+ override_branches = [""] if override_branches.empty? && override["raw_base"]
118
+ return {
119
+ base: expand_metadata_template(override["raw_base"] || github_raw_base(repo_uri)),
120
+ paths: override_paths.empty? ? Gemstar::ChangeLog::DEFAULT_CHANGELOG_PATHS : override_paths,
121
+ branches: override_branches.empty? ? RemoteRepository.new(github_raw_base(repo_uri)).find_main_branch(cache_only: cache_only, force_refresh: force_refresh) : override_branches
122
+ }
123
+ end
124
+
125
+ base = github_raw_base(repo_uri)
126
+ {
127
+ base: base,
128
+ paths: Gemstar::ChangeLog::DEFAULT_CHANGELOG_PATHS,
129
+ branches: RemoteRepository.new(base).find_main_branch(cache_only: cache_only, force_refresh: force_refresh)
130
+ }
131
+ end
132
+
133
+ def package_metadata
134
+ self.class.package_metadata.find do |pattern, _metadata|
135
+ File.fnmatch?(pattern, gem_name)
136
+ end&.last || {}
137
+ end
138
+
139
+ private
140
+
141
+ def github_raw_base(repo_uri)
142
+ repo_uri.sub("https://github.com", "https://raw.githubusercontent.com").chomp("/")
143
+ end
144
+
145
+ def expand_metadata_template(value)
146
+ value.to_s.gsub("{gem_name}", gem_name)
147
+ end
148
+
74
149
  end
75
150
  end
@@ -1,8 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Gemstar # :nodoc:
4
- VERSION = "1.0.2"
5
-
4
+ VERSION = "1.1"
6
5
  def self.debug?
7
6
  return @debug if defined?(@debug)
8
7
  @debug = ENV["GEMSTAR_DEBUG"] == "true"