gitlab_support_readiness 1.0.104 → 1.0.106

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 4d5b7d43f51bdc395c10efefdfc747d3b0b0b0a1123bb47f79b33bbae74cb3dd
4
- data.tar.gz: '09fe6fbc8783de005f806fd9a505a48be1f585c3b74b8b4acc9c683a94466021'
3
+ metadata.gz: 382bb3f8e93489bd0981ac1314b30102c707b91b5298766c81a3b874873e154a
4
+ data.tar.gz: b26189e604d605fa8e38a2c121e4c9df4187d5d7f97e6a31ad853b75693dd7cc
5
5
  SHA512:
6
- metadata.gz: e100ad88dbe3600af08b841f0c6ded08a745abaec90565400872bfa43e24e3acd24217193b641067cc88e75c6f08f0913edb604c95d0445acce294b9551b3fec
7
- data.tar.gz: e9149339fdfdb54ca86abf3e33d2badb5b64df2b0c3f573b770023bfa0c8a9138c0ca897aeda44ee78308abf70ee62d6e22f15e8441913ae3bdec1945bab22fd
6
+ metadata.gz: 531ea2fd66a168979466a8aa574472db8f2931c321f1681f8d8ccf102a71dfc741a2422be260da41b18dc577013bd7b56e040b1fa78534ef932697098a3bbc52
7
+ data.tar.gz: b3c111629ae14987e2ec82a5f6e64f9cd0f275569e1331879f63e47b593c4ac13a683d0691bc2a2c87f1ed6bf2c5eee478af0938dc9f073656cae9aaead368ee
@@ -0,0 +1,247 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Defines the module Readiness.
4
+ module Readiness
5
+ # Defines the module GitLab
6
+ module GitLab
7
+ ##
8
+ # Defines the class Epics within the module {Readiness::GitLab}.
9
+ #
10
+ # @author Jason Colyer
11
+ # @since 1.0.105
12
+ # @todo create! - https://docs.gitlab.com/ee/api/epics.html#new-epic
13
+ # @todo create_todo_item! - https://docs.gitlab.com/ee/api/epics.html#create-a-to-do-item
14
+ # @todo update! - https://docs.gitlab.com/ee/api/epics.html#update-epic
15
+ # @todo delete! - https://docs.gitlab.com/ee/api/epics.html#delete-epic
16
+ class Epics < Readiness::Client
17
+ attr_accessor :author, :closed_at, :color, :created_at, :description, :downvotes, :due_date, :due_date_fixed, :due_date_from_inherited_source, :due_date_from_milestones, :due_date_is_fixed, :end_date, :group_id, :id, :iid, :imported, :imported_from, :labels, :_links, :parent_id, :parent_iid, :reference, :references, :start_date, :start_date_fixed, :start_date_from_inherited_source, :start_date_from_milestones, :state, :subscribed, :title, :updated_at, :upvotes, :web_url
18
+
19
+ ##
20
+ # Creates a new {Readiness::GitLab::Epics} instance
21
+ #
22
+ # @author Jason Colyer
23
+ # @since 1.0.105
24
+ # @param object [Object] An instance of {Readiness::GitLab::Epics}
25
+ # @example
26
+ # require 'support_readiness'
27
+ # group = Readiness::GitLab::Epics.new
28
+ def initialize(object = {})
29
+ @author = object['author']
30
+ @closed_at = object['closed_at']
31
+ @color = object['color']
32
+ @created_at = object['created_at']
33
+ @description = object['description']
34
+ @downvotes = object['downvotes']
35
+ @due_date = object['due_date']
36
+ @due_date_fixed = object['due_date_fixed']
37
+ @due_date_from_inherited_source = object['due_date_from_inherited_source']
38
+ @due_date_from_milestones = object['due_date_from_milestones']
39
+ @due_date_is_fixed = object['due_date_is_fixed']
40
+ @end_date = object['end_date']
41
+ @group_id = object['group_id']
42
+ @id = object['id']
43
+ @iid = object['iid']
44
+ @imported = object['imported']
45
+ @imported_from = object['imported_from']
46
+ @labels = object['labels']
47
+ @_links = object['_links']
48
+ @parent_id = object['parent_id']
49
+ @parent_iid = object['parent_iid']
50
+ @reference = object['reference']
51
+ @references = object['references']
52
+ @start_date = object['start_date']
53
+ @start_date_fixed = object['start_date_fixed']
54
+ @start_date_from_inherited_source = object['start_date_from_inherited_source']
55
+ @start_date_from_milestones = object['start_date_from_milestones']
56
+ @state = object['state']
57
+ @subscribed = object['subscribed']
58
+ @title = object['title']
59
+ @updated_at = object['updated_at']
60
+ @upvotes = object['upvotes']
61
+ @web_url = object['web_url']
62
+ end
63
+
64
+ ##
65
+ # Lists epics in a group.
66
+ # This method can take a long time to run depending on the parameters used.
67
+ #
68
+ # @author Jason Colyer
69
+ # @since 1.0.105
70
+ # @param client [Object] An instance of {Readiness::GitLab::Client}
71
+ # @param group [Object] An instance of {Readiness::GitLab::Groups}
72
+ # @param filters [Array] An array of filter Strings to use. Should be in the format of key=value
73
+ # @return [Array]
74
+ # @see https://docs.gitlab.com/ee/api/epics.html#list-epics-for-a-group GitLab API > Epics > List epics for a group
75
+ # @example
76
+ # require 'support_readiness'
77
+ # config = Readiness::GitLab::Configuration.new
78
+ # config.token = 'test123abc'
79
+ # client = Readiness::GitLab::Client.new(config)
80
+ # group = Readiness::GitLab::Groups.new
81
+ # group.id = 1
82
+ # epics = Readiness::GitLab::Epics.list(client, group, ["state=opened", "include_descendant_groups=true"])
83
+ # puts epics.first.web_url
84
+ # # => "https://gitlab.com/gitlab-com/support/support-ops/-/epics/22"
85
+ def self.list(client, group, filters = [])
86
+ array = []
87
+ page = 1
88
+ loop do
89
+ response = client.connection.get "groups/#{group.id}/epics?per_page=100&page=#{page}&#{to_param_string(filters)}"
90
+ handle_request_error(0, 'GitLab', response.status) unless response.status == 200
91
+ body = Oj.load(response.body)
92
+ array += body.map { |e| Epics.new(e) }
93
+ break if body.count < 100
94
+
95
+ page += 1
96
+ end
97
+ array
98
+ end
99
+
100
+ ##
101
+ # Locates an epic within GitLab. This will not exit on error (except Authentication errors)
102
+ #
103
+ # @author Jason Colyer
104
+ # @since 1.0.105
105
+ # @param client [Object] An instance of {Readiness::GitLab::Client}
106
+ # @param group [Object] An instance of {Readiness::GitLab::Groups}
107
+ # @param iid [Integer] The epic ID to find
108
+ # @return [Hash]
109
+ # @see https://docs.gitlab.com/ee/api/epics.html#single-epic GitLab API > Epics > Single epic
110
+ # @example
111
+ # require 'support_readiness'
112
+ # config = Readiness::GitLab::Configuration.new
113
+ # config.token = 'test123abc'
114
+ # client = Readiness::GitLab::Client.new(config)
115
+ # group = Readiness::GitLab::Groups.new({ 'id' => 123 })
116
+ # epic = Readiness::GitLab::Epics.find(client, group, 5)
117
+ # puts epic.web_url
118
+ # # => "https://gitlab.com/gitlab-com/support/support-team-meta/-/issues/5"
119
+ def self.find(client, group, iid)
120
+ response = client.connection.get "groups/#{group.id}/epics/#{iid}"
121
+ handle_request_error(0, 'GitLab', response.status, { action: 'get', id: epic_id }) unless response.status == 200
122
+ return Epics.new(Oj.load(response.body)) if response.status == 200
123
+
124
+ Oj.load(response.body)
125
+ end
126
+
127
+ ##
128
+ # Locates an epic within GitLab. This will exit on error
129
+ #
130
+ # @author Jason Colyer
131
+ # @since 1.0.105
132
+ # @param client [Object] An instance of {Readiness::GitLab::Client}
133
+ # @param group [Object] An instance of {Readiness::GitLab::Groups}
134
+ # @param iid [Integer] The epic ID to find
135
+ # @return [Object]
136
+ # @see https://docs.gitlab.com/ee/api/epics.html#single-epic GitLab API > Epics > Single epic
137
+ # @example
138
+ # require 'support_readiness'
139
+ # config = Readiness::GitLab::Configuration.new
140
+ # config.token = 'test123abc'
141
+ # client = Readiness::GitLab::Client.new(config)
142
+ # group = Readiness::GitLab::Groups.new({ 'id' => 123 })
143
+ # epic = Readiness::GitLab::Epics.find!(client, group, 5)
144
+ # puts epic.web_url
145
+ # # => "https://gitlab.com/gitlab-com/support/support-team-meta/-/issues/5"
146
+ def self.find!(client, group, iid)
147
+ response = client.connection.get "groups/#{group.id}/epics/#{iid}"
148
+ handle_request_error(1, 'GitLab', response.status, { action: 'Find epic', id: iid }) unless response.status == 200
149
+ Epics.new(Oj.load(response.body))
150
+ end
151
+
152
+ ##
153
+ # Lists issues within an epic.
154
+ # This method can take a long time to run depending on the parameters used.
155
+ #
156
+ # @author Jason Colyer
157
+ # @since 1.0.105
158
+ # @param client [Object] An instance of {Readiness::GitLab::Client}
159
+ # @param epic [Object] An instance of {Readiness::GitLab::Epics}
160
+ # @return [Array]
161
+ # @see https://docs.gitlab.com/ee/api/epic_issues.html#list-issues-for-an-epic GitLab API > Issues (epic) > List issues for an epic
162
+ # @example
163
+ # require 'support_readiness'
164
+ # config = Readiness::GitLab::Configuration.new
165
+ # config.token = 'test123abc'
166
+ # client = Readiness::GitLab::Client.new(config)
167
+ # group = Readiness::GitLab::Groups.new({ 'id' => 1 })
168
+ # epic = Readiness::GitLab::Epics.find!(client, group, 5)
169
+ # issues = Readiness::GitLab::Epics.issues(client, epic)
170
+ # puts issues.count
171
+ # # => 45
172
+ def self.issues(client, epic)
173
+ array = []
174
+ page = 1
175
+ loop do
176
+ response = client.connection.get "groups/#{epic.group_id}/epics/#{epic.iid}/issues?per_page=100&page=#{page}"
177
+ handle_request_error(0, 'GitLab', response.status) unless response.status == 200
178
+ body = Oj.load(response.body)
179
+ array += body.map { |e| Issues.new(e) }
180
+ break if body.count < 100
181
+
182
+ page += 1
183
+ end
184
+ array
185
+ end
186
+
187
+ ##
188
+ # Assigns an issue to an epic. This will exit on error
189
+ #
190
+ # @author Jason Colyer
191
+ # @since 1.0.105
192
+ # @param client [Object] An instance of {Readiness::GitLab::Client}
193
+ # @param epic [Object] An instance of {Readiness::GitLab::Epics}
194
+ # @param issue [Object] An instance of {Readiness::GitLab::Issues}
195
+ # @return [Hash]
196
+ # @see https://docs.gitlab.com/ee/api/epic_issues.html#assign-an-issue-to-the-epic GitLab API > Issues (epic) > Assign an issue to the epic
197
+ # @example
198
+ # require 'support_readiness'
199
+ # config = Readiness::GitLab::Configuration.new
200
+ # config.token = 'test123abc'
201
+ # client = Readiness::GitLab::Client.new(config)
202
+ # group = Readiness::GitLab::Groups.new({ 'id' => 1 })
203
+ # epic = Readiness::GitLab::Epics.find!(client, group, 5)
204
+ # project = Readiness::GitLab::Projects.find!(client, 66)
205
+ # issue = Readiness::GitLab::Issues.find!(client, project, 23)
206
+ # assign = Readiness::GitLab::Epics.assign_issue!(client, epic, issue)
207
+ # puts assign['epic']['iid']
208
+ # # => 5
209
+ def self.assign_issue!(client, epic, issue)
210
+ response = client.connection.post "groups/#{epic.group_id}/epics/#{epic.iid}/issues/#{issue.id}"
211
+ handle_request_error(1, 'GitLab', response.status, { action: "Assign issue epic #{epic.iid}", id: issue.id }) unless response.status == 200
212
+ Oj.load(response.body)
213
+ end
214
+
215
+ ##
216
+ # Removes an issue to an epic. The issue object must be obtained via {Readiness::GitLab::Epics#list}. This will exit on error
217
+ #
218
+ # @author Jason Colyer
219
+ # @since 1.0.105
220
+ # @param client [Object] An instance of {Readiness::GitLab::Client}
221
+ # @param epic [Object] An instance of {Readiness::GitLab::Epics}
222
+ # @param issue [Object] An instance of {Readiness::GitLab::Issues}
223
+ # @return [Hash]
224
+ # @see https://docs.gitlab.com/ee/api/epic_issues.html#remove-an-issue-from-the-epic GitLab API > Issues (epic) > Remove an issue from the epic
225
+ # @example
226
+ # require 'support_readiness'
227
+ # config = Readiness::GitLab::Configuration.new
228
+ # config.token = 'test123abc'
229
+ # client = Readiness::GitLab::Client.new(config)
230
+ # group = Readiness::GitLab::Groups.new({ 'id' => 2573624 })
231
+ # epic = Readiness::GitLab::Epics.find!(gitlab_client, group, 16)
232
+ # issues = Readiness::GitLab::Epics.issues(gitlab_client, epic)
233
+ # issue = issues.detect { |i| i.iid == 2491 }
234
+ # remove = Readiness::GitLab::Epics.remove_issue!(gitlab_client, epic, issue)
235
+ # puts remove['epic']['id']
236
+ # # => 2087187
237
+ def self.remove_issue!(client, epic, issue)
238
+ return handle_request_error(1, 'GitLab', 400, { action: "No issue provided to remove from epic #{epic.iid}", id: '' }) if issue.nil?
239
+ return handle_request_error(1, 'GitLab', 400, { action: "Issue is not assigned to epic #{epic.iid}", id: issue.iid }) if issue.epic_issue_id.nil?
240
+
241
+ response = client.connection.delete "groups/#{epic.group_id}/epics/#{epic.iid}/issues/#{issue.epic_issue_id}"
242
+ handle_request_error(1, 'GitLab', response.status, { action: "Remove issue from epic #{epic.iid}", id: issue.iid }) unless response.status == 200
243
+ Oj.load(response.body)
244
+ end
245
+ end
246
+ end
247
+ end
@@ -11,7 +11,7 @@ module Readiness
11
11
  # @since 1.0.0
12
12
  # @todo Anything listed on https://docs.gitlab.com/ee/api/issues.html not currently here
13
13
  class Issues < Readiness::Client
14
- attr_accessor :assignee_id, :assignee_ids, :assignees, :author, :blocking_issues_count, :closed_at, :closed_by, :confidential, :created_at, :description, :discussion_locked, :downvotes, :due_date, :epic, :has_tasks, :health_status, :id, :iid, :imported, :imported_from, :issue_type, :iteration, :labels, :_links, :merge_requests_count, :milestone, :moved_to_id, :project_id, :references, :service_desk_reply_to, :severity, :state, :state_event, :task_completion_status, :task_status, :time_stats, :title, :type, :updated_at, :upvotes, :user_notes_count, :web_url, :weight
14
+ attr_accessor :assignee_id, :assignee_ids, :assignees, :author, :blocking_issues_count, :closed_at, :closed_by, :confidential, :created_at, :description, :discussion_locked, :downvotes, :due_date, :epic, :epic_issue_id, :has_tasks, :health_status, :id, :iid, :imported, :imported_from, :issue_type, :iteration, :labels, :_links, :merge_requests_count, :milestone, :moved_to_id, :project_id, :references, :service_desk_reply_to, :severity, :state, :state_event, :task_completion_status, :task_status, :time_stats, :title, :type, :updated_at, :upvotes, :user_notes_count, :web_url, :weight
15
15
 
16
16
  ##
17
17
  # Creates a new {Readiness::GitLab::Issues} instance
@@ -37,6 +37,7 @@ module Readiness
37
37
  @downvotes = object['downvotes']
38
38
  @due_date = object['due_date']
39
39
  @epic = object['epic']
40
+ @epic_issue_id = object['epic_issue_id']
40
41
  @has_tasks = object['has_tasks']
41
42
  @health_status = object['health_status']
42
43
  @id = object['id']
@@ -10,6 +10,7 @@ module Readiness
10
10
  require "#{__dir__}/gitlab/client"
11
11
  require "#{__dir__}/gitlab/configuration"
12
12
  require "#{__dir__}/gitlab/groups"
13
+ require "#{__dir__}/gitlab/epics"
13
14
  require "#{__dir__}/gitlab/issues"
14
15
  require "#{__dir__}/gitlab/jobs"
15
16
  require "#{__dir__}/gitlab/markdown"
@@ -18,11 +18,13 @@ module Readiness
18
18
  # @param host [String] The hostname to use in Redis connections
19
19
  # @param port [Integer] The port number to use in Redis connections
20
20
  # @param password [String] The password to use in Redis connections
21
+ # @param username [String] The username to use in Redis connections
22
+ # @param ssl [Boolean] The SSL setting to use in Redis connections
21
23
  # @example
22
24
  # require 'support_readiness'
23
25
  # redis = Readiness::Redis.new('domain.com', 6379, 'p@assw0rd!')
24
- def initialize(host, port, password)
25
- @connection = generate_client(host, port, password)
26
+ def initialize(host, port, password, username = nil, ssl = true)
27
+ @connection = generate_client(host, port, password, username, ssl)
26
28
  end
27
29
 
28
30
  ##
@@ -33,11 +35,14 @@ module Readiness
33
35
  # @param host [String] The hostname to use in Redis connections
34
36
  # @param port [Integer] The port number to use in Redis connections
35
37
  # @param password [String] The password to use in Redis connections
36
- def generate_client(host, port, password)
38
+ # @param username [String] The username to use in Redis connections
39
+ # @param ssl [Boolean] The SSL setting to use in Redis connections
40
+ def generate_client(host, port, password, username, ssl)
37
41
  ::Redis.new(host: host,
42
+ username: username,
38
43
  port: port,
39
44
  password: password,
40
- ssl: true)
45
+ ssl: ssl)
41
46
  end
42
47
 
43
48
  ##
@@ -72,7 +72,7 @@ module Readiness
72
72
  # config.token = 'test123abc'
73
73
  # config.url = 'https://example.zendesk.com/api/v2'
74
74
  # client = Readiness::Zendesk::Client.new(config)
75
- # search = Readiness::Zendesk::Search.organzations(client, 'salesforce_id:ABCDEFGH0123456*')
75
+ # search = Readiness::Zendesk::Search.organizations(client, 'salesforce_id:ABCDEFGH0123456*')
76
76
  # pp search.first.notes
77
77
  # # => "This org is escalated. Please talk to support managers."
78
78
  def self.organizations(client, query)
@@ -120,7 +120,7 @@ module Readiness
120
120
  # config.token = 'test123abc'
121
121
  # config.url = 'https://example.zendesk.com/api/v2'
122
122
  # client = Readiness::Zendesk::Client.new(config)
123
- # search = Readiness::Zendesk::Search.searc(client, 'organization', 'salesforce_id:ABCDEFGH0123456*')
123
+ # search = Readiness::Zendesk::Search.search(client, 'organization', 'salesforce_id:ABCDEFGH0123456*')
124
124
  # pp search.first.notes
125
125
  # # => "This org is escalated. Please talk to support managers."
126
126
  def self.search(client, type, query)
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gitlab_support_readiness
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.104
4
+ version: 1.0.106
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jason Colyer
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2025-01-15 00:00:00.000000000 Z
11
+ date: 2025-01-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -272,6 +272,7 @@ files:
272
272
  - lib/support_readiness/gitlab.rb
273
273
  - lib/support_readiness/gitlab/client.rb
274
274
  - lib/support_readiness/gitlab/configuration.rb
275
+ - lib/support_readiness/gitlab/epics.rb
275
276
  - lib/support_readiness/gitlab/groups.rb
276
277
  - lib/support_readiness/gitlab/issues.rb
277
278
  - lib/support_readiness/gitlab/jobs.rb