Class: GdsApi::ContentApi

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

Instance Attribute Summary

Attributes inherited from Base

#options

Instance Method Summary collapse

Methods inherited from Base

#client, #create_client, #url_for_slug

Constructor Details

#initialize(endpoint_url, options = {}) ⇒ ContentApi

Returns a new instance of ContentApi.



7
8
9
10
11
12
13
14
15
# File 'lib/gds_api/content_api.rb', line 7

def initialize(endpoint_url, options = {})
  # If the `web_urls_relative_to` option is given, the adapter will convert
  # any `web_url` values to relative URLs if they are from the same host.
  #
  # For example: "https://www.gov.uk"

  @web_urls_relative_to = options.delete(:web_urls_relative_to)
  super
end

Instance Method Details

#artefact(slug, params = {}) ⇒ Object



89
90
91
# File 'lib/gds_api/content_api.rb', line 89

def artefact(slug, params={})
  get_json(artefact_url(slug, params))
end

#artefact!(slug, params = {}) ⇒ Object



93
94
95
# File 'lib/gds_api/content_api.rb', line 93

def artefact!(slug, params={})
  get_json!(artefact_url(slug, params))
end

#artefactsObject



97
98
99
# File 'lib/gds_api/content_api.rb', line 97

def artefacts
  get_list!("#{base_url}/artefacts.json")
end

#business_support_schemes(facets) ⇒ Object



118
119
120
121
122
123
124
125
126
# File 'lib/gds_api/content_api.rb', line 118

def business_support_schemes(facets)
  url = "#{base_url}/business_support_schemes.json"
  query = facets.map { |k,v| "#{k}=#{v}" }
  if query.any?
    url += "?#{query.join("&")}"
  end

  get_json!(url)
end

#child_tags(tag_type, parent_tag, options = {}) ⇒ Object



44
45
46
47
48
49
50
51
52
# File 'lib/gds_api/content_api.rb', line 44

def child_tags(tag_type, parent_tag, options={})
  params = [
    "type=#{CGI.escape(tag_type)}",
    "parent_id=#{CGI.escape(parent_tag)}",
  ]
  params << "sort=#{options[:sort]}" if options.has_key?(:sort)

  get_list!("#{base_url}/tags.json?#{params.join('&')}")
end

#curated_list(tag, tag_type = nil) ⇒ Object



73
74
75
76
77
# File 'lib/gds_api/content_api.rb', line 73

def curated_list(tag, tag_type=nil)
  tag_key = key_for_tag_type(tag_type)

  get_list("#{base_url}/with_tag.json?#{tag_key}=#{CGI.escape(tag)}&sort=curated")
end

#for_need(need_id) ⇒ Object



85
86
87
# File 'lib/gds_api/content_api.rb', line 85

def for_need(need_id)
  get_list("#{base_url}/for_need/#{CGI.escape(need_id.to_s)}.json")
end

#get_json(url, &create_response) ⇒ Object



140
141
142
143
144
145
# File 'lib/gds_api/content_api.rb', line 140

def get_json(url, &create_response)
  create_response = create_response || Proc.new { |r|
    GdsApi::Response.new(r, web_urls_relative_to: @web_urls_relative_to)
  }
  super(url, &create_response)
end

#get_json!(url, &create_response) ⇒ Object



147
148
149
150
151
152
# File 'lib/gds_api/content_api.rb', line 147

def get_json!(url, &create_response)
  create_response = create_response || Proc.new { |r|
    GdsApi::Response.new(r, web_urls_relative_to: @web_urls_relative_to)
  }
  super(url, &create_response)
end

#get_list(url) ⇒ Object



134
135
136
137
138
# File 'lib/gds_api/content_api.rb', line 134

def get_list(url)
  get_json(url) { |r|
    GdsApi::ListResponse.new(r, self, web_urls_relative_to: @web_urls_relative_to)
  }
end

#get_list!(url) ⇒ Object



128
129
130
131
132
# File 'lib/gds_api/content_api.rb', line 128

def get_list!(url)
  get_json!(url) { |r|
    GdsApi::ListResponse.new(r, self, web_urls_relative_to: @web_urls_relative_to)
  }
end

#licences_for_ids(ids) ⇒ Object



113
114
115
116
# File 'lib/gds_api/content_api.rb', line 113

def licences_for_ids(ids)
  ids = ids.map(&:to_s).sort.join(',')
  get_json("#{@endpoint}/licences.json?ids=#{ids}")
end

#local_authorities_by_name(name) ⇒ Object



105
106
107
# File 'lib/gds_api/content_api.rb', line 105

def local_authorities_by_name(name)
  get_json!("#{base_url}/local_authorities.json?name=#{CGI.escape(name)}")
end

#local_authorities_by_snac_code(snac_code) ⇒ Object



109
110
111
# File 'lib/gds_api/content_api.rb', line 109

def local_authorities_by_snac_code(snac_code)
  get_json!("#{base_url}/local_authorities.json?snac_code=#{CGI.escape(snac_code)}")
end

#local_authority(snac_code) ⇒ Object



101
102
103
# File 'lib/gds_api/content_api.rb', line 101

def local_authority(snac_code)
  get_json("#{base_url}/local_authorities/#{CGI.escape(snac_code)}.json")
end

#root_sectionsObject



21
22
23
# File 'lib/gds_api/content_api.rb', line 21

def root_sections
  root_tags("section")
end

#root_tags(tag_type) ⇒ Object



40
41
42
# File 'lib/gds_api/content_api.rb', line 40

def root_tags(tag_type)
  get_list!("#{base_url}/tags.json?type=#{CGI.escape(tag_type)}&root_sections=true")
end

#sectionsObject



17
18
19
# File 'lib/gds_api/content_api.rb', line 17

def sections
  tags("section")
end

#sorted_by(tag, sort_by, tag_type = nil) ⇒ Object



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

def sorted_by(tag, sort_by, tag_type=nil)
  tag_key = key_for_tag_type(tag_type)

  get_list!("#{base_url}/with_tag.json?#{tag_key}=#{CGI.escape(tag)}&sort=#{sort_by}")
end

#sub_sections(parent_tag) ⇒ Object



25
26
27
# File 'lib/gds_api/content_api.rb', line 25

def sub_sections(parent_tag)
  child_tags("section", parent_tag)
end

#tag(tag, tag_type = nil) ⇒ Object



54
55
56
57
58
59
60
61
# File 'lib/gds_api/content_api.rb', line 54

def tag(tag, tag_type=nil)
  if tag_type.nil?
    raise "Requests for tags without a tag_type are no longer supported. You probably want a tag_type of 'section'. See https://github.com/alphagov/govuk_content_api/blob/f4c0102a1ae4970be6a440707b89798442f768b9/govuk_content_api.rb#L241-L250"
  end

  url = [base_url, "tags", CGI.escape(tag_type), CGI.escape(tag)].join("/") + ".json"
  get_json(url)
end

#tags(tag_type, options = {}) ⇒ Object



29
30
31
32
33
34
35
36
37
38
# File 'lib/gds_api/content_api.rb', line 29

def tags(tag_type, options={})
  params = [
    "type=#{CGI.escape(tag_type)}"
  ]
  params << "sort=#{options[:sort]}" if options.has_key?(:sort)
  params << "draft=true" if options[:draft]
  params << "cachebust=#{Time.now.utc.to_i}#{rand(1000)}" if options[:bust_cache]

  get_list!("#{base_url}/tags.json?#{params.join('&')}")
end

#with_tag(tag, tag_type = nil, options = {}) ⇒ Object



63
64
65
66
67
68
69
70
71
# File 'lib/gds_api/content_api.rb', line 63

def with_tag(tag, tag_type=nil, options={})
  tag_key = key_for_tag_type(tag_type)

  url = "#{base_url}/with_tag.json?#{tag_key}=#{CGI.escape(tag)}"
  url << "&group_by=#{CGI.escape(options[:group_by])}" if options.has_key?(:group_by)
  url << "&draft=true" if options[:draft]

  get_list!(url)
end