1818require 'oai/client/record'
1919require 'oai/client/identify'
2020require 'oai/client/get_record'
21+ require 'oai/client/resumable'
2122require 'oai/client/list_identifiers'
2223require 'oai/client/list_metadata_formats'
2324require 'oai/client/list_records'
@@ -118,30 +119,30 @@ def initialize(base_url, options={})
118119 # parser then you will get an XML::Node object instead.
119120
120121 def identify
121- return OAI ::IdentifyResponse . new ( do_request ( 'Identify' ) )
122+ OAI ::IdentifyResponse . new ( do_request ( 'Identify' ) )
122123 end
123124
124125 # Equivalent to a ListMetadataFormats request. A ListMetadataFormatsResponse
125126 # object is returned to you.
126127
127128 def list_metadata_formats ( opts = { } )
128- return OAI ::ListMetadataFormatsResponse . new ( do_request ( 'ListMetadataFormats' , opts ) )
129+ OAI ::ListMetadataFormatsResponse . new ( do_request ( 'ListMetadataFormats' , opts ) )
129130 end
130131
131132 # Equivalent to a ListIdentifiers request. Pass in :from, :until arguments
132133 # as Date or DateTime objects as appropriate depending on the granularity
133134 # supported by the server.
134135
135136 def list_identifiers ( opts = { } )
136- return OAI ::ListIdentifiersResponse . new ( do_request ( 'ListIdentifiers' , opts ) )
137+ do_resumable ( OAI ::ListIdentifiersResponse , 'ListIdentifiers' , opts )
137138 end
138139
139140 # Equivalent to a GetRecord request. You must supply an identifier
140141 # argument. You should get back a OAI::GetRecordResponse object
141142 # which you can extract a OAI::Record object from.
142143
143144 def get_record ( opts = { } )
144- return OAI ::GetRecordResponse . new ( do_request ( 'GetRecord' , opts ) )
145+ OAI ::GetRecordResponse . new ( do_request ( 'GetRecord' , opts ) )
145146 end
146147
147148 # Equivalent to the ListRecords request. A ListRecordsResponse
@@ -152,7 +153,7 @@ def get_record(opts={})
152153 # end
153154
154155 def list_records ( opts = { } )
155- return OAI ::ListRecordsResponse . new ( do_request ( 'ListRecords' , opts ) )
156+ do_resumable ( OAI ::ListRecordsResponse , 'ListRecords' , opts )
156157 end
157158
158159 # Equivalent to the ListSets request. A ListSetsResponse object
@@ -164,7 +165,7 @@ def list_records(opts={})
164165 # end
165166
166167 def list_sets ( opts = { } )
167- return OAI ::ListSetsResponse . new ( do_request ( 'ListSets' , opts ) )
168+ do_resumable ( OAI ::ListSetsResponse , 'ListSets' , opts )
168169 end
169170
170171 private
@@ -183,6 +184,13 @@ def do_request(verb, opts = nil)
183184 return load_document ( xml )
184185 end
185186
187+ def do_resumable ( responseClass , verb , opts )
188+ responseClass . new ( do_request ( verb , opts ) ) do |response |
189+ responseClass . new \
190+ do_request ( verb , :resumption_token => response . resumption_token )
191+ end
192+ end
193+
186194 def build_uri ( verb , opts )
187195 opts = validate_options ( verb , opts )
188196 uri = @base . clone
0 commit comments