oai 0.0.1 → 1.3.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.
Files changed (99) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +128 -0
  3. data/Rakefile +64 -0
  4. data/bin/oai +66 -0
  5. data/examples/models/file_model.rb +63 -0
  6. data/examples/providers/dublin_core.rb +474 -0
  7. data/lib/oai/{get_record.rb → client/get_record.rb} +5 -1
  8. data/lib/oai/client/header.rb +18 -0
  9. data/lib/oai/{identify.rb → client/identify.rb} +2 -0
  10. data/lib/oai/{list_identifiers.rb → client/list_identifiers.rb} +1 -0
  11. data/lib/oai/{list_records.rb → client/list_records.rb} +6 -5
  12. data/lib/oai/{list_sets.rb → client/list_sets.rb} +7 -6
  13. data/lib/oai/client/record.rb +27 -0
  14. data/lib/oai/client/response.rb +53 -0
  15. data/lib/oai/client/resumable.rb +42 -0
  16. data/lib/oai/client.rb +313 -108
  17. data/lib/oai/constants.rb +34 -0
  18. data/lib/oai/exception.rb +80 -1
  19. data/lib/oai/harvester/config.rb +41 -0
  20. data/lib/oai/harvester/harvest.rb +162 -0
  21. data/lib/oai/harvester/logging.rb +68 -0
  22. data/lib/oai/harvester/mailer.rb +17 -0
  23. data/lib/oai/harvester/shell.rb +337 -0
  24. data/lib/oai/harvester.rb +43 -0
  25. data/lib/oai/provider/metadata_format/oai_dc.rb +28 -0
  26. data/lib/oai/provider/metadata_format.rb +119 -0
  27. data/lib/oai/provider/model/activerecord_caching_wrapper.rb +129 -0
  28. data/lib/oai/provider/model/activerecord_wrapper.rb +217 -0
  29. data/lib/oai/provider/model.rb +80 -0
  30. data/lib/oai/provider/partial_result.rb +18 -0
  31. data/lib/oai/provider/response/error.rb +16 -0
  32. data/lib/oai/provider/response/get_record.rb +27 -0
  33. data/lib/oai/provider/response/identify.rb +37 -0
  34. data/lib/oai/provider/response/list_identifiers.rb +30 -0
  35. data/lib/oai/provider/response/list_metadata_formats.rb +39 -0
  36. data/lib/oai/provider/response/list_records.rb +47 -0
  37. data/lib/oai/provider/response/list_sets.rb +23 -0
  38. data/lib/oai/provider/response/record_response.rb +103 -0
  39. data/lib/oai/provider/response.rb +133 -0
  40. data/lib/oai/provider/resumption_token.rb +155 -0
  41. data/lib/oai/provider.rb +487 -0
  42. data/lib/oai/set.rb +14 -5
  43. data/lib/oai/xpath.rb +59 -5
  44. data/lib/oai.rb +7 -13
  45. data/lib/test.rb +25 -0
  46. data/test/activerecord_provider/config/connection.rb +30 -0
  47. data/test/activerecord_provider/database/0001_oaipmh_tables.rb +70 -0
  48. data/test/activerecord_provider/fixtures/dc.yml +1501 -0
  49. data/test/activerecord_provider/helpers/providers.rb +68 -0
  50. data/test/activerecord_provider/helpers/set_provider.rb +24 -0
  51. data/test/activerecord_provider/helpers/transactional_test_case.rb +35 -0
  52. data/test/activerecord_provider/models/dc_field.rb +15 -0
  53. data/test/activerecord_provider/models/dc_lang.rb +3 -0
  54. data/test/activerecord_provider/models/dc_set.rb +7 -0
  55. data/test/activerecord_provider/models/exclusive_set_dc_field.rb +17 -0
  56. data/test/activerecord_provider/models/oai_token.rb +3 -0
  57. data/test/activerecord_provider/tc_activerecord_wrapper.rb +63 -0
  58. data/test/activerecord_provider/tc_ar_provider.rb +199 -0
  59. data/test/activerecord_provider/tc_ar_sets_provider.rb +159 -0
  60. data/test/activerecord_provider/tc_caching_paging_provider.rb +50 -0
  61. data/test/activerecord_provider/tc_simple_paging_provider.rb +71 -0
  62. data/test/activerecord_provider/test_helper_ar_provider.rb +7 -0
  63. data/test/client/helpers/provider.rb +65 -0
  64. data/test/client/helpers/test_wrapper.rb +6 -0
  65. data/test/client/tc_exception.rb +36 -0
  66. data/test/client/tc_get_record.rb +39 -0
  67. data/test/client/tc_http_client.rb +129 -0
  68. data/test/client/tc_identify.rb +13 -0
  69. data/test/client/tc_libxml.rb +61 -0
  70. data/test/{tc_list_identifiers.rb → client/tc_list_identifiers.rb} +28 -9
  71. data/test/{tc_list_metadata_formats.rb → client/tc_list_metadata_formats.rb} +4 -1
  72. data/test/client/tc_list_records.rb +26 -0
  73. data/test/client/tc_list_sets.rb +34 -0
  74. data/test/client/tc_low_resolution_dates.rb +14 -0
  75. data/test/client/tc_utf8_escaping.rb +19 -0
  76. data/test/client/tc_xpath.rb +26 -0
  77. data/test/client/test_helper_client.rb +5 -0
  78. data/test/harvester/tc_harvest.rb +42 -0
  79. data/test/harvester/test_helper_harvester.rb +6 -0
  80. data/test/provider/models.rb +246 -0
  81. data/test/provider/tc_exceptions.rb +81 -0
  82. data/test/provider/tc_functional_tokens.rb +53 -0
  83. data/test/provider/tc_instance_provider.rb +41 -0
  84. data/test/provider/tc_provider.rb +136 -0
  85. data/test/provider/tc_resumption_tokens.rb +52 -0
  86. data/test/provider/tc_simple_provider.rb +138 -0
  87. data/test/provider/test_helper_provider.rb +62 -0
  88. data/test/test.xml +22 -0
  89. metadata +238 -56
  90. data/lib/oai/header.rb +0 -12
  91. data/lib/oai/record.rb +0 -11
  92. data/lib/oai/response.rb +0 -20
  93. data/test/tc_get_record.rb +0 -27
  94. data/test/tc_identify.rb +0 -8
  95. data/test/tc_list_records.rb +0 -9
  96. data/test/tc_list_sets.rb +0 -17
  97. data/test.rb +0 -12
  98. /data/lib/oai/{list_metadata_formats.rb → client/list_metadata_formats.rb} +0 -0
  99. /data/lib/oai/{metadata_format.rb → client/metadata_format.rb} +0 -0
@@ -0,0 +1,138 @@
1
+ require 'test_helper_provider'
2
+
3
+ class TestSimpleProvider < Test::Unit::TestCase
4
+
5
+ def setup
6
+ @simple_provider = SimpleProvider.new
7
+ @model = @simple_provider.class.model
8
+ end
9
+
10
+ def test_identify
11
+ doc = REXML::Document.new(@simple_provider.identify)
12
+ assert_equal @simple_provider.class.name,
13
+ doc.elements["/OAI-PMH/Identify/repositoryName"].text
14
+ assert_equal SimpleModel.new.earliest.to_s,
15
+ doc.elements["/OAI-PMH/Identify/earliestDatestamp"].text
16
+
17
+ # PC
18
+ # lambda { REXML::Document.new(@simple_provider.identify(:set => 'A')) }
19
+
20
+
21
+ end
22
+
23
+ def test_list_sets
24
+ doc = REXML::Document.new(@simple_provider.list_sets)
25
+ sets = doc.elements["/OAI-PMH/ListSets"]
26
+ assert_equal @model.sets.size, sets.size
27
+ assert_equal @model.sets[0].name, sets[0].elements["//setName"].text
28
+ end
29
+
30
+ def test_metadata_formats
31
+ assert_nothing_raised { REXML::Document.new(@simple_provider.list_metadata_formats) }
32
+ doc = REXML::Document.new(@simple_provider.list_metadata_formats)
33
+ assert_equal "oai_dc",
34
+ doc.elements['/OAI-PMH/ListMetadataFormats/metadataFormat/metadataPrefix'].text
35
+ end
36
+
37
+ def test_metadata_formats_for_document
38
+ assert_nothing_raised { REXML::Document.new(@simple_provider.list_metadata_formats(:identifier => "oai:test:1")) }
39
+ doc = REXML::Document.new(@simple_provider.list_metadata_formats)
40
+ assert_equal "oai_dc",
41
+ doc.elements['/OAI-PMH/ListMetadataFormats/metadataFormat/metadataPrefix'].text
42
+ end
43
+
44
+ def test_list_records_without_constraints
45
+ assert_nothing_raised { REXML::Document.new(@simple_provider.list_records(:metadata_prefix => 'oai_dc')) }
46
+
47
+ total = @model.find(:all).size
48
+ doc = REXML::Document.new(@simple_provider.list_records(:metadata_prefix => 'oai_dc'))
49
+ assert_equal total, doc.elements['OAI-PMH/ListRecords'].size
50
+ end
51
+
52
+ def test_list_records_with_from_constraints
53
+ assert_nothing_raised { REXML::Document.new(@simple_provider.list_records(:metadata_prefix => 'oai_dc')) }
54
+
55
+ total = @model.find(:all).size
56
+ doc = REXML::Document.new(@simple_provider.list_records(:metadata_prefix => 'oai_dc', from: "2002-10-05"))
57
+ assert_equal total, doc.elements['OAI-PMH/ListRecords'].size
58
+ end
59
+
60
+ def test_list_records_with_until_constraints
61
+ assert_nothing_raised { REXML::Document.new(@simple_provider.list_records(:metadata_prefix => 'oai_dc')) }
62
+
63
+ total = @model.find(:all).size
64
+ doc = REXML::Document.new(@simple_provider.list_records(:metadata_prefix => 'oai_dc', until: "2002-11-05"))
65
+ assert_equal total, doc.elements['OAI-PMH/ListRecords'].size
66
+ end
67
+
68
+ def test_list_records_with_set_equal_a
69
+ total = @model.find(:all, :set => 'A').size
70
+ doc = REXML::Document.new(@simple_provider.list_records(:metadata_prefix => 'oai_dc', :set => 'A'))
71
+ assert_equal total, doc.elements['OAI-PMH/ListRecords'].size
72
+ end
73
+
74
+ def test_list_record_with_set_equal_ab
75
+ total = @model.find(:all, :set => 'A:B').size
76
+ doc = REXML::Document.new(@simple_provider.list_records(:metadata_prefix => 'oai_dc', :set => 'A:B'))
77
+ assert_equal total, doc.elements['OAI-PMH/ListRecords'].size
78
+ end
79
+
80
+ def test_list_identifiers_without_constraints
81
+ assert_nothing_raised { REXML::Document.new(@simple_provider.list_identifiers(:metadata_prefix => 'oai_dc')) }
82
+
83
+ total = @model.find(:all).size
84
+ doc = REXML::Document.new(@simple_provider.list_identifiers(:metadata_prefix => 'oai_dc'))
85
+ assert_equal total, doc.elements['OAI-PMH/ListIdentifiers'].to_a.size
86
+ end
87
+
88
+ def test_list_identifiers_with_set_equal_a
89
+ total = @model.find(:all, :set => 'A').size
90
+ doc = REXML::Document.new(@simple_provider.list_identifiers(:metadata_prefix => 'oai_dc', :set => 'A'))
91
+ assert_equal total, doc.elements['OAI-PMH/ListIdentifiers'].to_a.size
92
+ end
93
+
94
+ def test_list_indentifiers_with_set_equal_ab
95
+ total = @model.find(:all, :set => 'A:B').size
96
+ doc = REXML::Document.new(@simple_provider.list_identifiers(:metadata_prefix => 'oai_dc', :set => 'A:B'))
97
+ assert_equal total, doc.elements['OAI-PMH/ListIdentifiers'].to_a.size
98
+ end
99
+
100
+ def test_get_record
101
+ assert_nothing_raised do
102
+ REXML::Document.new(
103
+ @simple_provider.get_record(
104
+ :identifier => 'oai:test:1',
105
+ :metadataPrefix => 'oai_dc'
106
+ )
107
+ )
108
+ end
109
+ doc = REXML::Document.new(
110
+ @simple_provider.get_record(
111
+ :identifier => 'oai:test:1',
112
+ :metadataPrefix => 'oai_dc'
113
+ )
114
+ )
115
+ assert_equal 'oai:test:1',
116
+ doc.elements['OAI-PMH/GetRecord/record/header/identifier'].text
117
+ end
118
+
119
+ def test_deleted_record
120
+ assert_nothing_raised do
121
+ REXML::Document.new(
122
+ @simple_provider.get_record(
123
+ :identifier => 'oai:test:6',
124
+ :metadataPrefix => 'oai_dc'
125
+ )
126
+ )
127
+ end
128
+ doc = REXML::Document.new(
129
+ @simple_provider.get_record(
130
+ :identifier => 'oai:test:5',
131
+ :metadataPrefix => 'oai_dc'
132
+ )
133
+ )
134
+ assert_equal 'oai:test:5', doc.elements['OAI-PMH/GetRecord/record/header/identifier'].text
135
+ assert_equal 'deleted', doc.elements['OAI-PMH/GetRecord/record/header'].attributes["status"]
136
+ end
137
+
138
+ end
@@ -0,0 +1,62 @@
1
+ require 'oai'
2
+ require 'test/unit'
3
+
4
+ require File.dirname(__FILE__) + '/models'
5
+ include OAI
6
+
7
+ class SimpleProvider < Provider::Base
8
+ repository_name 'Test Provider'
9
+ record_prefix 'oai:test'
10
+ source_model SimpleModel.new
11
+ end
12
+
13
+ class BigProvider < Provider::Base
14
+ repository_name 'Another Provider'
15
+ record_prefix 'oai:test'
16
+ source_model BigModel.new
17
+ end
18
+
19
+ class TokenProvider < Provider::Base
20
+ repository_name 'Token Provider'
21
+ record_prefix 'oai:test'
22
+ source_model BigModel.new(25)
23
+ end
24
+
25
+ class MappedProvider < Provider::Base
26
+ repository_name 'Mapped Provider'
27
+ record_prefix 'oai:test'
28
+ source_model MappedModel.new
29
+ end
30
+
31
+ class ComplexProvider < Provider::Base
32
+ repository_name 'Complex Provider'
33
+ repository_url 'http://localhost'
34
+ record_prefix 'oai:test'
35
+ source_model ComplexModel.new(100)
36
+ end
37
+
38
+ class DescribedProvider < Provider::Base
39
+ repository_name 'Described PRovider'
40
+ repository_url 'http://localhost'
41
+ record_prefix 'oai:test'
42
+ source_model SimpleModel.new
43
+ sample_id '13900'
44
+ extra_description "<my_custom_xml />"
45
+ end
46
+
47
+ class InstanceProvider < Provider::Base
48
+ repository_name 'Instance Provider'
49
+ record_prefix 'oai:test'
50
+ repository_url 'http://localhost'
51
+ source_model SimpleModel.new
52
+
53
+ def initialize(options = {})
54
+ super
55
+ @url_path = options.fetch(:url_path)
56
+ end
57
+ attr_reader :url_path
58
+
59
+ def url
60
+ File.join(super, url_path)
61
+ end
62
+ end
data/test/test.xml ADDED
@@ -0,0 +1,22 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <OAI-PMH xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.openarchives.org/OAI/2.0/ http://www.openarchives.org/OAI/2.0/OAI-PMH.xsd">
3
+ <responseDate>2006-09-11T14:33:15Z</responseDate>
4
+ <request verb="Identify">http://www.pubmedcentral.gov/oai/oai.cgi</request>
5
+ <Identify>
6
+ <repositoryName>PubMed Central (PMC3 - NLM DTD)</repositoryName>
7
+ <baseURL>http://www.pubmedcentral.gov/oai/oai.cgi</baseURL>
8
+ <protocolVersion>2.0</protocolVersion>
9
+ <adminEmail>oai@ncbi.nlm.nih.gov</adminEmail>
10
+ <earliestDatestamp>1999-01-01</earliestDatestamp>
11
+ <deletedRecord>no</deletedRecord>
12
+ <granularity>YYYY-MM-DD</granularity>
13
+ <description>
14
+ <oai-identifier xmlns="http://www.openarchives.org/OAI/2.0/oai-identifier" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.openarchives.org/OAI/2.0/oai-identifier http://www.openarchives.org/OAI/2.0/oai-identifier.xsd">
15
+ <scheme>oai</scheme>
16
+ <repositoryIdentifier>pubmedcentral.gov</repositoryIdentifier>
17
+ <delimiter>:</delimiter>
18
+ <sampleIdentifier>oai:pubmedcentral.gov:13900</sampleIdentifier>
19
+ </oai-identifier>
20
+ </description>
21
+ </Identify>
22
+ </OAI-PMH>
metadata CHANGED
@@ -1,61 +1,243 @@
1
- --- !ruby/object:Gem::Specification
2
- rubygems_version: 0.8.11
3
- specification_version: 1
1
+ --- !ruby/object:Gem::Specification
4
2
  name: oai
5
- version: !ruby/object:Gem::Version
6
- version: 0.0.1
7
- date: 2006-04-20 00:00:00 -05:00
8
- summary: A ruby library for working with the Open Archive Initiative Protocol for Metadata Harvesting (OAI-PMH)
9
- require_paths:
10
- - lib
11
- email: ehs@pobox.com
12
- homepage: http://www.textualize.com/ruby-marc
13
- rubyforge_project:
14
- description:
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.3.0
5
+ platform: ruby
6
+ authors:
7
+ - Ed Summers
15
8
  autorequire: oai
16
- default_executable:
17
9
  bindir: bin
18
- has_rdoc: true
19
- required_ruby_version: !ruby/object:Gem::Version::Requirement
20
- requirements:
21
- -
22
- - ">"
23
- - !ruby/object:Gem::Version
24
- version: 0.0.0
25
- version:
26
- platform: ruby
27
- signing_key:
28
- cert_chain:
29
- authors:
30
- - Ed Summers
31
- files:
32
- - lib/oai
33
- - lib/oai.rb
34
- - lib/oai/client.rb
35
- - lib/oai/exception.rb
36
- - lib/oai/get_record.rb
37
- - lib/oai/header.rb
38
- - lib/oai/identify.rb
39
- - lib/oai/list_identifiers.rb
40
- - lib/oai/list_metadata_formats.rb
41
- - lib/oai/list_records.rb
42
- - lib/oai/list_sets.rb
43
- - lib/oai/metadata_format.rb
44
- - lib/oai/record.rb
45
- - lib/oai/response.rb
46
- - lib/oai/set.rb
47
- - lib/oai/xpath.rb
48
- - test/tc_get_record.rb
49
- - test/tc_identify.rb
50
- - test/tc_list_identifiers.rb
51
- - test/tc_list_metadata_formats.rb
52
- - test/tc_list_records.rb
53
- - test/tc_list_sets.rb
54
- test_files:
55
- - test.rb
56
- rdoc_options: []
57
- extra_rdoc_files: []
58
- executables: []
10
+ cert_chain: []
11
+ date: 2025-03-04 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: builder
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: 3.1.0
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: 3.1.0
27
+ - !ruby/object:Gem::Dependency
28
+ name: faraday
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "<"
32
+ - !ruby/object:Gem::Version
33
+ version: '3'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "<"
39
+ - !ruby/object:Gem::Version
40
+ version: '3'
41
+ - !ruby/object:Gem::Dependency
42
+ name: faraday-follow_redirects
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: 0.3.0
48
+ - - "<"
49
+ - !ruby/object:Gem::Version
50
+ version: '2'
51
+ type: :runtime
52
+ prerelease: false
53
+ version_requirements: !ruby/object:Gem::Requirement
54
+ requirements:
55
+ - - ">="
56
+ - !ruby/object:Gem::Version
57
+ version: 0.3.0
58
+ - - "<"
59
+ - !ruby/object:Gem::Version
60
+ version: '2'
61
+ - !ruby/object:Gem::Dependency
62
+ name: rexml
63
+ requirement: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - ">="
66
+ - !ruby/object:Gem::Version
67
+ version: '0'
68
+ type: :runtime
69
+ prerelease: false
70
+ version_requirements: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - ">="
73
+ - !ruby/object:Gem::Version
74
+ version: '0'
75
+ - !ruby/object:Gem::Dependency
76
+ name: activerecord
77
+ requirement: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - ">="
80
+ - !ruby/object:Gem::Version
81
+ version: 5.2.0
82
+ - - "<"
83
+ - !ruby/object:Gem::Version
84
+ version: '8.1'
85
+ type: :development
86
+ prerelease: false
87
+ version_requirements: !ruby/object:Gem::Requirement
88
+ requirements:
89
+ - - ">="
90
+ - !ruby/object:Gem::Version
91
+ version: 5.2.0
92
+ - - "<"
93
+ - !ruby/object:Gem::Version
94
+ version: '8.1'
95
+ - !ruby/object:Gem::Dependency
96
+ name: appraisal
97
+ requirement: !ruby/object:Gem::Requirement
98
+ requirements:
99
+ - - ">="
100
+ - !ruby/object:Gem::Version
101
+ version: '0'
102
+ type: :development
103
+ prerelease: false
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ requirements:
106
+ - - ">="
107
+ - !ruby/object:Gem::Version
108
+ version: '0'
109
+ - !ruby/object:Gem::Dependency
110
+ name: webrick
111
+ requirement: !ruby/object:Gem::Requirement
112
+ requirements:
113
+ - - ">="
114
+ - !ruby/object:Gem::Version
115
+ version: '0'
116
+ type: :development
117
+ prerelease: false
118
+ version_requirements: !ruby/object:Gem::Requirement
119
+ requirements:
120
+ - - ">="
121
+ - !ruby/object:Gem::Version
122
+ version: '0'
123
+ description:
124
+ email: ehs@pobox.com
125
+ executables:
126
+ - oai
59
127
  extensions: []
128
+ extra_rdoc_files: []
129
+ files:
130
+ - README.md
131
+ - Rakefile
132
+ - bin/oai
133
+ - examples/models/file_model.rb
134
+ - examples/providers/dublin_core.rb
135
+ - lib/oai.rb
136
+ - lib/oai/client.rb
137
+ - lib/oai/client/get_record.rb
138
+ - lib/oai/client/header.rb
139
+ - lib/oai/client/identify.rb
140
+ - lib/oai/client/list_identifiers.rb
141
+ - lib/oai/client/list_metadata_formats.rb
142
+ - lib/oai/client/list_records.rb
143
+ - lib/oai/client/list_sets.rb
144
+ - lib/oai/client/metadata_format.rb
145
+ - lib/oai/client/record.rb
146
+ - lib/oai/client/response.rb
147
+ - lib/oai/client/resumable.rb
148
+ - lib/oai/constants.rb
149
+ - lib/oai/exception.rb
150
+ - lib/oai/harvester.rb
151
+ - lib/oai/harvester/config.rb
152
+ - lib/oai/harvester/harvest.rb
153
+ - lib/oai/harvester/logging.rb
154
+ - lib/oai/harvester/mailer.rb
155
+ - lib/oai/harvester/shell.rb
156
+ - lib/oai/provider.rb
157
+ - lib/oai/provider/metadata_format.rb
158
+ - lib/oai/provider/metadata_format/oai_dc.rb
159
+ - lib/oai/provider/model.rb
160
+ - lib/oai/provider/model/activerecord_caching_wrapper.rb
161
+ - lib/oai/provider/model/activerecord_wrapper.rb
162
+ - lib/oai/provider/partial_result.rb
163
+ - lib/oai/provider/response.rb
164
+ - lib/oai/provider/response/error.rb
165
+ - lib/oai/provider/response/get_record.rb
166
+ - lib/oai/provider/response/identify.rb
167
+ - lib/oai/provider/response/list_identifiers.rb
168
+ - lib/oai/provider/response/list_metadata_formats.rb
169
+ - lib/oai/provider/response/list_records.rb
170
+ - lib/oai/provider/response/list_sets.rb
171
+ - lib/oai/provider/response/record_response.rb
172
+ - lib/oai/provider/resumption_token.rb
173
+ - lib/oai/set.rb
174
+ - lib/oai/xpath.rb
175
+ - lib/test.rb
176
+ - test/activerecord_provider/config/connection.rb
177
+ - test/activerecord_provider/database/0001_oaipmh_tables.rb
178
+ - test/activerecord_provider/fixtures/dc.yml
179
+ - test/activerecord_provider/helpers/providers.rb
180
+ - test/activerecord_provider/helpers/set_provider.rb
181
+ - test/activerecord_provider/helpers/transactional_test_case.rb
182
+ - test/activerecord_provider/models/dc_field.rb
183
+ - test/activerecord_provider/models/dc_lang.rb
184
+ - test/activerecord_provider/models/dc_set.rb
185
+ - test/activerecord_provider/models/exclusive_set_dc_field.rb
186
+ - test/activerecord_provider/models/oai_token.rb
187
+ - test/activerecord_provider/tc_activerecord_wrapper.rb
188
+ - test/activerecord_provider/tc_ar_provider.rb
189
+ - test/activerecord_provider/tc_ar_sets_provider.rb
190
+ - test/activerecord_provider/tc_caching_paging_provider.rb
191
+ - test/activerecord_provider/tc_simple_paging_provider.rb
192
+ - test/activerecord_provider/test_helper_ar_provider.rb
193
+ - test/client/helpers/provider.rb
194
+ - test/client/helpers/test_wrapper.rb
195
+ - test/client/tc_exception.rb
196
+ - test/client/tc_get_record.rb
197
+ - test/client/tc_http_client.rb
198
+ - test/client/tc_identify.rb
199
+ - test/client/tc_libxml.rb
200
+ - test/client/tc_list_identifiers.rb
201
+ - test/client/tc_list_metadata_formats.rb
202
+ - test/client/tc_list_records.rb
203
+ - test/client/tc_list_sets.rb
204
+ - test/client/tc_low_resolution_dates.rb
205
+ - test/client/tc_utf8_escaping.rb
206
+ - test/client/tc_xpath.rb
207
+ - test/client/test_helper_client.rb
208
+ - test/harvester/tc_harvest.rb
209
+ - test/harvester/test_helper_harvester.rb
210
+ - test/provider/models.rb
211
+ - test/provider/tc_exceptions.rb
212
+ - test/provider/tc_functional_tokens.rb
213
+ - test/provider/tc_instance_provider.rb
214
+ - test/provider/tc_provider.rb
215
+ - test/provider/tc_resumption_tokens.rb
216
+ - test/provider/tc_simple_provider.rb
217
+ - test/provider/test_helper_provider.rb
218
+ - test/test.xml
219
+ homepage: http://github.com/code4lib/ruby-oai
220
+ licenses:
221
+ - MIT
222
+ metadata: {}
223
+ post_install_message:
224
+ rdoc_options: []
225
+ require_paths:
226
+ - lib
227
+ required_ruby_version: !ruby/object:Gem::Requirement
228
+ requirements:
229
+ - - ">="
230
+ - !ruby/object:Gem::Version
231
+ version: '0'
232
+ required_rubygems_version: !ruby/object:Gem::Requirement
233
+ requirements:
234
+ - - ">="
235
+ - !ruby/object:Gem::Version
236
+ version: '0'
60
237
  requirements: []
61
- dependencies: []
238
+ rubygems_version: 3.5.3
239
+ signing_key:
240
+ specification_version: 4
241
+ summary: A ruby library for working with the Open Archive Initiative Protocol for
242
+ Metadata Harvesting (OAI-PMH)
243
+ test_files: []
data/lib/oai/header.rb DELETED
@@ -1,12 +0,0 @@
1
- module OAI
2
- class Header
3
- include OAI::XPath
4
- attr_accessor :identifier, :datestamp, :set_spec
5
-
6
- def initialize(element)
7
- @identifier = xpath(element, './/identifier')
8
- @datestamp = xpath(element, './/datestamp')
9
- @set_spec = xpath(element, './/setSpec')
10
- end
11
- end
12
- end
data/lib/oai/record.rb DELETED
@@ -1,11 +0,0 @@
1
- module OAI
2
- class Record
3
- include OAI::XPath
4
- attr_accessor :header, :metadata
5
-
6
- def initialize(element)
7
- @header = OAI::Header.new xpath_first(element, './/header')
8
- @metadata = xpath_first(element, './/metadata')
9
- end
10
- end
11
- end
data/lib/oai/response.rb DELETED
@@ -1,20 +0,0 @@
1
- module OAI
2
- class Response
3
- include OAI::XPath
4
- attr_reader :doc, :resumption_token
5
-
6
- def initialize(doc)
7
- @doc = doc
8
- @resumption_token = xpath(doc, './/resumptionToken')
9
-
10
- # throw an exception if there was an error
11
- error = xpath_first(doc, './/error')
12
- if error
13
- message = error.text
14
- code = error.attributes['code']
15
- raise OAI::Exception.new("#{message} [#{code}]")
16
- end
17
- end
18
-
19
- end
20
- end
@@ -1,27 +0,0 @@
1
- class GetRecordTest < Test::Unit::TestCase
2
- def test_get_one
3
- client = OAI::Client.new 'http://www.pubmedcentral.gov/oai/oai.cgi'
4
- response = client.get_record :identifier => 'oai:pubmedcentral.gov:13901'
5
- assert_kind_of OAI::GetRecordResponse, response
6
- assert_kind_of OAI::Record, response.record
7
- assert_kind_of REXML::Element, response.record.metadata
8
- assert_kind_of OAI::Header, response.record.header
9
-
10
- # minimal check that the header is working
11
- assert_equal 'oai:pubmedcentral.gov:13901',
12
- response.record.header.identifier
13
-
14
- # minimal check that the metadata is working
15
- assert 'en', response.record.metadata.elements['.//dc:language'].text
16
- end
17
-
18
- def test_missing_identifier
19
- client = OAI::Client.new 'http://www.pubmedcentral.gov/oai/oai.cgi'
20
- begin
21
- client.get_record :metadata_prefix => 'oai_dc'
22
- flunk 'invalid get_record did not throw OAI::Exception'
23
- rescue OAI::Exception => e
24
- assert_match /The request includes illegal arguments/, e.to_s
25
- end
26
- end
27
- end
data/test/tc_identify.rb DELETED
@@ -1,8 +0,0 @@
1
- class IdentifyTest < Test::Unit::TestCase
2
- def test_ok
3
- client = OAI::Client.new 'http://www.pubmedcentral.gov/oai/oai.cgi'
4
- response = client.identify
5
- assert_kind_of OAI::IdentifyResponse, response
6
- assert_equal 'PubMed Central (PMC3 - NLM DTD) [http://www.pubmedcentral.nih.gov:80/oai/oai.cgi]', response.to_s
7
- end
8
- end
@@ -1,9 +0,0 @@
1
- class GetRecordsTest < Test::Unit::TestCase
2
- def test_get_records
3
- client = OAI::Client.new 'http://www.pubmedcentral.gov/oai/oai.cgi'
4
- response = client.list_records
5
- assert_kind_of OAI::ListRecordsResponse, response
6
- assert response.entries.size > 0
7
- assert_kind_of OAI::Record, response.entries[0]
8
- end
9
- end
data/test/tc_list_sets.rb DELETED
@@ -1,17 +0,0 @@
1
- class ListSetsTest < Test::Unit::TestCase
2
-
3
- def test_list
4
- client = OAI::Client.new 'http://www.pubmedcentral.gov/oai/oai.cgi'
5
- response = client.list_sets
6
- assert_kind_of OAI::ListSetsResponse, response
7
- assert response.entries.size > 0
8
- assert_kind_of OAI::Set, response.entries[0]
9
-
10
- # test iterator
11
- for set in response
12
- assert_kind_of OAI::Set, set
13
- end
14
- end
15
-
16
- end
17
-
data/test.rb DELETED
@@ -1,12 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- $LOAD_PATH.unshift 'lib'
4
-
5
- require 'test/unit'
6
- require 'oai'
7
- require 'test/tc_list_identifiers'
8
- require 'test/tc_list_metadata_formats'
9
- require 'test/tc_identify'
10
- require 'test/tc_get_record'
11
- require 'test/tc_list_records'
12
- require 'test/tc_list_sets'