Class: Ocak::IssueFetcher
- Inherits:
-
Object
- Object
- Ocak::IssueFetcher
- Defined in:
- lib/ocak/issue_fetcher.rb
Instance Method Summary collapse
- #add_label(issue_number, label) ⇒ Object
- #comment(issue_number, body) ⇒ Object
- #fetch_ready ⇒ Object
-
#initialize(config:, logger: nil) ⇒ IssueFetcher
constructor
A new instance of IssueFetcher.
- #remove_label(issue_number, label) ⇒ Object
- #transition(issue_number, from:, to:) ⇒ Object
- #view(issue_number, fields: 'number,title,body,labels') ⇒ Object
Constructor Details
#initialize(config:, logger: nil) ⇒ IssueFetcher
Returns a new instance of IssueFetcher.
8 9 10 11 |
# File 'lib/ocak/issue_fetcher.rb', line 8 def initialize(config:, logger: nil) @config = config @logger = logger end |
Instance Method Details
#add_label(issue_number, label) ⇒ Object
33 34 35 |
# File 'lib/ocak/issue_fetcher.rb', line 33 def add_label(issue_number, label) run_gh('issue', 'edit', issue_number.to_s, '--add-label', label) end |
#comment(issue_number, body) ⇒ Object
46 47 48 |
# File 'lib/ocak/issue_fetcher.rb', line 46 def comment(issue_number, body) run_gh('issue', 'comment', issue_number.to_s, '--body', body) end |
#fetch_ready ⇒ Object
13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
# File 'lib/ocak/issue_fetcher.rb', line 13 def fetch_ready stdout, _, status = Open3.capture3( 'gh', 'issue', 'list', '--label', @config.label_ready, '--state', 'open', '--json', 'number,title,body,labels,author', '--limit', '50', chdir: @config.project_dir ) return [] unless status.success? issues = JSON.parse(stdout) issues.reject! { |i| in_progress?(i) } issues.select! { |i| (i) } issues rescue JSON::ParserError => e @logger&.warn("Failed to parse issue list JSON: #{e.}") [] end |
#remove_label(issue_number, label) ⇒ Object
37 38 39 |
# File 'lib/ocak/issue_fetcher.rb', line 37 def remove_label(issue_number, label) run_gh('issue', 'edit', issue_number.to_s, '--remove-label', label) end |
#transition(issue_number, from:, to:) ⇒ Object
41 42 43 44 |
# File 'lib/ocak/issue_fetcher.rb', line 41 def transition(issue_number, from:, to:) remove_label(issue_number, from) if from add_label(issue_number, to) end |
#view(issue_number, fields: 'number,title,body,labels') ⇒ Object
50 51 52 53 54 55 56 57 58 59 60 61 62 |
# File 'lib/ocak/issue_fetcher.rb', line 50 def view(issue_number, fields: 'number,title,body,labels') stdout, _, status = Open3.capture3( 'gh', 'issue', 'view', issue_number.to_s, '--json', fields, chdir: @config.project_dir ) return nil unless status.success? JSON.parse(stdout) rescue JSON::ParserError => e @logger&.warn("Failed to parse issue view JSON: #{e.}") nil end |