apadmi_grout 2.4.0 → 2.6.0
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:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: af094b716e2764d75b2f0729c40c82e2bb2ffe13f2775a2e2d6480540c471922
|
4
|
+
data.tar.gz: 7ab7d36c4e120a348ee74e2e67386fd1f497d40c5bb684951777edef79caf5c8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 586a0f1eaf5d0ca433ad18a9c09965da229459bd172a217e04d1ee74a82cfc349cd7841093b40b29f8762bbf37310f3a0a423731bfd1ded2e55697f32663c0a5
|
7
|
+
data.tar.gz: f77fb691459927030db6f936f5768aa69fd72b5906c23f044bc8e885a6a7084a9bd20c723a5736008a0f42800d955ffd935e8200200bb8ea9c6ec882bcd92e2f
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,12 @@
|
|
1
1
|
# Core Changelog
|
2
2
|
|
3
|
+
## [2.6.0] - 2023-09-20
|
4
|
+
* Add option to expand ADO tickets with additional information
|
5
|
+
* Add ability to assign users to ADO tickets
|
6
|
+
|
7
|
+
## [2.5.0] - 2023-09-20
|
8
|
+
* Added more options to the ADO queries for more in granular filtering.
|
9
|
+
|
3
10
|
## [2.4.0] - 2023-09-04
|
4
11
|
* No change - keeping version in sync with fastlane plugin.
|
5
12
|
|
@@ -25,11 +25,12 @@ module Apadmi
|
|
25
25
|
|
26
26
|
# Ado specific find tickets options
|
27
27
|
class AdoFindTicketsOptions < FindTicketsOptions
|
28
|
-
attr_reader :required_tags, :not_tags
|
28
|
+
attr_reader :required_tags, :not_tags, :additional_fields
|
29
29
|
|
30
|
-
def initialize(required_tags: [], not_tags: [])
|
30
|
+
def initialize(required_tags: [], not_tags: [], additional_fields: {})
|
31
31
|
@required_tags = required_tags
|
32
32
|
@not_tags = not_tags
|
33
|
+
@additional_fields = additional_fields
|
33
34
|
end
|
34
35
|
|
35
36
|
def ==(other)
|
@@ -37,7 +38,7 @@ module Apadmi
|
|
37
38
|
end
|
38
39
|
|
39
40
|
def state
|
40
|
-
[@required_tags, @not_tags]
|
41
|
+
[@required_tags, @not_tags, @additional_fields]
|
41
42
|
end
|
42
43
|
end
|
43
44
|
end
|
@@ -24,7 +24,7 @@ module Apadmi
|
|
24
24
|
|
25
25
|
keys = keys.map { |k| sanitise_key(k) } # Allows supporting raw keys, and keys prefixed with a hash which is common ADO practice
|
26
26
|
|
27
|
-
res = @network_service.do_get("/wit/workitems?ids=#{keys.join(",")}&errorPolicy=omit&api-version=7.1-preview.2")
|
27
|
+
res = @network_service.do_get("/wit/workitems?ids=#{keys.join(",")}&$expand=#{@ado_config.expand_type}&errorPolicy=omit&api-version=7.1-preview.2")
|
28
28
|
parsed = JSON.parse(res.body)
|
29
29
|
items = parsed["value"]
|
30
30
|
|
@@ -40,24 +40,16 @@ module Apadmi
|
|
40
40
|
|
41
41
|
# @return [Array<Apadmi::Grout::Issue>]
|
42
42
|
def search_unblocked_issues(component, status, ticket_types = [], options = nil)
|
43
|
-
tags = (options&.required_tags || []).push(*component).filter { |it| !it.blank? }
|
44
|
-
not_tags = (options&.not_tags || []).filter { |it| !it.blank? }
|
45
|
-
|
46
|
-
raise "Tags can either be required or not required, not both" unless (tags & not_tags).empty?
|
47
|
-
|
48
|
-
tags_filter = tags.map { |tag| " AND [System.Tags] CONTAINS '#{tag}' " }.join(" ")
|
49
|
-
not_tags_filter = not_tags.map { |tag| " AND [System.Tags] NOT CONTAINS '#{tag}'" }.join(" ")
|
50
|
-
|
51
43
|
status_filter = ("AND [System.State]='#{status}' " unless status.blank?) || ""
|
52
44
|
type_filter = ("AND [System.WorkItemType] IN (#{ticket_types.map { |t| "'#{t}'" }.join(", ")})" unless ticket_types.empty?) || ""
|
45
|
+
options_filter = get_options_filter(component, options)
|
53
46
|
wiql = %(
|
54
47
|
Select [System.Id]
|
55
48
|
From WorkItems
|
56
49
|
Where [System.Id] >= 1
|
57
50
|
#{status_filter}
|
58
|
-
#{tags_filter}
|
59
|
-
#{not_tags_filter}
|
60
51
|
#{type_filter}
|
52
|
+
#{options_filter}
|
61
53
|
)
|
62
54
|
|
63
55
|
get_issues_by_wiql(wiql)
|
@@ -90,6 +82,12 @@ module Apadmi
|
|
90
82
|
@network_service.do_post("/wit/workitems/#{key}/comments?#{API_VERSION_PARAM}-preview.3", payload.to_json)
|
91
83
|
end
|
92
84
|
|
85
|
+
# @param String key
|
86
|
+
# @param [Array<Hash>] payload
|
87
|
+
def update_ticket(key, payload)
|
88
|
+
@network_service.do_patch("/wit/workitems/#{key}?#{API_VERSION_PARAM}", payload.to_json)
|
89
|
+
end
|
90
|
+
|
93
91
|
# @param [String] key
|
94
92
|
# @param [String] tag
|
95
93
|
def add_tag(key, tag)
|
@@ -98,7 +96,7 @@ module Apadmi
|
|
98
96
|
"path" => "/fields/System.Tags",
|
99
97
|
"value" => tag
|
100
98
|
}]
|
101
|
-
|
99
|
+
update_ticket(key, payload)
|
102
100
|
end
|
103
101
|
|
104
102
|
# @param [String] key
|
@@ -112,7 +110,7 @@ module Apadmi
|
|
112
110
|
"path" => "/fields/System.Tags",
|
113
111
|
"value" => new_tags.join("; ")
|
114
112
|
}]
|
115
|
-
|
113
|
+
update_ticket(key, payload)
|
116
114
|
end
|
117
115
|
|
118
116
|
# @param [String] key
|
@@ -140,7 +138,7 @@ module Apadmi
|
|
140
138
|
"path" => "/fields/Microsoft.VSTS.Build.IntegrationBuild",
|
141
139
|
"value" => versions.join("; ")
|
142
140
|
}]
|
143
|
-
|
141
|
+
update_ticket(key, payload)
|
144
142
|
end
|
145
143
|
|
146
144
|
# @param [String] key
|
@@ -161,7 +159,27 @@ module Apadmi
|
|
161
159
|
"path" => "/fields/System.State",
|
162
160
|
"value" => state_name
|
163
161
|
}]
|
164
|
-
|
162
|
+
update_ticket(key, payload)
|
163
|
+
end
|
164
|
+
|
165
|
+
# @param [String] key
|
166
|
+
# @param [String] user
|
167
|
+
def assign_to_user(key, user)
|
168
|
+
key = sanitise_key(key)
|
169
|
+
|
170
|
+
payload = if user
|
171
|
+
[{
|
172
|
+
"op": "add",
|
173
|
+
"path": "/fields/System.AssignedTo",
|
174
|
+
"value": user
|
175
|
+
}]
|
176
|
+
else
|
177
|
+
[{
|
178
|
+
"op": "remove",
|
179
|
+
"path": "/fields/System.AssignedTo"
|
180
|
+
}]
|
181
|
+
end
|
182
|
+
update_ticket(key, payload)
|
165
183
|
end
|
166
184
|
|
167
185
|
# @param [String] key
|
@@ -194,6 +212,28 @@ module Apadmi
|
|
194
212
|
ids = items.map { |item| item["id"] } || []
|
195
213
|
find_issues_by_keys(ids)
|
196
214
|
end
|
215
|
+
|
216
|
+
# @param component [String] Included to be consistent with JIRA, this will boil down to a tag in ADO
|
217
|
+
# @param options [Apadmi::Grout::AdoFindTicketsOptions] options as defined to query
|
218
|
+
|
219
|
+
# @return [String]
|
220
|
+
def get_options_filter(component, options = nil)
|
221
|
+
tags = (options&.required_tags || []).push(*component).filter { |it| !it.blank? }
|
222
|
+
not_tags = (options&.not_tags || []).filter { |it| !it.blank? }
|
223
|
+
additional_fields = (options&.additional_fields || {}).reject { |k, _v| k.blank? }
|
224
|
+
|
225
|
+
raise "Tags can either be required or not required, not both" unless (tags & not_tags).empty?
|
226
|
+
|
227
|
+
tags_filter = tags.map { |tag| " AND [System.Tags] CONTAINS '#{tag}' " }.join(" ")
|
228
|
+
not_tags_filter = not_tags.map { |tag| " AND [System.Tags] NOT CONTAINS '#{tag}'" }.join(" ")
|
229
|
+
additional_fields_filter = additional_fields.collect { |k, v| "AND [#{k}]='#{v}'" }.join(" ")
|
230
|
+
|
231
|
+
%(
|
232
|
+
#{tags_filter}
|
233
|
+
#{not_tags_filter}
|
234
|
+
#{additional_fields_filter}
|
235
|
+
)
|
236
|
+
end
|
197
237
|
end
|
198
238
|
end
|
199
239
|
end
|
data/lib/apadmi/grout/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: apadmi_grout
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Apadmi
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-09-
|
11
|
+
date: 2023-09-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: faraday
|