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_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
- #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.
16 17 18 |
# File 'lib/gemstar/change_log.rb', line 16 def initialize() @metadata = end |
Instance Attribute Details
#metadata ⇒ Object (readonly)
Returns the value of attribute metadata.
20 21 22 |
# File 'lib/gemstar/change_log.rb', line 20 def @metadata end |
Instance Method Details
#compute_sections(force_refresh: false) ⇒ Object
85 86 87 88 89 90 91 92 93 94 |
# File 'lib/gemstar/change_log.rb', line 85 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
22 23 24 25 26 27 28 |
# File 'lib/gemstar/change_log.rb', line 22 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
96 97 98 99 100 |
# File 'lib/gemstar/change_log.rb', line 96 def decode_sections(serialized) JSON.parse(serialized) rescue JSON::ParserError nil end |
#extract_relevant_sections(old_version, new_version) ⇒ Object
109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 |
# File 'lib/gemstar/change_log.rb', line 109 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
102 103 104 105 106 107 |
# File 'lib/gemstar/change_log.rb', line 102 def merge_section_sources(changelog_sections, github_sections) return github_sections if changelog_sections.nil? || changelog_sections.empty? return changelog_sections if github_sections.nil? || github_sections.empty? github_sections.merge(changelog_sections) end |
#sections(cache_only: false, force_refresh: false) ⇒ Object
30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
# File 'lib/gemstar/change_log.rb', line 30 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-v4-#{}" 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
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 |
# File 'lib/gemstar/change_log.rb', line 55 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 |