class Octaccord::Formatter::Issue

Public Class Methods

new(issue) click to toggle source
# File lib/octaccord/formatter/issue.rb, line 4
def initialize(issue)
  @resource = issue
end

Public Instance Methods

assignee() click to toggle source
# File lib/octaccord/formatter/issue.rb, line 22
def assignee
  User.new(@resource.assignee) if @resource.assignee
end
avatar() click to toggle source
# File lib/octaccord/formatter/issue.rb, line 26
def avatar
  if @resource.assignee
    return self.assignee.avatar
  end
  return ":grey_question:"
end
comments() click to toggle source
# File lib/octaccord/formatter/issue.rb, line 59
def comments
  # https://github.com/octokit/octokit.rb#uri-templates
  comments = []

  STDERR.puts "* issue comments: #{@resource.rels[:comments].href}"

  @resource.rels[:comments].get.data.each do |c|
    comments << adjust_indent(c.body)
  end
  return comments.join
end
cost() click to toggle source
# File lib/octaccord/formatter/issue.rb, line 99
def cost
  extract_section(@resource.body, "Cost")
end
created_at() click to toggle source
# File lib/octaccord/formatter/issue.rb, line 83
def created_at
  @resource.created_at.localtime
end
demo() click to toggle source
# File lib/octaccord/formatter/issue.rb, line 95
def demo
  extract_section(@resource.body, "Demo")
end
labels() click to toggle source
# File lib/octaccord/formatter/issue.rb, line 75
def labels
  @resource.labels.map{|label| label.name}.join(',')
end
milestone() click to toggle source
# File lib/octaccord/formatter/issue.rb, line 79
def milestone
  if @resource.milestone then "#{@resource.milestone.title}" else nil end
end
number() click to toggle source
# File lib/octaccord/formatter/issue.rb, line 50
def number
  "#{@resource.number}"
end
pr() click to toggle source
# File lib/octaccord/formatter/issue.rb, line 33
def pr
  if @resource.pull_request then ":arrow_upper_left:" else nil end
end
references() click to toggle source
# File lib/octaccord/formatter/issue.rb, line 37
def references
  @resource.body.scan(/#(\d+)/).map{|d| d.first.to_i}
end
status() click to toggle source
# File lib/octaccord/formatter/issue.rb, line 8
def status
  return ":parking:" if labels =~ /PBL/
  # return ":white_check_mark:" if @resource.state == "closed"
  return ":arrow_upper_left:" if @resource.pull_request
  return avatar if @resource.assignee
  days = ((Time.now - @resource.updated_at) / (24*3600)).to_i
  return ":ghost:" if days > 60
  return ":grey_question:"
end
story() click to toggle source
# File lib/octaccord/formatter/issue.rb, line 91
def story
  extract_section(@resource.body, "Story")
end
summary() click to toggle source
# File lib/octaccord/formatter/issue.rb, line 41
def summary
  "##{@resource.number} #{@resource.title}" + (labels != "" ? " (#{labels})" : "")
end
title() click to toggle source
# File lib/octaccord/formatter/issue.rb, line 71
def title
  if @resource.state == "closed" then "~~#{@resource.title}~~" else @resource.title end
end
updated_at() click to toggle source
# File lib/octaccord/formatter/issue.rb, line 87
def updated_at
  @resource.updated_at.localtime
end
user() click to toggle source
# File lib/octaccord/formatter/issue.rb, line 18
def user
  User.new(@resource.user) if @resource.user
end

Private Instance Methods

adjust_indent(body) click to toggle source
# File lib/octaccord/formatter/issue.rb, line 123
def adjust_indent(body)
  new_body = ""
  body.split(/\r?\n/).each do |line|
    line = "#####" + line if line =~ /^\#+/
    new_body << line + "\n"
  end
  return new_body
end
extract_section(lines, heading) click to toggle source
# File lib/octaccord/formatter/issue.rb, line 105
def extract_section(lines, heading)
  in_section, body = false, ""
  regexp_in  = /^(\#+)\s+#{heading}/
  regexp_out = nil

  lines.split(/\r?\n/).each do |line|
    if regexp_in.match(line)
      level, in_section = $1.length, true
      regexp_out = /^\#{#{level}}\s+/
      next
    end

    in_section = false if in_section and regexp_out.match(line)
    body << line + "\n" if in_section
  end
  return body.to_s.gsub(/\r?\n/, ' ')
end