Class: GdsApi::PublishingApiV2

Inherits:
Base
  • Object
show all
Defined in:
lib/gds_api/publishing_api_v2.rb

Overview

Adapter for the Publishing API.

Instance Attribute Summary

Attributes inherited from Base

#options

Instance Method Summary collapse

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

#discard_draft(content_id, options = {}) ⇒ Object

Discard a draft

Deletes the draft content item.



148
149
150
151
152
153
154
155
156
157
# File 'lib/gds_api/publishing_api_v2.rb', line 148

def discard_draft(content_id, options = {})
  optional_keys = [
    :locale,
    :previous_version,
  ]

  params = merge_optional_keys({}, options, optional_keys)

  post_json!(discard_url(content_id), params)
end

#get_content(content_id, params = {}) ⇒ GdsApi::Response

Return a content item

Returns nil if the content item doesn’t exist.

Parameters:

  • content_id (UUID)
  • params (Hash) (defaults to: {})

Options Hash (params):

  • locale (String)

    The language, defaults to ‘en’ in publishing-api.

Returns:

See Also:



29
30
31
# File 'lib/gds_api/publishing_api_v2.rb', line 29

def get_content(content_id, params = {})
  get_json(content_url(content_id, params))
end

#get_content!(content_id, params = {}) ⇒ GdsApi::Response

Return a content item

Raises exception if the item doesn’t exist.

Parameters:

  • content_id (UUID)
  • params (Hash) (defaults to: {})

Options Hash (params):

  • locale (String)

    The language, defaults to ‘en’ in publishing-api.

Returns:

Raises:

See Also:



45
46
47
# File 'lib/gds_api/publishing_api_v2.rb', line 45

def get_content!(content_id, params = {})
  get_json!(content_url(content_id, params))
end

#get_content_items(params) ⇒ Object

FIXME: Add documentation



229
230
231
232
# File 'lib/gds_api/publishing_api_v2.rb', line 229

def get_content_items(params)
  query = query_string(params)
  get_json("#{endpoint}/v2/content#{query}")
end

Get expanded links

Return the expanded links of the item.

Examples:


publishing_api.get_expanded_links("8157589b-65e2-4df6-92ba-2c91d80006c0").to_h

#=> {
  "content_id" => "8157589b-65e2-4df6-92ba-2c91d80006c0",
  "version" => 10,
  "expanded_links" => {
    "organisations" => [
      {
        "content_id" => "21aa83a2-a47f-4189-a252-b02f8c322012",
        ... (and more attributes)
      }
    ]
  }
}

Parameters:

  • content_id (UUID)

See Also:



190
191
192
193
194
# File 'lib/gds_api/publishing_api_v2.rb', line 190

def get_expanded_links(content_id)
  validate_content_id(content_id)
  url = "#{endpoint}/v2/expanded-links/#{content_id}"
  get_json(url)
end

#get_linkables(document_type: nil, format: nil) ⇒ Object

FIXME: Add documentation



237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
# File 'lib/gds_api/publishing_api_v2.rb', line 237

def get_linkables(document_type: nil, format: nil)
  if document_type.nil?
    if format.nil?
      raise ArgumentError.new("Please provide a `document_type`")
    else
      self.class.logger.warn(
        "Providing `format` to the `get_linkables` method is deprecated and will be removed in a " +
        "future release.  Please use `document_type` instead."
      )
      document_type = format
    end
  end

  get_json("#{endpoint}/v2/linkables?document_type=#{document_type}")
end

#get_linked_items(content_id, params = {}) ⇒ Object

FIXME: Add documentation



256
257
258
259
260
# File 'lib/gds_api/publishing_api_v2.rb', line 256

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

FIXME: Add documentation



162
163
164
# File 'lib/gds_api/publishing_api_v2.rb', line 162

def get_links(content_id)
  get_json(links_url(content_id))
end

#lookup_content_id(base_path:) ⇒ 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 #lookup_content_ids.

Examples:


publishing_api.lookup_content_id(base_path: '/foo')
# => "51ac4247-fd92-470a-a207-6b852a97f2db"

Parameters:

  • base_path (String)

Returns:

  • (UUID)

    the ‘content_id` for the `base_path`

See Also:



79
80
81
82
# File 'lib/gds_api/publishing_api_v2.rb', line 79

def lookup_content_id(base_path:)
  lookups = lookup_content_ids(base_paths: [base_path])
  lookups[base_path]
end

#lookup_content_ids(base_paths:) ⇒ Hash

Find the content_ids for a list of base_paths.

Examples:


publishing_api.lookup_content_ids(base_paths: ['/foo', '/bar'])
# => { "/foo" => "51ac4247-fd92-470a-a207-6b852a97f2db", "/bar" => "261bd281-f16c-48d5-82d2-9544019ad9ca" }

Parameters:

  • base_paths (Array)

Returns:

  • (Hash)

    a hash, keyed by ‘base_path` with `content_id` as value

See Also:



59
60
61
62
# File 'lib/gds_api/publishing_api_v2.rb', line 59

def lookup_content_ids(base_paths:)
  response = post_json!("#{endpoint}/lookup-by-base-path", base_paths: base_paths)
  response.to_hash
end

Patch the links of a content item

Examples:


publishing_api.patch_links(
  '86963c13-1f57-4005-b119-e7cf3cb92ecf',
  links: {
    topics: ['d6e1527d-d0c0-40d5-9603-b9f3e6866b8a'],
    mainstream_browse_pages: ['d6e1527d-d0c0-40d5-9603-b9f3e6866b8a'],
  },
  previous_version: 10,
  bulk_publishing: true
)

Parameters:

  • content_id (UUID)
  • params (Hash)

Options Hash (params):

  • links (Hash)

    A “links hash”

  • previous_version (Integer)

    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)

  • bulk_publishing (Boolean)

    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)

See Also:



216
217
218
219
220
221
222
223
224
# File 'lib/gds_api/publishing_api_v2.rb', line 216

def patch_links(content_id, params)
  payload = {
    links: params.fetch(:links)
  }

  payload = merge_optional_keys(payload, params, [:previous_version, :bulk_publishing])

  patch_json!(links_url(content_id), payload)
end

#publish(content_id, update_type, options = {}) ⇒ Object

Publish a content item

The publishing-api will “publish” a draft item, so that it will be visible on the public site.

Parameters:

  • content_id (UUID)
  • update_type (String)

    Either ‘major’, ‘minor’ or ‘republish’

  • params (Hash)

See Also:



95
96
97
98
99
100
101
102
103
104
105
106
107
108
# File 'lib/gds_api/publishing_api_v2.rb', line 95

def publish(content_id, update_type, options = {})
  params = {
    update_type: update_type
  }

  optional_keys = [
    :locale,
    :previous_version,
  ]

  params = merge_optional_keys(params, options, optional_keys)

  post_json!(publish_url(content_id), params)
end

#put_content(content_id, payload) ⇒ Object

Put a content item

Parameters:

  • content_id (UUID)
  • payload (Hash)

    A valid content item

See Also:



15
16
17
# File 'lib/gds_api/publishing_api_v2.rb', line 15

def put_content(content_id, payload)
  put_json!(content_url(content_id), payload)
end

#unpublish(content_id, type:, explanation: nil, alternative_path: nil, discard_drafts: false, allow_draft: false, previous_version: nil, locale: 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.

Parameters:

  • content_id (UUID)
  • type (String)

    Either ‘withdrawal’, ‘gone’ or ‘redirect’.

  • explanation (String) (defaults to: nil)

    (optional) Text to show on the page.

  • alternative_path (String) (defaults to: nil)

    (optional) Alternative path to show on the page or redirect to.

  • discard_drafts (Boolean) (defaults to: false)

    (optional) Whether to discard drafts on that item. Defaults to false.

  • previous_version (Integer) (defaults to: nil)

    (optional) A lock version number for optimistic locking.

  • locale (String) (defaults to: nil)

    (optional) The content item locale.

See Also:



124
125
126
127
128
129
130
131
132
133
134
135
136
137
# File 'lib/gds_api/publishing_api_v2.rb', line 124

def unpublish(content_id, type:, explanation: nil, alternative_path: nil, discard_drafts: false, allow_draft: false, previous_version: nil, locale: nil)
  params = {
    type: type
  }

  params.merge!(explanation: explanation) if explanation
  params.merge!(alternative_path: alternative_path) if alternative_path
  params.merge!(previous_version: previous_version) if previous_version
  params.merge!(discard_drafts: discard_drafts) if discard_drafts
  params.merge!(allow_draft: allow_draft) if allow_draft
  params.merge!(locale: locale) if locale

  post_json!(unpublish_url(content_id), params)
end