Class: Geet::Github::AbstractIssue

Inherits:
Object
  • Object
show all
Extended by:
T::Sig
Defined in:
lib/geet/github/abstract_issue.rb

Overview

For clarity, in this class we keep only the identical logic between the subclasses, but other methods could be moved in here at some complexity cost.

Direct Known Subclasses

Issue, PR

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(number, api_interface, title, link) ⇒ AbstractIssue

Returns a new instance of AbstractIssue.



28
29
30
31
32
33
# File 'lib/geet/github/abstract_issue.rb', line 28

def initialize(number, api_interface, title, link)
  @number = number
  @api_interface = api_interface
  @title = title
  @link = link
end

Instance Attribute Details

Returns the value of attribute link.



18
19
20
# File 'lib/geet/github/abstract_issue.rb', line 18

def link
  @link
end

#numberObject (readonly)

Returns the value of attribute number.



12
13
14
# File 'lib/geet/github/abstract_issue.rb', line 12

def number
  @number
end

#titleObject (readonly)

Returns the value of attribute title.



15
16
17
# File 'lib/geet/github/abstract_issue.rb', line 15

def title
  @title
end

Class Method Details

.list(api_interface, milestone: nil, assignee: nil, &type_filter) ⇒ Object



50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
# File 'lib/geet/github/abstract_issue.rb', line 50

def self.list(api_interface, milestone: nil, assignee: nil, &type_filter)
  api_path = "issues"

  request_params = {}
  request_params[:milestone] = milestone.number if milestone
  request_params[:assignee] = assignee.username if assignee

  response = T.cast(api_interface.send_request(api_path, params: request_params, multipage: true), T::Array[T::Hash[String, T.untyped]])

  abstract_issues_list = response.map do |issue_data|
    number = T.cast(issue_data.fetch("number"), Integer)
    title = T.cast(issue_data.fetch("title"), String)
    link = T.cast(issue_data.fetch("html_url"), String)

    new(number, api_interface, title, link) if type_filter.nil? || type_filter.call(issue_data)
  end

  abstract_issues_list.compact
end

Instance Method Details

#add_labels(labels) ⇒ Object



79
80
81
82
83
# File 'lib/geet/github/abstract_issue.rb', line 79

def add_labels(labels)
  api_path = "issues/#{@number}/labels"

  @api_interface.send_request(api_path, data: labels)
end

#assign_users(users) ⇒ Object



71
72
73
74
75
76
# File 'lib/geet/github/abstract_issue.rb', line 71

def assign_users(users)
  api_path = "issues/#{@number}/assignees"
  request_data = {assignees: Array(users)}

  @api_interface.send_request(api_path, data: request_data)
end

#comment(comment) ⇒ Object



88
89
90
91
92
93
# File 'lib/geet/github/abstract_issue.rb', line 88

def comment(comment)
  api_path = "issues/#{@number}/comments"
  request_data = {body: comment}

  @api_interface.send_request(api_path, data: request_data)
end

#edit(milestone:) ⇒ Object



98
99
100
101
102
103
# File 'lib/geet/github/abstract_issue.rb', line 98

def edit(milestone:)
  request_data = {milestone: milestone}
  api_path = "issues/#{@number}"

  @api_interface.send_request(api_path, data: request_data, http_method: :patch)
end