europeana-api 0.3.2 → 0.3.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.hound.yml +10 -0
- data/.rspec +3 -0
- data/.rubocop.yml +1 -0
- data/.ruby-style.yml +1054 -0
- data/.travis.yml +6 -0
- data/LICENSE.md +119 -0
- data/README.md +6 -0
- data/Rakefile +3 -0
- data/europeana-api.gemspec +1 -1
- data/lib/europeana/api.rb +13 -5
- data/lib/europeana/api/errors.rb +1 -1
- data/lib/europeana/api/record.rb +4 -4
- data/lib/europeana/api/request.rb +16 -16
- data/lib/europeana/api/search.rb +5 -3
- data/lib/europeana/api/version.rb +1 -1
- data/spec/europeana/api/errors_spec.rb +23 -0
- data/spec/europeana/api/record_spec.rb +133 -0
- data/spec/europeana/api/search_spec.rb +89 -0
- data/spec/europeana/api_spec.rb +97 -0
- data/spec/spec_helper.rb +1 -1
- data/spec/support/shared_examples/api_request.rb +24 -15
- data/spec/support/shared_examples/record_request.rb +16 -17
- data/spec/support/shared_examples/search_request.rb +20 -19
- metadata +18 -13
- data/LICENSE.pdf +0 -0
- data/spec/europeana/errors_spec.rb +0 -13
- data/spec/europeana/record_spec.rb +0 -132
- data/spec/europeana/search_spec.rb +0 -92
- data/spec/europeana_spec.rb +0 -81
@@ -0,0 +1,89 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'active_support/core_ext/hash'
|
3
|
+
|
4
|
+
module Europeana
|
5
|
+
module API
|
6
|
+
describe Search do
|
7
|
+
let(:api_key) { 'xyz' }
|
8
|
+
let(:params) {
|
9
|
+
HashWithIndifferentAccess.new({
|
10
|
+
query: 'test', profile: 'standard', qf: "where:London", rows: 100, start: 1, callback: ''
|
11
|
+
})
|
12
|
+
}
|
13
|
+
|
14
|
+
before do
|
15
|
+
Europeana::API.api_key = api_key
|
16
|
+
end
|
17
|
+
|
18
|
+
describe "#new" do
|
19
|
+
context "with no API request params" do
|
20
|
+
subject { lambda { described_class.new } }
|
21
|
+
it { should_not raise_error }
|
22
|
+
end
|
23
|
+
|
24
|
+
context "with API request params" do
|
25
|
+
subject { described_class.new(params) }
|
26
|
+
it "should not raise error" do
|
27
|
+
expect { subject }.not_to raise_error
|
28
|
+
end
|
29
|
+
it "stores the request params" do
|
30
|
+
expect(subject.instance_variable_get(:@params)).to eq(params)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
describe "#params" do
|
36
|
+
subject { described_class.new(params) }
|
37
|
+
it "gets params attribute" do
|
38
|
+
expect(subject.params).to eq(params)
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
describe "#params=" do
|
43
|
+
subject { described_class.new }
|
44
|
+
|
45
|
+
context "valid params" do
|
46
|
+
it "sets params attribute" do
|
47
|
+
subject.params = params
|
48
|
+
expect(subject.instance_variable_get(:@params)).to eq(params)
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
describe "#request_uri" do
|
54
|
+
it "returns a URI" do
|
55
|
+
expect(subject.request_uri).to be_a(URI)
|
56
|
+
end
|
57
|
+
|
58
|
+
it "includes request params" do
|
59
|
+
subject.params[:query] = 'paris'
|
60
|
+
expect(subject.request_uri.to_s).to eq("http://www.europeana.eu/api/v2/search.json?query=paris&wskey=#{api_key}")
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
describe "#params_with_authentication" do
|
65
|
+
subject { described_class.new }
|
66
|
+
|
67
|
+
context "with API key" do
|
68
|
+
it "adds API key to params" do
|
69
|
+
subject.params = params
|
70
|
+
expect(subject.params_with_authentication).to eq(params.merge(:wskey => api_key))
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
context "without API key" do
|
75
|
+
it "raises an error" do
|
76
|
+
subject.params = params
|
77
|
+
Europeana::API.api_key = nil
|
78
|
+
expect { subject.params_with_authentication }.to raise_error(Europeana::API::Errors::MissingAPIKeyError)
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
describe "#execute" do
|
84
|
+
subject { described_class.new(params).execute }
|
85
|
+
it_behaves_like "search request"
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
@@ -0,0 +1,97 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
module Europeana
|
4
|
+
describe API do
|
5
|
+
let(:api_key) { 'xyz' }
|
6
|
+
let(:record_id) { '/abc/1234' }
|
7
|
+
let(:params) { { callback: 'doSomething();' } }
|
8
|
+
|
9
|
+
before(:each) do
|
10
|
+
described_class.defaults!
|
11
|
+
end
|
12
|
+
|
13
|
+
describe '.url' do
|
14
|
+
it 'defaults to the live API URL' do
|
15
|
+
expect(subject.url).to eq('http://www.europeana.eu/api/v2')
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
describe '.url=' do
|
20
|
+
let(:url) { 'http://www.example.com/v2' }
|
21
|
+
it 'accepts override of the API URL' do
|
22
|
+
described_class.url = url
|
23
|
+
expect(described_class.instance_variable_get(:@url)).to eq(url)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
describe ".api_key=" do
|
28
|
+
it "sets the API key" do
|
29
|
+
described_class.api_key = api_key
|
30
|
+
expect(described_class.instance_variable_get(:@api_key)).to eq(api_key)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
describe ".api_key" do
|
35
|
+
it "gets the API key" do
|
36
|
+
described_class.instance_variable_set(:@api_key, api_key)
|
37
|
+
expect(described_class.api_key).to eq(api_key)
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
describe ".max_retries" do
|
42
|
+
it "defaults to 5" do
|
43
|
+
expect(described_class.max_retries).to eq(5)
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
describe ".max_retries=" do
|
48
|
+
it "sets the maximum number of retries" do
|
49
|
+
described_class.max_retries = 2
|
50
|
+
expect(described_class.max_retries).to eq(2)
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
describe ".retry_delay" do
|
55
|
+
it "defaults to 10" do
|
56
|
+
expect(described_class.retry_delay).to eq(10)
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
describe ".retry_delay=" do
|
61
|
+
it "sets the retry delay" do
|
62
|
+
described_class.retry_delay = 3
|
63
|
+
expect(described_class.retry_delay).to eq(3)
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
describe ".defaults!" do
|
68
|
+
it "sets the API URL to its default" do
|
69
|
+
described_class.url = 'http://www.example.com/v2'
|
70
|
+
expect { described_class.defaults! }.
|
71
|
+
to change { described_class.url }.
|
72
|
+
from('http://www.example.com/v2').
|
73
|
+
to('http://www.europeana.eu/api/v2')
|
74
|
+
end
|
75
|
+
|
76
|
+
it "sets retry delay to its default" do
|
77
|
+
described_class.retry_delay = 3
|
78
|
+
expect { described_class.defaults! }.to change { described_class.retry_delay }.from(3).to(10)
|
79
|
+
end
|
80
|
+
|
81
|
+
it "sets max retries to its default" do
|
82
|
+
described_class.max_retries = 3
|
83
|
+
expect { described_class.defaults! }.to change { described_class.max_retries }.from(3).to(5)
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
describe ".search" do
|
88
|
+
subject { described_class.search(params) }
|
89
|
+
it_behaves_like "search request"
|
90
|
+
end
|
91
|
+
|
92
|
+
describe ".record" do
|
93
|
+
subject { described_class.record(record_id, params) }
|
94
|
+
it_behaves_like "record request"
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
data/spec/spec_helper.rb
CHANGED
@@ -1,33 +1,33 @@
|
|
1
1
|
shared_examples "API request" do
|
2
2
|
context "without API key" do
|
3
3
|
before(:each) do
|
4
|
-
Europeana.api_key = nil
|
4
|
+
Europeana::API.api_key = nil
|
5
5
|
end
|
6
|
-
|
6
|
+
|
7
7
|
it "sends no HTTP request" do
|
8
8
|
begin
|
9
9
|
subject
|
10
|
-
rescue Europeana::Errors::MissingAPIKeyError
|
10
|
+
rescue Europeana::API::Errors::MissingAPIKeyError
|
11
11
|
end
|
12
12
|
expect(a_request(:get, /www.europeana.eu\/api\/v2/)).not_to have_been_made
|
13
13
|
end
|
14
14
|
end
|
15
|
-
|
15
|
+
|
16
16
|
context "with API key" do
|
17
17
|
before(:all) do
|
18
|
-
Europeana.api_key = "xyz"
|
18
|
+
Europeana::API.api_key = "xyz"
|
19
19
|
end
|
20
|
-
|
20
|
+
|
21
21
|
it "returns the response as a Hash" do
|
22
22
|
response = subject
|
23
23
|
expect(response).to be_a(Hash)
|
24
24
|
end
|
25
|
-
|
25
|
+
|
26
26
|
context "when the API is unavailable" do
|
27
27
|
before(:each) do
|
28
|
-
Europeana.retry_delay = 0
|
28
|
+
Europeana::API.retry_delay = 0
|
29
29
|
end
|
30
|
-
|
30
|
+
|
31
31
|
it "waits then retries" do
|
32
32
|
stub_request(:get, /www.europeana.eu\/api\/v2/).
|
33
33
|
to_timeout.times(1).then.
|
@@ -36,18 +36,27 @@ shared_examples "API request" do
|
|
36
36
|
expect(a_request(:get, /www.europeana.eu\/api\/v2/)).to have_been_made.times(2)
|
37
37
|
end
|
38
38
|
end
|
39
|
-
|
39
|
+
|
40
40
|
context "when API response is unsuccessful" do
|
41
|
-
|
42
|
-
|
43
|
-
|
41
|
+
context "with error msg" do
|
42
|
+
it "raises a RequestError with error msg" do
|
43
|
+
stub_request(:get, /www.europeana.eu\/api\/v2/).to_return(body: '{"success":false,"error":"Something went wrong"}')
|
44
|
+
expect { subject }.to raise_error(Europeana::API::Errors::RequestError, "Something went wrong")
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
context "without error msg" do
|
49
|
+
it "raises a RequestError with status code" do
|
50
|
+
stub_request(:get, /www.europeana.eu\/api\/v2/).to_return(status: 400, body: '{"success":false}')
|
51
|
+
expect { subject }.to raise_error(Europeana::API::Errors::RequestError, "400")
|
52
|
+
end
|
44
53
|
end
|
45
54
|
end
|
46
|
-
|
55
|
+
|
47
56
|
context "when API response is invalid JSON" do
|
48
57
|
it "raises a ResponseError" do
|
49
58
|
stub_request(:get, /www.europeana.eu\/api\/v2/).to_return(:body => 'invalid JSON')
|
50
|
-
expect { subject }.to raise_error(Europeana::Errors::ResponseError)
|
59
|
+
expect { subject }.to raise_error(Europeana::API::Errors::ResponseError)
|
51
60
|
end
|
52
61
|
end
|
53
62
|
end
|
@@ -1,31 +1,30 @@
|
|
1
1
|
shared_examples "record request" do
|
2
|
-
before(:all) do
|
3
|
-
@api_key = "xyz"
|
4
|
-
@record_id = "/abc/1234"
|
5
|
-
@params = { :callback => "doSomething();" }
|
6
|
-
end
|
7
|
-
|
8
2
|
before(:each) do
|
9
|
-
stub_request(:get, /www.europeana.eu\/api\/v2\/record#{
|
3
|
+
stub_request(:get, /www.europeana.eu\/api\/v2\/record#{record_id}\.json/).
|
4
|
+
to_return(body: '{"success":true}')
|
10
5
|
end
|
11
|
-
|
6
|
+
|
12
7
|
it_behaves_like "API request"
|
13
|
-
|
8
|
+
|
14
9
|
context "with API key" do
|
15
|
-
before(:
|
16
|
-
Europeana.api_key =
|
10
|
+
before(:each) do
|
11
|
+
Europeana::API.api_key = api_key
|
17
12
|
end
|
18
|
-
|
13
|
+
|
14
|
+
let(:api_key) { 'xyz' }
|
15
|
+
let(:record_id) { '/abc/1234' }
|
16
|
+
let(:params) { { callback: 'doSomething();' } }
|
17
|
+
|
19
18
|
it "sends a Record request to the API" do
|
20
19
|
subject
|
21
|
-
expect(a_request(:get, /www.europeana.eu\/api\/v2\/record#{
|
20
|
+
expect(a_request(:get, /www.europeana.eu\/api\/v2\/record#{record_id}\.json/)).to have_been_made.once
|
22
21
|
end
|
23
|
-
|
22
|
+
|
24
23
|
context "when record ID is invalid" do
|
25
24
|
it "raises RequestError from HTML 404 response" do
|
26
|
-
stub_request(:get, /www.europeana.eu\/api\/v2\/record#{
|
27
|
-
to_return(:
|
28
|
-
expect { subject }.to raise_error(Europeana::Errors::RequestError, "Invalid record identifier: #{
|
25
|
+
stub_request(:get, /www.europeana.eu\/api\/v2\/record#{record_id}\.json/).
|
26
|
+
to_return(body: '<html></html>', headers: { 'Content-Type' => 'text/html' }, status: 404)
|
27
|
+
expect { subject }.to raise_error(Europeana::API::Errors::RequestError, "Invalid record identifier: #{record_id}")
|
29
28
|
end
|
30
29
|
end
|
31
30
|
end
|
@@ -1,39 +1,40 @@
|
|
1
1
|
shared_examples "search request" do
|
2
|
-
before(:all) do
|
3
|
-
@api_key = "xyz"
|
4
|
-
@params = {}
|
5
|
-
end
|
6
|
-
|
7
2
|
before(:each) do
|
8
|
-
stub_request(:get,
|
3
|
+
stub_request(:get, %r{www.europeana.eu/api/v2/search.json}).
|
4
|
+
to_return(body: '{"success":true}')
|
9
5
|
end
|
10
|
-
|
6
|
+
|
11
7
|
it_behaves_like "API request"
|
12
|
-
|
8
|
+
|
13
9
|
context "with API key" do
|
14
|
-
|
15
|
-
|
10
|
+
let(:api_key) { 'xyz' }
|
11
|
+
let(:params) { {} }
|
12
|
+
|
13
|
+
before do
|
14
|
+
Europeana::API.api_key = api_key
|
16
15
|
end
|
17
|
-
|
16
|
+
|
18
17
|
it "sends a Search request to the API" do
|
19
18
|
subject
|
20
|
-
expect(a_request(:get,
|
19
|
+
expect(a_request(:get, %r{www.europeana.eu/api/v2/search.json})).
|
20
|
+
to have_been_made.once
|
21
21
|
end
|
22
|
-
|
22
|
+
|
23
23
|
context "without query" do
|
24
24
|
it "sets an empty query" do
|
25
25
|
subject
|
26
|
-
expect(a_request(:get,
|
26
|
+
expect(a_request(:get, %r{www.europeana.eu/api/v2/search.json?query=})).
|
27
|
+
to have_been_made.once
|
27
28
|
end
|
28
29
|
end
|
29
|
-
|
30
|
+
|
30
31
|
context "with query" do
|
31
|
-
|
32
|
-
|
33
|
-
end
|
32
|
+
let(:params) { { query: 'test' } }
|
33
|
+
|
34
34
|
it "sends query" do
|
35
35
|
subject
|
36
|
-
expect(a_request(:get,
|
36
|
+
expect(a_request(:get, %r{www.europeana.eu/api/v2/search.json?query=test})).
|
37
|
+
to have_been_made.once
|
37
38
|
end
|
38
39
|
end
|
39
40
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: europeana-api
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Richard Doe
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-07-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -102,8 +102,13 @@ extensions: []
|
|
102
102
|
extra_rdoc_files: []
|
103
103
|
files:
|
104
104
|
- ".gitignore"
|
105
|
+
- ".hound.yml"
|
106
|
+
- ".rspec"
|
107
|
+
- ".rubocop.yml"
|
108
|
+
- ".ruby-style.yml"
|
109
|
+
- ".travis.yml"
|
105
110
|
- Gemfile
|
106
|
-
- LICENSE.
|
111
|
+
- LICENSE.md
|
107
112
|
- README.md
|
108
113
|
- Rakefile
|
109
114
|
- europeana-api.gemspec
|
@@ -114,17 +119,17 @@ files:
|
|
114
119
|
- lib/europeana/api/search.rb
|
115
120
|
- lib/europeana/api/search/fields.rb
|
116
121
|
- lib/europeana/api/version.rb
|
117
|
-
- spec/europeana/errors_spec.rb
|
118
|
-
- spec/europeana/record_spec.rb
|
119
|
-
- spec/europeana/search_spec.rb
|
120
|
-
- spec/
|
122
|
+
- spec/europeana/api/errors_spec.rb
|
123
|
+
- spec/europeana/api/record_spec.rb
|
124
|
+
- spec/europeana/api/search_spec.rb
|
125
|
+
- spec/europeana/api_spec.rb
|
121
126
|
- spec/spec_helper.rb
|
122
127
|
- spec/support/shared_examples/api_request.rb
|
123
128
|
- spec/support/shared_examples/record_request.rb
|
124
129
|
- spec/support/shared_examples/search_request.rb
|
125
130
|
homepage: https://github.com/rwd/europeana-api-client-ruby
|
126
131
|
licenses:
|
127
|
-
- EUPL 1.1
|
132
|
+
- EUPL V.1.1
|
128
133
|
metadata: {}
|
129
134
|
post_install_message:
|
130
135
|
rdoc_options: []
|
@@ -142,15 +147,15 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
142
147
|
version: '0'
|
143
148
|
requirements: []
|
144
149
|
rubyforge_project:
|
145
|
-
rubygems_version: 2.4.
|
150
|
+
rubygems_version: 2.4.8
|
146
151
|
signing_key:
|
147
152
|
specification_version: 4
|
148
153
|
summary: Ruby client library for the Europeana API
|
149
154
|
test_files:
|
150
|
-
- spec/europeana/errors_spec.rb
|
151
|
-
- spec/europeana/record_spec.rb
|
152
|
-
- spec/europeana/search_spec.rb
|
153
|
-
- spec/
|
155
|
+
- spec/europeana/api/errors_spec.rb
|
156
|
+
- spec/europeana/api/record_spec.rb
|
157
|
+
- spec/europeana/api/search_spec.rb
|
158
|
+
- spec/europeana/api_spec.rb
|
154
159
|
- spec/spec_helper.rb
|
155
160
|
- spec/support/shared_examples/api_request.rb
|
156
161
|
- spec/support/shared_examples/record_request.rb
|