Class: Readiness::GitLab::Issues

Inherits:
Client
  • Object
show all
Defined in:
lib/support_readiness/gitlab/issues.rb

Overview

TODO:

Anything listed on docs.gitlab.com/ee/api/issues.html not currently here

Defines the class Issues within the module Readiness::GitLab.

Author:

  • Jason Colyer

Since:

  • 1.0.0

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from Client

auth_error, bad_request_error, convert_actions, convert_conditions, convert_standard_names_to_ids, convert_ticket_form_agent_conditions, convert_ticket_form_brands, convert_ticket_form_end_user_conditions, convert_ticket_form_names_to_ids, convert_view_names_to_ids, convert_view_restrictions, covert_ticket_form_field_ids, create_package!, erb_renderer, handle_request_error, not_found_error, not_processible_error, put_into_archive, recursively_deflate_directory, timestamp_filename, to_clean_json, to_clean_json_with_key, to_hash, to_nearly_clean_json, to_nearly_clean_json_with_key, to_param_string, write_entries

Constructor Details

#initialize(object = {}) ⇒ Issues

Creates a new Readiness::GitLab::Issues instance

Examples:

require 'support_readiness'
Readiness::GitLab::Issues.new

Parameters:

Author:

  • Jason Colyer

Since:

  • 1.0.0



25
26
27
28
29
30
31
32
33
34
35
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
62
63
64
65
66
67
68
69
70
# File 'lib/support_readiness/gitlab/issues.rb', line 25

def initialize(object = {})
  @assignee_id = object['assignee_id']
  @assignee_ids = object['assignee_ids']
  @assignees = object['assignees']
  @author = object['author']
  @blocking_issues_count = object['blocking_issues_count']
  @closed_at = object['closed_at']
  @closed_by = object['closed_by']
  @confidential = object['confidential']
  @created_at = object['created_at']
  @description = object['description']
  @discussion_locked = object['discussion_locked']
  @downvotes = object['downvotes']
  @due_date = object['due_date']
  @epic = object['epic']
  @epic_issue_id = object['epic_issue_id']
  @has_tasks = object['has_tasks']
  @health_status = object['health_status']
  @id = object['id']
  @iid = object['iid']
  @imported = object['imported']
  @imported_from = object['imported_from']
  @issue_type = object['issue_type']
  @iteration = object['iteration']
  @labels = object['labels']
  @_links = object['_links']
  @merge_requests_count = object['merge_requests_count']
  @milestone = object['milestone']
  @moved_to_id = object['moved_to_id']
  @project_id = object['project_id']
  @references = object['references']
  @service_desk_reply_to = object['service_desk_reply_to']
  @severity = object['severity']
  @state = object['state']
  @state_event = object['state_event']
  @task_completion_status = object['task_completion_status']
  @task_status = object['task_status']
  @time_stats = object['time_stats']
  @title = object['title']
  @type = object['type']
  @updated_at = object['updated_at']
  @upvotes = object['upvotes']
  @user_notes_count = object['user_notes_count']
  @web_url = object['web_url']
  @weight = object['weight']
end

Instance Attribute Details

Since:

  • 1.0.0



14
15
16
# File 'lib/support_readiness/gitlab/issues.rb', line 14

def _links
  @_links
end

#assignee_idObject

Since:

  • 1.0.0



14
15
16
# File 'lib/support_readiness/gitlab/issues.rb', line 14

def assignee_id
  @assignee_id
end

#assignee_idsObject

Since:

  • 1.0.0



14
15
16
# File 'lib/support_readiness/gitlab/issues.rb', line 14

def assignee_ids
  @assignee_ids
end

#assigneesObject

Since:

  • 1.0.0



14
15
16
# File 'lib/support_readiness/gitlab/issues.rb', line 14

def assignees
  @assignees
end

#authorObject

Since:

  • 1.0.0



14
15
16
# File 'lib/support_readiness/gitlab/issues.rb', line 14

def author
  @author
end

#blocking_issues_countObject

Since:

  • 1.0.0



14
15
16
# File 'lib/support_readiness/gitlab/issues.rb', line 14

def blocking_issues_count
  @blocking_issues_count
end

#closed_atObject

Since:

  • 1.0.0



14
15
16
# File 'lib/support_readiness/gitlab/issues.rb', line 14

def closed_at
  @closed_at
end

#closed_byObject

Since:

  • 1.0.0



14
15
16
# File 'lib/support_readiness/gitlab/issues.rb', line 14

def closed_by
  @closed_by
end

#confidentialObject

Since:

  • 1.0.0



14
15
16
# File 'lib/support_readiness/gitlab/issues.rb', line 14

def confidential
  @confidential
end

#created_atObject

Since:

  • 1.0.0



14
15
16
# File 'lib/support_readiness/gitlab/issues.rb', line 14

def created_at
  @created_at
end

#descriptionObject

Since:

  • 1.0.0



14
15
16
# File 'lib/support_readiness/gitlab/issues.rb', line 14

def description
  @description
end

#discussion_lockedObject

Since:

  • 1.0.0



14
15
16
# File 'lib/support_readiness/gitlab/issues.rb', line 14

def discussion_locked
  @discussion_locked
end

#downvotesObject

Since:

  • 1.0.0



14
15
16
# File 'lib/support_readiness/gitlab/issues.rb', line 14

def downvotes
  @downvotes
end

#due_dateObject

Since:

  • 1.0.0



14
15
16
# File 'lib/support_readiness/gitlab/issues.rb', line 14

def due_date
  @due_date
end

#epicObject

Since:

  • 1.0.0



14
15
16
# File 'lib/support_readiness/gitlab/issues.rb', line 14

def epic
  @epic
end

#epic_issue_idObject

Since:

  • 1.0.0



14
15
16
# File 'lib/support_readiness/gitlab/issues.rb', line 14

def epic_issue_id
  @epic_issue_id
end

#has_tasksObject

Since:

  • 1.0.0



14
15
16
# File 'lib/support_readiness/gitlab/issues.rb', line 14

def has_tasks
  @has_tasks
end

#health_statusObject

Since:

  • 1.0.0



14
15
16
# File 'lib/support_readiness/gitlab/issues.rb', line 14

def health_status
  @health_status
end

#idObject

Since:

  • 1.0.0



14
15
16
# File 'lib/support_readiness/gitlab/issues.rb', line 14

def id
  @id
end

#iidObject

Since:

  • 1.0.0



14
15
16
# File 'lib/support_readiness/gitlab/issues.rb', line 14

def iid
  @iid
end

#importedObject

Since:

  • 1.0.0



14
15
16
# File 'lib/support_readiness/gitlab/issues.rb', line 14

def imported
  @imported
end

#imported_fromObject

Since:

  • 1.0.0



14
15
16
# File 'lib/support_readiness/gitlab/issues.rb', line 14

def imported_from
  @imported_from
end

#issue_typeObject

Since:

  • 1.0.0



14
15
16
# File 'lib/support_readiness/gitlab/issues.rb', line 14

def issue_type
  @issue_type
end

#iterationObject

Since:

  • 1.0.0



14
15
16
# File 'lib/support_readiness/gitlab/issues.rb', line 14

def iteration
  @iteration
end

#labelsObject

Since:

  • 1.0.0



14
15
16
# File 'lib/support_readiness/gitlab/issues.rb', line 14

def labels
  @labels
end

#merge_requests_countObject

Since:

  • 1.0.0



14
15
16
# File 'lib/support_readiness/gitlab/issues.rb', line 14

def merge_requests_count
  @merge_requests_count
end

#milestoneObject

Since:

  • 1.0.0



14
15
16
# File 'lib/support_readiness/gitlab/issues.rb', line 14

def milestone
  @milestone
end

#moved_to_idObject

Since:

  • 1.0.0



14
15
16
# File 'lib/support_readiness/gitlab/issues.rb', line 14

def moved_to_id
  @moved_to_id
end

#project_idObject

Since:

  • 1.0.0



14
15
16
# File 'lib/support_readiness/gitlab/issues.rb', line 14

def project_id
  @project_id
end

#referencesObject

Since:

  • 1.0.0



14
15
16
# File 'lib/support_readiness/gitlab/issues.rb', line 14

def references
  @references
end

#service_desk_reply_toObject

Since:

  • 1.0.0



14
15
16
# File 'lib/support_readiness/gitlab/issues.rb', line 14

def service_desk_reply_to
  @service_desk_reply_to
end

#severityObject

Since:

  • 1.0.0



14
15
16
# File 'lib/support_readiness/gitlab/issues.rb', line 14

def severity
  @severity
end

#stateObject

Since:

  • 1.0.0



14
15
16
# File 'lib/support_readiness/gitlab/issues.rb', line 14

def state
  @state
end

#state_eventObject

Since:

  • 1.0.0



14
15
16
# File 'lib/support_readiness/gitlab/issues.rb', line 14

def state_event
  @state_event
end

#task_completion_statusObject

Since:

  • 1.0.0



14
15
16
# File 'lib/support_readiness/gitlab/issues.rb', line 14

def task_completion_status
  @task_completion_status
end

#task_statusObject

Since:

  • 1.0.0



14
15
16
# File 'lib/support_readiness/gitlab/issues.rb', line 14

def task_status
  @task_status
end

#time_statsObject

Since:

  • 1.0.0



14
15
16
# File 'lib/support_readiness/gitlab/issues.rb', line 14

def time_stats
  @time_stats
end

#titleObject

Since:

  • 1.0.0



14
15
16
# File 'lib/support_readiness/gitlab/issues.rb', line 14

def title
  @title
end

#typeObject

Since:

  • 1.0.0



14
15
16
# File 'lib/support_readiness/gitlab/issues.rb', line 14

def type
  @type
end

#updated_atObject

Since:

  • 1.0.0



14
15
16
# File 'lib/support_readiness/gitlab/issues.rb', line 14

def updated_at
  @updated_at
end

#upvotesObject

Since:

  • 1.0.0



14
15
16
# File 'lib/support_readiness/gitlab/issues.rb', line 14

def upvotes
  @upvotes
end

#user_notes_countObject

Since:

  • 1.0.0



14
15
16
# File 'lib/support_readiness/gitlab/issues.rb', line 14

def user_notes_count
  @user_notes_count
end

#web_urlObject

Since:

  • 1.0.0



14
15
16
# File 'lib/support_readiness/gitlab/issues.rb', line 14

def web_url
  @web_url
end

#weightObject

Since:

  • 1.0.0



14
15
16
# File 'lib/support_readiness/gitlab/issues.rb', line 14

def weight
  @weight
end

Class Method Details

.comments(client, project, issue) ⇒ Array

Get all comments on a project issue within GitLab.

Examples:

require 'support_readiness'
config = Readiness::GitLab::Configuration.new
config.token = 'test123abc'
client = Readiness::GitLab::Client.new(config)
project = Readiness::GitLab::Projects.find!(client, 5)
issue = Readiness::GitLab::Issues.find!(client, project, 11)
comments = Readiness::GitLab::Issues.comments(client, project, issue)
pp comments.first['updated_at']
 # => "2013-10-02T09:56:03Z"

Parameters:

Returns:

  • (Array)

See Also:

Author:

  • Jason Colyer

Since:

  • 1.0.0



271
272
273
274
275
276
277
278
279
280
281
282
283
284
# File 'lib/support_readiness/gitlab/issues.rb', line 271

def self.comments(client, project, issue)
  array = []
  page = 1
  loop do
    response = client.connection.get "projects/#{project.id}/issues/#{issue.iid}/notes?per_page=100&page=#{page}"
    handle_request_error(0, 'GitLab', response.status) unless response.status == 200
    body = Oj.load(response.body)
    array += body
    break if body.count < 100

    page += 1
  end
  array
end

.create!(client, project, issue) ⇒ Object

Creates a project issue within GitLab. This will exit on error

Examples:

require 'support_readiness'
config = Readiness::GitLab::Configuration.new
config.token = 'test123abc'
client = Readiness::GitLab::Client.new(config)
project = Readiness::GitLab::Projects.find!(client, 1083469)
issue = Readiness::GitLab::Issues.new
issue.title = 'Important issue!'
issue.description = 'This is totally important!'
issue.assignee_ids = [1, 3, 4]
new_issue = Readiness::GitLab::Issues.create!(client, project, issue)
puts new_issue.web_url
# => "https://gitlab.com/gitlab-com/support/support-team-meta/-/issues/8"

Parameters:

Returns:

See Also:

Author:

  • Jason Colyer

Since:

  • 1.0.0



193
194
195
196
197
# File 'lib/support_readiness/gitlab/issues.rb', line 193

def self.create!(client, project, issue)
  response = client.connection.post "projects/#{project.id}/issues", to_clean_json(issue)
  handle_request_error(1, 'GitLab', response.status, { action: 'Create issue', id: project.id }) unless response.status == 200
  Issues.new(Oj.load(response.body))
end

.create_comment!(client, project, issue, params) ⇒ Hash

Create a comment on a project issue within GitLab.

Examples:

require 'support_readiness'
config = Readiness::GitLab::Configuration.new
config.token = 'test123abc'
client = Readiness::GitLab::Client.new(config)
project = Readiness::GitLab::Projects.find!(client, 5)
issue = Readiness::GitLab::Issues.find!(client, project, 11)
comment_params = {
  body: 'My name is Jason and I approve this comment',
  internal: true
}
comment = Readiness::GitLab::Issues.create_comment(client, project, issue, comment_params)
pp comment['updated_at']
 # => "2024-09-23T15:42:13Z"

Parameters:

  • client (Object)

    An instance of Client

  • project (Object)

    An instance of Projects

  • issue (Object)

    An instance of Readiness::GitLab::Issues

  • params (Hash)

    The parameters to use in creating the comment

Returns:

  • (Hash)

See Also:

Author:

  • Jason Colyer

Since:

  • 1.0.0



311
312
313
314
315
# File 'lib/support_readiness/gitlab/issues.rb', line 311

def self.create_comment!(client, project, issue, params)
  response = client.connection.post "projects/#{project.id}/issues/#{issue.iid}/notes", params.to_json
  handle_request_error(1, 'GitLab', response.status, { action: 'Create issue comment', id: issue.id }) unless response.status == 200
  Oj.load(response.body)
end

.delete!(client, project, issue) ⇒ Boolean

Deletes a project issue within GitLab. This will exit on error

Examples:

require 'support_readiness'
config = Readiness::GitLab::Configuration.new
config.token = 'test123abc'
client = Readiness::GitLab::Client.new(config)
project = Readiness::GitLab::Projects.find!(client, 1083469)
issue = Readiness::GitLab::Issues.find!(client, project, 8)
pp Readiness::GitLab::Issues.delete!(client, project, issue)
 # => true

Parameters:

Returns:

  • (Boolean)

See Also:

Author:

  • Jason Colyer

Since:

  • 1.0.0



245
246
247
248
249
# File 'lib/support_readiness/gitlab/issues.rb', line 245

def self.delete!(client, project, issue)
  response = client.connection.delete "projects/#{project.id}/issues/#{issue.iid}"
  handle_request_error(1, 'GitLab', response.status, { action: 'Delete an issue', id: "#{project.id}/issues/#{issue.iid}" }) unless response.status == 204
  true
end

.delete_comment!(client, project, issue, cid) ⇒ Boolean

Deletes a comment on a project issue within GitLab.

Examples:

require 'support_readiness'
config = Readiness::GitLab::Configuration.new
config.token = 'test123abc'
client = Readiness::GitLab::Client.new(config)
project = Readiness::GitLab::Projects.find!(client, 5)
issue = Readiness::GitLab::Issues.find!(client, project, 11)
comment = Readiness::GitLab::Issues.delete_comment!(client, project, issue, 15)
pp comment
 # => true

Parameters:

Returns:

  • (Boolean)

See Also:

Author:

  • Jason Colyer

Since:

  • 1.0.0



369
370
371
372
373
# File 'lib/support_readiness/gitlab/issues.rb', line 369

def self.delete_comment!(client, project, issue, cid)
  response = client.connection.delete "projects/#{project.id}/issues/#{issue.iid}/notes/#{cid}"
  handle_request_error(1, 'GitLab', response.status, { action: 'Delete issue comment', id: issue.id }) unless response.status == 204
  true
end

.find(client, project, iid) ⇒ Hash

Locates a project issue within GitLab. This will not exit on error (except Authentication errors)

Examples:

require 'support_readiness'
config = Readiness::GitLab::Configuration.new
config.token = 'test123abc'
client = Readiness::GitLab::Client.new(config)
project = Readiness::GitLab::Projects.find!(client, 1083469)
issue = Readiness::GitLab::Issues.find(client, project, 5)
puts issues.web_url
# => "https://gitlab.com/gitlab-com/support/support-team-meta/-/issues/5"

Parameters:

  • client (Object)

    An instance of Client

  • project (Object)

    An instance of Projects

  • iid (Integer)

    The issue ID to find

Returns:

  • (Hash)

See Also:

Author:

  • Jason Colyer

Since:

  • 1.0.0



137
138
139
140
141
142
143
# File 'lib/support_readiness/gitlab/issues.rb', line 137

def self.find(client, project, iid)
  response = client.connection.get "projects/#{project.id}/issues/#{iid}"
  handle_request_error(0, 'GitLab', response.status,  { action: 'get', id: iid }) unless response.status == 200
  return Issues.new(Oj.load(response.body)) if response.status == 200

  Oj.load(response.body)
end

.find!(client, project, iid) ⇒ Object

Locates a project issue within GitLab. This will exit on error

Examples:

require 'support_readiness'
config = Readiness::GitLab::Configuration.new
config.token = 'test123abc'
client = Readiness::GitLab::Client.new(config)
project = Readiness::GitLab::Projects.find!(client, 1083469)
issue = Readiness::GitLab::Issues.find!(client, project, 5)
puts issues.web_url
# => "https://gitlab.com/gitlab-com/support/support-team-meta/-/issues/5"

Parameters:

  • client (Object)

    An instance of Client

  • project (Object)

    An instance of Projects

  • iid (Integer)

    The issue ID to find

Returns:

See Also:

Author:

  • Jason Colyer

Since:

  • 1.0.0



164
165
166
167
168
# File 'lib/support_readiness/gitlab/issues.rb', line 164

def self.find!(client, project, iid)
  response = client.connection.get "projects/#{project.id}/issues/#{iid}"
  handle_request_error(1, 'GitLab', response.status, { action: 'Find issue', id: iid }) unless response.status == 200
  Issues.new(Oj.load(response.body))
end

.list(client, object, limit = 0, filters = []) ⇒ Array

Lists all issues for an object. Does not stop until it ends or the page limit is hit. This method can take a long time to run depending on the parameters used.

Examples:

require 'support_readiness'
config = Readiness::GitLab::Configuration.new
config.token = 'test123abc'
client = Readiness::GitLab::Client.new(config)
project = Readiness::GitLab::Projects.find!(client, 1083469)
issues = Readiness::GitLab::Issues.list(client, project, 2, ["assignee_id=5", "state=opened"])
puts issues.first.web_url
# => "https://gitlab.com/gitlab-com/support/support-team-meta/-/issues/2"
require 'support_readiness'
config = Readiness::GitLab::Configuration.new
config.token = 'test123abc'
client = Readiness::GitLab::Client.new(config)
group = Readiness::GitLab::Groups.find!(client, 2573511)
issues = Readiness::GitLab::Issues.list(client, group, 2, ["assignee_id=5", "state=opened"])
puts issues.first.web_url
# => "https://gitlab.com/gitlab-com/support/support-team-meta/-/issues/3"

Parameters:

  • client (Object)

    An instance of Client

  • object (Object)

    An instance of Projects or Groups

  • limit (Integer) (defaults to: 0)

    The number of pages to stop at. Using 0 means to list all.

  • filters (Array) (defaults to: [])

    An array of filter Strings to use. Should be in the format of key=value

Returns:

  • (Array)

See Also:

Author:

  • Jason Colyer

Since:

  • 1.0.0



102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
# File 'lib/support_readiness/gitlab/issues.rb', line 102

def self.list(client, object, limit = 0, filters = [])
  array = []
  page = 1
  loop do
    response = client.connection.get "#{object.class.name.split('::').last.downcase}/#{object.id}/issues?per_page=100&page=#{page}&#{to_param_string(filters)}"
    handle_request_error(0, 'GitLab', response.status) unless response.status == 200
    body = Oj.load(response.body)
    array += body.map { |p| Issues.new(p) }
    break if body.count < 100
    break if limit != 0 && array.count >= (limit * 100)

    page += 1
  end
  array
end

.update!(client, project, issue) ⇒ Object

Updates a project issue within GitLab. This will exit on error

Examples:

require 'support_readiness'
config = Readiness::GitLab::Configuration.new
config.token = 'test123abc'
client = Readiness::GitLab::Client.new(config)
project = Readiness::GitLab::Projects.find!(client, 1083469)
issue = Readiness::GitLab::Issues.find!(client, project, 8)
issue.title = 'Important issue v2!'
new_issue = Readiness::GitLab::Issues.update!(client, project, issue)
puts new_issue.title
# => "Important issue v2!"

Parameters:

Returns:

See Also:

Author:

  • Jason Colyer

Since:

  • 1.0.0



220
221
222
223
224
# File 'lib/support_readiness/gitlab/issues.rb', line 220

def self.update!(client, project, issue)
  response = client.connection.put "projects/#{project.id}/issues/#{issue.iid}", to_clean_json(issue)
  handle_request_error(1, 'GitLab', response.status, { action: 'Update an issue', id: "#{project.id}/issues/#{issue.iid}" }) unless response.status == 200
  Issues.new(Oj.load(response.body))
end

.update_comment!(client, project, issue, cid, params) ⇒ Hash

Updates a comment on a project issue within GitLab.

Examples:

require 'support_readiness'
config = Readiness::GitLab::Configuration.new
config.token = 'test123abc'
client = Readiness::GitLab::Client.new(config)
project = Readiness::GitLab::Projects.find!(client, 5)
issue = Readiness::GitLab::Issues.find!(client, project, 11)
comment_params = {
  internal: false
}
comment = Readiness::GitLab::Issues.update_comment!(client, project, issue, 15, comment_params)
pp comment['updated_at']
 # => "2024-09-23T16:47:36Z"

Parameters:

  • client (Object)

    An instance of Client

  • project (Object)

    An instance of Projects

  • issue (Object)

    An instance of Readiness::GitLab::Issues

  • cid (Integer)

    The comment ID to modify

  • params (Hash)

    The parameters to use for the update

Returns:

  • (Hash)

See Also:

Author:

  • Jason Colyer

Since:

  • 1.0.0



342
343
344
345
346
# File 'lib/support_readiness/gitlab/issues.rb', line 342

def self.update_comment!(client, project, issue, cid, params)
  response = client.connection.put "projects/#{project.id}/issues/#{issue.iid}/notes/#{cid}", params.to_json
  handle_request_error(1, 'GitLab', response.status, { action: 'Update issue comment', id: issue.id }) unless response.status == 200
  Oj.load(response.body)
end