Class: MARC::MARC4J
- Inherits:
-
Object
- Object
- MARC::MARC4J
- Defined in:
- lib/marc/marc4j.rb,
lib/marc/marc4j/version.rb
Constant Summary collapse
- DEFAULT_JAR_RELATIVE_DIR =
File.join(File.dirname(__FILE__), "../../ext/marc4j/lib")
- VERSION =
ruby-marc-marc4j version
"1.0.0"
Instance Method Summary collapse
-
#initialize(opts = {}) ⇒ MARC4J
constructor
Get a new coverter.
-
#marc4j_to_rubymarc(marc4j) ⇒ Object
Given a marc4j record, return a rubymarc record.
-
#rubymarc_to_marc4j(rmarc) ⇒ Object
Given a rubymarc record, return a marc4j record.
Constructor Details
#initialize(opts = {}) ⇒ MARC4J
Get a new coverter
10 11 12 13 14 15 |
# File 'lib/marc/marc4j.rb', line 10 def initialize(opts = {}) @logger = opts.delete(:logger) @jardir = opts.delete(:jardir) load_marc4j(@jardir) @factory = org.marc4j.marc::MarcFactory.newInstance end |
Instance Method Details
#marc4j_to_rubymarc(marc4j) ⇒ Object
Given a marc4j record, return a rubymarc record
20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
# File 'lib/marc/marc4j.rb', line 20 def marc4j_to_rubymarc(marc4j) rmarc = MARC::Record.new rmarc.leader = marc4j.getLeader.marshal marc4j.getControlFields.each do |marc4j_control| rmarc.append( MARC::ControlField.new(marc4j_control.getTag(), marc4j_control.getData ) ) end marc4j.getDataFields.each do |marc4j_data| rdata = MARC::DataField.new( marc4j_data.getTag, marc4j_data.getIndicator1.chr, marc4j_data.getIndicator2.chr ) marc4j_data.getSubfields.each do |subfield| # We assume Marc21, skip corrupted data # if subfield.getCode is more than 255, subsequent .chr # would raise. if subfield.getCode > 255 if @logger @logger.warn("Marc4JReader: Corrupted MARC data, record id #{marc4j.getControlNumber}, field #{marc4j_data.tag}, corrupt subfield code byte #{subfield.getCode}. Skipping subfield, but continuing with record.") end next end rsubfield = MARC::Subfield.new(subfield.getCode.chr, subfield.getData) rdata.append rsubfield end rmarc.append rdata end return rmarc end |
#rubymarc_to_marc4j(rmarc) ⇒ Object
Given a rubymarc record, return a marc4j record
55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 |
# File 'lib/marc/marc4j.rb', line 55 def rubymarc_to_marc4j(rmarc) marc4j = @factory.newRecord(rmarc.leader) rmarc.each do |f| if f.is_a? MARC::ControlField new_field = @factory.newControlField(f.tag, f.value) else new_field = @factory.new_data_field(f.tag, f.indicator1.ord, f.indicator2.ord) f.each do |sf| new_field.add_subfield(@factory.new_subfield(sf.code.ord, sf.value)) end end marc4j.add_variable_field(new_field) end return marc4j end |