gds-api-adapters 9.0.0 → 9.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -49,10 +49,13 @@ class GdsApi::ContentApi < GdsApi::Base
49
49
  get_json("#{url}/#{CGI.escape(tag)}.json")
50
50
  end
51
51
 
52
- def with_tag(tag, tag_type=nil)
52
+ def with_tag(tag, tag_type=nil, options={})
53
53
  tag_key = key_for_tag_type(tag_type)
54
54
 
55
- get_list!("#{base_url}/with_tag.json?#{tag_key}=#{CGI.escape(tag)}")
55
+ url = "#{base_url}/with_tag.json?#{tag_key}=#{CGI.escape(tag)}"
56
+ url << "&group_by=#{CGI.escape(options[:group_by])}" if options.has_key?(:group_by)
57
+
58
+ get_list!(url)
56
59
  end
57
60
 
58
61
  def curated_list(tag, tag_type=nil)
@@ -22,6 +22,13 @@ module GdsApi
22
22
  # over the response directly
23
23
  def_delegators :results, :each, :to_ary
24
24
 
25
+ def results
26
+ # support group_by results from the content api by checking if there is a
27
+ # grouped_results key present first. if it's not, then fallback to the
28
+ # results key
29
+ to_ostruct.grouped_results || to_ostruct.results
30
+ end
31
+
25
32
  def has_next_page?
26
33
  ! page_link("next").nil?
27
34
  end
@@ -137,6 +137,25 @@ module GdsApi
137
137
  .to_return(status: 200, body: body.to_json, headers: {})
138
138
  end
139
139
 
140
+ def content_api_has_grouped_artefacts_with_a_tag(tag_type, tag_id, group_by, grouped_artefact_slugs={})
141
+ body = plural_response_base.merge(
142
+ "grouped_results" => grouped_artefact_slugs.map {|name,artefact_slugs|
143
+ {
144
+ "name" => name,
145
+ "formats" => [name.downcase],
146
+ "items" => artefact_slugs.map {|artefact_slug|
147
+ artefact_for_slug(artefact_slug)
148
+ }
149
+ }
150
+ }
151
+ )
152
+
153
+ endpoint = "#{CONTENT_API_ENDPOINT}/with_tag.json"
154
+ stub_request(:get, endpoint)
155
+ .with(:query => { tag_type => tag_id, "group_by" => group_by })
156
+ .to_return(status: 200, body: body.to_json, headers: {})
157
+ end
158
+
140
159
  def content_api_has_an_artefact(slug, body = artefact_for_slug(slug))
141
160
  ArtefactStub.new(slug).with_response_body(body).stub
142
161
  end
@@ -1,3 +1,3 @@
1
1
  module GdsApi
2
- VERSION = '9.0.0'
2
+ VERSION = '9.1.0'
3
3
  end
@@ -370,6 +370,30 @@ describe GdsApi::ContentApi do
370
370
 
371
371
  assert_equal "Is this love", response.first.title
372
372
  end
373
+
374
+ it "returns artefacts in groups for a tag and tag type" do
375
+ content_api_has_grouped_artefacts_with_a_tag(
376
+ "genre",
377
+ "reggae",
378
+ "format",
379
+ {
380
+ "Tracks" => ["is-this-love", "three-little-birds"],
381
+ "Albums" => ["kaya", "exodus"],
382
+ }
383
+ )
384
+ response = @api.with_tag("reggae", "genre", group_by: "format")
385
+
386
+ # expect two groups to be returned
387
+ assert_equal 2, response.results.size
388
+
389
+ assert_equal 2, response.results[0].items.size
390
+ assert_equal "Is this love", response.results[0].items[0].title
391
+ assert_equal "Three little birds", response.results[0].items[1].title
392
+
393
+ assert_equal 2, response.results[1].items.size
394
+ assert_equal "Kaya", response.results[1].items[0].title
395
+ assert_equal "Exodus", response.results[1].items[1].title
396
+ end
373
397
  end
374
398
 
375
399
  describe "licence" do
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gds-api-adapters
3
3
  version: !ruby/object:Gem::Version
4
- version: 9.0.0
4
+ version: 9.1.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2014-02-20 00:00:00.000000000 Z
12
+ date: 2014-02-24 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: plek
@@ -367,7 +367,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
367
367
  version: '0'
368
368
  segments:
369
369
  - 0
370
- hash: 447425582349548424
370
+ hash: 2182195135345570645
371
371
  required_rubygems_version: !ruby/object:Gem::Requirement
372
372
  none: false
373
373
  requirements:
@@ -376,7 +376,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
376
376
  version: '0'
377
377
  segments:
378
378
  - 0
379
- hash: 447425582349548424
379
+ hash: 2182195135345570645
380
380
  requirements: []
381
381
  rubyforge_project:
382
382
  rubygems_version: 1.8.23