gds-api-adapters 63.0.0 → 63.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +1 -1
- data/lib/gds_api/publishing_api.rb +496 -4
- data/lib/gds_api/publishing_api/special_route_publisher.rb +2 -2
- data/lib/gds_api/publishing_api_v2.rb +5 -488
- data/lib/gds_api/test_helpers/publishing_api.rb +760 -29
- data/lib/gds_api/test_helpers/publishing_api_v2.rb +3 -689
- data/lib/gds_api/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5a863b33914da6a3b366207bc6a642664f19538645afbef4feba3b4d3eff1909
|
4
|
+
data.tar.gz: d49d4cb121b671f37bcc43f573a7c430637f8f50b180a9508d63598d46d02408
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a40058bfe9040279b5d27b1caac8363dd4c3d2f3cf8d22c29d19fb50af20e27f5f93c390cc08c6e9194e4edca1d378aee7be83a39f0d2dcbebc3e8c018180aea
|
7
|
+
data.tar.gz: 3600add23c8bb27cd0de72ef2dfbb8b27cf1e2b4a9cd2e7e6bab5c9122e4933964e21fe12d122b048b427beca353eb9e1bfbbe587fe7613989b22f9b53314f19
|
data/README.md
CHANGED
@@ -12,7 +12,7 @@ results = search.search(q: "taxes")
|
|
12
12
|
|
13
13
|
Example adapters for frequently used applications:
|
14
14
|
|
15
|
-
- [Publishing API](lib/gds_api/
|
15
|
+
- [Publishing API](lib/gds_api/publishing_api.rb) ([docs](http://www.rubydoc.info/gems/gds-api-adapters/GdsApi/PublishingApi), [test helper code](https://github.com/alphagov/gds-api-adapters/blob/master/lib/gds_api/test_helpers/publishing_api.rb), [test helper docs](http://www.rubydoc.info/gems/gds-api-adapters/GdsApi/TestHelpers/PublishingApi))
|
16
16
|
- [Content Store](lib/gds_api/content_store.rb) ([docs](http://www.rubydoc.info/gems/gds-api-adapters/GdsApi/ContentStore), [test helper code](https://github.com/alphagov/gds-api-adapters/blob/master/lib/gds_api/test_helpers/content_store.rb), [test helper docs](http://www.rubydoc.info/gems/gds-api-adapters/GdsApi/TestHelpers/ContentStore))
|
17
17
|
- [Search API](lib/gds_api/search.rb) ([docs](http://www.rubydoc.info/gems/gds-api-adapters/GdsApi/Search), [test helper code](https://github.com/alphagov/gds-api-adapters/blob/master/lib/gds_api/test_helpers/search.rb), [test helper docs](http://www.rubydoc.info/gems/gds-api-adapters/GdsApi/TestHelpers/Search))
|
18
18
|
|
@@ -1,7 +1,453 @@
|
|
1
1
|
require_relative "base"
|
2
2
|
require_relative "exceptions"
|
3
3
|
|
4
|
+
# Adapter for the Publishing API.
|
5
|
+
#
|
6
|
+
# @see https://github.com/alphagov/publishing-api
|
7
|
+
# @see https://github.com/alphagov/publishing-api/blob/master/doc/publishing-application-examples.md
|
8
|
+
# @see https://github.com/alphagov/publishing-api/blob/master/doc/model.md
|
9
|
+
# @api documented
|
4
10
|
class GdsApi::PublishingApi < GdsApi::Base
|
11
|
+
# Put a content item
|
12
|
+
#
|
13
|
+
# @param content_id [UUID]
|
14
|
+
# @param payload [Hash] A valid content item
|
15
|
+
#
|
16
|
+
# @see https://github.com/alphagov/publishing-api/blob/master/doc/api.md#put-v2contentcontent_id
|
17
|
+
def put_content(content_id, payload)
|
18
|
+
put_json(content_url(content_id), payload)
|
19
|
+
end
|
20
|
+
|
21
|
+
# Return a content item
|
22
|
+
#
|
23
|
+
# Raises exception if the item doesn't exist.
|
24
|
+
#
|
25
|
+
# @param content_id [UUID]
|
26
|
+
# @param params [Hash]
|
27
|
+
# @option params [String] locale The language, defaults to 'en' in publishing-api.
|
28
|
+
#
|
29
|
+
# @return [GdsApi::Response] a content item
|
30
|
+
#
|
31
|
+
# @raise [HTTPNotFound] when the content item is not found
|
32
|
+
# @see https://github.com/alphagov/publishing-api/blob/master/doc/api.md#get-v2contentcontent_id
|
33
|
+
def get_content(content_id, params = {})
|
34
|
+
get_json(content_url(content_id, params))
|
35
|
+
end
|
36
|
+
|
37
|
+
# Find the content_ids for a list of base_paths.
|
38
|
+
#
|
39
|
+
# @param base_paths [Array]
|
40
|
+
# @param exclude_document_types [Array] (optional)
|
41
|
+
# @param exclude_unpublishing_types [Array] (optional)
|
42
|
+
# @param with_drafts [Boolean] (optional)
|
43
|
+
# @return [Hash] a hash, keyed by `base_path` with `content_id` as value
|
44
|
+
# @example
|
45
|
+
#
|
46
|
+
# publishing_api.lookup_content_ids(base_paths: ['/foo', '/bar'])
|
47
|
+
# # => { "/foo" => "51ac4247-fd92-470a-a207-6b852a97f2db", "/bar" => "261bd281-f16c-48d5-82d2-9544019ad9ca" }
|
48
|
+
#
|
49
|
+
# @see https://github.com/alphagov/publishing-api/blob/master/doc/api.md#post-lookup-by-base-path
|
50
|
+
def lookup_content_ids(base_paths:, exclude_document_types: nil, exclude_unpublishing_types: nil, with_drafts: false)
|
51
|
+
options = { base_paths: base_paths }
|
52
|
+
options[:exclude_document_types] = exclude_document_types if exclude_document_types
|
53
|
+
options[:exclude_unpublishing_types] = exclude_unpublishing_types if exclude_unpublishing_types
|
54
|
+
options[:with_drafts] = with_drafts if with_drafts
|
55
|
+
response = post_json("#{endpoint}/lookup-by-base-path", options)
|
56
|
+
response.to_hash
|
57
|
+
end
|
58
|
+
|
59
|
+
# Find the content_id for a base_path.
|
60
|
+
#
|
61
|
+
# Convenience method if you only need to look up one content_id for a
|
62
|
+
# base_path. For multiple base_paths, use {GdsApi::PublishingApiV2#lookup_content_ids}.
|
63
|
+
#
|
64
|
+
# @param base_path [String]
|
65
|
+
# @param exclude_document_types [Array] (optional)
|
66
|
+
# @param exclude_unpublishing_types [Array] (optional)
|
67
|
+
# @param with_drafts [Boolean] (optional)
|
68
|
+
#
|
69
|
+
# @return [UUID] the `content_id` for the `base_path`
|
70
|
+
#
|
71
|
+
# @example
|
72
|
+
#
|
73
|
+
# publishing_api.lookup_content_id(base_path: '/foo')
|
74
|
+
# # => "51ac4247-fd92-470a-a207-6b852a97f2db"
|
75
|
+
#
|
76
|
+
# @see https://github.com/alphagov/publishing-api/blob/master/doc/api.md#post-lookup-by-base-path
|
77
|
+
def lookup_content_id(base_path:, exclude_document_types: nil, exclude_unpublishing_types: nil, with_drafts: false)
|
78
|
+
lookups = lookup_content_ids(
|
79
|
+
base_paths: [base_path],
|
80
|
+
exclude_document_types: exclude_document_types,
|
81
|
+
exclude_unpublishing_types: exclude_unpublishing_types,
|
82
|
+
with_drafts: with_drafts,
|
83
|
+
)
|
84
|
+
lookups[base_path]
|
85
|
+
end
|
86
|
+
|
87
|
+
# Publish a content item
|
88
|
+
#
|
89
|
+
# The publishing-api will "publish" a draft item, so that it will be visible
|
90
|
+
# on the public site.
|
91
|
+
#
|
92
|
+
# @param content_id [UUID]
|
93
|
+
# @param update_type [String] Either 'major', 'minor' or 'republish'
|
94
|
+
# @param options [Hash]
|
95
|
+
# @option options [String] locale The language, defaults to 'en' in publishing-api.
|
96
|
+
#
|
97
|
+
# @see https://github.com/alphagov/publishing-api/blob/master/doc/api.md#post-v2contentcontent_idpublish
|
98
|
+
def publish(content_id, update_type = nil, options = {})
|
99
|
+
params = {
|
100
|
+
update_type: update_type,
|
101
|
+
}
|
102
|
+
|
103
|
+
optional_keys = %i[locale previous_version]
|
104
|
+
|
105
|
+
params = merge_optional_keys(params, options, optional_keys)
|
106
|
+
|
107
|
+
post_json(publish_url(content_id), params)
|
108
|
+
end
|
109
|
+
|
110
|
+
# Republish a content item
|
111
|
+
#
|
112
|
+
# The publishing-api will "republish" a live edition. This can be used to remove an unpublishing or to
|
113
|
+
# re-send a published edition downstream
|
114
|
+
#
|
115
|
+
# @param content_id [UUID]
|
116
|
+
# @param options [Hash]
|
117
|
+
# @option options [String] locale The language, defaults to 'en' in publishing-api.
|
118
|
+
#
|
119
|
+
# @see ...
|
120
|
+
def republish(content_id, options = {})
|
121
|
+
optional_keys = %i[locale previous_version]
|
122
|
+
|
123
|
+
params = merge_optional_keys({}, options, optional_keys)
|
124
|
+
|
125
|
+
post_json(republish_url(content_id), params)
|
126
|
+
end
|
127
|
+
|
128
|
+
# Import content into the publishing API
|
129
|
+
#
|
130
|
+
# The publishing-api will delete any content which has the content
|
131
|
+
# id provided, and then import the data given.
|
132
|
+
#
|
133
|
+
# @param content_id [UUID]
|
134
|
+
# @param content_items [Array]
|
135
|
+
#
|
136
|
+
# @see https://github.com/alphagov/publishing-api/blob/master/doc/api.md#post-v2contentcontent_idimport
|
137
|
+
def import(content_id, locale, content_items)
|
138
|
+
params = {
|
139
|
+
history: content_items,
|
140
|
+
}
|
141
|
+
|
142
|
+
post_json("#{endpoint}/v2/content/#{content_id}/import?locale=#{locale}", params)
|
143
|
+
end
|
144
|
+
|
145
|
+
# Unpublish a content item
|
146
|
+
#
|
147
|
+
# The publishing API will "unpublish" a live item, to remove it from the public
|
148
|
+
# site, or update an existing unpublishing.
|
149
|
+
#
|
150
|
+
# @param content_id [UUID]
|
151
|
+
# @param type [String] Either 'withdrawal', 'gone' or 'redirect'.
|
152
|
+
# @param explanation [String] (optional) Text to show on the page.
|
153
|
+
# @param alternative_path [String] (optional) Alternative path to show on the page or redirect to.
|
154
|
+
# @param discard_drafts [Boolean] (optional) Whether to discard drafts on that item. Defaults to false.
|
155
|
+
# @param previous_version [Integer] (optional) A lock version number for optimistic locking.
|
156
|
+
# @param locale [String] (optional) The content item locale.
|
157
|
+
# @param unpublished_at [Time] (optional) The time the content was withdrawn. Ignored for types other than withdrawn
|
158
|
+
# @param redirects [Array] (optional) Required if no alternative_path is given. An array of redirect values, ie: { path:, type:, destination: }
|
159
|
+
#
|
160
|
+
# @see https://github.com/alphagov/publishing-api/blob/master/doc/api.md#post-v2contentcontent_idunpublish
|
161
|
+
def unpublish(content_id, type:, explanation: nil, alternative_path: nil, discard_drafts: false, allow_draft: false, previous_version: nil, locale: nil, unpublished_at: nil, redirects: nil)
|
162
|
+
params = {
|
163
|
+
type: type,
|
164
|
+
}
|
165
|
+
|
166
|
+
params[:explanation] = explanation if explanation
|
167
|
+
params[:alternative_path] = alternative_path if alternative_path
|
168
|
+
params[:previous_version] = previous_version if previous_version
|
169
|
+
params[:discard_drafts] = discard_drafts if discard_drafts
|
170
|
+
params[:allow_draft] = allow_draft if allow_draft
|
171
|
+
params[:locale] = locale if locale
|
172
|
+
params[:unpublished_at] = unpublished_at.utc.iso8601 if unpublished_at
|
173
|
+
params[:redirects] = redirects if redirects
|
174
|
+
|
175
|
+
post_json(unpublish_url(content_id), params)
|
176
|
+
end
|
177
|
+
|
178
|
+
# Discard a draft
|
179
|
+
#
|
180
|
+
# Deletes the draft content item.
|
181
|
+
#
|
182
|
+
# @param options [Hash]
|
183
|
+
# @option options [String] locale The language, defaults to 'en' in publishing-api.
|
184
|
+
# @option options [Integer] previous_version used to ensure the request is discarding the latest lock version of the draft
|
185
|
+
#
|
186
|
+
# @see https://github.com/alphagov/publishing-api/blob/master/doc/api.md#post-v2contentcontent_iddiscard-draft
|
187
|
+
def discard_draft(content_id, options = {})
|
188
|
+
optional_keys = %i[locale previous_version]
|
189
|
+
|
190
|
+
params = merge_optional_keys({}, options, optional_keys)
|
191
|
+
|
192
|
+
post_json(discard_url(content_id), params)
|
193
|
+
end
|
194
|
+
|
195
|
+
# Get the link set for the given content_id.
|
196
|
+
#
|
197
|
+
# Given a Content ID, it fetchs the existing link set and their version.
|
198
|
+
#
|
199
|
+
# @param content_id [String]
|
200
|
+
#
|
201
|
+
# @return [GdsApi::Response] A response containing `links` and `version`.
|
202
|
+
#
|
203
|
+
# @example
|
204
|
+
#
|
205
|
+
# publishing_api.get_links("a-content-id")
|
206
|
+
# # => {
|
207
|
+
# "content_id" => "a-content-id",
|
208
|
+
# "links" => [
|
209
|
+
# "organisation" => "organisation-content-id",
|
210
|
+
# "document_collection" => "document-collection-content-id"
|
211
|
+
# ],
|
212
|
+
# "version" => 17
|
213
|
+
# }
|
214
|
+
#
|
215
|
+
# @see https://github.com/alphagov/publishing-api/blob/master/doc/api.md#get-v2linkscontent_id
|
216
|
+
def get_links(content_id)
|
217
|
+
get_json(links_url(content_id))
|
218
|
+
end
|
219
|
+
|
220
|
+
# Returns an array of changes to links.
|
221
|
+
#
|
222
|
+
# The link changes can be filtered by link_type, source content_id,
|
223
|
+
# target content_id and user. A maximum of 250 changes will be
|
224
|
+
# returned.
|
225
|
+
#
|
226
|
+
# @param link_types [Array] Array of link_types to filter by.
|
227
|
+
# @param source_content_ids [Array] Array of source content ids to filter by.
|
228
|
+
# @param target_content_ids [Array] Array of target content ids to filter by.
|
229
|
+
# @param users [Array] User UIDs to filter by.
|
230
|
+
# @example
|
231
|
+
#
|
232
|
+
# publishing_api.get_links_changes(
|
233
|
+
# link_types: ['taxons'],
|
234
|
+
# target_content_ids: ['a544d48b-1e9e-47fb-b427-7a987c658c14']
|
235
|
+
# )
|
236
|
+
#
|
237
|
+
def get_links_changes(params)
|
238
|
+
get_json(links_changes_url(params))
|
239
|
+
end
|
240
|
+
|
241
|
+
# Get expanded links
|
242
|
+
#
|
243
|
+
# Return the expanded links of the item.
|
244
|
+
#
|
245
|
+
# @param content_id [UUID]
|
246
|
+
# @param locale [String] Locale with which to generate the expanded links. Unless this is specified, the default locale (`en`) in the Publishing API will be used.
|
247
|
+
# @param with_drafts [Bool] Whether links to draft-only editions are returned, defaulting to `true`.
|
248
|
+
# @param generate [Bool] Whether to require publishing-api to generate the expanded links, which may be slow. Defaults to `false`.
|
249
|
+
#
|
250
|
+
# @example
|
251
|
+
#
|
252
|
+
# publishing_api.get_expanded_links("8157589b-65e2-4df6-92ba-2c91d80006c0", with_drafts: false).to_h
|
253
|
+
#
|
254
|
+
# #=> {
|
255
|
+
# "generated" => "2017-08-01T10:42:49Z",
|
256
|
+
# "expanded_links" => {
|
257
|
+
# "organisations" => [
|
258
|
+
# {
|
259
|
+
# "content_id" => "21aa83a2-a47f-4189-a252-b02f8c322012",
|
260
|
+
# ... (and more attributes)
|
261
|
+
# }
|
262
|
+
# ]
|
263
|
+
# }
|
264
|
+
# }
|
265
|
+
#
|
266
|
+
# @see https://github.com/alphagov/publishing-api/blob/master/doc/api.md#get-v2expanded-linkscontent_id
|
267
|
+
def get_expanded_links(content_id, locale: nil, with_drafts: true, generate: false)
|
268
|
+
params = {}
|
269
|
+
params[:with_drafts] = "false" unless with_drafts
|
270
|
+
params[:generate] = "true" if generate
|
271
|
+
params[:locale] = locale if locale
|
272
|
+
query = query_string(params)
|
273
|
+
validate_content_id(content_id)
|
274
|
+
get_json("#{endpoint}/v2/expanded-links/#{content_id}#{query}")
|
275
|
+
end
|
276
|
+
|
277
|
+
# Patch the links of a content item
|
278
|
+
#
|
279
|
+
# @param content_id [UUID]
|
280
|
+
# @param params [Hash]
|
281
|
+
# @option params [Hash] links A "links hash"
|
282
|
+
# @option params [Integer] previous_version The previous version (returned by `get_links`). If this version is not the current version, the publishing-api will reject the change and return 409 Conflict. (optional)
|
283
|
+
# @option params [Boolean] bulk_publishing Set to true to indicate that this is part of a mass-republish. Allows the publishing-api to prioritise human-initiated publishing (optional, default false)
|
284
|
+
# @example
|
285
|
+
#
|
286
|
+
# publishing_api.patch_links(
|
287
|
+
# '86963c13-1f57-4005-b119-e7cf3cb92ecf',
|
288
|
+
# links: {
|
289
|
+
# topics: ['d6e1527d-d0c0-40d5-9603-b9f3e6866b8a'],
|
290
|
+
# mainstream_browse_pages: ['d6e1527d-d0c0-40d5-9603-b9f3e6866b8a'],
|
291
|
+
# },
|
292
|
+
# previous_version: 10,
|
293
|
+
# bulk_publishing: true
|
294
|
+
# )
|
295
|
+
#
|
296
|
+
# @see https://github.com/alphagov/publishing-api/blob/master/doc/api.md#patch-v2linkscontent_id
|
297
|
+
def patch_links(content_id, params)
|
298
|
+
payload = {
|
299
|
+
links: params.fetch(:links),
|
300
|
+
}
|
301
|
+
|
302
|
+
payload = merge_optional_keys(payload, params, %i[previous_version bulk_publishing])
|
303
|
+
|
304
|
+
patch_json(links_url(content_id), payload)
|
305
|
+
end
|
306
|
+
|
307
|
+
# Get a list of content items from the Publishing API.
|
308
|
+
#
|
309
|
+
# The only required key in the params hash is `document_type`. These will be used to filter down the content items being returned by the API. Other allowed options can be seen from the link below.
|
310
|
+
#
|
311
|
+
# @param params [Hash] At minimum, this hash has to include the `document_type` of the content items we wish to see. All other optional keys are documented above.
|
312
|
+
#
|
313
|
+
# @example
|
314
|
+
#
|
315
|
+
# publishing_api.get_content_items(
|
316
|
+
# document_type: 'taxon',
|
317
|
+
# q: 'Driving',
|
318
|
+
# page: 1,
|
319
|
+
# per_page: 50,
|
320
|
+
# publishing_app: 'content-tagger',
|
321
|
+
# fields: ['title', 'description', 'public_updated_at'],
|
322
|
+
# locale: 'en',
|
323
|
+
# order: '-public_updated_at'
|
324
|
+
# )
|
325
|
+
#
|
326
|
+
# @see https://github.com/alphagov/publishing-api/blob/master/doc/api.md#get-v2content
|
327
|
+
def get_content_items(params)
|
328
|
+
query = query_string(params)
|
329
|
+
get_json("#{endpoint}/v2/content#{query}")
|
330
|
+
end
|
331
|
+
|
332
|
+
# Returns an Enumerator of content items for the provided
|
333
|
+
# query string parameters.
|
334
|
+
#
|
335
|
+
# @param params [Hash]
|
336
|
+
#
|
337
|
+
# @return [Enumerator] an enumerator of content items
|
338
|
+
#
|
339
|
+
# @see https://github.com/alphagov/publishing-api/blob/master/doc/api.md#get-v2content
|
340
|
+
def get_content_items_enum(params)
|
341
|
+
Enumerator.new do |yielder|
|
342
|
+
(1..Float::INFINITY).each do |index|
|
343
|
+
merged_params = params.merge(page: index)
|
344
|
+
page = get_content_items(merged_params).to_h
|
345
|
+
results = page.fetch("results", [])
|
346
|
+
results.each do |result|
|
347
|
+
yielder << result
|
348
|
+
end
|
349
|
+
break if page.fetch("pages") <= index
|
350
|
+
end
|
351
|
+
end
|
352
|
+
end
|
353
|
+
|
354
|
+
# FIXME: Add documentation
|
355
|
+
#
|
356
|
+
# @see https://github.com/alphagov/publishing-api/blob/master/doc/api.md#get-v2linkables
|
357
|
+
def get_linkables(document_type: nil)
|
358
|
+
if document_type.nil?
|
359
|
+
raise ArgumentError.new("Please provide a `document_type`")
|
360
|
+
end
|
361
|
+
|
362
|
+
get_json("#{endpoint}/v2/linkables?document_type=#{document_type}")
|
363
|
+
end
|
364
|
+
|
365
|
+
# FIXME: Add documentation
|
366
|
+
#
|
367
|
+
# @see https://github.com/alphagov/publishing-api/blob/master/doc/api.md#get-v2linkedcontent_id
|
368
|
+
def get_linked_items(content_id, params = {})
|
369
|
+
query = query_string(params)
|
370
|
+
validate_content_id(content_id)
|
371
|
+
get_json("#{endpoint}/v2/linked/#{content_id}#{query}")
|
372
|
+
end
|
373
|
+
|
374
|
+
# Returns a paginated list of editions for the provided query string
|
375
|
+
# parameters.
|
376
|
+
#
|
377
|
+
# @param params [Hash]
|
378
|
+
#
|
379
|
+
# @return [GdsApi::Response] a paginated list of editions
|
380
|
+
#
|
381
|
+
# @see https://github.com/alphagov/publishing-api/blob/master/doc/api.md#get-v2editions
|
382
|
+
def get_editions(params = {})
|
383
|
+
get_json(get_editions_url(params))
|
384
|
+
end
|
385
|
+
|
386
|
+
# Returns an Enumerator of Response objects for each page of results of
|
387
|
+
# editions for the provided query string parameters.
|
388
|
+
#
|
389
|
+
# @param params [Hash]
|
390
|
+
#
|
391
|
+
# @return [Enumerator] an enumerator of editions responses
|
392
|
+
#
|
393
|
+
# @see https://github.com/alphagov/publishing-api/blob/master/doc/api.md#get-v2editions
|
394
|
+
def get_paged_editions(params = {})
|
395
|
+
Enumerator.new do |yielder|
|
396
|
+
next_link = get_editions_url(params)
|
397
|
+
while next_link
|
398
|
+
yielder.yield begin
|
399
|
+
response = get_json(next_link)
|
400
|
+
end
|
401
|
+
next_link_info = response["links"].select { |link| link["rel"] == "next" }.first
|
402
|
+
next_link = next_link_info && next_link_info["href"]
|
403
|
+
end
|
404
|
+
end
|
405
|
+
end
|
406
|
+
|
407
|
+
# Returns a mapping of content_ids => links hashes
|
408
|
+
#
|
409
|
+
# @param content_ids [Array]
|
410
|
+
#
|
411
|
+
# @return [Hash] a mapping of content_id => links
|
412
|
+
#
|
413
|
+
# @example
|
414
|
+
#
|
415
|
+
# publishing_api.get_links_for_content_ids([
|
416
|
+
# "e1067450-7d13-45ff-ada4-5e3dd4025fb7",
|
417
|
+
# "72ed754c-4c82-415f-914a-ab6760454cb4"
|
418
|
+
# ])
|
419
|
+
#
|
420
|
+
# #=> {
|
421
|
+
# "e1067450-7d13-45ff-ada4-5e3dd4025fb7" => {
|
422
|
+
# links: {
|
423
|
+
# taxons: ["13bba81c-b2b1-4b13-a3de-b24748977198"]},
|
424
|
+
# ... (and more attributes)
|
425
|
+
# version: 10},
|
426
|
+
# "72ed754c-4c82-415f-914a-ab6760454cb4" => { ..etc }
|
427
|
+
# }
|
428
|
+
#
|
429
|
+
def get_links_for_content_ids(content_ids)
|
430
|
+
post_json("#{endpoint}/v2/links/by-content-id", content_ids: content_ids).to_hash
|
431
|
+
end
|
432
|
+
|
433
|
+
# Reserves a path for a publishing application
|
434
|
+
#
|
435
|
+
# Returns success or failure only.
|
436
|
+
#
|
437
|
+
# @param payload [Hash]
|
438
|
+
# @option payload [Hash] publishing_app The publishing application, like `content-tagger`
|
439
|
+
#
|
440
|
+
# @see https://docs.publishing.service.gov.uk/apis/publishing-api/api.html#put-pathsbase_path
|
441
|
+
def put_path(base_path, payload)
|
442
|
+
url = "#{endpoint}/paths#{base_path}"
|
443
|
+
put_json(url, payload)
|
444
|
+
end
|
445
|
+
|
446
|
+
def unreserve_path(base_path, publishing_app)
|
447
|
+
payload = { publishing_app: publishing_app }
|
448
|
+
delete_json(unreserve_url(base_path), payload)
|
449
|
+
end
|
450
|
+
|
5
451
|
# Create a publishing intent for a base_path.
|
6
452
|
#
|
7
453
|
# @param base_path [String]
|
@@ -33,12 +479,48 @@ class GdsApi::PublishingApi < GdsApi::Base
|
|
33
479
|
e
|
34
480
|
end
|
35
481
|
|
36
|
-
|
37
|
-
|
38
|
-
|
482
|
+
private
|
483
|
+
|
484
|
+
def content_url(content_id, params = {})
|
485
|
+
validate_content_id(content_id)
|
486
|
+
query = query_string(params)
|
487
|
+
"#{endpoint}/v2/content/#{content_id}#{query}"
|
39
488
|
end
|
40
489
|
|
41
|
-
|
490
|
+
def links_url(content_id)
|
491
|
+
validate_content_id(content_id)
|
492
|
+
"#{endpoint}/v2/links/#{content_id}"
|
493
|
+
end
|
494
|
+
|
495
|
+
def links_changes_url(params = {})
|
496
|
+
query = query_string(params)
|
497
|
+
"#{endpoint}/v2/links/changes#{query}"
|
498
|
+
end
|
499
|
+
|
500
|
+
def publish_url(content_id)
|
501
|
+
validate_content_id(content_id)
|
502
|
+
"#{endpoint}/v2/content/#{content_id}/publish"
|
503
|
+
end
|
504
|
+
|
505
|
+
def republish_url(content_id)
|
506
|
+
validate_content_id(content_id)
|
507
|
+
"#{endpoint}/v2/content/#{content_id}/republish"
|
508
|
+
end
|
509
|
+
|
510
|
+
def unpublish_url(content_id)
|
511
|
+
validate_content_id(content_id)
|
512
|
+
"#{endpoint}/v2/content/#{content_id}/unpublish"
|
513
|
+
end
|
514
|
+
|
515
|
+
def discard_url(content_id)
|
516
|
+
validate_content_id(content_id)
|
517
|
+
"#{endpoint}/v2/content/#{content_id}/discard-draft"
|
518
|
+
end
|
519
|
+
|
520
|
+
def get_editions_url(params)
|
521
|
+
query = query_string(params)
|
522
|
+
"#{endpoint}/v2/editions#{query}"
|
523
|
+
end
|
42
524
|
|
43
525
|
def unreserve_url(base_path)
|
44
526
|
"#{endpoint}/paths#{base_path}"
|
@@ -51,4 +533,14 @@ private
|
|
51
533
|
def paths_url(base_path)
|
52
534
|
"#{endpoint}/paths#{base_path}"
|
53
535
|
end
|
536
|
+
|
537
|
+
def merge_optional_keys(params, options, optional_keys)
|
538
|
+
optional_keys.each_with_object(params) do |optional_key, hash|
|
539
|
+
hash.merge!(optional_key => options[optional_key]) if options[optional_key]
|
540
|
+
end
|
541
|
+
end
|
542
|
+
|
543
|
+
def validate_content_id(content_id)
|
544
|
+
raise ArgumentError, "content_id cannot be nil" unless content_id
|
545
|
+
end
|
54
546
|
end
|