class Vandamme::Parser
Constants
- DEFAULT_REGEXP
Public Class Methods
new(options={})
click to toggle source
Create a new changelog parser
Options:
changelog
-
Changelog content as a
String
.
version_header_exp
(optional)-
regexp to match the starting line of version.
Defaults to /^#{0,3} ?([wd.-]+.+[a-zA-Z0-9])(?: / (w+ d{1,2}(?:st|nd|rd|th)?,sd{4}|d{4}-d{2}-d{2}|w+))?n?*/ See tech-angels.github.com/vandamme/#changelogs-convention
format
(optional)-
One of “raw”, “markdown”, “rdoc”
# File lib/vandamme/parser.rb, line 20 def initialize(options={}) @changelog = options.fetch :changelog regexp = options[:version_header_exp] || DEFAULT_REGEXP @version_header_exp = regexp.is_a?(Regexp) ? regexp : Regexp.new(/#{regexp}/) @match_group = options[:match_group] || 0 @format = options[:format] || :raw @changelog_hash = {} end
Public Instance Methods
parse → aHash
click to toggle source
Parse changelog file, filling +@changelog_hash+ with versions as keys, and version changelog as content.
# File lib/vandamme/parser.rb, line 35 def parse @changelog.scan(@version_header_exp) do |match| version_content = $~.post_match changelog_scanner = StringScanner.new(version_content) changelog_scanner.scan_until(@version_header_exp) @changelog_hash[match[@match_group]] = (changelog_scanner.pre_match || version_content).gsub(/(\A\n+|\n+\z)/, '') end @changelog_hash end
to_html()
click to toggle source
Convert @changelog_hash content to html using GitHub::Markup
. The +@format+ is used to determine the input format (should be one of: “rdoc”, “md”, 'markdown“, ”raw“, etc.) See github.com/github/markup/blob/master/lib/github/markups.rb for more formats. The corresponding gem must be bundled.
# File lib/vandamme/parser.rb, line 50 def to_html self.parse if @changelog_hash.empty? # GitHub Markup API is really weird, we MUST pass a file name for format detection as 1st arg: @changelog_hash.inject({}) { |h,(k,v)| h[k] = GitHub::Markup.render(".#{@format}", v); h } end