class Keepachangelog::MarkdownPrinter
Attributes
options[RW]
versions[RW]
Public Class Methods
new(versions, options = {})
click to toggle source
# File lib/keepachangelog/printer/markdown.rb, line 6 def initialize(versions, options = {}) self.options = options self.versions = versions end
Public Instance Methods
to_s()
click to toggle source
# File lib/keepachangelog/printer/markdown.rb, line 11 def to_s [ "# #{options[:title] || default_title}", clean_intro(options[:intro]) || default_intro, '', parse_versions(versions), anchors ].flatten.join("\n") end
Private Instance Methods
anchor(v, i)
click to toggle source
# File lib/keepachangelog/printer/markdown.rb, line 75 def anchor(v, i) from_v = i == v.length - 1 ? first_commit : v[i + 1] to_v = Gem::Version.correct?(v[i]) ? v[i] : 'HEAD' "[#{v[i]}]: #{options[:url]}/compare/#{from_v}...#{to_v}" end
anchors()
click to toggle source
# File lib/keepachangelog/printer/markdown.rb, line 69 def anchors return nil unless options[:url] v = versions.keys.sort { |a, b| compare_versions(a, b) }.reverse (0..v.length - 1).map { |i| anchor(v, i) } end
change(content)
click to toggle source
# File lib/keepachangelog/printer/markdown.rb, line 81 def change(content) "- #{content}" end
clean_intro(text)
click to toggle source
# File lib/keepachangelog/printer/markdown.rb, line 40 def clean_intro(text) return nil unless text text.to_s.strip end
compare_sections(a, b)
click to toggle source
# File lib/keepachangelog/printer/markdown.rb, line 45 def compare_sections(a, b) if options[:section_order] options[:section_order].index(a) <=> options[:section_order].index(b) else a <=> b end end
compare_versions(a, b)
click to toggle source
# File lib/keepachangelog/printer/markdown.rb, line 28 def compare_versions(a, b) if Gem::Version.correct?(a) && Gem::Version.correct?(b) Gem::Version.new(a) <=> Gem::Version.new(b) elsif Gem::Version.correct?(a) -1 elsif Gem::Version.correct?(b) 1 else a <=> b end end
default_intro()
click to toggle source
# File lib/keepachangelog/printer/markdown.rb, line 89 def default_intro "All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](http://keepachangelog.com/) and this project adheres to [Semantic Versioning](http://semver.org/)." end
default_title()
click to toggle source
# File lib/keepachangelog/printer/markdown.rb, line 85 def default_title 'Change log' end
first_commit()
click to toggle source
# File lib/keepachangelog/printer/markdown.rb, line 96 def first_commit `git rev-parse --short $(git rev-list --max-parents=0 HEAD) 2>/dev/null` .strip end
parse_versions(versions)
click to toggle source
# File lib/keepachangelog/printer/markdown.rb, line 23 def parse_versions(versions) versions.sort { |a, b| compare_versions(a[0], b[0]) } .reverse_each.map { |k, v| version(k, v) } end
section(header, content)
click to toggle source
# File lib/keepachangelog/printer/markdown.rb, line 61 def section(header, content) [ "### #{header}", content.sort.map { |c| change(c) }, '' ] end
version(header, content)
click to toggle source
# File lib/keepachangelog/printer/markdown.rb, line 53 def version(header, content) [ version_header(header, content['date']), content['changes'].sort { |a, b| compare_sections(a[0], b[0]) } .map { |k, v| section(k, v) } ] end
version_header(version, date)
click to toggle source
# File lib/keepachangelog/printer/markdown.rb, line 101 def version_header(version, date) header = version header = "[#{header}]" if options[:url] header += " - #{date}" if date "## #{header}" end