Class: Gemstar::ChangeLog
- Inherits:
-
Object
- Object
- Gemstar::ChangeLog
- Defined in:
- lib/gemstar/change_log.rb
Constant Summary collapse
- DEFAULT_CHANGELOG_PATHS =
%w[ CHANGELOG.md releases.md CHANGES.md Changelog.md changelog.md ChangeLog.md Changes.md changes.md HISTORY.md History.md history.md History CHANGELOG.rdoc ].freeze
- @@candidates_found =
Hash.new(0)
Instance Attribute Summary collapse
-
#metadata ⇒ Object
readonly
Returns the value of attribute metadata.
Instance Method Summary collapse
- #compute_release_dates(force_refresh: false) ⇒ Object
- #compute_sections(force_refresh: false) ⇒ Object
- #content(cache_only: false, force_refresh: false) ⇒ Object
- #decode_sections(serialized) ⇒ Object
- #extract_relevant_sections(old_version, new_version) ⇒ Object
-
#initialize(metadata) ⇒ ChangeLog
constructor
A new instance of ChangeLog.
- #merge_section_sources(changelog_sections, github_sections) ⇒ Object
- #release_dates(versions: nil, cache_only: false, force_refresh: false) ⇒ Object
- #sections(cache_only: false, force_refresh: false) ⇒ Object
- #sections_for_versions(versions, cache_only: false, force_refresh: false) ⇒ Object
Constructor Details
#initialize(metadata) ⇒ ChangeLog
Returns a new instance of ChangeLog.
18 19 20 |
# File 'lib/gemstar/change_log.rb', line 18 def initialize() @metadata = end |
Instance Attribute Details
#metadata ⇒ Object (readonly)
Returns the value of attribute metadata.
22 23 24 |
# File 'lib/gemstar/change_log.rb', line 22 def @metadata end |
Instance Method Details
#compute_release_dates(force_refresh: false) ⇒ Object
123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 |
# File 'lib/gemstar/change_log.rb', line 123 def compute_release_dates(force_refresh: false) registry_dates = if @metadata.respond_to?(:registry_release_dates) @metadata.registry_release_dates(cache_only: false, force_refresh: force_refresh) else {} end return registry_dates unless registry_dates.nil? || registry_dates.empty? changelog_dates = parse_changelog_release_dates(cache_only: false, force_refresh: force_refresh) return changelog_dates unless changelog_dates.nil? || changelog_dates.empty? repo_uri = @metadata&.repo_uri(cache_only: false, force_refresh: force_refresh) return {} unless repo_uri&.include?("github.com") parse_github_tag_dates(repo_uri, cache_only: false, force_refresh: force_refresh) end |
#compute_sections(force_refresh: false) ⇒ Object
112 113 114 115 116 117 118 119 120 121 |
# File 'lib/gemstar/change_log.rb', line 112 def compute_sections(force_refresh: false) changelog_sections = parse_changelog_sections(cache_only: false, force_refresh: force_refresh) || {} github_sections = parse_github_release_sections(cache_only: false, force_refresh: force_refresh) || {} sections = merge_section_sources(changelog_sections, github_sections) pp @@candidates_found if Gemstar.debug? sections end |
#content(cache_only: false, force_refresh: false) ⇒ Object
24 25 26 27 28 29 30 |
# File 'lib/gemstar/change_log.rb', line 24 def content(cache_only: false, force_refresh: false) return @content if !cache_only && defined?(@content) result = fetch_changelog_content(cache_only: cache_only, force_refresh: force_refresh) @content = result unless cache_only result end |
#decode_sections(serialized) ⇒ Object
140 141 142 143 144 |
# File 'lib/gemstar/change_log.rb', line 140 def decode_sections(serialized) JSON.parse(serialized) rescue JSON::ParserError nil end |
#extract_relevant_sections(old_version, new_version) ⇒ Object
151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 |
# File 'lib/gemstar/change_log.rb', line 151 def extract_relevant_sections(old_version, new_version) from = Gem::Version.new(old_version.gsub(/-[\w\-]+$/, "")) rescue nil if old_version from ||= Gem::Version.new("0.0.0") to = Gem::Version.new(new_version.gsub(/-[\w\-]+$/, "")) rescue nil if new_version to ||= Gem::Version.new("9999.9999.9999") sections.select do |version, _| v = Gem::Version.new(version.gsub(/-[\w\-]+$/, "")) v > from && v <= to rescue => e false end.sort_by do |k, _| Gem::Version.new(k.gsub(/-[\w\-]+$/, "")) rescue => e Gem::Version.new("0.0.0") end.reverse.to_h end |
#merge_section_sources(changelog_sections, github_sections) ⇒ Object
146 147 148 149 |
# File 'lib/gemstar/change_log.rb', line 146 def merge_section_sources(changelog_sections, github_sections) return github_sections if changelog_sections.nil? || changelog_sections.empty? changelog_sections end |
#release_dates(versions: nil, cache_only: false, force_refresh: false) ⇒ Object
87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 |
# File 'lib/gemstar/change_log.rb', line 87 def release_dates(versions: nil, cache_only: false, force_refresh: false) requested_versions = normalize_requested_versions(versions) = @metadata.respond_to?(:cache_key) ? @metadata.cache_key : @metadata.gem_name cache_key = "release-dates-v2-#{}" serialized = if cache_only Cache.peek(cache_key) else Cache.fetch(cache_key, force: force_refresh) do JSON.generate(compute_release_dates(force_refresh: force_refresh)) end end dates = if serialized decode_sections(serialized) || {} elsif cache_only {} else compute_release_dates(force_refresh: force_refresh) end return dates if requested_versions.empty? dates.select { |version, _date| requested_versions.include?(normalize_version_key(version)) } end |
#sections(cache_only: false, force_refresh: false) ⇒ Object
32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
# File 'lib/gemstar/change_log.rb', line 32 def sections(cache_only: false, force_refresh: false) return @sections if !cache_only && defined?(@sections) && !force_refresh = @metadata.respond_to?(:cache_key) ? @metadata.cache_key : @metadata.gem_name cache_key = "sections-v5-#{}" serialized = if cache_only Cache.peek(cache_key) else Cache.fetch(cache_key, force: force_refresh) do JSON.generate(compute_sections(force_refresh: force_refresh)) end end result = if serialized decode_sections(serialized) elsif cache_only nil else compute_sections(force_refresh: force_refresh) end @sections = result unless cache_only result end |
#sections_for_versions(versions, cache_only: false, force_refresh: false) ⇒ Object
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 |
# File 'lib/gemstar/change_log.rb', line 57 def sections_for_versions(versions, cache_only: false, force_refresh: false) requested_versions = normalize_requested_versions(versions) return {} if requested_versions.empty? cached_sections = sections(cache_only: true) || {} result = cached_sections.select { |version, _| requested_versions.include?(normalize_version_key(version)) } return result if cache_only changelog_sections = parse_changelog_sections(cache_only: false, force_refresh: force_refresh) || {} changelog_sections.each do |version, lines| result[version] ||= lines if requested_versions.include?(normalize_version_key(version)) end repo_uri = @metadata&.repo_uri(cache_only: false, force_refresh: force_refresh) if repo_uri&.include?("github.com") missing_versions = requested_versions - result.keys.map { |version| normalize_version_key(version) } missing_versions.each do |version| specific_release = parse_specific_github_release_pages( repo_uri, version, cache_only: false, force_refresh: force_refresh ) result.merge!(specific_release) if specific_release end end result end |