europeana-api 0.3.0 → 0.3.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 894ad987b215b9e7dfd6002f1e2f7225fcab25ae
4
- data.tar.gz: 87e594f04c09dc273d7b285975ae682b4fbf7675
3
+ metadata.gz: 900783456e54538f5ac9ddcff6fd9ad7b0a42336
4
+ data.tar.gz: b8fcd2aeab490cd197ecb7f6eb1985afeafc4c11
5
5
  SHA512:
6
- metadata.gz: bcd7ad50a881202448ef74db5ab0165b5147448ab6a1e2df915741dd53d27cc76e723c5270a22de4778b06641d21dba5f634553d4e16f8457fe4e3c0afe08d8c
7
- data.tar.gz: c490cbfa7b307dd0a25ba8cd84d4226b2bc49b8efb461bec3c975e38b6822cdfa337df5fc88fbe56543aea7d5cbf28c7408d6594b5c6c6f9bb4625fd96c0dd1c
6
+ metadata.gz: fb4f2822e5235c4eb46b7c975dc5271b7ec25d87d3be5f591143b92a4f398d34c5896343d7c4b184956e4dc3167eeb8f7aee0ffbd5c6b43211fcb903a4ef4d33
7
+ data.tar.gz: 12f747dcda20e90b737e1cb6193c9d373dd9b2d1eb82ba32342afba9a79dbb88681789862bc577caf05a7cd1dad3c2577d8114cd5be64516791ddb38d18a2b2f
data/README.md CHANGED
@@ -7,7 +7,9 @@ REST API](http://labs.europeana.eu/api/introduction/).
7
7
 
8
8
  Add this line to your application's Gemfile:
9
9
 
10
- gem 'europeana-api'
10
+ ```ruby
11
+ gem 'europeana-api'
12
+ ```
11
13
 
12
14
  And then execute:
13
15
 
@@ -29,21 +31,28 @@ Sign up for an API key at: http://labs.europeana.eu/api/registration/
29
31
 
30
32
  Configure your application with the API key:
31
33
 
32
- Europeana::API.api_key = "xyz"
34
+ ```ruby
35
+ require 'europeana/api'
36
+ Europeana::API.api_key = 'xyz'
37
+ ```
33
38
 
34
39
  ### Search
35
40
 
36
- search = Europeana::API.search(:query => '"first world war"') # => { "success" => true, "items" => [ ... ], "totalResults" => 1234, ... }
37
- search["items"] # => [ item1, item2, ... ]
38
- search["totalResults"] # => 1234
39
-
41
+ ```ruby
42
+ search = Europeana::API.search(query: '"first world war"') # => { "success" => true, "items" => [ ... ], "totalResults" => 1234, ... }
43
+ search['items'] # => [ item1, item2, ... ]
44
+ search['totalResults'] # => 1234
45
+ ```
46
+
40
47
  See http://labs.europeana.eu/api/search/ for details of the data returned in
41
48
  the search response.
42
49
 
43
50
  ### Record
44
51
 
45
- record = Europeana::API.record("abc/1234") # => { "success" => true, "object" => { ... }, ... }
46
- record["object"] # => { "title" => "...", "proxies" => [ ... ], "aggregations" => [ ... ]
52
+ ```ruby
53
+ record = Europeana::API.record('abc/1234') # => { "success" => true, "object" => { ... }, ... }
54
+ record['object'] # => { "title" => "...", "proxies" => [ ... ], "aggregations" => [ ... ]
55
+ ```
47
56
 
48
57
  See http://labs.europeana.eu/api/record/ for details of the data returned in
49
58
  the record response.
@@ -18,6 +18,8 @@ Gem::Specification.new do |spec|
18
18
  spec.test_files = spec.files.grep(/^(test|spec|features)\//)
19
19
  spec.require_paths = ['lib']
20
20
 
21
+ spec.required_ruby_version = '>= 1.9.2'
22
+
21
23
  spec.add_dependency 'activesupport', '>= 3.0'
22
24
  spec.add_dependency 'multi_json', '~> 1.0'
23
25
 
@@ -1,12 +1,12 @@
1
- require 'europeana/api/version'
2
- require 'uri'
3
- require 'logger'
4
1
  require 'active_support/core_ext/object'
5
2
  require 'active_support/hash_with_indifferent_access'
3
+ require 'europeana/api/version'
4
+ require 'logger'
5
+ require 'uri'
6
6
 
7
- ##
8
- # Europeana REST API client
9
7
  module Europeana
8
+ ##
9
+ # Europeana REST API client
10
10
  module API
11
11
  API_VERSION = 'v2'
12
12
  URL = "http://www.europeana.eu/api/#{API_VERSION}"
@@ -27,7 +27,6 @@ module Europeana
27
27
  # retries before giving up.
28
28
  #
29
29
  # @return [Integer]
30
- #
31
30
  attr_accessor :max_retries
32
31
 
33
32
  ##
@@ -36,12 +35,10 @@ module Europeana
36
35
  # The default is 10 seconds.
37
36
  #
38
37
  # @return [Integer]
39
- #
40
38
  attr_accessor :retry_delay
41
39
 
42
40
  ##
43
41
  # Sets configuration values to their defaults
44
- #
45
42
  def defaults!
46
43
  self.max_retries = 5
47
44
  self.retry_delay = 10
@@ -51,13 +48,12 @@ module Europeana
51
48
  # Sends a Search request to the Europeana API
52
49
  #
53
50
  # Equivalent to:
54
- # search = Europeana::Search.new(params)
51
+ # search = Europeana::API::Search.new(params)
55
52
  # search.execute
56
53
  #
57
54
  # @param [Hash] params Query parameters
58
55
  # @return [Hash] search response
59
- # @see Europeana::Search#execute
60
- #
56
+ # @see Europeana::API::Search#execute
61
57
  def search(params = {})
62
58
  Search.new(params).execute
63
59
  end
@@ -66,27 +62,29 @@ module Europeana
66
62
  # Sends a Record request to the Europeana API
67
63
  #
68
64
  # Equivalent to:
69
- # search = Europeana::Record.new(record_id, params)
70
- # record.get
65
+ # record = Europeana::API::Record.new(record_id, params)
66
+ # record.get(options)
71
67
  #
72
68
  # @param [String] Record ID
73
69
  # @param [Hash] params Query parameters
70
+ # @param [Hash] options (see Europeana::API::Record#get)
74
71
  # @return [Hash] search response
75
- # @see Europeana::Record#get
76
- #
77
- def record(record_id, params = {})
78
- Record.new(record_id, params).get
72
+ # @see Europeana::API::Record#get
73
+ def record(record_id, params = {}, options = {})
74
+ Record.new(record_id, params).get(options)
79
75
  end
80
76
 
81
77
  def logger
82
- unless @logger
83
- if defined?(Rails) && Rails.logger
84
- @logger = Rails.logger
85
- else
86
- @logger = Logger.new(STDOUT)
78
+ return @logger unless @logger.nil?
79
+
80
+ @logger = case
81
+ when defined?(Rails) && Rails.logger
82
+ Rails.logger
83
+ else
84
+ Logger.new(STDOUT).tap do |logger|
85
+ logger.progname = 'Europeana::API'
87
86
  end
88
87
  end
89
- @logger
90
88
  end
91
89
  end
92
90
 
@@ -62,9 +62,14 @@ module Europeana
62
62
  ##
63
63
  # Gets the URI for this Record request with parameters
64
64
  #
65
+ # @param [Hash{Symbol => Object}] options
66
+ # @option options [Boolean] :ld (false)
67
+ # Request JSON-LD
65
68
  # @return [URI]
66
- def request_uri
67
- uri = URI.parse(Europeana::API::URL + "/record#{@id}.json")
69
+ def request_uri(options = {})
70
+ url = Europeana::API::URL + "/record#{@id}.json"
71
+ url << 'ld' if options[:ld]
72
+ uri = URI.parse(url)
68
73
  uri.query = params_with_authentication.to_query
69
74
  uri
70
75
  end
@@ -72,19 +77,24 @@ module Europeana
72
77
  ##
73
78
  # Sends a request for this record to the API
74
79
  #
75
- # @return [HashWithIndifferentAccess]
80
+ # @param [Hash{Symbol => Object}] options
81
+ # @option options [Boolean] :ld (false)
82
+ # Request JSON-LD
83
+ # @return [Hash]
76
84
  # @raise [Europeana::Errors::ResponseError] if API response could not be
77
85
  # parsed as JSON
78
86
  # @raise [Europeana::Errors::RequestError] if API response has
79
87
  # `success:false`
80
88
  # @raise [Europeana::Errors::RequestError] if API response has 404 status
81
89
  # code
82
- def get
83
- request = Request.new(request_uri)
90
+ def get(options = {})
91
+ request = Request.new(request_uri(options))
84
92
  response = request.execute
85
93
  body = JSON.parse(response.body)
86
- fail Errors::RequestError, body['error'] unless body['success']
87
- HashWithIndifferentAccess.new(body)
94
+ if (options[:ld] && !(200..299).include?(response.code.to_i)) || (!options[:ld] && !body['success'])
95
+ fail Errors::RequestError, response.code
96
+ end
97
+ body
88
98
  rescue JSON::ParserError
89
99
  if response.code.to_i == 404
90
100
  # Handle HTML 404 responses on malformed record ID, emulating API's
@@ -21,9 +21,9 @@ module Europeana
21
21
 
22
22
  # @return (see Net::HTTP#request)
23
23
  def execute
24
- logger.debug("#{self.class} API URL: #{uri}")
24
+ logger.info("Request URL: #{uri}")
25
25
 
26
- benchmark("#{self.class} API query", level: :debug) do
26
+ benchmark("Request query", level: :info) do
27
27
  http = Net::HTTP.new(uri.host, uri.port)
28
28
  request = Net::HTTP::Get.new(uri.request_uri)
29
29
  retries = Europeana::API.max_retries
@@ -2,6 +2,6 @@ module Europeana
2
2
  ##
3
3
  # Sets the *gem* version (not the *API* version)
4
4
  module API
5
- VERSION = '0.3.0'
5
+ VERSION = '0.3.1'
6
6
  end
7
7
  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.0
4
+ version: 0.3.1
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-03-18 00:00:00.000000000 Z
11
+ date: 2015-05-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -133,7 +133,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
133
133
  requirements:
134
134
  - - ">="
135
135
  - !ruby/object:Gem::Version
136
- version: '0'
136
+ version: 1.9.2
137
137
  required_rubygems_version: !ruby/object:Gem::Requirement
138
138
  requirements:
139
139
  - - ">="