Class: GdsApi::PublishingApi
- Defined in:
- lib/gds_api/publishing_api.rb,
lib/gds_api/publishing_api/special_route_publisher.rb
Overview
Adapter for the Publishing API.
Defined Under Namespace
Classes: NoLiveVersion, SpecialRoutePublisher
Instance Attribute Summary
Attributes inherited from Base
Instance Method Summary collapse
-
#destroy_intent(base_path) ⇒ Object
Delete a publishing intent for a base_path.
-
#discard_draft(content_id, options = {}) ⇒ Object
Discard a draft.
-
#get_content(content_id, params = {}) ⇒ GdsApi::Response
Return a content item.
-
#get_content_items(params) ⇒ Object
Get a list of content items from the Publishing API.
-
#get_content_items_enum(params) ⇒ Enumerator
Returns an Enumerator of content items for the provided query string parameters.
-
#get_editions(params = {}) ⇒ GdsApi::Response
Returns a paginated list of editions for the provided query string parameters.
-
#get_expanded_links(content_id, locale: nil, with_drafts: true, generate: false) ⇒ Object
Get expanded links.
-
#get_linkables(document_type: nil) ⇒ Object
FIXME: Add documentation.
-
#get_linked_items(content_id, params = {}) ⇒ Object
FIXME: Add documentation.
-
#get_links(content_id) ⇒ GdsApi::Response
Get the link set for the given content_id.
-
#get_links_changes(params) ⇒ Object
Returns an array of changes to links.
-
#get_links_for_content_ids(content_ids) ⇒ Hash
Returns a mapping of content_ids => links hashes.
-
#get_live_content(content_id, locale = "en") ⇒ GdsApi::Response
Return a live content item, i.e.
-
#get_paged_editions(params = {}) ⇒ Enumerator
Returns an Enumerator of Response objects for each page of results of editions for the provided query string parameters.
-
#import(content_id, locale, content_items) ⇒ Object
Import content into the publishing API.
-
#lookup_content_id(base_path:, exclude_document_types: nil, exclude_unpublishing_types: nil, with_drafts: false) ⇒ UUID
Find the content_id for a base_path.
-
#lookup_content_ids(base_paths:, exclude_document_types: nil, exclude_unpublishing_types: nil, with_drafts: false) ⇒ Hash
Find the content_ids for a list of base_paths.
-
#patch_links(content_id, params) ⇒ Object
Patch the links of a content item.
-
#publish(content_id, update_type = nil, options = {}) ⇒ Object
Publish a content item.
-
#put_content(content_id, payload) ⇒ Object
Put a content item.
-
#put_intent(base_path, payload) ⇒ Object
Create a publishing intent for a base_path.
-
#put_path(base_path, payload) ⇒ Object
Reserves a path for a publishing application.
-
#republish(content_id, options = {}) ⇒ Object
Republish a content item.
-
#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) ⇒ Object
Unpublish a content item.
- #unreserve_path(base_path, publishing_app) ⇒ Object
Methods inherited from Base
#client, #create_client, #get_list, #initialize, #url_for_slug
Constructor Details
This class inherits a constructor from GdsApi::Base
Instance Method Details
#destroy_intent(base_path) ⇒ Object
Delete a publishing intent for a base_path.
501 502 503 504 505 |
# File 'lib/gds_api/publishing_api.rb', line 501 def destroy_intent(base_path) delete_json(intent_url(base_path)) rescue GdsApi::HTTPNotFound => e e end |
#discard_draft(content_id, options = {}) ⇒ Object
Discard a draft
Deletes the draft content item.
212 213 214 215 216 217 218 |
# File 'lib/gds_api/publishing_api.rb', line 212 def discard_draft(content_id, = {}) optional_keys = %i[locale previous_version] params = merge_optional_keys({}, , optional_keys) post_json(discard_url(content_id), params) end |
#get_content(content_id, params = {}) ⇒ GdsApi::Response
Return a content item
Raises exception if the item doesn’t exist.
35 36 37 |
# File 'lib/gds_api/publishing_api.rb', line 35 def get_content(content_id, params = {}) get_json(content_url(content_id, params)) end |
#get_content_items(params) ⇒ Object
Get a list of content items from the Publishing API.
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.
352 353 354 355 |
# File 'lib/gds_api/publishing_api.rb', line 352 def get_content_items(params) query = query_string(params) get_json("#{endpoint}/v2/content#{query}") end |
#get_content_items_enum(params) ⇒ Enumerator
Returns an Enumerator of content items for the provided query string parameters.
365 366 367 368 369 370 371 372 373 374 375 376 377 |
# File 'lib/gds_api/publishing_api.rb', line 365 def get_content_items_enum(params) Enumerator.new do |yielder| (1..Float::INFINITY).each do |index| merged_params = params.merge(page: index) page = get_content_items(merged_params).to_h results = page.fetch("results", []) results.each do |result| yielder << result end break if page.fetch("pages") <= index end end end |
#get_editions(params = {}) ⇒ GdsApi::Response
Returns a paginated list of editions for the provided query string parameters.
407 408 409 |
# File 'lib/gds_api/publishing_api.rb', line 407 def get_editions(params = {}) get_json(get_editions_url(params)) end |
#get_expanded_links(content_id, locale: nil, with_drafts: true, generate: false) ⇒ Object
Get expanded links
Return the expanded links of the item.
292 293 294 295 296 297 298 299 300 |
# File 'lib/gds_api/publishing_api.rb', line 292 def (content_id, locale: nil, with_drafts: true, generate: false) params = {} params[:with_drafts] = "false" unless with_drafts params[:generate] = "true" if generate params[:locale] = locale if locale query = query_string(params) validate_content_id(content_id) get_json("#{endpoint}/v2/expanded-links/#{content_id}#{query}") end |
#get_linkables(document_type: nil) ⇒ Object
FIXME: Add documentation
382 383 384 385 386 387 388 |
# File 'lib/gds_api/publishing_api.rb', line 382 def get_linkables(document_type: nil) if document_type.nil? raise ArgumentError, "Please provide a `document_type`" end get_json("#{endpoint}/v2/linkables?document_type=#{document_type}") end |
#get_linked_items(content_id, params = {}) ⇒ Object
FIXME: Add documentation
393 394 395 396 397 |
# File 'lib/gds_api/publishing_api.rb', line 393 def get_linked_items(content_id, params = {}) query = query_string(params) validate_content_id(content_id) get_json("#{endpoint}/v2/linked/#{content_id}#{query}") end |
#get_links(content_id) ⇒ GdsApi::Response
Get the link set for the given content_id.
Given a Content ID, it fetchs the existing link set and their version.
241 242 243 |
# File 'lib/gds_api/publishing_api.rb', line 241 def get_links(content_id) get_json(links_url(content_id)) end |
#get_links_changes(params) ⇒ Object
Returns an array of changes to links.
The link changes can be filtered by link_type, source content_id, target content_id and user. A maximum of 250 changes will be returned.
262 263 264 |
# File 'lib/gds_api/publishing_api.rb', line 262 def get_links_changes(params) get_json(links_changes_url(params)) end |
#get_links_for_content_ids(content_ids) ⇒ Hash
Returns a mapping of content_ids => links hashes
454 455 456 |
# File 'lib/gds_api/publishing_api.rb', line 454 def get_links_for_content_ids(content_ids) post_json("#{endpoint}/v2/links/by-content-id", content_ids: content_ids).to_hash end |
#get_live_content(content_id, locale = "en") ⇒ GdsApi::Response
Return a live content item, i.e. content that has a state of “published” or “unpublished”
Raises exception if the item doesn’t exist.
50 51 52 53 54 55 56 57 58 59 60 |
# File 'lib/gds_api/publishing_api.rb', line 50 def get_live_content(content_id, locale = "en") content_item = get_content(content_id, locale: locale) live_states = %w[published unpublished] return content_item if live_states.include?(content_item.to_h["publication_state"]) live_version_number = content_item["state_history"].find { |_, v| live_states.include?(v) }&.first raise NoLiveVersion, "No live version exists for content_id: #{content_id}" unless live_version_number get_content(content_id, locale: locale, version: live_version_number) end |
#get_paged_editions(params = {}) ⇒ Enumerator
Returns an Enumerator of Response objects for each page of results of editions for the provided query string parameters.
419 420 421 422 423 424 425 426 427 428 429 430 |
# File 'lib/gds_api/publishing_api.rb', line 419 def get_paged_editions(params = {}) Enumerator.new do |yielder| next_link = get_editions_url(params) while next_link yielder.yield begin response = get_json(next_link) end next_link_info = response["links"].select { |link| link["rel"] == "next" }.first next_link = next_link_info && next_link_info["href"] end end end |
#import(content_id, locale, content_items) ⇒ Object
Import content into the publishing API
The publishing-api will delete any content which has the content id provided, and then import the data given.
162 163 164 165 166 167 168 |
# File 'lib/gds_api/publishing_api.rb', line 162 def import(content_id, locale, content_items) params = { history: content_items, } post_json("#{endpoint}/v2/content/#{content_id}/import?locale=#{locale}", params) end |
#lookup_content_id(base_path:, exclude_document_types: nil, exclude_unpublishing_types: nil, with_drafts: false) ⇒ UUID
Find the content_id for a base_path.
Convenience method if you only need to look up one content_id for a base_path. For multiple base_paths, use GdsApi::PublishingApiV2#lookup_content_ids.
102 103 104 105 106 107 108 109 110 |
# File 'lib/gds_api/publishing_api.rb', line 102 def lookup_content_id(base_path:, exclude_document_types: nil, exclude_unpublishing_types: nil, with_drafts: false) lookups = lookup_content_ids( base_paths: [base_path], exclude_document_types: exclude_document_types, exclude_unpublishing_types: exclude_unpublishing_types, with_drafts: with_drafts, ) lookups[base_path] end |
#lookup_content_ids(base_paths:, exclude_document_types: nil, exclude_unpublishing_types: nil, with_drafts: false) ⇒ Hash
Find the content_ids for a list of base_paths.
75 76 77 78 79 80 81 82 |
# File 'lib/gds_api/publishing_api.rb', line 75 def lookup_content_ids(base_paths:, exclude_document_types: nil, exclude_unpublishing_types: nil, with_drafts: false) = { base_paths: base_paths } [:exclude_document_types] = exclude_document_types if exclude_document_types [:exclude_unpublishing_types] = exclude_unpublishing_types if exclude_unpublishing_types [:with_drafts] = with_drafts if with_drafts response = post_json("#{endpoint}/lookup-by-base-path", ) response.to_hash end |
#patch_links(content_id, params) ⇒ Object
Patch the links of a content item
322 323 324 325 326 327 328 329 330 |
# File 'lib/gds_api/publishing_api.rb', line 322 def patch_links(content_id, params) payload = { links: params.fetch(:links), } payload = merge_optional_keys(payload, params, %i[previous_version bulk_publishing]) patch_json(links_url(content_id), payload) end |
#publish(content_id, update_type = nil, options = {}) ⇒ Object
Publish a content item
The publishing-api will “publish” a draft item, so that it will be visible on the public site.
123 124 125 126 127 128 129 130 131 132 133 |
# File 'lib/gds_api/publishing_api.rb', line 123 def publish(content_id, update_type = nil, = {}) params = { update_type: update_type, } optional_keys = %i[locale previous_version] params = merge_optional_keys(params, , optional_keys) post_json(publish_url(content_id), params) end |
#put_content(content_id, payload) ⇒ Object
Put a content item
19 20 21 |
# File 'lib/gds_api/publishing_api.rb', line 19 def put_content(content_id, payload) put_json(content_url(content_id), payload) end |
#put_intent(base_path, payload) ⇒ Object
Create a publishing intent for a base_path.
publishing_api.put_intent(
'/some/base_path',
{
publish_time: '2024-03-15T09:00:00.000+00:00',
publishing_app: 'content-publisher',
rendering_app: 'government-frontend',
}
)
492 493 494 |
# File 'lib/gds_api/publishing_api.rb', line 492 def put_intent(base_path, payload) put_json(intent_url(base_path), payload) end |
#put_path(base_path, payload) ⇒ Object
Reserves a path for a publishing application
Returns success or failure only.
466 467 468 469 |
# File 'lib/gds_api/publishing_api.rb', line 466 def put_path(base_path, payload) url = "#{endpoint}/paths#{base_path}" put_json(url, payload) end |
#republish(content_id, options = {}) ⇒ Object
Republish a content item
The publishing-api will “republish” a live edition. This can be used to remove an unpublishing or to re-send a published edition downstream
145 146 147 148 149 150 151 |
# File 'lib/gds_api/publishing_api.rb', line 145 def republish(content_id, = {}) optional_keys = %i[locale previous_version] params = merge_optional_keys({}, , optional_keys) post_json(republish_url(content_id), params) end |
#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) ⇒ Object
Unpublish a content item
The publishing API will “unpublish” a live item, to remove it from the public site, or update an existing unpublishing.
186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 |
# File 'lib/gds_api/publishing_api.rb', line 186 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) params = { type: type, } params[:explanation] = explanation if explanation params[:alternative_path] = alternative_path if alternative_path params[:previous_version] = previous_version if previous_version params[:discard_drafts] = discard_drafts if discard_drafts params[:allow_draft] = allow_draft if allow_draft params[:locale] = locale if locale params[:unpublished_at] = unpublished_at.utc.iso8601 if unpublished_at params[:redirects] = redirects if redirects post_json(unpublish_url(content_id), params) end |
#unreserve_path(base_path, publishing_app) ⇒ Object
471 472 473 474 |
# File 'lib/gds_api/publishing_api.rb', line 471 def unreserve_path(base_path, publishing_app) payload = { publishing_app: publishing_app } delete_json(unreserve_url(base_path), payload) end |