oai 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -2,6 +2,7 @@ require 'uri'
2
2
  require 'net/http'
3
3
  require 'rexml/document'
4
4
  require 'cgi'
5
+ require 'date'
5
6
 
6
7
  module OAI
7
8
 
@@ -9,7 +10,7 @@ module OAI
9
10
  # a OAI-PMH server. The 6 OAI-PMH verbs translate directly to methods you
10
11
  # can call on a OAI::Client object. Verb arguments are passed as a hash:
11
12
  #
12
- # client = OAI::Harvester.new ''http://www.pubmedcentral.gov/oai/oai.cgi'
13
+ # client = OAI::Client.new ''http://www.pubmedcentral.gov/oai/oai.cgi'
13
14
  # client.list_identifiers :metadata_prefix => 'oai_dc'
14
15
  #
15
16
  # It is worth noting that the api uses methods and parameter names with
@@ -32,9 +33,14 @@ module OAI
32
33
  # service:
33
34
  #
34
35
  # client = OAI::Harvseter.new 'http://www.pubmedcentral.gov/oai/oai.cgi'
36
+ #
37
+ # If you want to see debugging messages on STDERR use:
38
+ #
39
+ # client = OAI::Harvester.new 'http://example.com', :debug => true
35
40
 
36
- def initialize(base_url)
41
+ def initialize(base_url, options={})
37
42
  @base = URI.parse base_url
43
+ @debug = options[:debug]
38
44
  end
39
45
 
40
46
  # Equivalent to a Identify request. You'll get back a OAI::IdentifyResponse
@@ -123,13 +129,17 @@ module OAI
123
129
  "#{key}=#{value}"
124
130
  end
125
131
  uri.query = parts.join('&')
132
+ debug("doing request: #{uri.to_s}")
126
133
 
127
134
  # fire off the request and return an REXML::Document object
128
135
  begin
129
136
  xml = Net::HTTP.get(uri)
137
+ debug("got response: #{xml}")
130
138
  return REXML::Document.new(xml)
131
- rescue
132
- raise OAI::Exception, 'error during oai operation', caller
139
+ rescue REXML::ParseException => e
140
+ raise OAI::Exception, 'response not well formed XML: '+e, caller
141
+ rescue SystemCallError=> e
142
+ raise OAI::Exception, 'HTTP level error during OAI request: '+e, caller
133
143
  end
134
144
  end
135
145
 
@@ -159,5 +169,9 @@ module OAI
159
169
  end
160
170
  end
161
171
  end
172
+
173
+ def debug(msg)
174
+ $stderr.print("#{msg}\n") if @debug
175
+ end
162
176
  end
163
177
  end
@@ -1,4 +1,10 @@
1
1
  module OAI
2
+
3
+ # A class for representing a Record as returned from a GetRecord
4
+ # or ListRecords request. Each record will have a header and metadata
5
+ # attribute. The header is a OAI::Header object and the metadata is
6
+ # a REXML::Element object for that chunk of XML.
7
+
2
8
  class Record
3
9
  include OAI::XPath
4
10
  attr_accessor :header, :metadata
data/test.rb CHANGED
@@ -10,3 +10,4 @@ require 'test/tc_identify'
10
10
  require 'test/tc_get_record'
11
11
  require 'test/tc_list_records'
12
12
  require 'test/tc_list_sets'
13
+ require 'test/tc_exception'
@@ -0,0 +1,21 @@
1
+ class ExceptionTest < Test::Unit::TestCase
2
+
3
+ def test_http_error
4
+ client = OAI::Client.new 'http://www.example.com'
5
+ begin
6
+ client.identify
7
+ flunk 'did not throw expected exception'
8
+ rescue OAI::Exception => e
9
+ assert_match /Connection refused/, e.to_s, 'include error message'
10
+ end
11
+ end
12
+
13
+ def test_xml_error
14
+ client = OAI::Client.new 'http://www.google.com'
15
+ begin
16
+ client.identify
17
+ rescue OAI::Exception => e
18
+ assert_match /response not well formed XML/, e.to_s, 'xml error'
19
+ end
20
+ end
21
+ end
metadata CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.8.11
3
3
  specification_version: 1
4
4
  name: oai
5
5
  version: !ruby/object:Gem::Version
6
- version: 0.0.1
7
- date: 2006-04-20 00:00:00 -05:00
6
+ version: 0.0.2
7
+ date: 2006-05-15 00:00:00 -05:00
8
8
  summary: A ruby library for working with the Open Archive Initiative Protocol for Metadata Harvesting (OAI-PMH)
9
9
  require_paths:
10
10
  - lib
@@ -45,6 +45,7 @@ files:
45
45
  - lib/oai/response.rb
46
46
  - lib/oai/set.rb
47
47
  - lib/oai/xpath.rb
48
+ - test/tc_exception.rb
48
49
  - test/tc_get_record.rb
49
50
  - test/tc_identify.rb
50
51
  - test/tc_list_identifiers.rb