oai 0.3.1 → 0.4.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 +1 -1
- data/lib/oai/client.rb +6 -1
- data/lib/oai/client/record.rb +2 -1
- data/lib/oai/provider/model/activerecord_caching_wrapper.rb +10 -9
- data/lib/oai/provider/model/activerecord_wrapper.rb +15 -16
- data/test/activerecord_provider/database/0001_oaipmh_tables.rb +1 -1
- data/test/activerecord_provider/helpers/set_provider.rb +2 -2
- data/test/activerecord_provider/models/dc_field.rb +1 -1
- data/test/activerecord_provider/models/exclusive_set_dc_field.rb +1 -1
- data/test/activerecord_provider/tc_ar_provider.rb +15 -18
- data/test/activerecord_provider/tc_ar_sets_provider.rb +10 -10
- data/test/activerecord_provider/tc_caching_paging_provider.rb +3 -5
- data/test/activerecord_provider/tc_simple_paging_provider.rb +4 -6
- data/test/client/tc_get_record.rb +1 -0
- data/test/client/tc_http_client.rb +15 -0
- metadata +56 -56
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 87d0fab6e4343a4b7523ee0559687d2490862932
|
4
|
+
data.tar.gz: 69a74965ef7b9176408befe11bf4a9a9b4e49a74
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: cf7096a011a58d7e37d740d29e0a35195895909356d49af641f9ad80b6e9df2b496da039404371a7a8ab11943e725887b6d251ed804f81a17dd0b3ca1cefac98
|
7
|
+
data.tar.gz: bdac7716fa083f23cb622b5f6a2b64068b1047322728ce88dd40c37be6596cd12b64511a4e92ebaf8db846ff8f7f868b66f974557fe003ba07a6154bdd0b5b1c
|
data/README.md
CHANGED
@@ -26,7 +26,7 @@ For example to initiate a ListRecords request to pubmed you can:
|
|
26
26
|
|
27
27
|
```ruby
|
28
28
|
require 'oai'
|
29
|
-
client = OAI::Client.new 'http://www.pubmedcentral.gov/oai/oai.cgi'
|
29
|
+
client = OAI::Client.new 'http://www.pubmedcentral.gov/oai/oai.cgi', :headers => { "From" => "oai@example.com" }
|
30
30
|
response = client.list_records
|
31
31
|
# Get the first page of records
|
32
32
|
response.each do |record|
|
data/lib/oai/client.rb
CHANGED
@@ -87,6 +87,7 @@ module OAI
|
|
87
87
|
@base = URI.parse base_url
|
88
88
|
@debug = options.fetch(:debug, false)
|
89
89
|
@parser = options.fetch(:parser, 'rexml')
|
90
|
+
@headers = options.fetch(:headers, {})
|
90
91
|
|
91
92
|
@http_client = options.fetch(:http) do
|
92
93
|
Faraday.new(:url => @base.clone) do |builder|
|
@@ -258,7 +259,11 @@ module OAI
|
|
258
259
|
|
259
260
|
# Do the actual HTTP get, following any temporary redirects
|
260
261
|
def get(uri)
|
261
|
-
response = @http_client.get
|
262
|
+
response = @http_client.get do |req|
|
263
|
+
req.url uri
|
264
|
+
req.headers.merge! @headers
|
265
|
+
end
|
266
|
+
|
262
267
|
response.body
|
263
268
|
end
|
264
269
|
|
data/lib/oai/client/record.rb
CHANGED
@@ -9,9 +9,10 @@ module OAI
|
|
9
9
|
# metadata will return a `XML::Node` object instead.
|
10
10
|
class Record
|
11
11
|
include OAI::XPath
|
12
|
-
attr_accessor :header, :metadata, :about
|
12
|
+
attr_accessor :header, :metadata, :about, :_source
|
13
13
|
|
14
14
|
def initialize(element)
|
15
|
+
@_source = element
|
15
16
|
@header = OAI::Header.new xpath_first(element, './/header')
|
16
17
|
@metadata = xpath_first(element, './/metadata')
|
17
18
|
@about = xpath_first(element, './/about')
|
@@ -4,8 +4,8 @@ module OAI::Provider
|
|
4
4
|
|
5
5
|
# ActiveRecord model class in support of the caching wrapper.
|
6
6
|
class OaiToken < ActiveRecord::Base
|
7
|
-
has_many :entries,
|
8
|
-
:
|
7
|
+
has_many :entries, -> { order("record_id ASC") },
|
8
|
+
:class_name => 'OaiEntry', :dependent => :destroy
|
9
9
|
|
10
10
|
validates_uniqueness_of :token
|
11
11
|
|
@@ -60,15 +60,15 @@ module OAI::Provider
|
|
60
60
|
conditions = sql_conditions(options)
|
61
61
|
|
62
62
|
if :all == selector
|
63
|
-
total = model.
|
63
|
+
total = model.where(conditions).count
|
64
64
|
if @limit && total > @limit
|
65
65
|
select_partial(
|
66
66
|
ResumptionToken.new(options.merge({:last => 0})))
|
67
67
|
else
|
68
|
-
model.
|
68
|
+
model.where(conditions)
|
69
69
|
end
|
70
70
|
else
|
71
|
-
model.find(selector
|
71
|
+
model.where(conditions).find(selector)
|
72
72
|
end
|
73
73
|
end
|
74
74
|
|
@@ -78,7 +78,7 @@ module OAI::Provider
|
|
78
78
|
raise ResumptionTokenException.new unless @limit
|
79
79
|
|
80
80
|
token = ResumptionToken.parse(token_string)
|
81
|
-
total = model.
|
81
|
+
total = model.where(token_conditions(token)).count
|
82
82
|
|
83
83
|
if token.last * @limit + @limit < total
|
84
84
|
select_partial(token)
|
@@ -91,7 +91,7 @@ module OAI::Provider
|
|
91
91
|
# resumption token to get the next subset
|
92
92
|
def select_partial(token)
|
93
93
|
if 0 == token.last
|
94
|
-
oaitoken = OaiToken.
|
94
|
+
oaitoken = OaiToken.find_or_create_by(token: token.to_s)
|
95
95
|
if oaitoken.new_record_before_save?
|
96
96
|
OaiToken.connection.execute("insert into " +
|
97
97
|
"#{OaiEntry.table_name} (oai_token_id, record_id) " +
|
@@ -104,8 +104,9 @@ module OAI::Provider
|
|
104
104
|
raise ResumptionTokenException.new unless oaitoken
|
105
105
|
|
106
106
|
PartialResult.new(
|
107
|
-
hydrate_records(
|
108
|
-
|
107
|
+
hydrate_records(
|
108
|
+
oaitoken.entries.limit(@limit).offset(token.last * @limit)),
|
109
|
+
token.next(token.last + 1)
|
109
110
|
)
|
110
111
|
end
|
111
112
|
|
@@ -25,12 +25,12 @@ module OAI::Provider
|
|
25
25
|
end
|
26
26
|
|
27
27
|
def earliest
|
28
|
-
earliest_obj = model.
|
28
|
+
earliest_obj = model.order("#{timestamp_field} asc").first
|
29
29
|
earliest_obj.nil? ? Time.at(0) : earliest_obj.send(timestamp_field)
|
30
30
|
end
|
31
31
|
|
32
32
|
def latest
|
33
|
-
latest_obj = model.
|
33
|
+
latest_obj = model.order("#{timestamp_field} desc").first
|
34
34
|
latest_obj.nil? ? Time.now : latest_obj.send(timestamp_field)
|
35
35
|
end
|
36
36
|
# A model class is expected to provide a method Model.sets that
|
@@ -46,15 +46,15 @@ module OAI::Provider
|
|
46
46
|
options[:resumption_token]) if options[:resumption_token]
|
47
47
|
conditions = sql_conditions(options)
|
48
48
|
if :all == selector
|
49
|
-
total = find_scope.
|
49
|
+
total = find_scope.where(conditions).count
|
50
50
|
if @limit && total > @limit
|
51
51
|
select_partial(find_scope,
|
52
52
|
ResumptionToken.new(options.merge({:last => 0})))
|
53
53
|
else
|
54
|
-
find_scope.
|
54
|
+
find_scope.where(conditions)
|
55
55
|
end
|
56
56
|
else
|
57
|
-
find_scope.find(selector
|
57
|
+
find_scope.where(conditions).find(selector)
|
58
58
|
end
|
59
59
|
end
|
60
60
|
|
@@ -90,19 +90,19 @@ module OAI::Provider
|
|
90
90
|
|
91
91
|
# Find the set or return an empty scope
|
92
92
|
set = find_set_by_spec(options[:set])
|
93
|
-
return model.
|
93
|
+
return model.limit(0) if set.nil?
|
94
94
|
|
95
95
|
# If the set has a backward relationship, we'll use it
|
96
96
|
if set.class.respond_to?(:reflect_on_all_associations)
|
97
97
|
set.class.reflect_on_all_associations.each do |assoc|
|
98
|
-
return set.send(assoc.name)
|
98
|
+
return set.send(assoc.name) if assoc.klass == model
|
99
99
|
end
|
100
100
|
end
|
101
101
|
|
102
102
|
# Search the attributes for 'set'
|
103
103
|
if model.column_names.include?('set')
|
104
104
|
# Scope using the set attribute as the spec
|
105
|
-
model.
|
105
|
+
model.where(set: options[:set])
|
106
106
|
else
|
107
107
|
# Default to empty set, as we've tried everything else
|
108
108
|
model.scoped(:limit => 0)
|
@@ -122,24 +122,23 @@ module OAI::Provider
|
|
122
122
|
raise OAI::ResumptionTokenException.new unless @limit
|
123
123
|
|
124
124
|
token = ResumptionToken.parse(token_string)
|
125
|
-
total = find_scope.
|
125
|
+
total = find_scope.where(token_conditions(token)).count
|
126
126
|
|
127
127
|
if @limit < total
|
128
128
|
select_partial(find_scope, token)
|
129
129
|
else # end of result set
|
130
|
-
find_scope.
|
131
|
-
|
132
|
-
|
130
|
+
find_scope.where(token_conditions(token))
|
131
|
+
.limit(@limit)
|
132
|
+
.order("#{model.primary_key} asc")
|
133
133
|
end
|
134
134
|
end
|
135
135
|
|
136
136
|
# select a subset of the result set, and return it with a
|
137
137
|
# resumption token to get the next subset
|
138
138
|
def select_partial(find_scope, token)
|
139
|
-
records = find_scope.
|
140
|
-
|
141
|
-
|
142
|
-
:order => "#{model.primary_key} asc")
|
139
|
+
records = find_scope.where(token_conditions(token))
|
140
|
+
.limit(@limit)
|
141
|
+
.order("#{model.primary_key} asc")
|
143
142
|
raise OAI::ResumptionTokenException.new unless records
|
144
143
|
offset = records.last.send(model.primary_key.to_sym)
|
145
144
|
|
@@ -48,7 +48,7 @@ class OaipmhTables < ActiveRecord::Migration
|
|
48
48
|
t.column :description, :string
|
49
49
|
end
|
50
50
|
|
51
|
-
add_index :oai_tokens, [:token], :
|
51
|
+
add_index :oai_tokens, [:token], :unique => true
|
52
52
|
add_index :oai_tokens, :created_at
|
53
53
|
add_index :oai_entries, [:oai_token_id]
|
54
54
|
add_index :dc_fields, :updated_at
|
@@ -3,7 +3,7 @@ class SetModel < OAI::Provider::ActiveRecordWrapper
|
|
3
3
|
|
4
4
|
# Return all available sets
|
5
5
|
def sets
|
6
|
-
DCSet.
|
6
|
+
DCSet.all
|
7
7
|
end
|
8
8
|
|
9
9
|
end
|
@@ -21,4 +21,4 @@ class ARExclusiveSetProvider < OAI::Provider::Base
|
|
21
21
|
record_prefix = 'oai:test'
|
22
22
|
source_model OAI::Provider::ActiveRecordWrapper.new(
|
23
23
|
ExclusiveSetDCField, :timestamp_field => 'date')
|
24
|
-
end
|
24
|
+
end
|
@@ -13,7 +13,7 @@ class ActiveRecordProviderTest < TransactionalTestCase
|
|
13
13
|
end
|
14
14
|
|
15
15
|
def test_metadata_formats_for_record
|
16
|
-
record_id = DCField.
|
16
|
+
record_id = DCField.first.id
|
17
17
|
assert_nothing_raised { REXML::Document.new(@provider.list_metadata_formats(:identifier => "oai:test/#{record_id}")) }
|
18
18
|
doc = REXML::Document.new(@provider.list_metadata_formats)
|
19
19
|
assert doc.elements['/OAI-PMH/ListMetadataFormats/metadataFormat/metadataPrefix'].text == 'oai_dc'
|
@@ -35,7 +35,7 @@ class ActiveRecordProviderTest < TransactionalTestCase
|
|
35
35
|
end
|
36
36
|
|
37
37
|
def test_get_record
|
38
|
-
record_id = DCField.
|
38
|
+
record_id = DCField.first.id
|
39
39
|
assert_nothing_raised do
|
40
40
|
REXML::Document.new(@provider.get_record(
|
41
41
|
:identifier => "oai:test/#{record_id}", :metadata_prefix => 'oai_dc'))
|
@@ -46,7 +46,7 @@ class ActiveRecordProviderTest < TransactionalTestCase
|
|
46
46
|
end
|
47
47
|
|
48
48
|
def test_deleted
|
49
|
-
record = DCField.
|
49
|
+
record = DCField.first
|
50
50
|
record.deleted = true;
|
51
51
|
record.save
|
52
52
|
doc = REXML::Document.new(@provider.get_record(
|
@@ -56,11 +56,11 @@ class ActiveRecordProviderTest < TransactionalTestCase
|
|
56
56
|
end
|
57
57
|
|
58
58
|
def test_from
|
59
|
-
first_id = DCField.
|
60
|
-
DCField.update_all(
|
61
|
-
|
62
|
-
DCField.update_all(
|
63
|
-
|
59
|
+
first_id = DCField.order("id asc").first.id
|
60
|
+
DCField.where("id < #{first_id + 90}").update_all(updated_at: Time.parse("January 1 2005"))
|
61
|
+
|
62
|
+
DCField.where("id < #{first_id + 10}").update_all(updated_at: Time.parse("June 1 2005"))
|
63
|
+
|
64
64
|
|
65
65
|
from_param = Time.parse("January 1 2006")
|
66
66
|
|
@@ -68,7 +68,7 @@ class ActiveRecordProviderTest < TransactionalTestCase
|
|
68
68
|
@provider.list_records(
|
69
69
|
:metadata_prefix => 'oai_dc', :from => from_param)
|
70
70
|
)
|
71
|
-
assert_equal DCField.
|
71
|
+
assert_equal DCField.where(["updated_at >= ?", from_param]).size,
|
72
72
|
doc.elements['OAI-PMH/ListRecords'].size
|
73
73
|
|
74
74
|
doc = REXML::Document.new(
|
@@ -79,9 +79,8 @@ class ActiveRecordProviderTest < TransactionalTestCase
|
|
79
79
|
end
|
80
80
|
|
81
81
|
def test_until
|
82
|
-
first_id = DCField.
|
83
|
-
DCField.update_all(
|
84
|
-
"id < #{first_id + 10}")
|
82
|
+
first_id = DCField.order("id asc").first.id
|
83
|
+
DCField.where("id < #{first_id + 10}").update_all(updated_at: Time.parse("June 1 2005"))
|
85
84
|
|
86
85
|
doc = REXML::Document.new(
|
87
86
|
@provider.list_records(
|
@@ -91,12 +90,10 @@ class ActiveRecordProviderTest < TransactionalTestCase
|
|
91
90
|
end
|
92
91
|
|
93
92
|
def test_from_and_until
|
94
|
-
first_id = DCField.
|
95
|
-
DCField.update_all(
|
96
|
-
DCField.update_all(
|
97
|
-
|
98
|
-
DCField.update_all(['updated_at = ?', Time.parse("June 30 2005")],
|
99
|
-
"id < #{first_id + 10}")
|
93
|
+
first_id = DCField.order("id asc").first.id
|
94
|
+
DCField.update_all(updated_at: Time.parse("June 1 2005"))
|
95
|
+
DCField.where("id < #{first_id + 50}").update_all(updated_at: Time.parse("June 15 2005"))
|
96
|
+
DCField.where("id < #{first_id + 10}").update_all(updated_at: Time.parse("June 30 2005"))
|
100
97
|
|
101
98
|
doc = REXML::Document.new(
|
102
99
|
@provider.list_records(
|
@@ -28,7 +28,7 @@ class ActiveRecordSetProviderTest < TransactionalTestCase
|
|
28
28
|
end
|
29
29
|
|
30
30
|
def test_record_with_multiple_sets
|
31
|
-
record = DCSet.
|
31
|
+
record = DCSet.where("spec = 'C'").first.dc_fields.first
|
32
32
|
assert_equal 2, record.sets.size
|
33
33
|
end
|
34
34
|
|
@@ -51,22 +51,22 @@ class ActiveRecordSetProviderTest < TransactionalTestCase
|
|
51
51
|
set_ab = DCSet.create(:name => "Set A:B", :spec => "A:B")
|
52
52
|
|
53
53
|
next_id = 0
|
54
|
-
DCField.
|
54
|
+
DCField.limit(10).order("id asc").each do |record|
|
55
55
|
set_a.dc_fields << record
|
56
56
|
next_id = record.id
|
57
57
|
end
|
58
58
|
|
59
|
-
DCField.
|
59
|
+
DCField.where("id > #{next_id}").limit(10).order("id asc").each do |record|
|
60
60
|
set_b.dc_fields << record
|
61
61
|
next_id = record.id
|
62
62
|
end
|
63
63
|
|
64
|
-
DCField.
|
64
|
+
DCField.where("id > #{next_id}").limit(10).order("id asc").each do |record|
|
65
65
|
set_ab.dc_fields << record
|
66
66
|
next_id = record.id
|
67
67
|
end
|
68
68
|
|
69
|
-
DCField.
|
69
|
+
DCField.where("id > #{next_id}").limit(10).order("id asc").each do |record|
|
70
70
|
set_a.dc_fields << record
|
71
71
|
set_c.dc_fields << record
|
72
72
|
next_id = record.id
|
@@ -117,25 +117,25 @@ class ActiveRecordExclusiveSetsProviderTest < TransactionalTestCase
|
|
117
117
|
def define_sets
|
118
118
|
next_id = 0
|
119
119
|
|
120
|
-
ExclusiveSetDCField.
|
120
|
+
ExclusiveSetDCField.limit(10).order("id asc").each do |record|
|
121
121
|
record.set = "A"
|
122
122
|
record.save!
|
123
123
|
next_id = record.id
|
124
124
|
end
|
125
125
|
|
126
|
-
ExclusiveSetDCField.
|
126
|
+
ExclusiveSetDCField.where("id > #{next_id}").limit(10).order("id asc").each do |record|
|
127
127
|
record.set = "B"
|
128
128
|
record.save!
|
129
129
|
next_id = record.id
|
130
130
|
end
|
131
131
|
|
132
|
-
ExclusiveSetDCField.
|
132
|
+
ExclusiveSetDCField.where("id > #{next_id}").limit(10).order("id asc").each do |record|
|
133
133
|
record.set = "A:B"
|
134
134
|
record.save!
|
135
135
|
next_id = record.id
|
136
136
|
end
|
137
137
|
|
138
|
-
ExclusiveSetDCField.
|
138
|
+
ExclusiveSetDCField.where("id > #{next_id}").limit(10).order("id asc").each do |record|
|
139
139
|
record.set = "A"
|
140
140
|
record.save!
|
141
141
|
next_id = record.id
|
@@ -155,4 +155,4 @@ class ActiveRecordExclusiveSetsProviderTest < TransactionalTestCase
|
|
155
155
|
end
|
156
156
|
end
|
157
157
|
|
158
|
-
end
|
158
|
+
end
|
@@ -22,11 +22,9 @@ class CachingPagingProviderTest < TransactionalTestCase
|
|
22
22
|
end
|
23
23
|
|
24
24
|
def test_from_and_until
|
25
|
-
first_id = DCField.
|
26
|
-
DCField.update_all(
|
27
|
-
|
28
|
-
DCField.update_all(['updated_at = ?', Time.parse("November 1 2005")],
|
29
|
-
"id < #{first_id + 50} and id > #{first_id + 25}")
|
25
|
+
first_id = DCField.order("id asc").first.id
|
26
|
+
DCField.where("id <= #{first_id + 25}").update_all(updated_at: Time.parse("September 15 2005"))
|
27
|
+
DCField.where("id < #{first_id + 50} and id > #{first_id + 25}").update_all(updated_at: Time.parse("November 1 2005"))
|
30
28
|
|
31
29
|
# Should return 50 records broken into 2 groups of 25.
|
32
30
|
doc = Document.new(
|
@@ -22,13 +22,11 @@ class SimpleResumptionProviderTest < TransactionalTestCase
|
|
22
22
|
end
|
23
23
|
|
24
24
|
def test_from_and_until
|
25
|
-
first_id = DCField.
|
26
|
-
DCField.update_all(
|
27
|
-
|
28
|
-
DCField.update_all(['updated_at = ?', Time.parse("November 1 2005")],
|
29
|
-
"id <= #{first_id + 50} and id > #{first_id + 25}")
|
25
|
+
first_id = DCField.order("id asc").first.id
|
26
|
+
DCField.where("id < #{first_id + 25}").update_all(updated_at: Time.parse("September 15 2005"))
|
27
|
+
DCField.where("id <= #{first_id + 50} and id > #{first_id + 25}").update_all(updated_at: Time.parse("November 1 2005"))
|
30
28
|
|
31
|
-
total = DCField.
|
29
|
+
total = DCField.where(["updated_at >= ? AND updated_at <= ?", Time.parse("September 1 2005"), Time.parse("November 30 2005")]).count
|
32
30
|
|
33
31
|
# Should return 50 records broken into 2 groups of 25.
|
34
32
|
doc = Document.new(
|
@@ -7,6 +7,7 @@ class GetRecordTest < Test::Unit::TestCase
|
|
7
7
|
response = client.get_record :identifier => 'oai:test/3'
|
8
8
|
assert_kind_of OAI::GetRecordResponse, response
|
9
9
|
assert_kind_of OAI::Record, response.record
|
10
|
+
assert_kind_of REXML::Element, response.record._source
|
10
11
|
assert_kind_of REXML::Element, response.record.metadata
|
11
12
|
assert_kind_of OAI::Header, response.record.header
|
12
13
|
assert_kind_of REXML::Element, response.record.about
|
@@ -2,6 +2,21 @@ require 'test_helper'
|
|
2
2
|
require 'webrick'
|
3
3
|
|
4
4
|
class HttpClientTest < Test::Unit::TestCase
|
5
|
+
def test_user_agent_and_from_headers
|
6
|
+
faraday_stub = Faraday.new do |builder|
|
7
|
+
builder.adapter :test do |stub|
|
8
|
+
stub.get('/echo') { |env| [200, {}, Marshal.dump(env)] }
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
client = OAI::Client.new 'http://localhost:3333/oai', :headers => { 'From' => 'oai@example.com', 'User-Agent' => 'ruby-oai' }, :http => faraday_stub
|
13
|
+
|
14
|
+
response = client.send(:get, '/echo')
|
15
|
+
env = Marshal.load(response)
|
16
|
+
|
17
|
+
assert_equal('oai@example.com', env.request_headers['From'])
|
18
|
+
assert_equal('ruby-oai', env.request_headers['User-Agent'])
|
19
|
+
end
|
5
20
|
|
6
21
|
def test_pluggable_http_client
|
7
22
|
oai_response = <<-eos
|
metadata
CHANGED
@@ -1,55 +1,55 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: oai
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ed Summers
|
8
8
|
autorequire: oai
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2015-05-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: builder
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- -
|
17
|
+
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version:
|
19
|
+
version: 3.1.0
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- -
|
24
|
+
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version:
|
26
|
+
version: 3.1.0
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: faraday
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- -
|
31
|
+
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: '0'
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- -
|
38
|
+
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: faraday_middleware
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- -
|
45
|
+
- - ">="
|
46
46
|
- !ruby/object:Gem::Version
|
47
47
|
version: '0'
|
48
48
|
type: :runtime
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- -
|
52
|
+
- - ">="
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '0'
|
55
55
|
description:
|
@@ -62,6 +62,49 @@ files:
|
|
62
62
|
- README.md
|
63
63
|
- Rakefile
|
64
64
|
- bin/oai
|
65
|
+
- examples/models/file_model.rb
|
66
|
+
- examples/providers/dublin_core.rb
|
67
|
+
- lib/oai.rb
|
68
|
+
- lib/oai/client.rb
|
69
|
+
- lib/oai/client/get_record.rb
|
70
|
+
- lib/oai/client/header.rb
|
71
|
+
- lib/oai/client/identify.rb
|
72
|
+
- lib/oai/client/list_identifiers.rb
|
73
|
+
- lib/oai/client/list_metadata_formats.rb
|
74
|
+
- lib/oai/client/list_records.rb
|
75
|
+
- lib/oai/client/list_sets.rb
|
76
|
+
- lib/oai/client/metadata_format.rb
|
77
|
+
- lib/oai/client/record.rb
|
78
|
+
- lib/oai/client/response.rb
|
79
|
+
- lib/oai/client/resumable.rb
|
80
|
+
- lib/oai/constants.rb
|
81
|
+
- lib/oai/exception.rb
|
82
|
+
- lib/oai/harvester.rb
|
83
|
+
- lib/oai/harvester/config.rb
|
84
|
+
- lib/oai/harvester/harvest.rb
|
85
|
+
- lib/oai/harvester/logging.rb
|
86
|
+
- lib/oai/harvester/mailer.rb
|
87
|
+
- lib/oai/harvester/shell.rb
|
88
|
+
- lib/oai/provider.rb
|
89
|
+
- lib/oai/provider/metadata_format.rb
|
90
|
+
- lib/oai/provider/metadata_format/oai_dc.rb
|
91
|
+
- lib/oai/provider/model.rb
|
92
|
+
- lib/oai/provider/model/activerecord_caching_wrapper.rb
|
93
|
+
- lib/oai/provider/model/activerecord_wrapper.rb
|
94
|
+
- lib/oai/provider/partial_result.rb
|
95
|
+
- lib/oai/provider/response.rb
|
96
|
+
- lib/oai/provider/response/error.rb
|
97
|
+
- lib/oai/provider/response/get_record.rb
|
98
|
+
- lib/oai/provider/response/identify.rb
|
99
|
+
- lib/oai/provider/response/list_identifiers.rb
|
100
|
+
- lib/oai/provider/response/list_metadata_formats.rb
|
101
|
+
- lib/oai/provider/response/list_records.rb
|
102
|
+
- lib/oai/provider/response/list_sets.rb
|
103
|
+
- lib/oai/provider/response/record_response.rb
|
104
|
+
- lib/oai/provider/resumption_token.rb
|
105
|
+
- lib/oai/set.rb
|
106
|
+
- lib/oai/xpath.rb
|
107
|
+
- lib/test.rb
|
65
108
|
- test/activerecord_provider/config/connection.rb
|
66
109
|
- test/activerecord_provider/database/0001_oaipmh_tables.rb
|
67
110
|
- test/activerecord_provider/fixtures/dc.yml
|
@@ -100,49 +143,6 @@ files:
|
|
100
143
|
- test/provider/tc_simple_provider.rb
|
101
144
|
- test/provider/test_helper.rb
|
102
145
|
- test/test.xml
|
103
|
-
- lib/oai/client/get_record.rb
|
104
|
-
- lib/oai/client/header.rb
|
105
|
-
- lib/oai/client/identify.rb
|
106
|
-
- lib/oai/client/list_identifiers.rb
|
107
|
-
- lib/oai/client/list_metadata_formats.rb
|
108
|
-
- lib/oai/client/list_records.rb
|
109
|
-
- lib/oai/client/list_sets.rb
|
110
|
-
- lib/oai/client/metadata_format.rb
|
111
|
-
- lib/oai/client/record.rb
|
112
|
-
- lib/oai/client/response.rb
|
113
|
-
- lib/oai/client/resumable.rb
|
114
|
-
- lib/oai/client.rb
|
115
|
-
- lib/oai/constants.rb
|
116
|
-
- lib/oai/exception.rb
|
117
|
-
- lib/oai/harvester/config.rb
|
118
|
-
- lib/oai/harvester/harvest.rb
|
119
|
-
- lib/oai/harvester/logging.rb
|
120
|
-
- lib/oai/harvester/mailer.rb
|
121
|
-
- lib/oai/harvester/shell.rb
|
122
|
-
- lib/oai/harvester.rb
|
123
|
-
- lib/oai/provider/metadata_format/oai_dc.rb
|
124
|
-
- lib/oai/provider/metadata_format.rb
|
125
|
-
- lib/oai/provider/model/activerecord_caching_wrapper.rb
|
126
|
-
- lib/oai/provider/model/activerecord_wrapper.rb
|
127
|
-
- lib/oai/provider/model.rb
|
128
|
-
- lib/oai/provider/partial_result.rb
|
129
|
-
- lib/oai/provider/response/error.rb
|
130
|
-
- lib/oai/provider/response/get_record.rb
|
131
|
-
- lib/oai/provider/response/identify.rb
|
132
|
-
- lib/oai/provider/response/list_identifiers.rb
|
133
|
-
- lib/oai/provider/response/list_metadata_formats.rb
|
134
|
-
- lib/oai/provider/response/list_records.rb
|
135
|
-
- lib/oai/provider/response/list_sets.rb
|
136
|
-
- lib/oai/provider/response/record_response.rb
|
137
|
-
- lib/oai/provider/response.rb
|
138
|
-
- lib/oai/provider/resumption_token.rb
|
139
|
-
- lib/oai/provider.rb
|
140
|
-
- lib/oai/set.rb
|
141
|
-
- lib/oai/xpath.rb
|
142
|
-
- lib/oai.rb
|
143
|
-
- lib/test.rb
|
144
|
-
- examples/models/file_model.rb
|
145
|
-
- examples/providers/dublin_core.rb
|
146
146
|
homepage: http://github.com/code4lib/ruby-oai
|
147
147
|
licenses: []
|
148
148
|
metadata: {}
|
@@ -152,17 +152,17 @@ require_paths:
|
|
152
152
|
- lib
|
153
153
|
required_ruby_version: !ruby/object:Gem::Requirement
|
154
154
|
requirements:
|
155
|
-
- -
|
155
|
+
- - ">="
|
156
156
|
- !ruby/object:Gem::Version
|
157
157
|
version: '0'
|
158
158
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
159
159
|
requirements:
|
160
|
-
- -
|
160
|
+
- - ">="
|
161
161
|
- !ruby/object:Gem::Version
|
162
162
|
version: '0'
|
163
163
|
requirements: []
|
164
164
|
rubyforge_project:
|
165
|
-
rubygems_version: 2.
|
165
|
+
rubygems_version: 2.2.1
|
166
166
|
signing_key:
|
167
167
|
specification_version: 4
|
168
168
|
summary: A ruby library for working with the Open Archive Initiative Protocol for
|