Skip to content

Commit

Permalink
Merge pull request #73 from code4lib/proper_identifiers
Browse files Browse the repository at this point in the history
oai-pmh identifiers use colon to separate namespace and id, not slash
  • Loading branch information
jrochkind committed Aug 22, 2019
2 parents 23e3ac8 + 0ef07df commit c0caea3
Show file tree
Hide file tree
Showing 7 changed files with 26 additions and 24 deletions.
2 changes: 1 addition & 1 deletion lib/oai/provider/response.rb
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ def header
}
end
def extract_identifier(id)
id.sub("#{provider.prefix}/", '')
id.sub("#{provider.prefix}:", '')
end

def valid?
Expand Down
3 changes: 2 additions & 1 deletion lib/oai/provider/response/record_response.rb
Original file line number Diff line number Diff line change
Expand Up @@ -48,8 +48,9 @@ def about_for(record)

private

# Namespace syntax suggested in http://www.openarchives.org/OAI/2.0/guidelines-oai-identifier.htm
def identifier_for(record)
"#{provider.prefix}/#{record.id}"
"#{provider.prefix}:#{record.id}"
end

def timestamp_for(record)
Expand Down
10 changes: 5 additions & 5 deletions test/activerecord_provider/tc_ar_provider.rb
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ def test_metadata_formats

def test_metadata_formats_for_record
record_id = DCField.first.id
assert_nothing_raised { REXML::Document.new(@provider.list_metadata_formats(:identifier => "oai:test/#{record_id}")) }
assert_nothing_raised { REXML::Document.new(@provider.list_metadata_formats(:identifier => "oai:test:#{record_id}")) }
doc = REXML::Document.new(@provider.list_metadata_formats)
assert doc.elements['/OAI-PMH/ListMetadataFormats/metadataFormat/metadataPrefix'].text == 'oai_dc'
end
Expand All @@ -38,20 +38,20 @@ def test_get_record
record_id = DCField.first.id
assert_nothing_raised do
REXML::Document.new(@provider.get_record(
:identifier => "oai:test/#{record_id}", :metadata_prefix => 'oai_dc'))
:identifier => "oai:test:#{record_id}", :metadata_prefix => 'oai_dc'))
end
doc = REXML::Document.new(@provider.get_record(
:identifier => "#{record_id}", :metadata_prefix => 'oai_dc'))
assert_equal "oai:test/#{record_id}", doc.elements['OAI-PMH/GetRecord/record/header/identifier'].text
assert_equal "oai:test:#{record_id}", doc.elements['OAI-PMH/GetRecord/record/header/identifier'].text
end

def test_deleted
record = DCField.first
record.deleted = true;
record.save
doc = REXML::Document.new(@provider.get_record(
:identifier => "oai:test/#{record.id}", :metadata_prefix => 'oai_dc'))
assert_equal "oai:test/#{record.id}", doc.elements['OAI-PMH/GetRecord/record/header/identifier'].text
:identifier => "oai:test:#{record.id}", :metadata_prefix => 'oai_dc'))
assert_equal "oai:test:#{record.id}", doc.elements['OAI-PMH/GetRecord/record/header/identifier'].text
assert_equal 'deleted', doc.elements['OAI-PMH/GetRecord/record/header'].attributes["status"]
end

Expand Down
7 changes: 3 additions & 4 deletions test/client/tc_get_record.rb
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ class GetRecordTest < Test::Unit::TestCase

def test_get_one
client = OAI::Client.new 'http://localhost:3333/oai'
response = client.get_record :identifier => 'oai:test/3'
response = client.get_record :identifier => 'oai:test:3'
assert_kind_of OAI::GetRecordResponse, response
assert_kind_of OAI::Record, response.record
assert_kind_of REXML::Element, response.record._source
Expand All @@ -13,8 +13,7 @@ def test_get_one
assert_kind_of REXML::Element, response.record.about

# minimal check that the header is working
assert_equal 'oai:test/3',
response.record.header.identifier
assert_equal 'oai:test:3', response.record.header.identifier

# minimal check that the metadata is working
#assert 'en', response.record.metadata.elements['.//dc:language'].text
Expand All @@ -33,7 +32,7 @@ def test_missing_identifier

def test_deleted_record
client = OAI::Client.new 'http://localhost:3333/oai'
record = client.get_record :identifier => 'oai:test/275'
record = client.get_record :identifier => 'oai:test:275'
assert record.deleted?
end

Expand Down
2 changes: 1 addition & 1 deletion test/client/tc_libxml.rb
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ def test_deleted_record

uri = 'http://localhost:3333/oai'
client = OAI::Client.new(uri, :parser => 'libxml')
response = client.get_record :identifier => 'oai:test/275'
response = client.get_record :identifier => 'oai:test:275'
assert response.record.deleted?
end

Expand Down
12 changes: 7 additions & 5 deletions test/provider/tc_exceptions.rb
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ def test_bad_verb_raises_exception

def test_bad_format_raises_exception
assert_raise(OAI::FormatException) do
@provider.get_record(:identifier => 'oai:test/1', :metadata_prefix => 'html')
@provider.get_record(:identifier => 'oai:test:1', :metadata_prefix => 'html')
end
end

Expand All @@ -45,16 +45,18 @@ def test_missing_format_raises_exception
@provider.list_records()
end
assert_raise(OAI::ArgumentException) do
@provider.get_record(:identifier => 'oai:test/1')
@provider.get_record(:identifier => 'oai:test:1')
end
end

def test_bad_id_raises_exception
badIdentifiers = [
'oai:test/5000',
'oai:test/-1',
'oai:test:5000',
'oai:test:-1',
'oai:test:one',
'oai:test/one',
'oai:test/\\$1\1!']
'oai:test/1',
'oai:test:\\$1\1!']
badIdentifiers.each do |id|
assert_raise(OAI::IdException) do
@provider.get_record(:identifier => id, :metadata_prefix => 'oai_dc')
Expand Down
14 changes: 7 additions & 7 deletions test/provider/tc_simple_provider.rb
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ def test_metadata_formats
end

def test_metadata_formats_for_document
assert_nothing_raised { REXML::Document.new(@simple_provider.list_metadata_formats(:identifier => "oai:test/1")) }
assert_nothing_raised { REXML::Document.new(@simple_provider.list_metadata_formats(:identifier => "oai:test:1")) }
doc = REXML::Document.new(@simple_provider.list_metadata_formats)
assert_equal "oai_dc",
doc.elements['/OAI-PMH/ListMetadataFormats/metadataFormat/metadataPrefix'].text
Expand Down Expand Up @@ -85,37 +85,37 @@ def test_get_record
assert_nothing_raised do
REXML::Document.new(
@simple_provider.get_record(
:identifier => 'oai:test/1',
:identifier => 'oai:test:1',
:metadataPrefix => 'oai_dc'
)
)
end
doc = REXML::Document.new(
@simple_provider.get_record(
:identifier => 'oai:test/1',
:identifier => 'oai:test:1',
:metadataPrefix => 'oai_dc'
)
)
assert_equal 'oai:test/1',
assert_equal 'oai:test:1',
doc.elements['OAI-PMH/GetRecord/record/header/identifier'].text
end

def test_deleted_record
assert_nothing_raised do
REXML::Document.new(
@simple_provider.get_record(
:identifier => 'oai:test/6',
:identifier => 'oai:test:6',
:metadataPrefix => 'oai_dc'
)
)
end
doc = REXML::Document.new(
@simple_provider.get_record(
:identifier => 'oai:test/5',
:identifier => 'oai:test:5',
:metadataPrefix => 'oai_dc'
)
)
assert_equal 'oai:test/5', doc.elements['OAI-PMH/GetRecord/record/header/identifier'].text
assert_equal 'oai:test:5', doc.elements['OAI-PMH/GetRecord/record/header/identifier'].text
assert_equal 'deleted', doc.elements['OAI-PMH/GetRecord/record/header'].attributes["status"]
end

Expand Down

0 comments on commit c0caea3

Please sign in to comment.