libis-tools 0.9.9 → 0.9.10
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +4 -2
- data/README.md +19 -0
- data/lib/libis/tools.rb +1 -0
- data/lib/libis/tools/config_file.rb +1 -1
- data/lib/libis/tools/extend/kernel.rb +16 -0
- data/lib/libis/tools/metadata.rb +20 -0
- data/lib/libis/tools/metadata/dublin_core_record.rb +1 -1
- data/lib/libis/tools/metadata/{field_spec.rb → field_format.rb} +7 -7
- data/lib/libis/tools/metadata/fix_field.rb +6 -1
- data/lib/libis/tools/metadata/mapper.rb +80 -0
- data/lib/libis/tools/metadata/mappers/flandrica.rb +69 -0
- data/lib/libis/tools/metadata/mappers/kuleuven.rb +1702 -0
- data/lib/libis/tools/metadata/marc21_record.rb +5 -4
- data/lib/libis/tools/metadata/marc_record.rb +96 -37
- data/lib/libis/tools/metadata/parser/basic_parser.rb +118 -0
- data/lib/libis/tools/metadata/parser/dublin_core_parser.rb +36 -0
- data/lib/libis/tools/metadata/parser/marc21_parser.rb +206 -0
- data/lib/libis/tools/metadata/parser/marc_format_parser.rb +52 -0
- data/lib/libis/tools/metadata/parser/marc_rules.rb +35 -0
- data/lib/libis/tools/metadata/parser/marc_select_parser.rb +25 -0
- data/lib/libis/tools/metadata/parser/patch.rb +21 -0
- data/lib/libis/tools/metadata/parser/subfield_criteria_parser.rb +71 -0
- data/lib/libis/tools/metadata/parsers.rb +12 -0
- data/lib/libis/tools/metadata/var_field.rb +57 -47
- data/lib/libis/tools/parameter.rb +12 -2
- data/lib/libis/tools/version.rb +1 -1
- data/libis-tools.gemspec +4 -3
- data/spec/config_spec.rb +3 -1
- data/spec/data/MetadataMapping.xlsx +0 -0
- data/spec/metadata/8389207.marc +96 -0
- data/spec/metadata/dublin_core_parser_spec.rb +48 -0
- data/spec/metadata/marc21_parser_data.rb +382 -0
- data/spec/metadata/marc21_parser_spec.rb +67 -0
- data/spec/metadata/marc21_spec.rb +116 -0
- data/spec/metadata/metadata_mapper_spec.rb +23 -0
- data/spec/spec_helper.rb +13 -0
- data/test.rb +61 -0
- metadata +77 -7
- data/lib/libis/tools/dc_record.rb +0 -47
data/lib/libis/tools/version.rb
CHANGED
data/libis-tools.gemspec
CHANGED
@@ -29,13 +29,14 @@ Gem::Specification.new do |spec|
|
|
29
29
|
spec.add_development_dependency 'rspec', '~> 3.1'
|
30
30
|
spec.add_development_dependency 'simplecov', '~> 0.9'
|
31
31
|
spec.add_development_dependency 'equivalent-xml', '~> 0.5'
|
32
|
-
|
32
|
+
spec.add_development_dependency 'awesome_print'
|
33
33
|
|
34
34
|
spec.add_runtime_dependency 'backports', '~> 3.6'
|
35
35
|
spec.add_runtime_dependency 'savon', '~> 2.0'
|
36
36
|
spec.add_runtime_dependency 'nokogiri', '~> 1.6'
|
37
37
|
spec.add_runtime_dependency 'gyoku', '~> 1.2'
|
38
38
|
spec.add_runtime_dependency 'nori', '~> 2.4'
|
39
|
-
spec.add_runtime_dependency 'recursive-open-struct', '~>0.6
|
40
|
-
|
39
|
+
spec.add_runtime_dependency 'recursive-open-struct', '~> 0.6'
|
40
|
+
spec.add_runtime_dependency 'parslet', '~> 1.7'
|
41
|
+
spec.add_runtime_dependency 'simple_xlsx_reader', '~> 1.0'
|
41
42
|
end
|
data/spec/config_spec.rb
CHANGED
@@ -64,7 +64,9 @@ describe 'Config' do
|
|
64
64
|
context 'loading from file' do
|
65
65
|
|
66
66
|
let(:test_file) { File.join(File.dirname(__FILE__), 'data', 'test.yml') }
|
67
|
-
subject(:config) {
|
67
|
+
subject(:config) {
|
68
|
+
Libis::Tools::Config.clear! << test_file
|
69
|
+
}
|
68
70
|
|
69
71
|
it 'has configuration parameters set' do
|
70
72
|
expect(config.process).to eq 'Test Configuration'
|
Binary file
|
@@ -0,0 +1,96 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<record xsi:schemaLocation="http://www.loc.gov/MARC21/slim http://www.loc.gov/standards/marcxml/schema/MARC21slim.xsd"
|
3
|
+
xmlns="http://www.loc.gov/MARC21/slim" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
4
|
+
<leader>01068nam 2200241u 4500</leader>
|
5
|
+
<controlfield tag="005">20150701153710.0</controlfield>
|
6
|
+
<controlfield tag="008">000608m17221724xx |||| | 000|0 lat c</controlfield>
|
7
|
+
<controlfield tag="001">9921543960101471</controlfield>
|
8
|
+
<datafield tag="035" ind1=" " ind2=" ">
|
9
|
+
<subfield code="a">(BeLVLBS)002154396LBS01-Aleph</subfield>
|
10
|
+
</datafield>
|
11
|
+
<datafield tag="035" ind1=" " ind2=" ">
|
12
|
+
<subfield code="a">8389207</subfield>
|
13
|
+
</datafield>
|
14
|
+
<datafield tag="245" ind1="0" ind2="0">
|
15
|
+
<subfield code="a">Anecdota Graeca, sacra et profana /</subfield>
|
16
|
+
<subfield code="c">ex codicibus manu exaratis nunc primum in lucem edita, versione Latina donata, et notis
|
17
|
+
illustrata a Io. Christophoro Wolfio ... Tom. I [-IIII]
|
18
|
+
</subfield>
|
19
|
+
</datafield>
|
20
|
+
<datafield tag="264" ind1=" " ind2="1">
|
21
|
+
<subfield code="a">Hamburgi</subfield>
|
22
|
+
<subfield code="b">apud Theodorum Christophorum Felginer,</subfield>
|
23
|
+
<subfield code="c">1722-1724</subfield>
|
24
|
+
</datafield>
|
25
|
+
<datafield tag="300" ind1=" " ind2=" ">
|
26
|
+
<subfield code="a">8o: 4 v.; [22], 298, [8]; [16], 354, [1]; [16], 299, [7]; [16], 271, [5] p.</subfield>
|
27
|
+
</datafield>
|
28
|
+
<datafield tag="336" ind1=" " ind2=" ">
|
29
|
+
<subfield code="a">text</subfield>
|
30
|
+
<subfield code="2">rdacontent</subfield>
|
31
|
+
</datafield>
|
32
|
+
<datafield tag="337" ind1=" " ind2=" ">
|
33
|
+
<subfield code="a">unmediated</subfield>
|
34
|
+
<subfield code="2">rdamedia</subfield>
|
35
|
+
</datafield>
|
36
|
+
<datafield tag="338" ind1=" " ind2=" ">
|
37
|
+
<subfield code="a">volume</subfield>
|
38
|
+
<subfield code="2">rdacarrier</subfield>
|
39
|
+
</datafield>
|
40
|
+
<datafield tag="500" ind1=" " ind2=" ">
|
41
|
+
<subfield code="a">Ded. Petrus Theodorus Seelmann; Erdmannus Neumeister; Thomas Claussen; Joannes Grammius
|
42
|
+
</subfield>
|
43
|
+
</datafield>
|
44
|
+
<datafield tag="500" ind1=" " ind2=" ">
|
45
|
+
<subfield code="a">Elk deel heeft eigen titelp. in roodzwartdruk, met drukkersmerk</subfield>
|
46
|
+
</datafield>
|
47
|
+
<datafield tag="650" ind1=" " ind2="7">
|
48
|
+
<subfield code="2">UDC</subfield>
|
49
|
+
<subfield code="a">276 =75</subfield>
|
50
|
+
<subfield code="x">Griekse patrologie</subfield>
|
51
|
+
</datafield>
|
52
|
+
<datafield tag="653" ind1=" " ind2="6">
|
53
|
+
<subfield code="a">Books before 1840</subfield>
|
54
|
+
</datafield>
|
55
|
+
<datafield tag="700" ind1="1" ind2=" ">
|
56
|
+
<subfield code="a">Wolf, Johann Christoph</subfield>
|
57
|
+
<subfield code="d">1683-1739</subfield>
|
58
|
+
<subfield code="4">aut</subfield>
|
59
|
+
</datafield>
|
60
|
+
<datafield tag="953" ind1=" " ind2=" ">
|
61
|
+
<subfield code="a">1701-1750</subfield>
|
62
|
+
</datafield>
|
63
|
+
<datafield tag="998" ind1=" " ind2=" ">
|
64
|
+
<subfield code="a">LBS01</subfield>
|
65
|
+
<subfield code="b">bib_200501.mrc.2.av</subfield>
|
66
|
+
</datafield>
|
67
|
+
<datafield tag="INST" ind1=" " ind2=" ">
|
68
|
+
<subfield code="a">32KUL_LIBIS_NETWORK</subfield>
|
69
|
+
<subfield code="b">P</subfield>
|
70
|
+
<subfield code="c">71134440820001471</subfield>
|
71
|
+
</datafield>
|
72
|
+
<datafield tag="INST" ind1=" " ind2=" ">
|
73
|
+
<subfield code="a">32KUL_KUL</subfield>
|
74
|
+
<subfield code="b">P</subfield>
|
75
|
+
<subfield code="c">21304345390001488</subfield>
|
76
|
+
</datafield>
|
77
|
+
<datafield tag="AVA" ind1=" " ind2=" ">
|
78
|
+
<subfield code="a">32KUL_KUL</subfield>
|
79
|
+
<subfield code="b">GBIB</subfield>
|
80
|
+
<subfield code="c">GBIB: Godgeleerdheid</subfield>
|
81
|
+
<subfield code="d">276.030.4 WOLF Anec</subfield>
|
82
|
+
<subfield code="e">available</subfield>
|
83
|
+
<subfield code="f">1</subfield>
|
84
|
+
<subfield code="g">0</subfield>
|
85
|
+
<subfield code="j">GBIB</subfield>
|
86
|
+
<subfield code="p">1</subfield>
|
87
|
+
</datafield>
|
88
|
+
<datafield tag="MMS" ind1=" " ind2=" ">
|
89
|
+
<subfield code="b">9921543960101471</subfield>
|
90
|
+
<subfield code="a">32KUL_LIBIS_NETWORK</subfield>
|
91
|
+
</datafield>
|
92
|
+
<datafield tag="MMS" ind1=" " ind2=" ">
|
93
|
+
<subfield code="b">9921543960101488</subfield>
|
94
|
+
<subfield code="a">32KUL_KUL</subfield>
|
95
|
+
</datafield>
|
96
|
+
</record>
|
@@ -0,0 +1,48 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
require_relative '../spec_helper'
|
3
|
+
require 'libis/tools/metadata/parsers'
|
4
|
+
require 'parslet'
|
5
|
+
require 'parslet/convenience'
|
6
|
+
require 'pp'
|
7
|
+
|
8
|
+
$DEBUG = false
|
9
|
+
|
10
|
+
describe 'DublinCore Parser' do
|
11
|
+
|
12
|
+
subject(:parser) { Libis::Tools::Metadata::DublinCoreParser.new }
|
13
|
+
|
14
|
+
it 'parses simple DC' do
|
15
|
+
expect {
|
16
|
+
tree = parser.parse_with_debug('dc:title')
|
17
|
+
# pp tree
|
18
|
+
expect(tree).to be_a Hash
|
19
|
+
expect(tree[:namespace]).to eq 'dc'
|
20
|
+
expect(tree[:element]).to eq 'title'
|
21
|
+
# noinspection RubyResolve
|
22
|
+
expect(tree).not_to have_key :attributes
|
23
|
+
}.not_to raise_error
|
24
|
+
end
|
25
|
+
|
26
|
+
it 'must see namespace' do
|
27
|
+
expect {
|
28
|
+
parser.parse('title')
|
29
|
+
}.to raise_error(Parslet::ParseFailed)
|
30
|
+
end
|
31
|
+
|
32
|
+
it 'parses DC with attributes' do
|
33
|
+
expect {
|
34
|
+
tree = parser.parse_with_debug('dcterms:date xsi:type="http://example.com" foo:bar="baz"')
|
35
|
+
# pp tree
|
36
|
+
expect(tree).to be_a Hash
|
37
|
+
expect(tree[:namespace]).to eq 'dcterms'
|
38
|
+
expect(tree[:element]).to eq 'date'
|
39
|
+
# noinspection RubyResolve
|
40
|
+
expect(tree[:attributes].size).to be 2
|
41
|
+
expect(tree[:attributes]).to eq [
|
42
|
+
{namespace: 'xsi', name: 'type', value: 'http://example.com'},
|
43
|
+
{namespace: 'foo', name: 'bar', value: 'baz'},
|
44
|
+
]
|
45
|
+
}.not_to raise_error
|
46
|
+
end
|
47
|
+
|
48
|
+
end
|
@@ -0,0 +1,382 @@
|
|
1
|
+
def marc21_parser_testdata
|
2
|
+
[
|
3
|
+
{
|
4
|
+
title: 'select statement with numeric tag',
|
5
|
+
input: 'MARC 123',
|
6
|
+
tree: {tag: '123', ind1: nil, ind2: nil, subfield: nil, condition: nil},
|
7
|
+
transform: "record.select_fields('123##')"
|
8
|
+
}, {
|
9
|
+
title: 'select statement with LRK tag',
|
10
|
+
input: 'MARC LKR',
|
11
|
+
tree: {tag: 'LKR', ind1: nil, ind2: nil, subfield: nil, condition: nil},
|
12
|
+
transform: "record.select_fields('LKR##')"
|
13
|
+
}, {
|
14
|
+
title: 'select statement with FMT tag',
|
15
|
+
input: 'MARC FMT',
|
16
|
+
tree: {tag: 'FMT', ind1: nil, ind2: nil, subfield: nil, condition: nil},
|
17
|
+
transform: "record.select_fields('FMT##')"
|
18
|
+
}, {
|
19
|
+
title: 'select statement with bad magic text',
|
20
|
+
input: 'foo',
|
21
|
+
tree: :failure
|
22
|
+
}, {
|
23
|
+
title: 'select statement with bad tag',
|
24
|
+
input: 'MARC 1',
|
25
|
+
tree: :failure
|
26
|
+
}, {
|
27
|
+
title: 'select statement with bad indicator',
|
28
|
+
input: 'MARC 123 *',
|
29
|
+
tree: :failure
|
30
|
+
}, {
|
31
|
+
title: 'select statement with bad subfield',
|
32
|
+
input: 'MARC 123 $_',
|
33
|
+
tree: :failure
|
34
|
+
}, {
|
35
|
+
title: 'select statement with tag and one indicator',
|
36
|
+
input: 'MARC 123 #',
|
37
|
+
tree: {tag: '123', ind1: '#', ind2: nil, subfield: nil, condition: nil},
|
38
|
+
transform: "record.select_fields('123##')"
|
39
|
+
}, {
|
40
|
+
title: 'select statement with tag and indicators',
|
41
|
+
input: 'MARC 123 #_',
|
42
|
+
tree: {tag: '123', ind1: '#', ind2: '_', subfield: nil, condition: nil},
|
43
|
+
transform: "record.select_fields('123#_')"
|
44
|
+
}, {
|
45
|
+
title: 'select statement with tag and subfield',
|
46
|
+
input: 'MARC 123 $a',
|
47
|
+
tree: {tag: '123', ind1: nil, ind2: nil, subfield: {name: 'a'}, condition: nil},
|
48
|
+
transform: "record.select_fields('123##a')"
|
49
|
+
}, {
|
50
|
+
title: 'select statement with tag, indicators and subfield',
|
51
|
+
input: 'MARC 123 45 $6',
|
52
|
+
tree: {tag: '123', ind1: '4', ind2: '5', subfield: {name: '6'}, condition: nil},
|
53
|
+
transform: "record.select_fields('123456')"
|
54
|
+
}, {
|
55
|
+
title: 'select statement with subfield condition',
|
56
|
+
input: 'MARC 123 [f.match(\'a\')]',
|
57
|
+
tree: {
|
58
|
+
tag: '123', ind1: nil, ind2: nil, subfield: nil,
|
59
|
+
condition: {
|
60
|
+
cond_format: {
|
61
|
+
entry: [
|
62
|
+
{cond_group: {
|
63
|
+
prefix: 'f.match',
|
64
|
+
lparen: '(',
|
65
|
+
entry: [
|
66
|
+
{cond_group: {
|
67
|
+
prefix: nil,
|
68
|
+
lparen: "'",
|
69
|
+
entry: nil,
|
70
|
+
postfix: 'a',
|
71
|
+
rparen: "'"
|
72
|
+
}}
|
73
|
+
],
|
74
|
+
postfix: nil,
|
75
|
+
rparen: ')'
|
76
|
+
}}
|
77
|
+
],
|
78
|
+
postfix: nil
|
79
|
+
}
|
80
|
+
}
|
81
|
+
},
|
82
|
+
transform: "record.select_fields('123##', Proc.new { |f| f.match('a') })"
|
83
|
+
}, {
|
84
|
+
title: 'select statement with regex condition',
|
85
|
+
input: 'MARC 123 [$0 =~ /^.+"ABC"/]',
|
86
|
+
tree: {
|
87
|
+
tag: '123', ind1: nil, ind2: nil, subfield: nil,
|
88
|
+
condition: {
|
89
|
+
cond_format: {
|
90
|
+
entry: [
|
91
|
+
{subfield: {:prefix => nil, :repeat => nil, :name => '0'}},
|
92
|
+
{cond_group: {
|
93
|
+
prefix: ' =~ /^.+',
|
94
|
+
lparen: "\"",
|
95
|
+
entry: nil,
|
96
|
+
postfix: 'ABC',
|
97
|
+
rparen: "\""
|
98
|
+
}}
|
99
|
+
],
|
100
|
+
postfix: '/'
|
101
|
+
}
|
102
|
+
}
|
103
|
+
},
|
104
|
+
transform: "record.select_fields('123##', Proc.new { |f| f.subfield('0') =~ /^.+\"ABC\"/ })"
|
105
|
+
}, {
|
106
|
+
title: 'select statement with complex regex condition',
|
107
|
+
input: 'MARC 690 02 {$0 =~ /^\(ODIS-(PS|ORG)\) (\d)+$$/}',
|
108
|
+
tree: {
|
109
|
+
tag: '690', ind1: '0', ind2: '2', subfield: nil,
|
110
|
+
condition: {
|
111
|
+
cond_format: {
|
112
|
+
entry: [
|
113
|
+
{subfield: {prefix: nil, repeat: nil, name: '0'}},
|
114
|
+
{cond_group: {prefix: " =~ /^\\",
|
115
|
+
lparen: '(',
|
116
|
+
entry: [
|
117
|
+
{cond_group: {
|
118
|
+
prefix: 'ODIS-',
|
119
|
+
lparen: '(',
|
120
|
+
entry: nil,
|
121
|
+
postfix: 'PS|ORG',
|
122
|
+
rparen: ')'}}
|
123
|
+
],
|
124
|
+
postfix: "\\",
|
125
|
+
rparen: ')'}},
|
126
|
+
{cond_group: {
|
127
|
+
prefix: ' ',
|
128
|
+
lparen: '(',
|
129
|
+
entry: nil,
|
130
|
+
postfix: "\\d",
|
131
|
+
rparen: ')'}}
|
132
|
+
],
|
133
|
+
postfix: '+$$/'}}
|
134
|
+
},
|
135
|
+
transform: "record.select_fields('69002', Proc.new { |f| f.subfield('0') =~ /^\\(ODIS-(PS|ORG)\\) (\\d)+$$/ })"
|
136
|
+
}, {
|
137
|
+
}, {
|
138
|
+
title: 'format statement with simple subfield reference',
|
139
|
+
input: '$a',
|
140
|
+
tree: {entry: [{subfield: {prefix: nil, repeat: nil, name: 'a'}}], postfix: nil},
|
141
|
+
transform: "f.subfield('a')"
|
142
|
+
}, {
|
143
|
+
title: 'format statement with subfield reference with repeat indicator',
|
144
|
+
input: '$*a',
|
145
|
+
tree: {entry: [{subfield: {prefix: nil, repeat: '*', name: 'a'}}], postfix: nil},
|
146
|
+
transform: "field_format(f.subfield_array('a'), join: ';').to_s"
|
147
|
+
}, {
|
148
|
+
title: 'format statement with subfield reference with repeat + separator indicator',
|
149
|
+
input: '$*"; "a',
|
150
|
+
tree: {entry: [{subfield: {prefix: nil, repeat: {separator: '; '}, name: 'a'}}], postfix: nil},
|
151
|
+
transform: "field_format(f.subfield_array('a'), join: '; ').to_s"
|
152
|
+
}, {
|
153
|
+
title: 'format statement with position reference',
|
154
|
+
input: '$[13]',
|
155
|
+
tree: {entry: [{fixfield: {prefix: nil, position: '13'}}], postfix: nil},
|
156
|
+
transform: 'f[13]'
|
157
|
+
}, {
|
158
|
+
title: 'format statement with range reference',
|
159
|
+
input: 'abc: $[5-8]',
|
160
|
+
tree: {entry: [{fixfield: {prefix: 'abc: ', first: '5', last: '8'}}], postfix: nil},
|
161
|
+
transform: "field_format(f[5,8], prefix: 'abc: ').to_s"
|
162
|
+
}, {
|
163
|
+
title: 'format statement with all range reference',
|
164
|
+
input: 'abc: $[*].',
|
165
|
+
tree: {entry: [{fixfield: {prefix: 'abc: ', all: '*'}}], postfix: '.'},
|
166
|
+
transform: "field_format(field_format(f[], prefix: 'abc: ').to_s, postfix: '.').to_s"
|
167
|
+
}, {
|
168
|
+
title: 'format statement with multiple subfields with prefixes',
|
169
|
+
input: '$a, $b - $c',
|
170
|
+
tree: {
|
171
|
+
entry: [
|
172
|
+
{subfield: {prefix: nil, repeat: nil, name: 'a'}},
|
173
|
+
{subfield: {prefix: ', ', repeat: nil, name: 'b'}},
|
174
|
+
{subfield: {prefix: ' - ', repeat: nil, name: 'c'}},
|
175
|
+
],
|
176
|
+
postfix: nil},
|
177
|
+
transform: "field_format(f.subfield('a'),field_format(f.subfield('b'), prefix: ', ').to_s,field_format(f.subfield('c'), prefix: ' - ').to_s).to_s"
|
178
|
+
}, {
|
179
|
+
title: 'format statement with multiple subfields with prefixes and postfix',
|
180
|
+
input: '$a, $b - $c.',
|
181
|
+
tree: {
|
182
|
+
entry: [
|
183
|
+
{subfield: {prefix: nil, repeat: nil, name: 'a'}},
|
184
|
+
{subfield: {prefix: ', ', repeat: nil, name: 'b'}},
|
185
|
+
{subfield: {prefix: ' - ', repeat: nil, name: 'c'}},
|
186
|
+
],
|
187
|
+
postfix: '.'},
|
188
|
+
transform: "field_format(f.subfield('a'),field_format(f.subfield('b'), prefix: ', ').to_s,field_format(f.subfield('c'), prefix: ' - ').to_s, postfix: '.').to_s"
|
189
|
+
}, {
|
190
|
+
title: 'format statement with multiple subfields with prefixes and group',
|
191
|
+
input: '$a, $b - ($c)',
|
192
|
+
tree: {
|
193
|
+
entry: [
|
194
|
+
{subfield: {prefix: nil, repeat: nil, name: 'a'}},
|
195
|
+
{subfield: {prefix: ', ', repeat: nil, name: 'b'}},
|
196
|
+
{group: {
|
197
|
+
prefix: ' - ', postfix: nil,
|
198
|
+
lparen: '(', rparen: ')',
|
199
|
+
entry: [{subfield: {prefix: nil, repeat: nil, name: 'c'}}]
|
200
|
+
}},
|
201
|
+
],
|
202
|
+
postfix: nil},
|
203
|
+
transform: "field_format(f.subfield('a'),field_format(f.subfield('b'), prefix: ', ').to_s,field_format(f.subfield('c'), prefix: ' - (', postfix: ')').to_s).to_s"
|
204
|
+
}, {
|
205
|
+
title: 'format statement with multiple subfields with prefixes and group with multiple entries',
|
206
|
+
input: '$a, $b - ($c, $d, ...)',
|
207
|
+
tree: {
|
208
|
+
entry: [
|
209
|
+
{subfield: {prefix: nil, repeat: nil, name: 'a'}},
|
210
|
+
{subfield: {prefix: ', ', repeat: nil, name: 'b'}},
|
211
|
+
{group: {
|
212
|
+
prefix: ' - ', postfix: ', ...',
|
213
|
+
lparen: '(', rparen: ')',
|
214
|
+
entry: [
|
215
|
+
{subfield: {prefix: nil, repeat: nil, name: 'c'}},
|
216
|
+
{subfield: {prefix: ', ', repeat: nil, name: 'd'}},
|
217
|
+
],
|
218
|
+
}},
|
219
|
+
],
|
220
|
+
postfix: nil},
|
221
|
+
transform: "field_format(f.subfield('a'),field_format(f.subfield('b'), prefix: ', ').to_s,field_format(f.subfield('c'),field_format(f.subfield('d'), prefix: ', ').to_s, prefix: ' - (', postfix: ', ...)').to_s).to_s"
|
222
|
+
}, {
|
223
|
+
title: 'format statement with nested groups',
|
224
|
+
input: '([{{($a)}}])',
|
225
|
+
tree: {
|
226
|
+
entry: [
|
227
|
+
{group: {
|
228
|
+
prefix: nil, postfix: nil,
|
229
|
+
lparen: '(', rparen: ')',
|
230
|
+
entry: [
|
231
|
+
{group: {
|
232
|
+
prefix: nil, postfix: nil,
|
233
|
+
lparen: '[', rparen: ']',
|
234
|
+
entry: [
|
235
|
+
{group: {
|
236
|
+
prefix: nil, postfix: nil,
|
237
|
+
lparen: '{', rparen: '}',
|
238
|
+
entry: [
|
239
|
+
{group: {
|
240
|
+
prefix: nil, postfix: nil,
|
241
|
+
lparen: '{', rparen: '}',
|
242
|
+
entry: [
|
243
|
+
{group: {
|
244
|
+
prefix: nil, postfix: nil,
|
245
|
+
lparen: '(', rparen: ')',
|
246
|
+
entry: [{subfield: {prefix: nil, repeat: nil, name: 'a'}}]
|
247
|
+
}}
|
248
|
+
]
|
249
|
+
}}
|
250
|
+
]
|
251
|
+
}}
|
252
|
+
]
|
253
|
+
}}
|
254
|
+
]
|
255
|
+
}}
|
256
|
+
],
|
257
|
+
postfix: nil},
|
258
|
+
transform: "field_format(field_format(field_format(field_format(field_format(f.subfield('a'), prefix: '(', postfix: ')').to_s, prefix: '{', postfix: '}').to_s, prefix: '{', postfix: '}').to_s, prefix: '[', postfix: ']').to_s, prefix: '(', postfix: ')').to_s"
|
259
|
+
}, {
|
260
|
+
title: 'format statement with missing closing bracket',
|
261
|
+
input: '($a',
|
262
|
+
tree: :failure
|
263
|
+
}, {
|
264
|
+
title: 'format statement with missing opening bracket',
|
265
|
+
input: '$a)',
|
266
|
+
tree: :failure
|
267
|
+
}, {
|
268
|
+
title: 'format statement with nested quotes',
|
269
|
+
input: ':"-$a, $*"+"b-".',
|
270
|
+
tree: {
|
271
|
+
entry: [
|
272
|
+
{group: {
|
273
|
+
prefix: ':', postfix: '-',
|
274
|
+
lparen: '"', rparen: '"',
|
275
|
+
entry: [
|
276
|
+
{subfield: {prefix: '-', repeat: nil, name: 'a'}},
|
277
|
+
{subfield: {prefix: ', ', repeat: {separator: '+'}, name: 'b'}}
|
278
|
+
],
|
279
|
+
}}
|
280
|
+
],
|
281
|
+
postfix: '.'},
|
282
|
+
transform: "field_format(field_format(field_format(f.subfield('a'), prefix: '-').to_s,field_format(f.subfield_array('b'), prefix: ', ', join: '+').to_s, prefix: ':\"', postfix: '-\"').to_s, postfix: '.').to_s"
|
283
|
+
}, {
|
284
|
+
title: 'format statement with double dollar prefix and postfix',
|
285
|
+
input: 'ab: $$$*a$$.',
|
286
|
+
tree: {
|
287
|
+
entry: [{subfield: {prefix: 'ab: $$', repeat: '*', name: 'a'}}],
|
288
|
+
postfix: '$$.'},
|
289
|
+
transform: "field_format(field_format(f.subfield_array('a'), prefix: 'ab: $$', join: ';').to_s, postfix: '$$.').to_s"
|
290
|
+
}, {
|
291
|
+
title: 'format statement with condition text',
|
292
|
+
input: '$0 =~ /^\(ODIS-(PS|ORG)\) (\d)+$$/',
|
293
|
+
tree: {
|
294
|
+
entry: [
|
295
|
+
{subfield: {prefix: nil, repeat: nil, name: '0'}},
|
296
|
+
{group: {
|
297
|
+
prefix: ' =~ /^\\', postfix: '\\',
|
298
|
+
lparen: '(', rparen: ')',
|
299
|
+
entry: [
|
300
|
+
{group: {
|
301
|
+
prefix: 'ODIS-', postfix: 'PS|ORG',
|
302
|
+
lparen: '(', rparen: ')',
|
303
|
+
entry: nil
|
304
|
+
}}
|
305
|
+
]
|
306
|
+
}},
|
307
|
+
{group: {
|
308
|
+
prefix: ' ', postfix: '\\d',
|
309
|
+
lparen: '(', rparen: ')',
|
310
|
+
entry: nil
|
311
|
+
}}
|
312
|
+
],
|
313
|
+
postfix: '+$$/'},
|
314
|
+
transform: "field_format(f.subfield('0'),field_format(field_format(, prefix: 'ODIS-(', postfix: 'PS|ORG)').to_s, prefix: ' =~ /^\\(', postfix: '\\)').to_s,field_format(, prefix: ' (', postfix: '\\d)').to_s, postfix: '+$$/').to_s"
|
315
|
+
}, {
|
316
|
+
title: 'format statement with method call',
|
317
|
+
input: '$(my_method($a,$b))',
|
318
|
+
tree: {entry: [
|
319
|
+
{method_call: {
|
320
|
+
prefix: nil, postfix: nil,
|
321
|
+
entry: [
|
322
|
+
{group: {
|
323
|
+
prefix: 'my_method', postfix: nil,
|
324
|
+
lparen: '(', rparen: ')',
|
325
|
+
entry: [
|
326
|
+
{subfield: {prefix: nil, repeat: nil, name: 'a'}},
|
327
|
+
{subfield: {prefix: ',', repeat: nil, name: 'b'}}
|
328
|
+
]
|
329
|
+
}}
|
330
|
+
]
|
331
|
+
}}
|
332
|
+
],
|
333
|
+
postfix: nil},
|
334
|
+
transform: {:format => {:entry => [{:method_call => {:prefix => nil, :entry => ["field_format(f.subfield('a'),field_format(f.subfield('b'), prefix: ',').to_s, prefix: 'my_method(', postfix: ')').to_s"], :postfix => nil}}], :postfix => nil}}
|
335
|
+
}, {
|
336
|
+
title: 'format statement with complex with method call',
|
337
|
+
input: "$a $b ($c) ($d) ($g), $(lookup('DOLLAR4','Name','Tag'=>'100','Code'=>$4.to_s)) ($9)",
|
338
|
+
tree: {entry: [
|
339
|
+
{subfield: {prefix: nil, repeat: nil, name: 'a'}},
|
340
|
+
{subfield: {prefix: ' ', repeat: nil, name: 'b'}},
|
341
|
+
{group: {
|
342
|
+
prefix: ' ', postfix: nil,
|
343
|
+
lparen: '(', rparen: ')',
|
344
|
+
entry: [{subfield: {prefix: nil, repeat: nil, name: 'c'}}]}},
|
345
|
+
{group: {
|
346
|
+
prefix: ' ', postfix: nil,
|
347
|
+
lparen: '(', rparen: ')',
|
348
|
+
entry: [{subfield: {prefix: nil, repeat: nil, name: 'd'}}]
|
349
|
+
}},
|
350
|
+
{group: {
|
351
|
+
prefix: ' ', postfix: nil,
|
352
|
+
lparen: '(', rparen: ')',
|
353
|
+
entry: [{subfield: {prefix: nil, repeat: nil, name: 'g'}}]
|
354
|
+
}},
|
355
|
+
{method_call: {
|
356
|
+
prefix: ', ', postfix: nil,
|
357
|
+
entry: [
|
358
|
+
{group: {
|
359
|
+
prefix: 'lookup', postfix: '.to_s',
|
360
|
+
lparen: '(', rparen: ')',
|
361
|
+
entry: [
|
362
|
+
{group: {prefix: nil, lparen: "'", entry: nil, postfix: 'DOLLAR4', rparen: "'"}},
|
363
|
+
{group: {prefix: ',', lparen: "'", entry: nil, postfix: 'Name', rparen: "'"}},
|
364
|
+
{group: {prefix: ',', lparen: "'", entry: nil, postfix: 'Tag', rparen: "'"}},
|
365
|
+
{group: {prefix: '=>', lparen: "'", entry: nil, postfix: '100', rparen: "'"}},
|
366
|
+
{group: {prefix: ',', lparen: "'", entry: nil, postfix: 'Code', rparen: "'"}},
|
367
|
+
{subfield: {prefix: '=>', repeat: nil, name: '4'}}
|
368
|
+
]
|
369
|
+
}}
|
370
|
+
]
|
371
|
+
}},
|
372
|
+
{group: {
|
373
|
+
prefix: ' ', postfix: nil,
|
374
|
+
lparen: '(', rparen: ')',
|
375
|
+
entry: [{subfield: {prefix: nil, repeat: nil, name: '9'}}]
|
376
|
+
}}
|
377
|
+
],
|
378
|
+
postfix: nil},
|
379
|
+
transform: {:format => {:entry => ["f.subfield('a')", "field_format(f.subfield('b'), prefix: ' ').to_s", "field_format(f.subfield('c'), prefix: ' (', postfix: ')').to_s", "field_format(f.subfield('d'), prefix: ' (', postfix: ')').to_s", "field_format(f.subfield('g'), prefix: ' (', postfix: ')').to_s", {:method_call => {:prefix => ', ', :entry => ["field_format(field_format(, prefix: ''', postfix: 'DOLLAR4'').to_s,field_format(, prefix: ','', postfix: 'Name'').to_s,field_format(, prefix: ','', postfix: 'Tag'').to_s,field_format(, prefix: '=>'', postfix: '100'').to_s,field_format(, prefix: ','', postfix: 'Code'').to_s,field_format(f.subfield('4'), prefix: '=>').to_s, prefix: 'lookup(', postfix: '.to_s)').to_s"], :postfix => nil}}, "field_format(f.subfield('9'), prefix: ' (', postfix: ')').to_s"], :postfix => nil}}
|
380
|
+
}
|
381
|
+
]
|
382
|
+
end
|