fieldhand 0.1.0 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +63 -1
- data/lib/fieldhand/header.rb +3 -2
- data/lib/fieldhand/identify.rb +3 -2
- data/lib/fieldhand/metadata_format.rb +3 -2
- data/lib/fieldhand/paginator.rb +3 -1
- data/lib/fieldhand/record.rb +3 -2
- data/lib/fieldhand/repository.rb +10 -10
- data/lib/fieldhand/set.rb +3 -2
- data/spec/fieldhand/header_spec.rb +9 -0
- data/spec/fieldhand/identify_spec.rb +9 -0
- data/spec/fieldhand/metadata_format_spec.rb +9 -0
- data/spec/fieldhand/record_spec.rb +9 -0
- data/spec/fieldhand/set_spec.rb +9 -0
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c1ca08a8fb6ab7682f308d7cb2ffe4ac3cc0829d
|
4
|
+
data.tar.gz: dea8d65de365fb51ef9788e4cfd4c34dd11af2b4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e797e8d9625730ac9bed36bbeaae6fb8d490695e6b165a94f7e48ea0b743d8c4f95322bbd3c119533a2a446a5014a1e90fd1adcc96a003bceba83cc61a8a9fa1
|
7
|
+
data.tar.gz: '0295cc11eb9ad3f6c6782022cf1f06953aa4675ef608a32c9dc9cb363f1733750f08bedd3e69870d1973d031e8ed6366a1ff509a951818bcb3985fe72d1db6c6'
|
data/README.md
CHANGED
@@ -2,9 +2,21 @@
|
|
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.
|
5
|
+
**Current version:** 0.2.0
|
6
6
|
**Supported Ruby versions:** 1.8.7, 1.9.2, 1.9.3, 2.0, 2.1, 2.2
|
7
7
|
|
8
|
+
## Installation
|
9
|
+
|
10
|
+
```
|
11
|
+
gem install fieldhand -v '~> 0.2'
|
12
|
+
```
|
13
|
+
|
14
|
+
Or, in your `Gemfile`:
|
15
|
+
|
16
|
+
```ruby
|
17
|
+
gem 'fieldhand', '~> 0.2'
|
18
|
+
```
|
19
|
+
|
8
20
|
## Usage
|
9
21
|
|
10
22
|
```ruby
|
@@ -48,14 +60,17 @@ repository.get('oai:www.example.com:12345')
|
|
48
60
|
* [`#admin_emails`](#fieldhandidentifyadmin_emails)
|
49
61
|
* [`#compression`](#fieldhandidentifycompression)
|
50
62
|
* [`#descriptions`](#fieldhandidentifydescriptions)
|
63
|
+
* [`#response_date`](#fieldhandidentifyresponse_date)
|
51
64
|
* [`Fieldhand::MetadataFormat`](#fieldhandmetadataformat)
|
52
65
|
* [`#prefix`](#fieldhandmetadataformatprefix)
|
53
66
|
* [`#schema`](#fieldhandmetadataformatschema)
|
54
67
|
* [`#namespace`](#fieldhandmetadataformatnamespace)
|
68
|
+
* [`#response_date`](#fieldhandmetadataformatresponse_date)
|
55
69
|
* [`Fieldhand::Set`](#fieldhandset)
|
56
70
|
* [`#spec`](#fieldhandsetspec)
|
57
71
|
* [`#name`](#fieldhandsetname)
|
58
72
|
* [`#descriptions`](#fieldhandsetdescriptions)
|
73
|
+
* [`#response_date`](#fieldhandsetresponse_date)
|
59
74
|
* [`Fieldhand::Record`](#fieldhandrecord)
|
60
75
|
* [`#deleted?`](#fieldhandrecorddeleted)
|
61
76
|
* [`#status`](#fieldhandrecordstatus)
|
@@ -64,12 +79,14 @@ repository.get('oai:www.example.com:12345')
|
|
64
79
|
* [`#sets`](#fieldhandrecordsets)
|
65
80
|
* [`#metadata`](#fieldhandrecordmetadata)
|
66
81
|
* [`#about`](#fieldhandrecordabout)
|
82
|
+
* [`#response_date`](#fieldhandrecordresponse_date)
|
67
83
|
* [`Fieldhand::Header`](#fieldhandheader)
|
68
84
|
* [`#deleted?`](#fieldhandheaderdeleted)
|
69
85
|
* [`#status`](#fieldhandheaderstatus)
|
70
86
|
* [`#identifier`](#fieldhandheaderidentifier)
|
71
87
|
* [`#datestamp`](#fieldhandheaderdatestamp)
|
72
88
|
* [`#sets`](#fieldhandheadersets)
|
89
|
+
* [`#response_date`](#fieldhandheaderresponse_date)
|
73
90
|
* [`Fieldhand::NetworkError`](#fieldhandnetworkerror)
|
74
91
|
* [`Fieldhand::ProtocolError`](#fieldhandprotocolerror)
|
75
92
|
* [`Fieldhand::BadArgumentError`](#fieldhandbadargumenterror)
|
@@ -276,6 +293,15 @@ Returns XML elements describing this repository as an `Array` of [`Ox::Element`]
|
|
276
293
|
|
277
294
|
As descriptions can be in any format, Fieldhand doesn't attempt to parse descriptions but leaves parsing to the client.
|
278
295
|
|
296
|
+
#### `Fieldhand::Identify#response_date`
|
297
|
+
|
298
|
+
```ruby
|
299
|
+
repository.identify.response_date
|
300
|
+
#=> 2017-05-08 11:21:38 +0100
|
301
|
+
```
|
302
|
+
|
303
|
+
Return the time and date that the response was sent.
|
304
|
+
|
279
305
|
### `Fieldhand::MetadataFormat`
|
280
306
|
|
281
307
|
A class to represent a metadata format available from a repository.
|
@@ -307,6 +333,15 @@ repository.metadata_formats.first.namespace
|
|
307
333
|
|
308
334
|
Return the XML Namespace URI for the format as a [`URI`][URI].
|
309
335
|
|
336
|
+
#### `Fieldhand::MetadataFormat#response_date`
|
337
|
+
|
338
|
+
```ruby
|
339
|
+
repository.metadata_formats.first.response_date
|
340
|
+
#=> 2017-05-08 11:21:38 +0100
|
341
|
+
```
|
342
|
+
|
343
|
+
Return the time and date that the response was sent.
|
344
|
+
|
310
345
|
### `Fieldhand::Set`
|
311
346
|
|
312
347
|
A class representing an optional construct for grouping items for the purpose of selective harvesting.
|
@@ -338,6 +373,15 @@ repository.sets.first.descriptions
|
|
338
373
|
|
339
374
|
Return an `Array` of [`Ox::Element`][Element]s of any optional and repeatable containers that may hold community-specific XML-encoded data about the set.
|
340
375
|
|
376
|
+
#### `Fieldhand::Set#response_date`
|
377
|
+
|
378
|
+
```ruby
|
379
|
+
repository.sets.first.response_date
|
380
|
+
#=> 2017-05-08 11:21:38 +0100
|
381
|
+
```
|
382
|
+
|
383
|
+
Return the time and date that the response was sent.
|
384
|
+
|
341
385
|
### `Fieldhand::Record`
|
342
386
|
|
343
387
|
A class representing a [record](https://www.openarchives.org/OAI/openarchivesprotocol.html#Record) from the repository:
|
@@ -411,6 +455,15 @@ repository.records.first.about
|
|
411
455
|
|
412
456
|
Return an `Array` of [`Ox::Element`][Element]s of any optional and repeatable containers holding data about the metadata part of the record.
|
413
457
|
|
458
|
+
#### `Fieldhand::Record#response_date`
|
459
|
+
|
460
|
+
```ruby
|
461
|
+
repository.records.first.response_date
|
462
|
+
#=> 2017-05-08 11:21:38 +0100
|
463
|
+
```
|
464
|
+
|
465
|
+
Return the time and date that the response was sent.
|
466
|
+
|
414
467
|
### `Fieldhand::Header`
|
415
468
|
|
416
469
|
A class representing the [header](https://www.openarchives.org/OAI/openarchivesprotocol.html#header) of a record:
|
@@ -472,6 +525,15 @@ repository.identifiers.first.sets
|
|
472
525
|
|
473
526
|
Return an `Array` of `String` [set specs](#fieldhandsetspec) indicating set memberships of this record.
|
474
527
|
|
528
|
+
#### `Fieldhand::Header#response_date`
|
529
|
+
|
530
|
+
```ruby
|
531
|
+
repository.identifiers.first.response_date
|
532
|
+
#=> 2017-05-08 11:21:38 +0100
|
533
|
+
```
|
534
|
+
|
535
|
+
Return the time and date that the response was sent.
|
536
|
+
|
475
537
|
### `Fieldhand::NetworkError`
|
476
538
|
|
477
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).
|
data/lib/fieldhand/header.rb
CHANGED
@@ -13,10 +13,11 @@ module Fieldhand
|
|
13
13
|
#
|
14
14
|
# See https://www.openarchives.org/OAI/openarchivesprotocol.html#header
|
15
15
|
class Header
|
16
|
-
attr_reader :element
|
16
|
+
attr_reader :element, :response_date
|
17
17
|
|
18
|
-
def initialize(element)
|
18
|
+
def initialize(element, response_date = Time.now)
|
19
19
|
@element = element
|
20
|
+
@response_date = response_date
|
20
21
|
end
|
21
22
|
|
22
23
|
def deleted?
|
data/lib/fieldhand/identify.rb
CHANGED
@@ -6,10 +6,11 @@ module Fieldhand
|
|
6
6
|
#
|
7
7
|
# See https://www.openarchives.org/OAI/openarchivesprotocol.html#Identify
|
8
8
|
class Identify
|
9
|
-
attr_reader :element
|
9
|
+
attr_reader :element, :response_date
|
10
10
|
|
11
|
-
def initialize(element)
|
11
|
+
def initialize(element, response_date = Time.now)
|
12
12
|
@element = element
|
13
|
+
@response_date = response_date
|
13
14
|
end
|
14
15
|
|
15
16
|
def name
|
@@ -5,10 +5,11 @@ module Fieldhand
|
|
5
5
|
#
|
6
6
|
# See https://www.openarchives.org/OAI/openarchivesprotocol.html#ListMetadataFormats
|
7
7
|
class MetadataFormat
|
8
|
-
attr_reader :element
|
8
|
+
attr_reader :element, :response_date
|
9
9
|
|
10
|
-
def initialize(element)
|
10
|
+
def initialize(element, response_date = Time.now)
|
11
11
|
@element = element
|
12
|
+
@response_date = response_date
|
12
13
|
end
|
13
14
|
|
14
15
|
def to_s
|
data/lib/fieldhand/paginator.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
require 'fieldhand/datestamp'
|
1
2
|
require 'fieldhand/logger'
|
2
3
|
require 'ox'
|
3
4
|
require 'cgi'
|
@@ -46,13 +47,14 @@ module Fieldhand
|
|
46
47
|
|
47
48
|
loop do
|
48
49
|
document = ::Ox.parse(request(query.merge('verb' => verb)))
|
50
|
+
response_date = document.root.locate('responseDate[0]/^String').map { |date| Datestamp.parse(date) }.first
|
49
51
|
|
50
52
|
document.root.locate('error').each do |error|
|
51
53
|
convert_error(error)
|
52
54
|
end
|
53
55
|
|
54
56
|
document.root.locate(path).each do |item|
|
55
|
-
yield item
|
57
|
+
yield item, response_date
|
56
58
|
end
|
57
59
|
|
58
60
|
resumption_token = document.root.locate('?/resumptionToken/^String').first
|
data/lib/fieldhand/record.rb
CHANGED
@@ -5,10 +5,11 @@ module Fieldhand
|
|
5
5
|
#
|
6
6
|
# See https://www.openarchives.org/OAI/openarchivesprotocol.html#Record
|
7
7
|
class Record
|
8
|
-
attr_reader :element
|
8
|
+
attr_reader :element, :response_date
|
9
9
|
|
10
|
-
def initialize(element)
|
10
|
+
def initialize(element, response_date = Time.now)
|
11
11
|
@element = element
|
12
|
+
@response_date = response_date
|
12
13
|
end
|
13
14
|
|
14
15
|
def deleted?
|
data/lib/fieldhand/repository.rb
CHANGED
@@ -23,7 +23,7 @@ module Fieldhand
|
|
23
23
|
def identify
|
24
24
|
paginator.
|
25
25
|
items('Identify', 'Identify').
|
26
|
-
map { |identify| Identify.new(identify) }.
|
26
|
+
map { |identify, response_date| Identify.new(identify, response_date) }.
|
27
27
|
first
|
28
28
|
end
|
29
29
|
|
@@ -35,8 +35,8 @@ module Fieldhand
|
|
35
35
|
|
36
36
|
paginator.
|
37
37
|
items('ListMetadataFormats', 'ListMetadataFormats/metadataFormat', arguments).
|
38
|
-
each do |format|
|
39
|
-
yield MetadataFormat.new(format)
|
38
|
+
each do |format, response_date|
|
39
|
+
yield MetadataFormat.new(format, response_date)
|
40
40
|
end
|
41
41
|
end
|
42
42
|
|
@@ -45,8 +45,8 @@ module Fieldhand
|
|
45
45
|
|
46
46
|
paginator.
|
47
47
|
items('ListSets', 'ListSets/set').
|
48
|
-
each do |set|
|
49
|
-
yield Set.new(set)
|
48
|
+
each do |set, response_date|
|
49
|
+
yield Set.new(set, response_date)
|
50
50
|
end
|
51
51
|
end
|
52
52
|
|
@@ -57,8 +57,8 @@ module Fieldhand
|
|
57
57
|
|
58
58
|
paginator.
|
59
59
|
items('ListRecords', 'ListRecords/record', query).
|
60
|
-
each do |record|
|
61
|
-
yield Record.new(record)
|
60
|
+
each do |record, response_date|
|
61
|
+
yield Record.new(record, response_date)
|
62
62
|
end
|
63
63
|
end
|
64
64
|
|
@@ -69,8 +69,8 @@ module Fieldhand
|
|
69
69
|
|
70
70
|
paginator.
|
71
71
|
items('ListIdentifiers', 'ListIdentifiers/header', query).
|
72
|
-
each do |header|
|
73
|
-
yield Header.new(header)
|
72
|
+
each do |header, response_date|
|
73
|
+
yield Header.new(header, response_date)
|
74
74
|
end
|
75
75
|
end
|
76
76
|
|
@@ -82,7 +82,7 @@ module Fieldhand
|
|
82
82
|
|
83
83
|
paginator.
|
84
84
|
items('GetRecord', 'GetRecord/record', query).
|
85
|
-
map { |record| Record.new(record) }.
|
85
|
+
map { |record, response_date| Record.new(record, response_date) }.
|
86
86
|
first
|
87
87
|
end
|
88
88
|
|
data/lib/fieldhand/set.rb
CHANGED
@@ -3,10 +3,11 @@ module Fieldhand
|
|
3
3
|
#
|
4
4
|
# See https://www.openarchives.org/OAI/openarchivesprotocol.html#Set
|
5
5
|
class Set
|
6
|
-
attr_reader :element
|
6
|
+
attr_reader :element, :response_date
|
7
7
|
|
8
|
-
def initialize(element)
|
8
|
+
def initialize(element, response_date = Time.now)
|
9
9
|
@element = element
|
10
|
+
@response_date = response_date
|
10
11
|
end
|
11
12
|
|
12
13
|
def to_s
|
@@ -34,5 +34,14 @@ module Fieldhand
|
|
34
34
|
expect(header.datestamp).to eq(::Date.new(2001, 1, 1))
|
35
35
|
end
|
36
36
|
end
|
37
|
+
|
38
|
+
describe '#response_date' do
|
39
|
+
it 'returns the passed response date' do
|
40
|
+
element = ::Ox.parse('<header/>')
|
41
|
+
header = described_class.new(element, ::Time.utc(2001, 1, 1, 0, 0, 0))
|
42
|
+
|
43
|
+
expect(header.response_date).to eq(::Time.utc(2001, 1, 1, 0, 0, 0))
|
44
|
+
end
|
45
|
+
end
|
37
46
|
end
|
38
47
|
end
|
@@ -39,5 +39,14 @@ module Fieldhand
|
|
39
39
|
expect(identify.earliest_datestamp).to eq(::Date.new(1990, 2, 1))
|
40
40
|
end
|
41
41
|
end
|
42
|
+
|
43
|
+
describe '#response_date' do
|
44
|
+
it 'returns the passed response date' do
|
45
|
+
element = ::Ox.parse('<Identify/>')
|
46
|
+
identify = described_class.new(element, ::Time.utc(2001, 1, 1, 0, 0, 0))
|
47
|
+
|
48
|
+
expect(identify.response_date).to eq(::Time.utc(2001, 1, 1, 0, 0, 0))
|
49
|
+
end
|
50
|
+
end
|
42
51
|
end
|
43
52
|
end
|
@@ -11,5 +11,14 @@ module Fieldhand
|
|
11
11
|
expect(format.to_s).to eq('xoai')
|
12
12
|
end
|
13
13
|
end
|
14
|
+
|
15
|
+
describe '#response_date' do
|
16
|
+
it 'returns the passed response date' do
|
17
|
+
element = ::Ox.parse('<metadataFormat/>')
|
18
|
+
format = described_class.new(element, ::Time.utc(2001, 1, 1, 0, 0, 0))
|
19
|
+
|
20
|
+
expect(format.response_date).to eq(::Time.utc(2001, 1, 1, 0, 0, 0))
|
21
|
+
end
|
22
|
+
end
|
14
23
|
end
|
15
24
|
end
|
@@ -34,5 +34,14 @@ module Fieldhand
|
|
34
34
|
expect(record.about.size).to eq(2)
|
35
35
|
end
|
36
36
|
end
|
37
|
+
|
38
|
+
describe '#response_date' do
|
39
|
+
it 'returns the passed response date' do
|
40
|
+
element = ::Ox.parse('<record/>')
|
41
|
+
record = described_class.new(element, ::Time.utc(2001, 1, 1, 0, 0, 0))
|
42
|
+
|
43
|
+
expect(record.response_date).to eq(::Time.utc(2001, 1, 1, 0, 0, 0))
|
44
|
+
end
|
45
|
+
end
|
37
46
|
end
|
38
47
|
end
|
data/spec/fieldhand/set_spec.rb
CHANGED
@@ -27,5 +27,14 @@ module Fieldhand
|
|
27
27
|
expect(set.to_s).to eq('A')
|
28
28
|
end
|
29
29
|
end
|
30
|
+
|
31
|
+
describe '#response_date' do
|
32
|
+
it 'returns the passed response date' do
|
33
|
+
element = ::Ox.parse('<set/>')
|
34
|
+
set = described_class.new(element, ::Time.utc(2001, 1, 1, 0, 0, 0))
|
35
|
+
|
36
|
+
expect(set.response_date).to eq(::Time.utc(2001, 1, 1, 0, 0, 0))
|
37
|
+
end
|
38
|
+
end
|
30
39
|
end
|
31
40
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fieldhand
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Paul Mucur
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2017-05-
|
12
|
+
date: 2017-05-08 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: ox
|
@@ -128,7 +128,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
128
128
|
version: '0'
|
129
129
|
requirements: []
|
130
130
|
rubyforge_project:
|
131
|
-
rubygems_version: 2.
|
131
|
+
rubygems_version: 2.6.11
|
132
132
|
signing_key:
|
133
133
|
specification_version: 4
|
134
134
|
summary: An OAI-PMH harvester
|