Skip to content

Commit 57735d7

Browse files
committed
implement blank resumption tokens for ActiveRecord providers
- replace blank? for non-ActiveRecord contexts - add blank resumption tokens to final partial lists for ActiveRecord providers - test ActiveRecord and test providers for blank final resumption tokens
1 parent 47f3bd3 commit 57735d7

File tree

7 files changed

+20
-17
lines changed

7 files changed

+20
-17
lines changed

lib/oai/provider/model/activerecord_caching_wrapper.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ def next_set(token_string)
8383
if token.last * @limit + @limit < total
8484
select_partial(token)
8585
else
86-
select_partial(token).records
86+
select_partial(token).tap { |list| list.instance_variable_set(:@token, list.token.next(nil)) }
8787
end
8888
end
8989

lib/oai/provider/model/activerecord_wrapper.rb

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -134,9 +134,7 @@ def next_set(find_scope, token_string)
134134
if @limit < total
135135
select_partial(find_scope, token)
136136
else # end of result set
137-
find_scope.where(token_conditions(token))
138-
.limit(@limit)
139-
.order("#{identifier_field} asc")
137+
select_partial(find_scope, token).tap { |list| list.instance_variable_set(:@token, list.token.next(nil)) }
140138
end
141139
end
142140

lib/oai/provider/resumption_token.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,7 @@ def last=(value)
122122
end
123123

124124
def encode_conditions
125-
return "" if last_str.blank?
125+
return "" if last_str.nil? || last_str.to_s.strip.eql?("")
126126

127127
encoded_token = @prefix.to_s.dup
128128
encoded_token << ".s(#{set})" if set

test/activerecord_provider/tc_caching_paging_provider.rb

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,9 @@ def test_full_harvest
1717
token = doc.elements["/OAI-PMH/ListRecords/resumptionToken"].text
1818
assert_equal 26, doc.elements["/OAI-PMH/ListRecords"].size
1919
doc = Document.new(@provider.list_records(:resumption_token => token))
20-
assert_nil doc.elements["/OAI-PMH/ListRecords/resumptionToken"]
21-
assert_equal 25, doc.elements["/OAI-PMH/ListRecords"].size
20+
assert_not_nil doc.elements["/OAI-PMH/ListRecords/resumptionToken"]
21+
assert_nil doc.elements["/OAI-PMH/ListRecords/resumptionToken"].text
22+
assert_equal 26, doc.elements["/OAI-PMH/ListRecords"].to_a.size
2223
end
2324

2425
def test_from_and_until
@@ -37,8 +38,9 @@ def test_from_and_until
3738
token = doc.elements["/OAI-PMH/ListRecords/resumptionToken"].text
3839
assert_not_nil doc.elements["/OAI-PMH/ListRecords/resumptionToken"]
3940
doc = Document.new(@provider.list_records(:resumption_token => token))
40-
assert_equal 25, doc.elements["/OAI-PMH/ListRecords"].size
41-
assert_nil doc.elements["/OAI-PMH/ListRecords/resumptionToken"]
41+
assert_not_nil doc.elements["/OAI-PMH/ListRecords/resumptionToken"]
42+
assert_nil doc.elements["/OAI-PMH/ListRecords/resumptionToken"].text
43+
assert_equal 26, doc.elements["/OAI-PMH/ListRecords"].to_a.size
4244
end
4345

4446
def setup

test/activerecord_provider/tc_simple_paging_provider.rb

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,9 @@ def test_full_harvest
2020
assert_equal 26, doc.elements["/OAI-PMH/ListRecords"].to_a.size
2121

2222
doc = Document.new(@provider.list_records(:resumption_token => token))
23-
assert_nil doc.elements["/OAI-PMH/ListRecords/resumptionToken"]
24-
assert_equal 25, doc.elements["/OAI-PMH/ListRecords"].to_a.size
23+
assert_not_nil doc.elements["/OAI-PMH/ListRecords/resumptionToken"]
24+
assert_nil doc.elements["/OAI-PMH/ListRecords/resumptionToken"].text
25+
assert_equal 26, doc.elements["/OAI-PMH/ListRecords"].to_a.size
2526
end
2627

2728
def test_non_integer_identifiers_resumption
@@ -58,8 +59,9 @@ def test_from_and_until
5859
assert_not_nil doc.elements["/OAI-PMH/ListRecords/resumptionToken"]
5960
token = doc.elements["/OAI-PMH/ListRecords/resumptionToken"].text
6061
doc = Document.new(@provider.list_records(:resumption_token => token))
61-
assert_equal 25, doc.elements["/OAI-PMH/ListRecords"].to_a.size
62-
assert_nil doc.elements["/OAI-PMH/ListRecords/resumptionToken"]
62+
assert_not_nil doc.elements["/OAI-PMH/ListRecords/resumptionToken"]
63+
assert_nil doc.elements["/OAI-PMH/ListRecords/resumptionToken"].text
64+
assert_equal 26, doc.elements["/OAI-PMH/ListRecords"].to_a.size
6365
end
6466

6567
def setup

test/provider/models.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ def find(selector, opts={})
6868
if token.last < @groups.size - 1
6969
PartialResult.new(@groups[token.last], token.next(token.last + 1))
7070
else
71-
@groups[token.last]
71+
PartialResult.new(@groups[token.last], token.next(nil))
7272
end
7373
rescue
7474
raise OAI::ResumptionTokenException.new

test/provider/tc_functional_tokens.rb

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -46,9 +46,10 @@ def test_from_and_until_with_resumption_tokens
4646
token = doc.elements["/OAI-PMH/ListRecords/resumptionToken"].text
4747

4848
doc = Document.new(@provider.list_records(:resumption_token => token))
49-
assert_nil doc.elements["/OAI-PMH/ListRecords/resumptionToken"]
50-
assert_equal (300 % @provider.model.limit), doc.elements["/OAI-PMH/ListRecords"].to_a.size
51-
token = doc.elements["/OAI-PMH/ListRecords/resumptionToken"].text
49+
# assert that ListRecords includes remaining records and an empty resumption token
50+
assert_equal (301 % @provider.model.limit), doc.elements["/OAI-PMH/ListRecords"].to_a.size
51+
assert_not_nil doc.elements["/OAI-PMH/ListRecords/resumptionToken"]
52+
assert_nil doc.elements["/OAI-PMH/ListRecords/resumptionToken"].text
5253
end
5354

5455
end

0 commit comments

Comments
 (0)