ruby-marc-spec 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (99) hide show
  1. checksums.yaml +7 -0
  2. data/.github/workflows/build.yml +18 -0
  3. data/.gitignore +388 -0
  4. data/.gitmodules +3 -0
  5. data/.idea/codeStyles/codeStyleConfig.xml +5 -0
  6. data/.idea/go.imports.xml +6 -0
  7. data/.idea/inspectionProfiles/Project_Default.xml +23 -0
  8. data/.idea/marc_spec.iml +102 -0
  9. data/.idea/misc.xml +6 -0
  10. data/.idea/modules.xml +8 -0
  11. data/.idea/templateLanguages.xml +6 -0
  12. data/.idea/vcs.xml +7 -0
  13. data/.rubocop.yml +269 -0
  14. data/.ruby-version +1 -0
  15. data/.simplecov +8 -0
  16. data/CHANGES.md +3 -0
  17. data/Gemfile +6 -0
  18. data/LICENSE.md +21 -0
  19. data/README.md +172 -0
  20. data/Rakefile +20 -0
  21. data/lib/.rubocop.yml +5 -0
  22. data/lib/marc/spec/module_info.rb +14 -0
  23. data/lib/marc/spec/parsing/closed_int_range.rb +28 -0
  24. data/lib/marc/spec/parsing/closed_lc_alpha_range.rb +28 -0
  25. data/lib/marc/spec/parsing/parser.rb +213 -0
  26. data/lib/marc/spec/parsing.rb +1 -0
  27. data/lib/marc/spec/queries/al_num_range.rb +105 -0
  28. data/lib/marc/spec/queries/applicable.rb +18 -0
  29. data/lib/marc/spec/queries/character_spec.rb +81 -0
  30. data/lib/marc/spec/queries/comparison_string.rb +45 -0
  31. data/lib/marc/spec/queries/condition.rb +133 -0
  32. data/lib/marc/spec/queries/condition_context.rb +49 -0
  33. data/lib/marc/spec/queries/dsl.rb +80 -0
  34. data/lib/marc/spec/queries/indicator_value.rb +77 -0
  35. data/lib/marc/spec/queries/operator.rb +129 -0
  36. data/lib/marc/spec/queries/part.rb +63 -0
  37. data/lib/marc/spec/queries/position.rb +59 -0
  38. data/lib/marc/spec/queries/position_or_range.rb +27 -0
  39. data/lib/marc/spec/queries/query.rb +94 -0
  40. data/lib/marc/spec/queries/query_executor.rb +52 -0
  41. data/lib/marc/spec/queries/selector.rb +12 -0
  42. data/lib/marc/spec/queries/subfield.rb +88 -0
  43. data/lib/marc/spec/queries/subfield_value.rb +63 -0
  44. data/lib/marc/spec/queries/tag.rb +107 -0
  45. data/lib/marc/spec/queries/transform.rb +154 -0
  46. data/lib/marc/spec/queries.rb +1 -0
  47. data/lib/marc/spec.rb +32 -0
  48. data/rakelib/.rubocop.yml +19 -0
  49. data/rakelib/bundle.rake +8 -0
  50. data/rakelib/coverage.rake +11 -0
  51. data/rakelib/gem.rake +54 -0
  52. data/rakelib/parser_specs/formatter.rb +31 -0
  53. data/rakelib/parser_specs/parser_specs.rb.txt.erb +35 -0
  54. data/rakelib/parser_specs/rule.rb +95 -0
  55. data/rakelib/parser_specs/suite.rb +91 -0
  56. data/rakelib/parser_specs/test.rb +97 -0
  57. data/rakelib/parser_specs.rb +1 -0
  58. data/rakelib/rubocop.rake +18 -0
  59. data/rakelib/spec.rake +27 -0
  60. data/ruby-marc-spec.gemspec +42 -0
  61. data/spec/.rubocop.yml +46 -0
  62. data/spec/README.md +16 -0
  63. data/spec/data/b23161018-sru.xml +182 -0
  64. data/spec/data/sandburg.xml +82 -0
  65. data/spec/generated/char_indicator_spec.rb +174 -0
  66. data/spec/generated/char_spec.rb +113 -0
  67. data/spec/generated/comparison_string_spec.rb +74 -0
  68. data/spec/generated/field_tag_spec.rb +156 -0
  69. data/spec/generated/index_char_spec.rb +669 -0
  70. data/spec/generated/index_indicator_spec.rb +174 -0
  71. data/spec/generated/index_spec.rb +113 -0
  72. data/spec/generated/index_sub_spec_spec.rb +1087 -0
  73. data/spec/generated/indicators_spec.rb +75 -0
  74. data/spec/generated/position_or_range_spec.rb +110 -0
  75. data/spec/generated/sub_spec_spec.rb +208 -0
  76. data/spec/generated/sub_spec_sub_spec_spec.rb +1829 -0
  77. data/spec/generated/subfield_char_spec.rb +405 -0
  78. data/spec/generated/subfield_range_range_spec.rb +48 -0
  79. data/spec/generated/subfield_range_spec.rb +87 -0
  80. data/spec/generated/subfield_range_sub_spec_spec.rb +214 -0
  81. data/spec/generated/subfield_tag_range_spec.rb +477 -0
  82. data/spec/generated/subfield_tag_sub_spec_spec.rb +3216 -0
  83. data/spec/generated/subfield_tag_tag_spec.rb +5592 -0
  84. data/spec/marc/spec/parsing/closed_int_range_spec.rb +49 -0
  85. data/spec/marc/spec/parsing/closed_lc_alpha_range_spec.rb +49 -0
  86. data/spec/marc/spec/parsing/parser_spec.rb +545 -0
  87. data/spec/marc/spec/queries/al_num_range_spec.rb +114 -0
  88. data/spec/marc/spec/queries/character_spec_spec.rb +28 -0
  89. data/spec/marc/spec/queries/comparison_string_spec.rb +28 -0
  90. data/spec/marc/spec/queries/indicator_value_spec.rb +28 -0
  91. data/spec/marc/spec/queries/query_spec.rb +200 -0
  92. data/spec/marc/spec/queries/subfield_spec.rb +92 -0
  93. data/spec/marc/spec/queries/subfield_value_spec.rb +31 -0
  94. data/spec/marc/spec/queries/tag_spec.rb +144 -0
  95. data/spec/marc/spec/queries/transform_spec.rb +459 -0
  96. data/spec/marc_spec_spec.rb +247 -0
  97. data/spec/scratch_spec.rb +112 -0
  98. data/spec/spec_helper.rb +23 -0
  99. metadata +341 -0
@@ -0,0 +1,112 @@
1
+ require 'spec_helper'
2
+ require 'parslet/rig/rspec'
3
+
4
+ # Scratch spec for particular use cases
5
+ module MARC::Spec
6
+ module Parsing
7
+ describe Parser do
8
+ let(:parser) { Parser.new }
9
+ let(:reporter) { Parslet::ErrorReporter::Deepest.new }
10
+
11
+ def try_parse(data, method = :marc_spec)
12
+ sub_parser = parser.send(method)
13
+ expect(sub_parser).to parse(data, trace: true, reporter: reporter)
14
+ sub_parser.parse(data)
15
+ end
16
+
17
+ describe :_comparison_string do
18
+ it 'parses' do
19
+ data = '\\A'
20
+ result = try_parse(data, :_comparison_string)
21
+ puts "#{data}\t#{result.inspect}"
22
+ end
23
+
24
+ it 'handles curly braces' do
25
+ data = '\\}'
26
+ result = try_parse(data, :_comparison_string)
27
+ puts "#{data}\t#{result.inspect}"
28
+ end
29
+
30
+ it 'handles literal backslashes' do
31
+ data = '\\\\'
32
+ result = try_parse(data, :_comparison_string)
33
+ puts "#{data}\t#{result.inspect}"
34
+ end
35
+
36
+ it 'handles other escapes' do
37
+ data = '\\bang\\!'
38
+ result = try_parse(data, :_comparison_string)
39
+ puts "#{data}\t#{result.inspect}"
40
+ end
41
+
42
+ context 'as a sub_term' do
43
+ it 'parses as a sub_term' do
44
+ data = '\\A'
45
+ result = try_parse(data, :sub_term)
46
+ puts "#{data}\t#{result.inspect}"
47
+ end
48
+ end
49
+
50
+ context 'as a sub_term_set' do
51
+ it 'parses as a sub_term_set' do
52
+ data = '\\A'
53
+ result = try_parse(data, :sub_term_set)
54
+ puts "#{data}\t#{result.inspect}"
55
+ end
56
+ end
57
+
58
+ context 'as a sub_spec body' do
59
+ it 'parses as a sub_spec body' do
60
+ data = '{\\A}'
61
+ result = try_parse(data, :sub_spec)
62
+ puts "#{data}\t#{result.inspect}"
63
+ end
64
+
65
+ it 'handles internal curly braces' do
66
+ data = '{\\}}'
67
+ result = try_parse(data, :sub_spec)
68
+ puts "#{data}\t#{result.inspect}"
69
+ end
70
+ end
71
+ end
72
+
73
+ describe :subfield_spec do
74
+ it 'parses' do
75
+ data = '245$a'
76
+ result = try_parse(data, :subfield_spec)
77
+ puts "#{data}\t#{result.inspect}"
78
+ end
79
+
80
+ it 'parses as a sub_term' do
81
+ data = '245$a'
82
+ result = try_parse(data, :sub_term)
83
+ puts "#{data}\t#{result.inspect}"
84
+ end
85
+
86
+ it 'parses as a sub_term_set' do
87
+ data = '245$a'
88
+ result = try_parse(data, :sub_term_set)
89
+ puts "#{data}\t#{result.inspect}"
90
+ end
91
+
92
+ it 'parses as a sub_term_set with an operator' do
93
+ data = '245$a=246$b'
94
+ result = try_parse(data, :sub_term_set)
95
+ puts "#{data}\t#{result.inspect}"
96
+ end
97
+
98
+ it 'parses as a sub_spec body' do
99
+ data = '{245$a}'
100
+ result = try_parse(data, :sub_spec)
101
+ puts "#{data}\t#{result.inspect}"
102
+ end
103
+
104
+ it 'parses a subfield code range' do
105
+ data = '245$1-3'
106
+ result = try_parse(data, :subfield_spec)
107
+ puts "#{data}\t#{result.inspect}"
108
+ end
109
+ end
110
+ end
111
+ end
112
+ end
@@ -0,0 +1,23 @@
1
+ # ------------------------------------------------------------
2
+ # Simplecov
3
+
4
+ require 'colorize'
5
+ require 'simplecov' if ENV['COVERAGE']
6
+
7
+ # ------------------------------------------------------------
8
+ # RSpec
9
+
10
+ RSpec.configure do |config|
11
+ config.color = true
12
+ config.tty = true
13
+ config.formatter = :documentation
14
+ config.mock_with :rspec do |mocks|
15
+ mocks.verify_partial_doubles = true
16
+ end
17
+ config.shared_context_metadata_behavior = :apply_to_host_groups
18
+ end
19
+
20
+ # ------------------------------------------------------------
21
+ # Code under test
22
+
23
+ require 'marc/spec'
metadata ADDED
@@ -0,0 +1,341 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: ruby-marc-spec
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - David Moles
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2021-10-16 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.1'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.1'
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: typesafe_enum
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '0.3'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '0.3'
55
+ - !ruby/object:Gem::Dependency
56
+ name: bundle-audit
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '0.1'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '0.1'
69
+ - !ruby/object:Gem::Dependency
70
+ name: ci_reporter_rspec
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '1.0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '1.0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: colorize
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '0.8'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '0.8'
97
+ - !ruby/object:Gem::Dependency
98
+ name: dotenv
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: '2.7'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: '2.7'
111
+ - !ruby/object:Gem::Dependency
112
+ name: irb
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - "~>"
116
+ - !ruby/object:Gem::Version
117
+ version: '1.2'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - "~>"
123
+ - !ruby/object:Gem::Version
124
+ version: '1.2'
125
+ - !ruby/object:Gem::Dependency
126
+ name: listen
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ version: 3.0.5
132
+ - - "<"
133
+ - !ruby/object:Gem::Version
134
+ version: '3.2'
135
+ type: :development
136
+ prerelease: false
137
+ version_requirements: !ruby/object:Gem::Requirement
138
+ requirements:
139
+ - - ">="
140
+ - !ruby/object:Gem::Version
141
+ version: 3.0.5
142
+ - - "<"
143
+ - !ruby/object:Gem::Version
144
+ version: '3.2'
145
+ - !ruby/object:Gem::Dependency
146
+ name: rake
147
+ requirement: !ruby/object:Gem::Requirement
148
+ requirements:
149
+ - - "~>"
150
+ - !ruby/object:Gem::Version
151
+ version: '13.0'
152
+ type: :development
153
+ prerelease: false
154
+ version_requirements: !ruby/object:Gem::Requirement
155
+ requirements:
156
+ - - "~>"
157
+ - !ruby/object:Gem::Version
158
+ version: '13.0'
159
+ - !ruby/object:Gem::Dependency
160
+ name: rspec
161
+ requirement: !ruby/object:Gem::Requirement
162
+ requirements:
163
+ - - "~>"
164
+ - !ruby/object:Gem::Version
165
+ version: '3.9'
166
+ type: :development
167
+ prerelease: false
168
+ version_requirements: !ruby/object:Gem::Requirement
169
+ requirements:
170
+ - - "~>"
171
+ - !ruby/object:Gem::Version
172
+ version: '3.9'
173
+ - !ruby/object:Gem::Dependency
174
+ name: rubocop
175
+ requirement: !ruby/object:Gem::Requirement
176
+ requirements:
177
+ - - "~>"
178
+ - !ruby/object:Gem::Version
179
+ version: 0.91.0
180
+ type: :development
181
+ prerelease: false
182
+ version_requirements: !ruby/object:Gem::Requirement
183
+ requirements:
184
+ - - "~>"
185
+ - !ruby/object:Gem::Version
186
+ version: 0.91.0
187
+ - !ruby/object:Gem::Dependency
188
+ name: simplecov
189
+ requirement: !ruby/object:Gem::Requirement
190
+ requirements:
191
+ - - "~>"
192
+ - !ruby/object:Gem::Version
193
+ version: 0.16.1
194
+ type: :development
195
+ prerelease: false
196
+ version_requirements: !ruby/object:Gem::Requirement
197
+ requirements:
198
+ - - "~>"
199
+ - !ruby/object:Gem::Version
200
+ version: 0.16.1
201
+ - !ruby/object:Gem::Dependency
202
+ name: simplecov-rcov
203
+ requirement: !ruby/object:Gem::Requirement
204
+ requirements:
205
+ - - "~>"
206
+ - !ruby/object:Gem::Version
207
+ version: '0.2'
208
+ type: :development
209
+ prerelease: false
210
+ version_requirements: !ruby/object:Gem::Requirement
211
+ requirements:
212
+ - - "~>"
213
+ - !ruby/object:Gem::Version
214
+ version: '0.2'
215
+ description: An implementation of the MARCspec query language for Ruby and ruby-marc
216
+ email: dmoles@berkeley.edu
217
+ executables: []
218
+ extensions: []
219
+ extra_rdoc_files: []
220
+ files:
221
+ - ".github/workflows/build.yml"
222
+ - ".gitignore"
223
+ - ".gitmodules"
224
+ - ".idea/codeStyles/codeStyleConfig.xml"
225
+ - ".idea/go.imports.xml"
226
+ - ".idea/inspectionProfiles/Project_Default.xml"
227
+ - ".idea/marc_spec.iml"
228
+ - ".idea/misc.xml"
229
+ - ".idea/modules.xml"
230
+ - ".idea/templateLanguages.xml"
231
+ - ".idea/vcs.xml"
232
+ - ".rubocop.yml"
233
+ - ".ruby-version"
234
+ - ".simplecov"
235
+ - CHANGES.md
236
+ - Gemfile
237
+ - LICENSE.md
238
+ - README.md
239
+ - Rakefile
240
+ - lib/.rubocop.yml
241
+ - lib/marc/spec.rb
242
+ - lib/marc/spec/module_info.rb
243
+ - lib/marc/spec/parsing.rb
244
+ - lib/marc/spec/parsing/closed_int_range.rb
245
+ - lib/marc/spec/parsing/closed_lc_alpha_range.rb
246
+ - lib/marc/spec/parsing/parser.rb
247
+ - lib/marc/spec/queries.rb
248
+ - lib/marc/spec/queries/al_num_range.rb
249
+ - lib/marc/spec/queries/applicable.rb
250
+ - lib/marc/spec/queries/character_spec.rb
251
+ - lib/marc/spec/queries/comparison_string.rb
252
+ - lib/marc/spec/queries/condition.rb
253
+ - lib/marc/spec/queries/condition_context.rb
254
+ - lib/marc/spec/queries/dsl.rb
255
+ - lib/marc/spec/queries/indicator_value.rb
256
+ - lib/marc/spec/queries/operator.rb
257
+ - lib/marc/spec/queries/part.rb
258
+ - lib/marc/spec/queries/position.rb
259
+ - lib/marc/spec/queries/position_or_range.rb
260
+ - lib/marc/spec/queries/query.rb
261
+ - lib/marc/spec/queries/query_executor.rb
262
+ - lib/marc/spec/queries/selector.rb
263
+ - lib/marc/spec/queries/subfield.rb
264
+ - lib/marc/spec/queries/subfield_value.rb
265
+ - lib/marc/spec/queries/tag.rb
266
+ - lib/marc/spec/queries/transform.rb
267
+ - rakelib/.rubocop.yml
268
+ - rakelib/bundle.rake
269
+ - rakelib/coverage.rake
270
+ - rakelib/gem.rake
271
+ - rakelib/parser_specs.rb
272
+ - rakelib/parser_specs/formatter.rb
273
+ - rakelib/parser_specs/parser_specs.rb.txt.erb
274
+ - rakelib/parser_specs/rule.rb
275
+ - rakelib/parser_specs/suite.rb
276
+ - rakelib/parser_specs/test.rb
277
+ - rakelib/rubocop.rake
278
+ - rakelib/spec.rake
279
+ - ruby-marc-spec.gemspec
280
+ - spec/.rubocop.yml
281
+ - spec/README.md
282
+ - spec/data/b23161018-sru.xml
283
+ - spec/data/sandburg.xml
284
+ - spec/generated/char_indicator_spec.rb
285
+ - spec/generated/char_spec.rb
286
+ - spec/generated/comparison_string_spec.rb
287
+ - spec/generated/field_tag_spec.rb
288
+ - spec/generated/index_char_spec.rb
289
+ - spec/generated/index_indicator_spec.rb
290
+ - spec/generated/index_spec.rb
291
+ - spec/generated/index_sub_spec_spec.rb
292
+ - spec/generated/indicators_spec.rb
293
+ - spec/generated/position_or_range_spec.rb
294
+ - spec/generated/sub_spec_spec.rb
295
+ - spec/generated/sub_spec_sub_spec_spec.rb
296
+ - spec/generated/subfield_char_spec.rb
297
+ - spec/generated/subfield_range_range_spec.rb
298
+ - spec/generated/subfield_range_spec.rb
299
+ - spec/generated/subfield_range_sub_spec_spec.rb
300
+ - spec/generated/subfield_tag_range_spec.rb
301
+ - spec/generated/subfield_tag_sub_spec_spec.rb
302
+ - spec/generated/subfield_tag_tag_spec.rb
303
+ - spec/marc/spec/parsing/closed_int_range_spec.rb
304
+ - spec/marc/spec/parsing/closed_lc_alpha_range_spec.rb
305
+ - spec/marc/spec/parsing/parser_spec.rb
306
+ - spec/marc/spec/queries/al_num_range_spec.rb
307
+ - spec/marc/spec/queries/character_spec_spec.rb
308
+ - spec/marc/spec/queries/comparison_string_spec.rb
309
+ - spec/marc/spec/queries/indicator_value_spec.rb
310
+ - spec/marc/spec/queries/query_spec.rb
311
+ - spec/marc/spec/queries/subfield_spec.rb
312
+ - spec/marc/spec/queries/subfield_value_spec.rb
313
+ - spec/marc/spec/queries/tag_spec.rb
314
+ - spec/marc/spec/queries/transform_spec.rb
315
+ - spec/marc_spec_spec.rb
316
+ - spec/scratch_spec.rb
317
+ - spec/spec_helper.rb
318
+ homepage: https://github.com/BerkeleyLibrary/marc-spec
319
+ licenses:
320
+ - MIT
321
+ metadata: {}
322
+ post_install_message:
323
+ rdoc_options: []
324
+ require_paths:
325
+ - lib
326
+ required_ruby_version: !ruby/object:Gem::Requirement
327
+ requirements:
328
+ - - ">="
329
+ - !ruby/object:Gem::Version
330
+ version: '2.7'
331
+ required_rubygems_version: !ruby/object:Gem::Requirement
332
+ requirements:
333
+ - - ">="
334
+ - !ruby/object:Gem::Version
335
+ version: '0'
336
+ requirements: []
337
+ rubygems_version: 3.1.4
338
+ signing_key:
339
+ specification_version: 4
340
+ summary: MARCspec for Ruby
341
+ test_files: []