berkeley_library-marc 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (72) hide show
  1. checksums.yaml +7 -0
  2. data/.github/workflows/build.yml +18 -0
  3. data/.gitignore +388 -0
  4. data/.idea/inspectionProfiles/Project_Default.xml +20 -0
  5. data/.idea/marc.iml +101 -0
  6. data/.idea/misc.xml +4 -0
  7. data/.idea/modules.xml +8 -0
  8. data/.idea/vcs.xml +6 -0
  9. data/.rubocop.yml +334 -0
  10. data/.ruby-version +1 -0
  11. data/.simplecov +8 -0
  12. data/.yardopts +1 -0
  13. data/CHANGES.md +12 -0
  14. data/Dockerfile +57 -0
  15. data/Gemfile +3 -0
  16. data/Jenkinsfile +18 -0
  17. data/LICENSE.md +21 -0
  18. data/README.md +4 -0
  19. data/Rakefile +20 -0
  20. data/berkeley_library-marc.gemspec +42 -0
  21. data/docker-compose.yml +15 -0
  22. data/lib/.rubocop.yml +6 -0
  23. data/lib/berkeley_library/marc.rb +3 -0
  24. data/lib/berkeley_library/marc/field_info.rb +1 -0
  25. data/lib/berkeley_library/marc/field_info/ctrl_fields/data/ctrl_fields_standard.txt +2143 -0
  26. data/lib/berkeley_library/marc/field_info/leader/data/leader_standard.txt +87 -0
  27. data/lib/berkeley_library/marc/field_info/var_fields.rb +46 -0
  28. data/lib/berkeley_library/marc/field_info/var_fields/data.rb +4 -0
  29. data/lib/berkeley_library/marc/field_info/var_fields/data/mapping-orig.tsv +265 -0
  30. data/lib/berkeley_library/marc/field_info/var_fields/data/var_fields_berkeley_9xx.txt +53 -0
  31. data/lib/berkeley_library/marc/field_info/var_fields/data/var_fields_berkeley_9xx_parsed.rb +51 -0
  32. data/lib/berkeley_library/marc/field_info/var_fields/data/var_fields_standard.txt +5458 -0
  33. data/lib/berkeley_library/marc/field_info/var_fields/data/var_fields_standard_parsed.rb +6577 -0
  34. data/lib/berkeley_library/marc/field_info/var_fields/data/var_fields_tind_reserved.txt +44 -0
  35. data/lib/berkeley_library/marc/field_info/var_fields/data/var_fields_tind_reserved_parsed.rb +30 -0
  36. data/lib/berkeley_library/marc/field_info/var_fields/data/var_fields_ucblit_tind.txt +105 -0
  37. data/lib/berkeley_library/marc/field_info/var_fields/data/var_fields_ucblit_tind_parsed.rb +114 -0
  38. data/lib/berkeley_library/marc/field_info/var_fields/ind_def.rb +39 -0
  39. data/lib/berkeley_library/marc/field_info/var_fields/ind_val_def.rb +27 -0
  40. data/lib/berkeley_library/marc/field_info/var_fields/instrument_or_voices_code.rb +26 -0
  41. data/lib/berkeley_library/marc/field_info/var_fields/obsolescible.rb +55 -0
  42. data/lib/berkeley_library/marc/field_info/var_fields/section.rb +50 -0
  43. data/lib/berkeley_library/marc/field_info/var_fields/subfield_def.rb +50 -0
  44. data/lib/berkeley_library/marc/field_info/var_fields/subfield_val.rb +24 -0
  45. data/lib/berkeley_library/marc/field_info/var_fields/var_field_def.rb +62 -0
  46. data/lib/berkeley_library/marc/field_info/var_fields/var_field_list.rb +43 -0
  47. data/lib/berkeley_library/marc/field_info/var_fields/var_field_parser.rb +136 -0
  48. data/lib/berkeley_library/marc/field_info/var_fields/var_field_transform.rb +160 -0
  49. data/lib/berkeley_library/marc/module_info.rb +14 -0
  50. data/lib/marc_extensions.rb +1 -0
  51. data/lib/marc_extensions/data_field.rb +29 -0
  52. data/lib/marc_extensions/field_map.rb +63 -0
  53. data/lib/marc_extensions/record.rb +100 -0
  54. data/lib/marc_extensions/subfield.rb +21 -0
  55. data/lib/marc_extensions/xml_reader.rb +19 -0
  56. data/rakelib/bundle.rake +8 -0
  57. data/rakelib/coverage.rake +11 -0
  58. data/rakelib/gem.rake +54 -0
  59. data/rakelib/rubocop.rake +18 -0
  60. data/rakelib/spec.rake +2 -0
  61. data/spec/.rubocop.yml +37 -0
  62. data/spec/berkeley_library/marc/field_info/var_fields/var_field_def_spec.rb +26 -0
  63. data/spec/berkeley_library/marc/field_info/var_fields/var_field_parser_spec.rb +596 -0
  64. data/spec/berkeley_library/marc/field_info/var_fields/var_field_transform_spec.rb +173 -0
  65. data/spec/berkeley_library/marc/field_info/var_fields_spec.rb +112 -0
  66. data/spec/data/field_info/vf_046.txt +32 -0
  67. data/spec/data/field_info/vf_048.txt +112 -0
  68. data/spec/data/record-187888.xml +78 -0
  69. data/spec/marc_extensions/data_field_spec.rb +13 -0
  70. data/spec/marc_extensions/record_spec.rb +211 -0
  71. data/spec/spec_helper.rb +27 -0
  72. metadata +354 -0
@@ -0,0 +1,13 @@
1
+ require 'spec_helper'
2
+
3
+ describe MARC::DataField do
4
+ let(:marc_record) { MARC::XMLReader.read('spec/data/record-187888.xml').first }
5
+
6
+ describe :subfield_codes do
7
+ it 'returns the subfield codes in order' do
8
+ expected_codes = %w[y 9 s u]
9
+
10
+ expect(marc_record['856'].subfield_codes).to eq(expected_codes)
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,211 @@
1
+ require 'spec_helper'
2
+
3
+ describe MARC::Record do
4
+ let(:marc_record) { MARC::XMLReader.read('spec/data/record-187888.xml').first }
5
+
6
+ describe :record_id do
7
+ it 'returns the 001 control field value, if present' do
8
+ expect(marc_record.record_id).to eq('187888')
9
+ end
10
+ end
11
+
12
+ describe :freeze do
13
+ it 'freezes the fields' do
14
+ expect(marc_record.fields).not_to be_frozen # just to be sure
15
+ marc_record.freeze
16
+ expect(marc_record.fields).to be_frozen
17
+ end
18
+
19
+ it 'freezes the leader' do
20
+ expect(marc_record.leader).not_to be_frozen # just to be sure
21
+ marc_record.freeze
22
+ expect(marc_record.leader).to be_frozen
23
+ end
24
+
25
+ it 'freezes the fields' do
26
+ marc_record.freeze
27
+ marc_record.fields.each do |df|
28
+ expect(df).to be_frozen
29
+ end
30
+ end
31
+
32
+ it 'does not clobber the data' do
33
+ expected = marc_record.to_hash
34
+ marc_record.freeze
35
+ expect(marc_record.to_hash).to eq(expected)
36
+ end
37
+ end
38
+
39
+ describe :frozen? do
40
+ it 'returns false neither fields nor leader are frozen' do
41
+ expect(marc_record.leader).not_to be_frozen # just to be sure
42
+ expect(marc_record.fields).not_to be_frozen # just to be sure
43
+ expect(marc_record).not_to be_frozen
44
+ end
45
+
46
+ it 'returns false if only fields are frozen' do
47
+ expect(marc_record.leader).not_to be_frozen # just to be sure
48
+ expect(marc_record.fields).not_to be_frozen # just to be sure
49
+ marc_record.leader.freeze
50
+ expect(marc_record).not_to be_frozen
51
+ end
52
+
53
+ it 'returns false if only leader is frozen' do
54
+ expect(marc_record.leader).not_to be_frozen # just to be sure
55
+ expect(marc_record.fields).not_to be_frozen # just to be sure
56
+ marc_record.fields.freeze
57
+ expect(marc_record).not_to be_frozen
58
+ end
59
+
60
+ it 'returns false if neither fields nor leader are frozen' do
61
+ expect(marc_record.leader).not_to be_frozen # just to be sure
62
+ expect(marc_record.fields).not_to be_frozen # just to be sure
63
+ expect(marc_record).not_to be_frozen
64
+ end
65
+
66
+ it 'returns true if both fields and leader are frozen' do
67
+ expect(marc_record.leader).not_to be_frozen # just to be sure
68
+ expect(marc_record.fields).not_to be_frozen # just to be sure
69
+ marc_record.fields.freeze
70
+ marc_record.leader.freeze
71
+ expect(marc_record).to be_frozen
72
+ end
73
+ end
74
+
75
+ describe :data_fields do
76
+ it 'returns only the data fields' do
77
+ expected_tags = %w[024 035 245 336 505 505 505 505 505 505 540 852 856 856 901 902 902 980 982 991]
78
+ dff = marc_record.data_fields
79
+ expect(dff.size).to eq(expected_tags.size)
80
+ expect(dff.map(&:tag)).to eq(expected_tags)
81
+ end
82
+
83
+ it 'returns the data fields in order as they appear' do
84
+ dff = marc_record.data_fields
85
+ dff_856 = dff.select { |df| df.tag == '856' }
86
+ expect(dff_856.size).to eq(2) # just to be sure
87
+ expected_sf9_values = %w[4a939fe2-2665-4c67-832b-b0e5267db449 0aacdd29-b467-4c5c-93ab-415069f431c0]
88
+ expected_sf9_values.each_with_index do |expected, i|
89
+ expect(dff_856[i]['9']).to eq(expected)
90
+ end
91
+ end
92
+
93
+ it 'groups fields by tag even when disordered' do
94
+ fields = marc_record.fields
95
+
96
+ df_852_ix = fields.find_index { |df| df.tag == '852' }
97
+ df_852 = fields.delete_at(df_852_ix)
98
+ expect(df_852.tag).to eq('852') # just to be sure
99
+
100
+ df_856_1, df_856_2 = fields[df_852_ix, 2]
101
+ [df_856_1, df_856_2].each { |df| expect(df.tag).to eq('856') } # just to be sure
102
+
103
+ fields.insert(df_852_ix + 1, df_852)
104
+ expect(fields[df_852_ix, 3]).to eq([df_856_1, df_852, df_856_2]) # just to be sure
105
+
106
+ dff = marc_record.data_fields
107
+ df_852_ix = dff.find_index { |df| df.tag == '852' }
108
+ expect(dff[df_852_ix, 3]).to eq([df_852, df_856_1, df_856_2])
109
+ end
110
+ end
111
+
112
+ describe :each_data_field do
113
+ it 'returns only the data fields, in order' do
114
+ expect(marc_record.each_data_field.to_a).to eq(marc_record.data_fields)
115
+ end
116
+
117
+ it 'groups fields by tag even when disordered' do
118
+ fields = marc_record.fields
119
+
120
+ df_852_ix = fields.find_index { |df| df.tag == '852' }
121
+ df_852 = fields.delete_at(df_852_ix)
122
+ df_856_1, df_856_2 = fields[df_852_ix, 2]
123
+ fields.insert(df_852_ix + 1, df_852)
124
+
125
+ dff = marc_record.each_data_field.to_a
126
+ df_852_ix = dff.find_index { |df| df.tag == '852' }
127
+ expect(dff[df_852_ix, 3]).to eq([df_852, df_856_1, df_856_2])
128
+ end
129
+ end
130
+
131
+ describe :each_sorted_by_tag do
132
+ let(:tags) do
133
+ %w[856 852] # NOTE: not sorted
134
+ end
135
+
136
+ let(:expected) do
137
+ [].tap do |ff|
138
+ ff << marc_record['852']
139
+ marc_record.each_by_tag('856') { |f| ff << f }
140
+ end
141
+ end
142
+
143
+ it 'returns only fields with the specified tags, sorted, in original order' do
144
+ result = []
145
+ marc_record.each_sorted_by_tag(tags) { |f| result << f }
146
+ expect(result).to eq(expected)
147
+ end
148
+
149
+ it 'returns nil if passed a block' do
150
+ result = marc_record.each_sorted_by_tag(tags) { |_| next }
151
+ expect(result).to be_nil
152
+ end
153
+
154
+ it 'returns an enum if not passed a block' do
155
+ enum = marc_record.each_sorted_by_tag(tags)
156
+ expect(enum).to be_a(Enumerator::Lazy)
157
+ expect(enum.to_a).to eq(expected)
158
+ end
159
+ end
160
+
161
+ describe :data_fields_by_tag do
162
+ it 'groups fields by tag' do
163
+ fields = marc_record.fields
164
+
165
+ df_852_ix = fields.find_index { |df| df.tag == '852' }
166
+ df_852 = fields.delete_at(df_852_ix)
167
+ fields.insert(df_852_ix + 1, df_852)
168
+
169
+ t2df = marc_record.data_fields_by_tag
170
+ expect(t2df).to be_a(Hash)
171
+
172
+ expected = {
173
+ '024' => 1, '035' => 1,
174
+ '245' => 1,
175
+ '336' => 1,
176
+ '505' => 6, '540' => 1,
177
+ '852' => 1, '856' => 2,
178
+ '901' => 1, '902' => 2, '980' => 1, '982' => 1, '991' => 1
179
+ }
180
+
181
+ expected.each do |tag, count|
182
+ dff = t2df[tag]
183
+ expect(dff).to be_a(Array)
184
+ expect(dff.size).to eq(count)
185
+ dff.each { |df| expect(df.tag).to eq(tag) }
186
+ end
187
+ end
188
+
189
+ describe :each_sorted_by_tag do
190
+ it 'returns all tags if not passed a tag list' do
191
+ fields = marc_record.fields
192
+
193
+ expected = fields.each_with_object({}) do |f, ex|
194
+ (ex[f.tag] ||= []) << f
195
+ end.values.flatten
196
+
197
+ enum = marc_record.each_sorted_by_tag
198
+ expect(enum.to_a).to eq(expected)
199
+ end
200
+ end
201
+ end
202
+
203
+ describe :each_control_field do
204
+ it 'returns only the control fields' do
205
+ expected_tags = %w[001 005]
206
+ cff = marc_record.each_control_field.to_a
207
+ expect(cff.size).to eq(expected_tags.size)
208
+ expect(cff.map(&:tag)).to eq(expected_tags)
209
+ end
210
+ end
211
+ end
@@ -0,0 +1,27 @@
1
+ # ------------------------------------------------------------
2
+ # Simplecov
3
+
4
+ require 'colorize'
5
+ require 'simplecov' if ENV['COVERAGE']
6
+
7
+ # ------------------------------------------------------------
8
+ # RSpec
9
+
10
+ require 'webmock/rspec'
11
+
12
+ RSpec.configure do |config|
13
+ config.color = true
14
+ config.tty = true
15
+ config.formatter = :documentation
16
+ config.before(:each) { WebMock.disable_net_connect!(allow_localhost: true) }
17
+ config.after(:each) { WebMock.allow_net_connect! }
18
+ config.mock_with :rspec do |mocks|
19
+ mocks.verify_partial_doubles = true
20
+ end
21
+ config.shared_context_metadata_behavior = :apply_to_host_groups
22
+ end
23
+
24
+ # ------------------------------------------------------------
25
+ # Code under test
26
+
27
+ require 'berkeley_library/marc'
metadata ADDED
@@ -0,0 +1,354 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: berkeley_library-marc
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.2.0
5
+ platform: ruby
6
+ authors:
7
+ - David Moles
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2021-08-19 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: marc
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: parslet
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '2.0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '2.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: bundle-audit
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '0.1'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '0.1'
55
+ - !ruby/object:Gem::Dependency
56
+ name: ci_reporter_rspec
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '1.0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '1.0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: colorize
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '0.8'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '0.8'
83
+ - !ruby/object:Gem::Dependency
84
+ name: dotenv
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '2.7'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '2.7'
97
+ - !ruby/object:Gem::Dependency
98
+ name: listen
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: 3.0.5
104
+ - - "<"
105
+ - !ruby/object:Gem::Version
106
+ version: '3.2'
107
+ type: :development
108
+ prerelease: false
109
+ version_requirements: !ruby/object:Gem::Requirement
110
+ requirements:
111
+ - - ">="
112
+ - !ruby/object:Gem::Version
113
+ version: 3.0.5
114
+ - - "<"
115
+ - !ruby/object:Gem::Version
116
+ version: '3.2'
117
+ - !ruby/object:Gem::Dependency
118
+ name: rake
119
+ requirement: !ruby/object:Gem::Requirement
120
+ requirements:
121
+ - - "~>"
122
+ - !ruby/object:Gem::Version
123
+ version: '13.0'
124
+ type: :development
125
+ prerelease: false
126
+ version_requirements: !ruby/object:Gem::Requirement
127
+ requirements:
128
+ - - "~>"
129
+ - !ruby/object:Gem::Version
130
+ version: '13.0'
131
+ - !ruby/object:Gem::Dependency
132
+ name: rspec
133
+ requirement: !ruby/object:Gem::Requirement
134
+ requirements:
135
+ - - "~>"
136
+ - !ruby/object:Gem::Version
137
+ version: '3.10'
138
+ type: :development
139
+ prerelease: false
140
+ version_requirements: !ruby/object:Gem::Requirement
141
+ requirements:
142
+ - - "~>"
143
+ - !ruby/object:Gem::Version
144
+ version: '3.10'
145
+ - !ruby/object:Gem::Dependency
146
+ name: rubocop
147
+ requirement: !ruby/object:Gem::Requirement
148
+ requirements:
149
+ - - '='
150
+ - !ruby/object:Gem::Version
151
+ version: '1.11'
152
+ type: :development
153
+ prerelease: false
154
+ version_requirements: !ruby/object:Gem::Requirement
155
+ requirements:
156
+ - - '='
157
+ - !ruby/object:Gem::Version
158
+ version: '1.11'
159
+ - !ruby/object:Gem::Dependency
160
+ name: rubocop-rake
161
+ requirement: !ruby/object:Gem::Requirement
162
+ requirements:
163
+ - - "~>"
164
+ - !ruby/object:Gem::Version
165
+ version: '0.5'
166
+ type: :development
167
+ prerelease: false
168
+ version_requirements: !ruby/object:Gem::Requirement
169
+ requirements:
170
+ - - "~>"
171
+ - !ruby/object:Gem::Version
172
+ version: '0.5'
173
+ - !ruby/object:Gem::Dependency
174
+ name: rubocop-rspec
175
+ requirement: !ruby/object:Gem::Requirement
176
+ requirements:
177
+ - - "~>"
178
+ - !ruby/object:Gem::Version
179
+ version: '2.2'
180
+ type: :development
181
+ prerelease: false
182
+ version_requirements: !ruby/object:Gem::Requirement
183
+ requirements:
184
+ - - "~>"
185
+ - !ruby/object:Gem::Version
186
+ version: '2.2'
187
+ - !ruby/object:Gem::Dependency
188
+ name: ruby-prof
189
+ requirement: !ruby/object:Gem::Requirement
190
+ requirements:
191
+ - - "~>"
192
+ - !ruby/object:Gem::Version
193
+ version: 0.17.0
194
+ type: :development
195
+ prerelease: false
196
+ version_requirements: !ruby/object:Gem::Requirement
197
+ requirements:
198
+ - - "~>"
199
+ - !ruby/object:Gem::Version
200
+ version: 0.17.0
201
+ - !ruby/object:Gem::Dependency
202
+ name: simplecov
203
+ requirement: !ruby/object:Gem::Requirement
204
+ requirements:
205
+ - - "~>"
206
+ - !ruby/object:Gem::Version
207
+ version: '0.21'
208
+ type: :development
209
+ prerelease: false
210
+ version_requirements: !ruby/object:Gem::Requirement
211
+ requirements:
212
+ - - "~>"
213
+ - !ruby/object:Gem::Version
214
+ version: '0.21'
215
+ - !ruby/object:Gem::Dependency
216
+ name: simplecov-rcov
217
+ requirement: !ruby/object:Gem::Requirement
218
+ requirements:
219
+ - - "~>"
220
+ - !ruby/object:Gem::Version
221
+ version: '0.2'
222
+ type: :development
223
+ prerelease: false
224
+ version_requirements: !ruby/object:Gem::Requirement
225
+ requirements:
226
+ - - "~>"
227
+ - !ruby/object:Gem::Version
228
+ version: '0.2'
229
+ - !ruby/object:Gem::Dependency
230
+ name: webmock
231
+ requirement: !ruby/object:Gem::Requirement
232
+ requirements:
233
+ - - "~>"
234
+ - !ruby/object:Gem::Version
235
+ version: '3.12'
236
+ type: :development
237
+ prerelease: false
238
+ version_requirements: !ruby/object:Gem::Requirement
239
+ requirements:
240
+ - - "~>"
241
+ - !ruby/object:Gem::Version
242
+ version: '3.12'
243
+ description: A gem providing MARC-related utility code and extensions to ruby-marc
244
+ for the UC Berkeley Library
245
+ email: dmoles@berkeley.edu
246
+ executables: []
247
+ extensions: []
248
+ extra_rdoc_files: []
249
+ files:
250
+ - ".github/workflows/build.yml"
251
+ - ".gitignore"
252
+ - ".idea/inspectionProfiles/Project_Default.xml"
253
+ - ".idea/marc.iml"
254
+ - ".idea/misc.xml"
255
+ - ".idea/modules.xml"
256
+ - ".idea/vcs.xml"
257
+ - ".rubocop.yml"
258
+ - ".ruby-version"
259
+ - ".simplecov"
260
+ - ".yardopts"
261
+ - CHANGES.md
262
+ - Dockerfile
263
+ - Gemfile
264
+ - Jenkinsfile
265
+ - LICENSE.md
266
+ - README.md
267
+ - Rakefile
268
+ - berkeley_library-marc.gemspec
269
+ - docker-compose.yml
270
+ - lib/.rubocop.yml
271
+ - lib/berkeley_library/marc.rb
272
+ - lib/berkeley_library/marc/field_info.rb
273
+ - lib/berkeley_library/marc/field_info/ctrl_fields/data/ctrl_fields_standard.txt
274
+ - lib/berkeley_library/marc/field_info/leader/data/leader_standard.txt
275
+ - lib/berkeley_library/marc/field_info/var_fields.rb
276
+ - lib/berkeley_library/marc/field_info/var_fields/data.rb
277
+ - lib/berkeley_library/marc/field_info/var_fields/data/mapping-orig.tsv
278
+ - lib/berkeley_library/marc/field_info/var_fields/data/var_fields_berkeley_9xx.txt
279
+ - lib/berkeley_library/marc/field_info/var_fields/data/var_fields_berkeley_9xx_parsed.rb
280
+ - lib/berkeley_library/marc/field_info/var_fields/data/var_fields_standard.txt
281
+ - lib/berkeley_library/marc/field_info/var_fields/data/var_fields_standard_parsed.rb
282
+ - lib/berkeley_library/marc/field_info/var_fields/data/var_fields_tind_reserved.txt
283
+ - lib/berkeley_library/marc/field_info/var_fields/data/var_fields_tind_reserved_parsed.rb
284
+ - lib/berkeley_library/marc/field_info/var_fields/data/var_fields_ucblit_tind.txt
285
+ - lib/berkeley_library/marc/field_info/var_fields/data/var_fields_ucblit_tind_parsed.rb
286
+ - lib/berkeley_library/marc/field_info/var_fields/ind_def.rb
287
+ - lib/berkeley_library/marc/field_info/var_fields/ind_val_def.rb
288
+ - lib/berkeley_library/marc/field_info/var_fields/instrument_or_voices_code.rb
289
+ - lib/berkeley_library/marc/field_info/var_fields/obsolescible.rb
290
+ - lib/berkeley_library/marc/field_info/var_fields/section.rb
291
+ - lib/berkeley_library/marc/field_info/var_fields/subfield_def.rb
292
+ - lib/berkeley_library/marc/field_info/var_fields/subfield_val.rb
293
+ - lib/berkeley_library/marc/field_info/var_fields/var_field_def.rb
294
+ - lib/berkeley_library/marc/field_info/var_fields/var_field_list.rb
295
+ - lib/berkeley_library/marc/field_info/var_fields/var_field_parser.rb
296
+ - lib/berkeley_library/marc/field_info/var_fields/var_field_transform.rb
297
+ - lib/berkeley_library/marc/module_info.rb
298
+ - lib/marc_extensions.rb
299
+ - lib/marc_extensions/data_field.rb
300
+ - lib/marc_extensions/field_map.rb
301
+ - lib/marc_extensions/record.rb
302
+ - lib/marc_extensions/subfield.rb
303
+ - lib/marc_extensions/xml_reader.rb
304
+ - rakelib/bundle.rake
305
+ - rakelib/coverage.rake
306
+ - rakelib/gem.rake
307
+ - rakelib/rubocop.rake
308
+ - rakelib/spec.rake
309
+ - spec/.rubocop.yml
310
+ - spec/berkeley_library/marc/field_info/var_fields/var_field_def_spec.rb
311
+ - spec/berkeley_library/marc/field_info/var_fields/var_field_parser_spec.rb
312
+ - spec/berkeley_library/marc/field_info/var_fields/var_field_transform_spec.rb
313
+ - spec/berkeley_library/marc/field_info/var_fields_spec.rb
314
+ - spec/data/field_info/vf_046.txt
315
+ - spec/data/field_info/vf_048.txt
316
+ - spec/data/record-187888.xml
317
+ - spec/marc_extensions/data_field_spec.rb
318
+ - spec/marc_extensions/record_spec.rb
319
+ - spec/spec_helper.rb
320
+ homepage: https://github.com/BerkeleyLibrary/marc
321
+ licenses:
322
+ - MIT
323
+ metadata: {}
324
+ post_install_message:
325
+ rdoc_options: []
326
+ require_paths:
327
+ - lib
328
+ required_ruby_version: !ruby/object:Gem::Requirement
329
+ requirements:
330
+ - - ">="
331
+ - !ruby/object:Gem::Version
332
+ version: '2.7'
333
+ required_rubygems_version: !ruby/object:Gem::Requirement
334
+ requirements:
335
+ - - ">="
336
+ - !ruby/object:Gem::Version
337
+ version: '0'
338
+ requirements: []
339
+ rubygems_version: 3.1.6
340
+ signing_key:
341
+ specification_version: 4
342
+ summary: MARC utilities for the UC Berkeley Library
343
+ test_files:
344
+ - spec/.rubocop.yml
345
+ - spec/berkeley_library/marc/field_info/var_fields/var_field_def_spec.rb
346
+ - spec/berkeley_library/marc/field_info/var_fields/var_field_parser_spec.rb
347
+ - spec/berkeley_library/marc/field_info/var_fields/var_field_transform_spec.rb
348
+ - spec/berkeley_library/marc/field_info/var_fields_spec.rb
349
+ - spec/data/field_info/vf_046.txt
350
+ - spec/data/field_info/vf_048.txt
351
+ - spec/data/record-187888.xml
352
+ - spec/marc_extensions/data_field_spec.rb
353
+ - spec/marc_extensions/record_spec.rb
354
+ - spec/spec_helper.rb