module Terjira::IssuePresenter
Constants
- COMMENTS_SIZE
Public Instance Methods
comments_template()
click to toggle source
# File lib/terjira/presenters/issue_presenter.rb, line 112 def comments_template """ <% remain_comments = issue.comments -%> <% visiable_comments = remain_comments.pop(COMMENTS_SIZE) -%> Comments: <% if visiable_comments.empty? -%> <%= dim_none %> <% elsif remain_comments.size != 0 -%> <%= pastel.dim('- ' + remain_comments.size.to_s + ' previous comments exist -') %> <% end -%> <% visiable_comments.each do |comment| -%> <% id = comment.id -%> <% author = comment.author['displayName'] -%> <% created_at = formatted_date(comment.created) -%> <%= comment.body %> - (ID: <%= id %>) <%= author %> <%= created_at %> <% end -%> """ end
issue_detail_template()
click to toggle source
# File lib/terjira/presenters/issue_presenter.rb, line 60 def issue_detail_template %{<%= bold(issue.key) + ' in ' + issue.project.name %> <%= bold(issue.summary) %> Type: <%= colorize_issue_type(issue.issuetype) %>\s\sStatus: <%= colorize_issue_stastus(issue.status) %>\s\sPriority: <%= colorize_priority(issue.priority, title: true) %> <% if issue.parent.nil? -%> Epic: <%= issue.try(:epic).try(:key) %> <%= issue.try(:epic).try(:name) || dim_none %> <% end -%> <% if issue.try(:parent) && issue.epic.nil? -%> Parent: <%= issue.parent.key %> <% end %> <% if issue.try(:sprint) -%> Sprint: <%= colorize_sprint_state(issue.try(:sprint).try(:state)) %> <%= issue.try(:sprint).try(:id) %>. <%= issue.try(:sprint).try(:name) %> <% end -%> <% if estimate = issue_estimate(issue) -%> <%= estimate[0] %>: <%= estimate[1] %> <% end -%> Assignee: <%= username(issue.assignee) %> Reporter: <%= username(issue.reporter) %> <%= issue.description || dim("No description") %> <% if issue.try(:environment) -%> Environment: <%= issue.environment %> <% end -%> <% if issue.try(:attachment).present? -%> <%= bold('Attachment') %> <%= issue.attachment.map { |item| item['filename'] }.join(", ") %> <% end -%> <% if issue.subtasks.size > 0 -%> <%= bold('SubTasks') %> <% issue.subtasks.each do |subtask| -%> * <%= bold(subtask.key) %> <%= colorize_issue_stastus(subtask.status) %> <%= subtask.summary %> <% end -%> <% end -%> <% if epic_issues.present? -%> <%= bold('Issues in Epic') %> <% epic_issues.each do |epic_issue| -%> * <%= bold(epic_issue.key) %> <%= colorize_issue_stastus(epic_issue.status) %> <%= epic_issue.summary %> <% end -%> <% end -%> } end
render_divided_issues_by_status(issues)
click to toggle source
# File lib/terjira/presenters/issue_presenter.rb, line 28 def render_divided_issues_by_status(issues) extract_status_names(issues).each do |name| selected_issues = issues.select { |issue| issue.status.name == name } title = colorize_issue_stastus(selected_issues.first.status) title += "(#{selected_issues.size})" render(title) render_issues(selected_issues, header: false) end end
render_issue_detail(issue, epic_issues = [])
click to toggle source
# File lib/terjira/presenters/issue_presenter.rb, line 38 def render_issue_detail(issue, epic_issues = []) result = ERB.new(issue_detail_template, nil, '-').result(binding) result += ERB.new(comments_template, nil, '-').result(binding) rows = insert_new_line(result, screen_width - 15) table = TTY::Table.new nil, rows.split("\n").map { |r| [r] } render table.render(:unicode, padding: [0, 1, 0, 1], multiline: true) end
render_issues(issues, opts = {})
click to toggle source
# File lib/terjira/presenters/issue_presenter.rb, line 10 def render_issues(issues, opts = {}) return render('Empty') if issues.blank? header = [pastel.bold('Key'), pastel.bold('Summary')] if opts[:header] rows = issues.map do |issue| [pastel.bold(issue.key), summarise_issue(issue)] end table = TTY::Table.new header, rows table_opts = { padding: [0, 1, 0, 1], multiline: true } result = table.render(:unicode, table_opts) do |renderer| renderer.border.separator = :each_row end render(result) end
summarise_issue(issue)
click to toggle source
# File lib/terjira/presenters/issue_presenter.rb, line 46 def summarise_issue(issue) first_line = [colorize_issue_stastus(issue.status), issue.summary.tr("\t", ' ')].join(' ') second_line = [colorize_priority(issue.priority), colorize_issue_type(issue.issuetype), issue.assignee.try(:name)].join(' ') lines = [first_line, second_line].map do |line| insert_new_line(line, screen_width - 30) end lines.join("\n") end
Private Instance Methods
colorize_issue_stastus(status)
click to toggle source
# File lib/terjira/presenters/issue_presenter.rb, line 152 def colorize_issue_stastus(status) category = status.statusCategory['name'] rescue nil category ||= status.name title = "#{status.name}" color = if category =~ /to\sdo|open/i :blue elsif category =~ /in\sprogress/i :yellow elsif category =~ /done|close/i :green else :magenta end pastel.decorate(title, color, :bold) end
colorize_issue_type(issue_type)
click to toggle source
# File lib/terjira/presenters/issue_presenter.rb, line 136 def colorize_issue_type(issue_type) title = " #{issue_type.name} " background = if title =~ /bug/i :on_red elsif title =~ /task/i :on_blue elsif title =~ /story/i :on_green elsif title =~ /epic/i :on_magenta else :on_cyan end pastel.decorate(title, :white, background, :bold) end
colorize_priority(priority, opts = {})
click to toggle source
# File lib/terjira/presenters/issue_presenter.rb, line 169 def colorize_priority(priority, opts = {}) return '' unless priority.respond_to? :name name = priority.name infos = if name =~ /high|major|critic/i [:red, '⬆'] elsif name =~ /medium|default/i [:yellow, '⬆'] elsif name =~ /minor|low|trivial/i [:green, '⬇'] else [:green, '•'] end title = opts[:title] ? "#{infos[1]} #{name}" : infos[1] pastel.decorate(title, infos[0]) end
extract_status_names(issues)
click to toggle source
# File lib/terjira/presenters/issue_presenter.rb, line 202 def extract_status_names(issues) issue_names = issues.sort_by do |issue| status_key = %w[new indeterminate done] idx = if issue.status.respond_to? :statusCategory status_key.index(issue.status.statusCategory['key']) end idx || status_key.size end issue_names.map { |issue| issue.status.name }.uniq end
issue_estimate(issue)
click to toggle source
Extract estimate or story points @return Array, first element is title and second is value
# File lib/terjira/presenters/issue_presenter.rb, line 187 def issue_estimate(issue) field = Client::Field.story_points story_points = issue.try(field.key) if field.respond_to? :key return ['Story Points', story_points] if story_points return unless issue.try(:timetracking).is_a? Hash if origin = issue.timetracking['originalEstimate'] remain = issue.timetracking['remainingEstimate'] ['Estimate', "#{remain} / #{origin}"] else ['Estimate', dim_none] end end