Class: Gemstar::RubyGemsMetadata
- Inherits:
-
Object
- Object
- Gemstar::RubyGemsMetadata
- Defined in:
- lib/gemstar/ruby_gems_metadata.rb
Constant Summary collapse
- RUBY_GEMS_METADATA_PATH =
File.("data/ruby_gems_metadata.json", __dir__)
Instance Attribute Summary collapse
-
#gem_name ⇒ Object
readonly
Returns the value of attribute gem_name.
Class Method Summary collapse
Instance Method Summary collapse
- #cache_key ⇒ Object
- #changelog_sections(versions: nil, cache_only: false, force_refresh: false) ⇒ Object
- #changelog_source(repo_uri:, cache_only: false, force_refresh: false) ⇒ Object
- #discover_github_tag_sections? ⇒ Boolean
- #github_tag_candidates(version) ⇒ Object
- #github_tag_matches?(tag_name) ⇒ Boolean
-
#initialize(gem_name) ⇒ RubyGemsMetadata
constructor
A new instance of RubyGemsMetadata.
- #meta(cache_only: false, force_refresh: false) ⇒ Object
- #package_metadata ⇒ Object
- #repo_uri(cache_only: false, force_refresh: false) ⇒ Object
- #warm_cache(versions: nil) ⇒ Object
Constructor Details
#initialize(gem_name) ⇒ RubyGemsMetadata
Returns a new instance of RubyGemsMetadata.
10 11 12 |
# File 'lib/gemstar/ruby_gems_metadata.rb', line 10 def initialize(gem_name) @gem_name = gem_name end |
Instance Attribute Details
#gem_name ⇒ Object (readonly)
Returns the value of attribute gem_name.
14 15 16 |
# File 'lib/gemstar/ruby_gems_metadata.rb', line 14 def gem_name @gem_name end |
Class Method Details
.package_metadata ⇒ Object
16 17 18 19 20 21 22 |
# File 'lib/gemstar/ruby_gems_metadata.rb', line 16 def self. @package_metadata ||= begin JSON.parse(File.read(RUBY_GEMS_METADATA_PATH)) rescue Errno::ENOENT, JSON::ParserError {} end end |
Instance Method Details
#cache_key ⇒ Object
24 25 26 |
# File 'lib/gemstar/ruby_gems_metadata.rb', line 24 def cache_key "rubygems-#{gem_name}" end |
#changelog_sections(versions: nil, cache_only: false, force_refresh: false) ⇒ Object
89 90 91 |
# File 'lib/gemstar/ruby_gems_metadata.rb', line 89 def changelog_sections(versions: nil, cache_only: false, force_refresh: false) Gemstar::ChangeLog.new(self).sections(cache_only: cache_only, force_refresh: force_refresh) end |
#changelog_source(repo_uri:, cache_only: false, force_refresh: false) ⇒ Object
112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 |
# File 'lib/gemstar/ruby_gems_metadata.rb', line 112 def changelog_source(repo_uri:, cache_only: false, force_refresh: false) override = .dig("changelog") if override override_paths = Array(override["paths"]).compact override_branches = Array(override["branches"]).compact override_branches = [""] if override_branches.empty? && override["raw_base"] return { base: (override["raw_base"] || github_raw_base(repo_uri)), paths: override_paths.empty? ? Gemstar::ChangeLog::DEFAULT_CHANGELOG_PATHS : override_paths, branches: override_branches.empty? ? RemoteRepository.new(github_raw_base(repo_uri)).find_main_branch(cache_only: cache_only, force_refresh: force_refresh) : override_branches } end base = github_raw_base(repo_uri) { base: base, paths: Gemstar::ChangeLog::DEFAULT_CHANGELOG_PATHS, branches: RemoteRepository.new(base).find_main_branch(cache_only: cache_only, force_refresh: force_refresh) } end |
#discover_github_tag_sections? ⇒ Boolean
99 100 101 |
# File 'lib/gemstar/ruby_gems_metadata.rb', line 99 def discover_github_tag_sections? false end |
#github_tag_candidates(version) ⇒ Object
103 104 105 106 |
# File 'lib/gemstar/ruby_gems_metadata.rb', line 103 def github_tag_candidates(version) raw = version.to_s [raw, (raw.start_with?("v") ? raw : "v#{raw}")].uniq end |
#github_tag_matches?(tag_name) ⇒ Boolean
108 109 110 |
# File 'lib/gemstar/ruby_gems_metadata.rb', line 108 def github_tag_matches?(tag_name) true end |
#meta(cache_only: false, force_refresh: false) ⇒ Object
28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
# File 'lib/gemstar/ruby_gems_metadata.rb', line 28 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://rubygems.org/api/v1/gems/#{URI.encode_www_form_component(gem_name)}.json" Cache.fetch(cache_key, force: force_refresh) do URI.open(url).read end end parsed = begin JSON.parse(json) if json rescue nil end @meta = parsed unless cache_only parsed end |
#package_metadata ⇒ Object
133 134 135 136 137 |
# File 'lib/gemstar/ruby_gems_metadata.rb', line 133 def self.class..find do |pattern, | File.fnmatch?(pattern, gem_name) end&.last || {} end |
#repo_uri(cache_only: false, force_refresh: false) ⇒ Object
50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 |
# File 'lib/gemstar/ruby_gems_metadata.rb', line 50 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) repo = begin uri = ["source_code_uri"] if uri.nil? uri = ["homepage_uri"] if uri&.include?("github.com") uri = uri[%r{http[s?]://github\.com/[^/]+/[^/]+}] end end uri ||= "" uri = uri.sub("http://", "https://") uri = uri.gsub(/\.git$/, "") if uri.include?("github.io") uri = uri.sub(%r{\Ahttps?://([\w-]+)\.github\.io/([^/]+)}) do "https://github.com/#{$1}/#{$2}" end end if uri.include?("github.com") uri = uri[%r{\Ahttps?://github\.com/[^/]+/[^/]+}] || uri end uri end @repo_uri = repo unless cache_only repo end |
#warm_cache(versions: nil) ⇒ Object
93 94 95 96 97 |
# File 'lib/gemstar/ruby_gems_metadata.rb', line 93 def warm_cache(versions: nil) repo_uri changelog_sections(versions: versions) end |