Skip to content

Commit

Permalink
force a marcxml converter that creates accession records
Browse files Browse the repository at this point in the history
  • Loading branch information
quoideneuf committed May 17, 2014
1 parent 6a9557b commit 25eab1e
Show file tree
Hide file tree
Showing 3 changed files with 134 additions and 0 deletions.
44 changes: 44 additions & 0 deletions backend/app/converters/marcxml_accession_converter.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
require_relative 'marcxml_converter'

class MarcXMLAccessionConverter < MarcXMLConverter
def self.import_types(show_hidden = false)
[
{
:name => "marcxml_accession",
:description => "Import MARC XML records as Accessions"
}
]
end

def self.instance_for(type, input_file)
if type == "marcxml_accession"
self.new(input_file)
else
nil
end
end

end

MarcXMLAccessionConverter.configure do |config|
config["/record"][:obj] = :accession
config["/record"][:map].delete("//controlfield[@tag='008']")

config["/record"][:map]["self::record"] = -> accession, node {

if !accession.title && accession['_fallback_titles'] && !accession['_fallback_titles'].empty?
accession.title = accession['_fallback_titles'].shift
end

if accession.id_0.nil? or accession.id.empty?
accession.id_0 = "imported-#{SecureRandom.uuid}"
end

accession.accession_date = Time.now.to_s.sub(/\s.*/, '')
}

["datafield[@tag='210']", "datafield[@tag='222']", "datafield[@tag='240']", "datafield[@tag='242']", "datafield[@tag='246'][@ind2='0']", "datafield[@tag='250']", "datafield[@tag='254']", "datafield[@tag='255']", "datafield[@tag='257']", "datafield[@tag='258']", "datafield[@tag='260']", "datafield[@tag='340']", "datafield[@tag='342']", "datafield[@tag='351']", "datafield[@tag='352']", "datafield[@tag='355']", "datafield[@tag='357']", "datafield[@tag='500']", "datafield[@tag='501']", "datafield[@tag='502']", "datafield[@tag='506']", "datafield[@tag='507']", "datafield[@tag='508']", "datafield[@tag='511']", "datafield[@tag='513']", "datafield[@tag='514']", "datafield[@tag='518']", "datafield[@tag='520'][@ind1!='3' and @ind1!='8']", "datafield[@tag='521'][@ind1!='8']", "datafield[@tag='522']", "datafield[@tag='524']", "datafield[@tag='530']", "datafield[@tag='533']", "datafield[@tag='534']", "datafield[@tag='535']", "datafield[@tag='538']", "datafield[@tag='540']", "datafield[@tag='541']", "datafield[@tag='544']", "datafield[@tag='545']", "datafield[@tag='561']", "datafield[@tag='562']", "datafield[@tag='563']", "datafield[starts-with(@tag, '59')]", "datafield[@tag='740']", "datafield[@tag='256']", "datafield[@tag='306']", "datafield[@tag='343']", "datafield[@tag='520'][@ind1='3']", "datafield[@tag='546']", "datafield[@tag='565']", "datafield[@tag='504']", "datafield[@tag='510']", "datafield[@tag='581']"].each do |note_making_path|
config["/record"][:map].delete(note_making_path)
end

end
89 changes: 89 additions & 0 deletions backend/spec/lib_marcxml_accession_converter_spec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
require 'spec_helper'
require 'converter_spec_helper'

require_relative '../app/converters/marcxml_accession_converter'

describe 'MARCXML Accession converter' do
let(:my_converter) {
MarcXMLAccessionConverter
}


describe "Basic MARCXML to Accession Record mappings" do
let (:test_doc_1) {
src = <<END
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<collection xsi:schemaLocation="http://www.loc.gov/MARC21/slim http://www.loc.gov/standards/marcxml/schema/MARC21slim.xsd" xmlns="http://www.loc.gov/MARC21/slim" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<record>
<leader>00000npc a2200000 u 4500</leader>
<controlfield tag="008">130109i19601970xx eng d</controlfield>
<datafield tag="040" ind2=" " ind1=" ">
<subfield code="a">Repositories.Agency Code-AT</subfield>
<subfield code="b">eng</subfield>
<subfield code="c">Repositories.Agency Code-AT</subfield>
<subfield code="e">dacs</subfield>
</datafield>
<datafield tag="041" ind2=" " ind1="0">
<subfield code="a">eng</subfield>
</datafield>
<datafield tag="099" ind2=" " ind1=" ">
<subfield code="a">Resource.ID.AT</subfield>
</datafield>
<datafield tag="245" ind2=" " ind1="1">
<subfield code="a">SF A</subfield>
<subfield code="c">SF C</subfield>
<subfield code="h">SF H</subfield>
<subfield code="n">SF N</subfield>
</datafield>
<datafield tag="300" ind2=" " ind1=" ">
<subfield code="a">5.0 Linear feet</subfield>
<subfield code="f">Resource-ContainerSummary-AT</subfield>
</datafield>
<datafield tag="342" ind2="5" ind1="1">
<subfield code="i">SF I</subfield>
<subfield code="p">SF P</subfield>
<subfield code="q">SF Q</subfield>
</datafield>
<datafield tag="510" ind2=" " ind1="2">
<subfield code="3">SF 3</subfield>
<subfield code="c">SF C</subfield>
<subfield code="x">SF X</subfield>
</datafield>
<datafield tag="630" ind2=" " ind1="2">
<subfield code="d">SF D</subfield>
<subfield code="f">SF F</subfield>
<subfield code="x">SF X</subfield>
<subfield code="2">SF 2</subfield>
</datafield>
<datafield tag="691" ind2=" " ind1="2">
<subfield code="d">SF D</subfield>
<subfield code="a">SF A</subfield>
<subfield code="x">SF X</subfield>
<subfield code="3">SF 3</subfield>
</datafield>
</record>
</collection>
END

get_tempfile_path(src)
}


before(:all) do
parsed = convert(test_doc_1)
@accession = parsed.last
@subjects = parsed.select{|r| r['jsonmodel_type'] == 'subject'}
end


it "creates an Accession instead of a Resource" do
@accession['jsonmodel_type'].should eq("accession")
end

it "maps field 245 to resource['title']" do
@accession['title'].should eq("SF A : [SF H] SF N / SF C")
end

end
end
1 change: 1 addition & 0 deletions common/locales/en.yml
Original file line number Diff line number Diff line change
Expand Up @@ -1837,6 +1837,7 @@ en:
import_type_digital_object_csv: Digital Object CSV
import_type_eac_xml: EAC
import_type_marcxml: MarcXML
import_type_marcxml_accession: MarcXML (Accession)
import_type_marcxml_subjects_and_agents: MarcXML (Subjects and Agents Only)
status: Status
status_completed: Completed
Expand Down

0 comments on commit 25eab1e

Please sign in to comment.