fieldhand 0.3.1 → 0.4.0

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: cbb2e358fe735e190c98cdbb891d1e061ac9c94a
4
- data.tar.gz: 64d94a760f881779790518e59a9508a1678d2be2
3
+ metadata.gz: 3beca3a7544bc041d0b89472b73e18ba4c682655
4
+ data.tar.gz: 33ea99b5627312c8073abda6898f50b30b338907
5
5
  SHA512:
6
- metadata.gz: 59ba22ea64add43e36fa2dab85230818515950ca78ddaa4e9db6fb322de59b9b59ecf7ae4fcbdc3cf85f177ebc084773bfaf96f86da15e5843b148296e529de6
7
- data.tar.gz: 114f1acb87901c6935dea29b9b03e7d115ca937486f069ef4af939a1f3a39592fe4a9d9abb50557ac7ff8ac9f27676f6b7cfb619a79cb9313aeb82f6b46e73ec
6
+ metadata.gz: ca95ba3dfc8f3ed489edde185c135ec8beb34ba5879fabac66112f5742d63ed1e6ece180711208983882e8ecd636bcd934c3cde7fde8ca502e44ecce502b59d4
7
+ data.tar.gz: 844fb6b4b2d28b690477fcd58349a67149b2e73a38d2f466f1cde7d70aa8c1e09336cbd5fd048b5f60e905215cc321acbb032451b2c4c6c394807b5235de9e69
data/README.md CHANGED
@@ -2,19 +2,19 @@
2
2
 
3
3
  A Ruby library for harvesting metadata from [OAI-PMH](https://www.openarchives.org/OAI/openarchivesprotocol.html) repositories.
4
4
 
5
- **Current version:** 0.3.1
5
+ **Current version:** 0.4.0
6
6
  **Supported Ruby versions:** 1.8.7, 1.9.2, 1.9.3, 2.0, 2.1, 2.2
7
7
 
8
8
  ## Installation
9
9
 
10
10
  ```
11
- gem install fieldhand -v '~> 0.3'
11
+ gem install fieldhand -v '~> 0.4'
12
12
  ```
13
13
 
14
14
  Or, in your `Gemfile`:
15
15
 
16
16
  ```ruby
17
- gem 'fieldhand', '~> 0.3'
17
+ gem 'fieldhand', '~> 0.4'
18
18
  ```
19
19
 
20
20
  ## Usage
@@ -88,6 +88,7 @@ repository.get('oai:www.example.com:12345')
88
88
  * [`#sets`](#fieldhandheadersets)
89
89
  * [`#response_date`](#fieldhandheaderresponse_date)
90
90
  * [`Fieldhand::NetworkError`](#fieldhandnetworkerror)
91
+ * [`Fieldhand::NetworkError#response`](#fieldhandnetworkerrorresponse)
91
92
  * [`Fieldhand::ProtocolError`](#fieldhandprotocolerror)
92
93
  * [`Fieldhand::BadArgumentError`](#fieldhandbadargumenterror)
93
94
  * [`Fieldhand::BadResumptionTokenError`](#fieldhandbadresumptiontokenerror)
@@ -536,7 +537,25 @@ Return the time and date that the response was sent.
536
537
 
537
538
  ### `Fieldhand::NetworkError`
538
539
 
539
- An error (descended from `StandardError`) to represent any network issues encountered during interaction with the repository. Any underlying exception is exposed in Ruby 2.1 onwards through [`Exception#cause`](https://ruby-doc.org/core-2.1.0/Exception.html#method-i-cause).
540
+ An error (descended from `StandardError`) to represent any network issues encountered during interaction with the repository.
541
+ If the HTTP request is not successful (returning a status code other than 200),
542
+ a `NetworkError` exception will be raised containing the error message and the response object.
543
+ Any underlying exception is exposed in Ruby 2.1 onwards through [`Exception#cause`](https://ruby-doc.org/core-2.1.0/Exception.html#method-i-cause).
544
+
545
+ #### Fieldhand::NetworkError#response
546
+
547
+ ```ruby
548
+ begin
549
+ repository.records.each do |record|
550
+ # ...
551
+ end
552
+ rescue Fieldhand::NetworkError => e
553
+ puts e.response
554
+ #=> #<Net::HTTPServiceUnavailable 503 Service Unavailable readbody=true>
555
+ end
556
+ ```
557
+
558
+ Returns the unsuccessful `Net::HTTPResponse` that caused this error or `nil` if no response was available.
540
559
 
541
560
  ### `Fieldhand::ProtocolError`
542
561
 
@@ -0,0 +1,11 @@
1
+ module Fieldhand
2
+ # Custom exception to handle connection errors and invalid requests
3
+ class NetworkError < StandardError
4
+ attr_reader :response
5
+
6
+ def initialize(message, response = nil)
7
+ super(message)
8
+ @response = response
9
+ end
10
+ end
11
+ end
@@ -1,12 +1,11 @@
1
1
  require 'fieldhand/logger'
2
+ require 'fieldhand/network_error'
2
3
  require 'fieldhand/response_parser'
3
4
  require 'cgi'
4
5
  require 'net/http'
5
6
  require 'uri'
6
7
 
7
8
  module Fieldhand
8
- NetworkError = ::Class.new(::StandardError)
9
-
10
9
  # An abstraction over interactions with an OAI-PMH repository, handling requests, responses and paginating over
11
10
  # results using a resumption token.
12
11
  #
@@ -81,10 +80,14 @@ module Fieldhand
81
80
  request_uri.query = encode_query(query)
82
81
 
83
82
  logger.info('Fieldhand') { "GET #{request_uri}" }
84
- http.get(request_uri.request_uri).body
83
+ res = http.get(request_uri.request_uri)
84
+ raise NetworkError.new("Invalid response: #{res.code} #{res.msg}", res) unless res.is_a?(::Net::HTTPSuccess)
85
+
86
+ res.body
85
87
  rescue ::Timeout::Error => e
86
88
  raise NetworkError, "timeout requesting #{query}: #{e}"
87
89
  rescue => e
90
+ raise e if e.is_a?(NetworkError)
88
91
  raise NetworkError, "error requesting #{query}: #{e}"
89
92
  end
90
93
 
metadata CHANGED
@@ -1,15 +1,16 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fieldhand
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.1
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Paul Mucur
8
8
  - Maciej Gajewski
9
+ - Giovanni Derks
9
10
  autorequire:
10
11
  bindir: bin
11
12
  cert_chain: []
12
- date: 2017-05-10 00:00:00.000000000 Z
13
+ date: 2017-07-10 00:00:00.000000000 Z
13
14
  dependencies:
14
15
  - !ruby/object:Gem::Dependency
15
16
  name: ox
@@ -100,6 +101,7 @@ files:
100
101
  - lib/fieldhand/list_sets_parser.rb
101
102
  - lib/fieldhand/logger.rb
102
103
  - lib/fieldhand/metadata_format.rb
104
+ - lib/fieldhand/network_error.rb
103
105
  - lib/fieldhand/paginator.rb
104
106
  - lib/fieldhand/record.rb
105
107
  - lib/fieldhand/repository.rb