marc 1.1.1 → 1.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/ISSUE_TEMPLATE/bug_report.md +30 -0
- data/.github/workflows/ruby.yml +24 -0
- data/.gitignore +17 -0
- data/.standard.yml +1 -0
- data/{Changes → CHANGELOG.md} +102 -30
- data/Gemfile +15 -0
- data/README.md +239 -46
- data/Rakefile +14 -14
- data/bin/marc +14 -0
- data/bin/marc2xml +17 -0
- data/examples/xml2marc.rb +10 -0
- data/lib/marc/constants.rb +3 -3
- data/lib/marc/controlfield.rb +35 -23
- data/lib/marc/datafield.rb +70 -63
- data/lib/marc/dublincore.rb +59 -41
- data/lib/marc/exception.rb +9 -1
- data/lib/marc/jsonl_reader.rb +33 -0
- data/lib/marc/jsonl_writer.rb +44 -0
- data/lib/marc/marc8/map_to_unicode.rb +16417 -16420
- data/lib/marc/marc8/to_unicode.rb +80 -86
- data/lib/marc/reader.rb +117 -123
- data/lib/marc/record.rb +72 -62
- data/lib/marc/subfield.rb +12 -10
- data/lib/marc/unsafe_xmlwriter.rb +93 -0
- data/lib/marc/version.rb +1 -1
- data/lib/marc/writer.rb +27 -30
- data/lib/marc/xml_parsers.rb +222 -197
- data/lib/marc/xmlreader.rb +131 -114
- data/lib/marc/xmlwriter.rb +93 -82
- data/lib/marc.rb +20 -18
- data/marc.gemspec +23 -0
- data/test/marc8/tc_marc8_mapping.rb +3 -3
- data/test/marc8/tc_to_unicode.rb +28 -32
- data/test/messed_up_leader.xml +9 -0
- data/test/tc_controlfield.rb +37 -34
- data/test/tc_datafield.rb +65 -60
- data/test/tc_dublincore.rb +9 -11
- data/test/tc_hash.rb +10 -13
- data/test/tc_jsonl.rb +19 -0
- data/test/tc_marchash.rb +17 -21
- data/test/tc_parsers.rb +108 -144
- data/test/tc_reader.rb +35 -36
- data/test/tc_reader_char_encodings.rb +149 -169
- data/test/tc_record.rb +143 -148
- data/test/tc_subfield.rb +14 -13
- data/test/tc_unsafe_xml.rb +95 -0
- data/test/tc_writer.rb +101 -108
- data/test/tc_xml.rb +101 -94
- data/test/tc_xml_error_handling.rb +7 -8
- data/test/ts_marc.rb +8 -8
- metadata +80 -9
@@ -0,0 +1,44 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "json"
|
4
|
+
require "marc/writer"
|
5
|
+
|
6
|
+
module MARC
|
7
|
+
class JSONLWriter < MARC::Writer
|
8
|
+
# @param [String, IO] file A filename, or open File/IO type object, from which to read
|
9
|
+
def initialize(file, &blk)
|
10
|
+
if file.instance_of?(String)
|
11
|
+
@fh = File.new(file, "w:utf-8")
|
12
|
+
elsif file.respond_to?(:write)
|
13
|
+
@fh = file
|
14
|
+
else
|
15
|
+
raise ArgumentError, "must pass in file name or handle"
|
16
|
+
end
|
17
|
+
|
18
|
+
if blk
|
19
|
+
blk.call(self)
|
20
|
+
close
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
# Write encoded record to the handle
|
25
|
+
# @param [MARC::Record] record
|
26
|
+
# @return [MARC::JSONLWriter] self
|
27
|
+
def write(record)
|
28
|
+
@fh.puts(encode(record))
|
29
|
+
self
|
30
|
+
end
|
31
|
+
|
32
|
+
# Encode the record as a marc-in-json string
|
33
|
+
# @param [MARC::Record] record
|
34
|
+
# @return [String] MARC-in-JSON representation of the record
|
35
|
+
def self.encode(record)
|
36
|
+
JSON.fast_generate(record.to_hash)
|
37
|
+
end
|
38
|
+
|
39
|
+
# @see MARC::JSONLWriter.encode
|
40
|
+
def encode(rec)
|
41
|
+
self.class.encode(rec)
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|