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| LabelEstimates.key?(l) }.join(",").downcase }, "Type" => ->(*) { "feature" }, "Estimate" => ->(_client, issue) do el = issue_labels(issue).find { |l| LabelEstimates.key?(l) } el ? LabelEstimates[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
- 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.
-
#mapping ⇒ Object
Returns the value of attribute mapping.
-
#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, #context, #info, #per_page, #token, #verbose
Class Method Summary collapse
Instance Method Summary collapse
- #bar_size ⇒ Object
- #call(repo: nil, file: nil, format: nil, mapping: 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.
28 29 30 |
# File 'lib/githuh/cli/commands/issue/export.rb', line 28 def file @file end |
#filename ⇒ Object
Returns the value of attribute filename.
28 29 30 |
# File 'lib/githuh/cli/commands/issue/export.rb', line 28 def filename @filename end |
#format ⇒ Object
Returns the value of attribute format.
28 29 30 |
# File 'lib/githuh/cli/commands/issue/export.rb', line 28 def format @format end |
#issues ⇒ Object
Returns the value of attribute issues.
28 29 30 |
# File 'lib/githuh/cli/commands/issue/export.rb', line 28 def issues @issues end |
#mapping ⇒ Object
Returns the value of attribute mapping.
28 29 30 |
# File 'lib/githuh/cli/commands/issue/export.rb', line 28 def mapping @mapping end |
#output ⇒ Object
Returns the value of attribute output.
28 29 30 |
# File 'lib/githuh/cli/commands/issue/export.rb', line 28 def output @output end |
#record_count ⇒ Object
Returns the value of attribute record_count.
28 29 30 |
# File 'lib/githuh/cli/commands/issue/export.rb', line 28 def record_count @record_count end |
#repo ⇒ Object
Returns the value of attribute repo.
28 29 30 |
# File 'lib/githuh/cli/commands/issue/export.rb', line 28 def repo @repo end |
Class Method Details
.find_user(client, username) ⇒ Object
100 101 102 103 |
# File 'lib/githuh/cli/commands/issue/export.rb', line 100 def self.find_user(client, username) @user_cache ||= {} @user_cache[username] ||= client.user(username).name end |
.issue_labels(issue) ⇒ Object
96 97 98 |
# File 'lib/githuh/cli/commands/issue/export.rb', line 96 def self.issue_labels(issue) issue.labels.map(&:name) end |
Instance Method Details
#bar_size ⇒ Object
88 89 90 |
# File 'lib/githuh/cli/commands/issue/export.rb', line 88 def record_count + 1 end |
#call(repo: nil, file: nil, format: nil, mapping: nil, **opts) ⇒ Object
38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 |
# File 'lib/githuh/cli/commands/issue/export.rb', line 38 def call(repo: nil, file: nil, format: nil, mapping: 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.mapping = {} if mapping && ::File.exist?(mapping) self.mapping = ::YAML.safe_load(::File.read(mapping))['label-to-estimates'] || {} end Export.const_set(:LabelEstimates, self.mapping) 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 raise ArgumentError, "Format is not provided" unless FORMATS.key?(format&.to_sym) # —————————— 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
92 93 94 |
# File 'lib/githuh/cli/commands/issue/export.rb', line 92 def { state: "open" } end |
#fetch_issues ⇒ Object
74 75 76 77 78 79 80 |
# File 'lib/githuh/cli/commands/issue/export.rb', line 74 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
82 83 84 85 86 |
# File 'lib/githuh/cli/commands/issue/export.rb', line 82 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
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 157 158 |
# File 'lib/githuh/cli/commands/issue/export.rb', line 132 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
160 161 162 |
# File 'lib/githuh/cli/commands/issue/export.rb', line 160 def render_as_json(issue_list) JSON.pretty_generate(issue_list.map(&:to_h)) end |