Class: Githuh::CLI::Commands::Issue::Export
- Defined in:
- lib/githuh/cli/commands/issue/export.rb
Direct Known Subclasses
Constant Summary collapse
- FORMATS =
{ json: 'json', csv: 'csv' }.freeze
- DEFAULT_FORMAT =
:csv
- DEFAULT_OUTPUT_FORMAT =
"<username>.<repo>.issues.<format>"
- CSV_MAP =
{ 'Labels' => ->(_client, issue) { issue_labels(issue).reject { |l| LABEL_ESTIMATES.key?(l) }.join(',').downcase }, 'Type' => ->(*) { 'feature' }, 'Estimate' => ->(_client, issue) do el = issue_labels(issue).find { |l| LABEL_ESTIMATES.key?(l) } el ? LABEL_ESTIMATES[el] : nil end, 'Current State' => ->(*) { 'unstarted' }, 'Requested By' => ->(client, issue) do find_user(client, issue.user.login) end, 'Owned By' => ->(client, issue) do find_user(client, issue.user.login) end, 'Description' => ->(_client, issue) { issue.body }, 'Created at' => ->(_client, issue) { issue.created_at }, }.freeze
- LABEL_ESTIMATES =
{ 'XXL(13 eng day)' => 15, 'XL(8 eng day)' => 15, 'xs(<=1 eng day)' => 3, 'L(5 eng day)' => 15, 'm(3 eng day)' => 9, 's(2 eng day)' => 6 }.freeze
- CSV_HEADER =
%w(Id Title Labels Type Estimate) + ['Current State', 'Created at', 'Accepted at', 'Deadline', 'Requested By', 'Owned By', 'Description', 'Comment', 'Comment', 'Comment', 'Comment'].freeze
Instance Attribute Summary collapse
-
#file ⇒ Object
Returns the value of attribute file.
-
#filename ⇒ Object
Returns the value of attribute filename.
-
#format ⇒ Object
Returns the value of attribute format.
-
#issues ⇒ Object
Returns the value of attribute issues.
-
#output ⇒ Object
Returns the value of attribute output.
-
#record_count ⇒ Object
Returns the value of attribute record_count.
-
#repo ⇒ Object
Returns the value of attribute repo.
Attributes inherited from Base
#box, #client, #context, #info, #per_page, #token, #verbose
Class Method Summary collapse
Instance Method Summary collapse
- #bar_size ⇒ Object
- #call(repo: nil, file: nil, format: nil, **opts) ⇒ Object
- #default_options ⇒ Object
- #fetch_issues ⇒ Object
- #filter_issues(issues_list) ⇒ Object
-
#render_as_csv(issue_list) ⇒ Object
Id,Title,Labels,Type,Estimate,Current State,Created at,Accepted at,Deadline,Requested By,Owned By,Description,Comment,Comment 100, existing started story,“label one,label two”,feature,1,started,“Nov 22, 2007”,,,user1,user2,this will update story 100,, ,new story,label one,feature,-1,unscheduled,,,,user1,,this will create a new story in the icebox,comment1,comment2.
- #render_as_json(issue_list) ⇒ Object
Methods inherited from Base
Instance Attribute Details
#file ⇒ Object
Returns the value of attribute file.
27 28 29 |
# File 'lib/githuh/cli/commands/issue/export.rb', line 27 def file @file end |
#filename ⇒ Object
Returns the value of attribute filename.
27 28 29 |
# File 'lib/githuh/cli/commands/issue/export.rb', line 27 def filename @filename end |
#format ⇒ Object
Returns the value of attribute format.
27 28 29 |
# File 'lib/githuh/cli/commands/issue/export.rb', line 27 def format @format end |
#issues ⇒ Object
Returns the value of attribute issues.
27 28 29 |
# File 'lib/githuh/cli/commands/issue/export.rb', line 27 def issues @issues end |
#output ⇒ Object
Returns the value of attribute output.
27 28 29 |
# File 'lib/githuh/cli/commands/issue/export.rb', line 27 def output @output end |
#record_count ⇒ Object
Returns the value of attribute record_count.
27 28 29 |
# File 'lib/githuh/cli/commands/issue/export.rb', line 27 def record_count @record_count end |
#repo ⇒ Object
Returns the value of attribute repo.
27 28 29 |
# File 'lib/githuh/cli/commands/issue/export.rb', line 27 def repo @repo end |
Class Method Details
.find_user(client, username) ⇒ Object
89 90 91 92 |
# File 'lib/githuh/cli/commands/issue/export.rb', line 89 def self.find_user(client, username) @user_cache ||= {} @user_cache[username] ||= client.user(username).name end |
.issue_labels(issue) ⇒ Object
85 86 87 |
# File 'lib/githuh/cli/commands/issue/export.rb', line 85 def self.issue_labels(issue) issue.labels.map(&:name) end |
Instance Method Details
#bar_size ⇒ Object
77 78 79 |
# File 'lib/githuh/cli/commands/issue/export.rb', line 77 def record_count + 1 end |
#call(repo: nil, file: nil, format: nil, **opts) ⇒ Object
36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 |
# File 'lib/githuh/cli/commands/issue/export.rb', line 36 def call(repo: nil, file: nil, format: nil, **opts) super(**opts) self.record_count = 0 self.repo = repo raise ArgumentError, "argument <repo> is required" unless repo raise ArgumentError, "argument <repo> is not a repository, expected eg 'rails/rails'" unless repo =~ %r{/} self.issues = [] self.output = StringIO.new self.format = (format || DEFAULT_FORMAT).to_sym self.filename = file || file_name(repo) self.file = File.open(filename, 'w') print_summary # —————————— actually get all issues ——————————————— self.file.write send("render_as_#{format}", fetch_issues) # ———————————————————————————————————————————————————————— print_conclusion ensure file.close if file.respond_to?(:close) && !file.closed? end |
#default_options ⇒ Object
81 82 83 |
# File 'lib/githuh/cli/commands/issue/export.rb', line 81 def { state: 'open' } end |
#fetch_issues ⇒ Object
63 64 65 66 67 68 69 |
# File 'lib/githuh/cli/commands/issue/export.rb', line 63 def fetch_issues client.auto_paginate = true self.issues = filter_issues(client.issues(repo, query: )).tap do |issue_list| self.record_count = issue_list.size ('Issues')&.advance end end |
#filter_issues(issues_list) ⇒ Object
71 72 73 74 75 |
# File 'lib/githuh/cli/commands/issue/export.rb', line 71 def filter_issues(issues_list) issues_list.reject do |issue| issue.html_url =~ /pull/ end end |
#render_as_csv(issue_list) ⇒ Object
Id,Title,Labels,Type,Estimate,Current State,Created at,Accepted at,Deadline,Requested By,Owned By,Description,Comment,Comment 100, existing started story,“label one,label two”,feature,1,started,“Nov 22, 2007”,,,user1,user2,this will update story 100,, ,new story,label one,feature,-1,unscheduled,,,,user1,,this will create a new story in the icebox,comment1,comment2
130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 |
# File 'lib/githuh/cli/commands/issue/export.rb', line 130 def render_as_csv(issue_list) # puts "rendering issues as CVS:" # pp issue_list ::CSV.generate do |csv| csv << CSV_HEADER issue_list.each do |issue| row = [] CSV_HEADER.each do |column| method = column.downcase.underscore.to_sym value = if CSV_MAP[column] CSV_MAP[column][client, issue] else begin issue.to_h[method] rescue StandardError nil end end value = value.strip if value.is_a?(String) row << value end csv << row &.advance end .finish end end |
#render_as_json(issue_list) ⇒ Object
158 159 160 |
# File 'lib/githuh/cli/commands/issue/export.rb', line 158 def render_as_json(issue_list) JSON.pretty_generate(issue_list.map(&:to_h)) end |