Class: NTYChangeLog::Parser

Inherits:
Object
  • Object
show all
Defined in:
lib/nty_change_log/parser.rb

Instance Method Summary collapse

Instance Method Details

#parse(text) ⇒ Object



3
4
5
6
# File 'lib/nty_change_log/parser.rb', line 3

def parse(text)
  versions = parse_versions(text.strip)
  ChangeLog.new(versions)
end

#parse_change_groups(text) ⇒ Object



16
17
18
19
20
21
22
# File 'lib/nty_change_log/parser.rb', line 16

def parse_change_groups(text)
  result = text.split(/^### (.+)$/)[1..-1].map(&:strip)
  Hash[*result].map do |name, change_texts|
    changes = parse_changes(change_texts)
    ChangeGroup.new(name, changes)
  end
end

#parse_changes(text) ⇒ Object



24
25
26
27
28
29
30
31
32
33
34
35
# File 'lib/nty_change_log/parser.rb', line 24

def parse_changes(text)
  rows = text.split("\n").map(&:strip)
  rows.map do |row|
    match = row.match(/\*\s+(?<description>\S+)(\s+\[#(?<number>\d+)\]\((?<url>.+)\))?$/)
    if match[:number] == nil
      Change.new(match[:description], nil)
    else
      issue = Issue.new(match[:number].to_i, match[:url])
      Change.new(match[:description], issue)
    end
  end
end

#parse_versions(text) ⇒ Object



8
9
10
11
12
13
14
# File 'lib/nty_change_log/parser.rb', line 8

def parse_versions(text)
  result = text.split(/^## (\w+\.\w+\.\w+)$/)[1..-1].map(&:strip)
  Hash[*result].map do |number, change_group_texts|
    change_groups = parse_change_groups(change_group_texts)
    Version.new(number, change_groups)
  end
end