berkeley_library-marc 0.3.1 → 0.3.2

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 79af51b1f4eafdf2e0513feba8d3770d17f4deedbf06338d53546227946220e5
4
- data.tar.gz: 8e75143bfa04241f2ef4cfcf5c7a3ec8e966d56d7e53acf1c699f02ae8cb4fc9
3
+ metadata.gz: e65fb996c3685c2a6df95cce8aad97cb5d691feb628145c3282030a25cbc614f
4
+ data.tar.gz: 7514006d6baf02613db35cd6ecd28c2d96df13e130c26a7dfc5615c28e6ce57c
5
5
  SHA512:
6
- metadata.gz: 75edae26fe5286775dd5913138a7ce67af8148d05c775c2c419aeda457a83e0cdd7f951297b0567af735b5b7c863b1d28c1348cad73e4b3761c2fcc6b8df55ac
7
- data.tar.gz: b2f038b42bd85e7804d6163c1db865327f7f924542336e92326965319b2066bc5689649e4f3c1b527ec112b85e38e75c897811bdebf6d1fdbcf929baff11831a
6
+ metadata.gz: 4553db7137cc4bbd44658e8826ac5e01382233a129c62a72e0adcafd1425e70fc1d3fc9c5ee0619eedaa3debd2127f606a650c5b58e5b4840d00dcb9b23d36bd
7
+ data.tar.gz: 210df0e0c6f3afb9f1d99259444ceb09c8a011af50e5d8924b7767576d3419a1f6ef25c31623231aa9971928c2dead31205e2b5e066833e1d219e37e0e9ac6ab
@@ -1,18 +1,30 @@
1
1
  name: Build
2
- on: [ push, pull_request ]
2
+ on: [ push, pull_request, workflow_dispatch ]
3
3
  jobs:
4
4
  test:
5
5
  strategy:
6
6
  fail-fast: false
7
7
  matrix:
8
8
  os: [ ubuntu-latest, macos-latest ]
9
- ruby: [ '2.7', '3.0' ]
9
+ ruby: [ '3.3', '3.4' ]
10
10
  runs-on: ${{ matrix.os }}
11
11
 
12
12
  steps:
13
- - uses: actions/checkout@v2
14
- - uses: ruby/setup-ruby@v1
13
+ - name: Check out repository
14
+ uses: actions/checkout@v3
15
+
16
+ - name: Set up Ruby
17
+ uses: ruby/setup-ruby@v1
15
18
  with:
16
19
  ruby-version: ${{ matrix.ruby }}
17
20
  bundler-cache: true # runs 'bundle install' and caches installed gems automatically
18
- - run: bundle exec rake
21
+
22
+ - name: Run checks
23
+ run: bundle exec rake
24
+
25
+ - name: Upload artifacts
26
+ if: ${{ always() }}
27
+ uses: actions/upload-artifact@v4
28
+ with:
29
+ name: artifacts-${{ matrix.ruby }}-${{ matrix.os }}
30
+ path: artifacts/**
@@ -0,0 +1,33 @@
1
+ name: Ruby Gem
2
+
3
+ on:
4
+ release:
5
+ types: [published]
6
+
7
+ jobs:
8
+ build:
9
+ name: Build + Publish
10
+ runs-on: ubuntu-latest
11
+ permissions:
12
+ contents: read
13
+ packages: write
14
+
15
+ steps:
16
+ - uses: actions/checkout@v3
17
+
18
+ - name: Set up Ruby
19
+ uses: ruby/setup-ruby@v1
20
+ with:
21
+ ruby-version: '3.3'
22
+ bundler-cache: true
23
+
24
+ - name: Publish to RubyGems
25
+ run: |
26
+ mkdir -p $HOME/.gem
27
+ touch $HOME/.gem/credentials
28
+ chmod 0600 $HOME/.gem/credentials
29
+ printf -- "---\n:rubygems_api_key: ${GEM_HOST_API_KEY}\n" > $HOME/.gem/credentials
30
+ gem build *.gemspec
31
+ gem push *.gem
32
+ env:
33
+ GEM_HOST_API_KEY: "${{secrets.RUBYGEMS_AUTH_TOKEN}}"
data/.rubocop.yml CHANGED
@@ -328,7 +328,228 @@ Style/SwapValues: # (new in 1.1)
328
328
  ############################################################
329
329
  # Added in RuboCop 1.10
330
330
 
331
- Gemspec/DateAssignment: # (new in 1.10)
331
+ Gemspec/DeprecatedAttributeAssignment: # (new in 1.10)
332
332
  Enabled: true
333
333
  Style/HashConversion: # (new in 1.10)
334
334
  Enabled: true
335
+
336
+ Gemspec/AddRuntimeDependency: # new in 1.65
337
+ Enabled: true
338
+ Gemspec/AttributeAssignment: # new in 1.77
339
+ Enabled: true
340
+ Gemspec/DevelopmentDependencies: # new in 1.44
341
+ Enabled: false
342
+ Gemspec/RequireMFA: # new in 1.23
343
+ Enabled: true
344
+ Layout/LineContinuationLeadingSpace: # new in 1.31
345
+ Enabled: true
346
+ Layout/LineContinuationSpacing: # new in 1.31
347
+ Enabled: true
348
+ Layout/LineEndStringConcatenationIndentation: # new in 1.18
349
+ Enabled: true
350
+ Lint/AmbiguousOperatorPrecedence: # new in 1.21
351
+ Enabled: true
352
+ Lint/AmbiguousRange: # new in 1.19
353
+ Enabled: true
354
+ Lint/ArrayLiteralInRegexp: # new in 1.71
355
+ Enabled: true
356
+ Lint/ConstantOverwrittenInRescue: # new in 1.31
357
+ Enabled: true
358
+ Lint/ConstantReassignment: # new in 1.70
359
+ Enabled: true
360
+ Lint/CopDirectiveSyntax: # new in 1.72
361
+ Enabled: true
362
+ Lint/DuplicateMagicComment: # new in 1.37
363
+ Enabled: true
364
+ Lint/DuplicateMatchPattern: # new in 1.50
365
+ Enabled: true
366
+ Lint/DuplicateSetElement: # new in 1.67
367
+ Enabled: true
368
+ Lint/EmptyInPattern: # new in 1.16
369
+ Enabled: true
370
+ Lint/HashNewWithKeywordArgumentsAsDefault: # new in 1.69
371
+ Enabled: true
372
+ Lint/IncompatibleIoSelectWithFiberScheduler: # new in 1.21
373
+ Enabled: true
374
+ Lint/ItWithoutArgumentsInBlock: # new in 1.59
375
+ Enabled: true
376
+ Lint/LiteralAssignmentInCondition: # new in 1.58
377
+ Enabled: true
378
+ Lint/MixedCaseRange: # new in 1.53
379
+ Enabled: true
380
+ Lint/NonAtomicFileOperation: # new in 1.31
381
+ Enabled: true
382
+ Lint/NumericOperationWithConstantResult: # new in 1.69
383
+ Enabled: true
384
+ Lint/RedundantRegexpQuantifiers: # new in 1.53
385
+ Enabled: true
386
+ Lint/RedundantTypeConversion: # new in 1.72
387
+ Enabled: true
388
+ Lint/RefinementImportMethods: # new in 1.27
389
+ Enabled: true
390
+ Lint/RequireRangeParentheses: # new in 1.32
391
+ Enabled: true
392
+ Lint/RequireRelativeSelfPath: # new in 1.22
393
+ Enabled: true
394
+ Lint/SharedMutableDefault: # new in 1.70
395
+ Enabled: true
396
+ Lint/SuppressedExceptionInNumberConversion: # new in 1.72
397
+ Enabled: true
398
+ Lint/UnescapedBracketInRegexp: # new in 1.68
399
+ Enabled: true
400
+ Lint/UselessConstantScoping: # new in 1.72
401
+ Enabled: true
402
+ Lint/UselessDefaultValueArgument: # new in 1.76
403
+ Enabled: true
404
+ Lint/UselessDefined: # new in 1.69
405
+ Enabled: true
406
+ Lint/UselessNumericOperation: # new in 1.66
407
+ Enabled: true
408
+ Lint/UselessOr: # new in 1.76
409
+ Enabled: true
410
+ Lint/UselessRescue: # new in 1.43
411
+ Enabled: true
412
+ Lint/UselessRuby2Keywords: # new in 1.23
413
+ Enabled: true
414
+ Metrics/CollectionLiteralLength: # new in 1.47
415
+ Enabled: true
416
+ Naming/BlockForwarding: # new in 1.24
417
+ Enabled: true
418
+ Naming/PredicateMethod: # new in 1.76
419
+ Enabled: true
420
+ Security/CompoundHash: # new in 1.28
421
+ Enabled: true
422
+ Security/IoMethods: # new in 1.22
423
+ Enabled: true
424
+ Style/AmbiguousEndlessMethodDefinition: # new in 1.68
425
+ Enabled: true
426
+ Style/ArrayIntersect: # new in 1.40
427
+ Enabled: true
428
+ Style/BitwisePredicate: # new in 1.68
429
+ Enabled: true
430
+ Style/CollectionQuerying: # new in 1.77
431
+ Enabled: true
432
+ Style/CombinableDefined: # new in 1.68
433
+ Enabled: true
434
+ Style/ComparableBetween: # new in 1.74
435
+ Enabled: true
436
+ Style/ComparableClamp: # new in 1.44
437
+ Enabled: true
438
+ Style/ConcatArrayLiterals: # new in 1.41
439
+ Enabled: true
440
+ Style/DataInheritance: # new in 1.49
441
+ Enabled: true
442
+ Style/DigChain: # new in 1.69
443
+ Enabled: true
444
+ Style/DirEmpty: # new in 1.48
445
+ Enabled: true
446
+ Style/EmptyHeredoc: # new in 1.32
447
+ Enabled: true
448
+ Style/EmptyStringInsideInterpolation: # new in 1.76
449
+ Enabled: true
450
+ Style/EnvHome: # new in 1.29
451
+ Enabled: true
452
+ Style/ExactRegexpMatch: # new in 1.51
453
+ Enabled: true
454
+ Style/FetchEnvVar: # new in 1.28
455
+ Enabled: true
456
+ Style/FileEmpty: # new in 1.48
457
+ Enabled: true
458
+ Style/FileNull: # new in 1.69
459
+ Enabled: true
460
+ Style/FileRead: # new in 1.24
461
+ Enabled: true
462
+ Style/FileTouch: # new in 1.69
463
+ Enabled: true
464
+ Style/FileWrite: # new in 1.24
465
+ Enabled: true
466
+ Style/HashFetchChain: # new in 1.75
467
+ Enabled: true
468
+ Style/HashSlice: # new in 1.71
469
+ Enabled: true
470
+ Style/InPatternThen: # new in 1.16
471
+ Enabled: true
472
+ Style/ItAssignment: # new in 1.70
473
+ Enabled: true
474
+ Style/ItBlockParameter: # new in 1.75
475
+ Enabled: true
476
+ Style/KeywordArgumentsMerging: # new in 1.68
477
+ Enabled: true
478
+ Style/MagicCommentFormat: # new in 1.35
479
+ Enabled: true
480
+ Style/MapCompactWithConditionalBlock: # new in 1.30
481
+ Enabled: true
482
+ Style/MapIntoArray: # new in 1.63
483
+ Enabled: true
484
+ Style/MapToHash: # new in 1.24
485
+ Enabled: true
486
+ Style/MapToSet: # new in 1.42
487
+ Enabled: true
488
+ Style/MinMaxComparison: # new in 1.42
489
+ Enabled: true
490
+ Style/MultilineInPatternThen: # new in 1.16
491
+ Enabled: true
492
+ Style/NestedFileDirname: # new in 1.26
493
+ Enabled: true
494
+ Style/NumberedParameters: # new in 1.22
495
+ Enabled: true
496
+ Style/NumberedParametersLimit: # new in 1.22
497
+ Enabled: true
498
+ Style/ObjectThen: # new in 1.28
499
+ Enabled: true
500
+ Style/OpenStructUse: # new in 1.23
501
+ Enabled: true
502
+ Style/OperatorMethodCall: # new in 1.37
503
+ Enabled: true
504
+ Style/QuotedSymbols: # new in 1.16
505
+ Enabled: true
506
+ Style/RedundantArrayConstructor: # new in 1.52
507
+ Enabled: true
508
+ Style/RedundantArrayFlatten: # new in 1.76
509
+ Enabled: true
510
+ Style/RedundantConstantBase: # new in 1.40
511
+ Enabled: true
512
+ Style/RedundantCurrentDirectoryInPath: # new in 1.53
513
+ Enabled: true
514
+ Style/RedundantDoubleSplatHashBraces: # new in 1.41
515
+ Enabled: true
516
+ Style/RedundantEach: # new in 1.38
517
+ Enabled: true
518
+ Style/RedundantFilterChain: # new in 1.52
519
+ Enabled: true
520
+ Style/RedundantFormat: # new in 1.72
521
+ Enabled: true
522
+ Style/RedundantHeredocDelimiterQuotes: # new in 1.45
523
+ Enabled: true
524
+ Style/RedundantInitialize: # new in 1.27
525
+ Enabled: true
526
+ Style/RedundantInterpolationUnfreeze: # new in 1.66
527
+ Enabled: true
528
+ Style/RedundantLineContinuation: # new in 1.49
529
+ Enabled: true
530
+ Style/RedundantRegexpArgument: # new in 1.53
531
+ Enabled: true
532
+ Style/RedundantRegexpConstructor: # new in 1.52
533
+ Enabled: true
534
+ Style/RedundantSelfAssignmentBranch: # new in 1.19
535
+ Enabled: true
536
+ Style/RedundantStringEscape: # new in 1.37
537
+ Enabled: true
538
+ Style/ReturnNilInPredicateMethodDefinition: # new in 1.53
539
+ Enabled: true
540
+ Style/SafeNavigationChainLength: # new in 1.68
541
+ Enabled: true
542
+ Style/SelectByRegexp: # new in 1.22
543
+ Enabled: true
544
+ Style/SendWithLiteralMethodName: # new in 1.64
545
+ Enabled: true
546
+ Style/SingleLineDoEndBlock: # new in 1.57
547
+ Enabled: true
548
+ Style/StringChars: # new in 1.12
549
+ Enabled: true
550
+ Style/SuperArguments: # new in 1.64
551
+ Enabled: true
552
+ Style/SuperWithArgsParentheses: # new in 1.58
553
+ Enabled: true
554
+ Style/YAMLFileRead: # new in 1.53
555
+ Enabled: true
data/CHANGES.md CHANGED
@@ -1,3 +1,8 @@
1
+ # 0.3.2 (2025-07-23)
2
+
3
+ - Update to support Ruby 3.3+.
4
+ - Update Rubocop & style changes.
5
+
1
6
  # 0.3.1 (2022-01-26)
2
7
 
3
8
  - Fixes issue where `MARC::XMLReader#new` and `MARC::XMLReader#read` would
data/Dockerfile CHANGED
@@ -1,7 +1,7 @@
1
1
  # =============================================================================
2
2
  # Target: base
3
3
 
4
- FROM ruby:2.7-alpine AS base
4
+ FROM ruby:3.3-alpine AS base
5
5
 
6
6
  RUN apk --no-cache --update upgrade && \
7
7
  apk --no-cache add \
@@ -12,6 +12,7 @@ RUN apk --no-cache --update upgrade && \
12
12
  openssl \
13
13
  tzdata \
14
14
  xz-libs \
15
+ yaml-dev \
15
16
  && rm -rf /var/cache/apk/*
16
17
 
17
18
  WORKDIR /opt/app
@@ -29,8 +30,8 @@ RUN apk --update --no-cache add \
29
30
  git \
30
31
  && rm -rf /var/cache/apk/*
31
32
 
32
- # The base image ships bundler 1.17.2, but we want something more recent
33
- RUN gem install bundler -v 2.1.4
33
+ # The base image ships an older bundler, so we want something more recent
34
+ RUN gem install bundler -v 2.5.22
34
35
 
35
36
  # Copy codebase to WORKDIR. Unlike application projects, for a gem project
36
37
  # we need to do this before running `bundle install`, in order for the gem
@@ -54,4 +55,4 @@ COPY --from=development /usr/local/bundle /usr/local/bundle
54
55
  RUN bundle config set deployment 'true'
55
56
  RUN bundle install --local --path=/usr/local/bundle
56
57
 
57
- CMD ['bundle', 'exec', 'rake']
58
+ CMD ["bundle", "exec", "rake"]
data/README.md CHANGED
@@ -1,7 +1,21 @@
1
1
  # BerkeleyLibrary::Marc
2
2
 
3
3
  [![Build Status](https://github.com/BerkeleyLibrary/marc/actions/workflows/build.yml/badge.svg?branch=main)](https://github.com/BerkeleyLibrary/marc/actions/workflows/build.yml)
4
- [![Gem Version](https://img.shields.io/gem/v/berkeley_library-marc.svg)](https://github.com/BerkeleyLibrary/marc/releases)
4
+ [![Gem Version](https://img.shields.io/gem/v/berkeley_library-marc.svg)](https://rubygems.org/gems/berkeley_library-marc)
5
5
 
6
6
  MARC-related utility code and opinionated extensions to [ruby-marc](https://github.com/ruby-marc/ruby-marc)
7
7
  for the UC Berkeley Library.
8
+
9
+ ## Installation
10
+
11
+ In your Gemfile:
12
+
13
+ ```ruby
14
+ gem 'berkeley_library-marc'
15
+ ```
16
+
17
+ In your code:
18
+
19
+ ```ruby
20
+ require 'berkeley_library/marc'
21
+ ```
@@ -2,14 +2,14 @@ File.expand_path('lib', __dir__).tap do |lib|
2
2
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
3
3
  end
4
4
 
5
- ruby_version = '>= 2.7'
5
+ ruby_version = '~> 3.3'
6
6
 
7
7
  require 'berkeley_library/marc/module_info'
8
8
 
9
9
  Gem::Specification.new do |spec|
10
10
  spec.name = BerkeleyLibrary::Marc::ModuleInfo::NAME
11
- spec.author = BerkeleyLibrary::Marc::ModuleInfo::AUTHOR
12
- spec.email = BerkeleyLibrary::Marc::ModuleInfo::AUTHOR_EMAIL
11
+ spec.author = BerkeleyLibrary::Marc::ModuleInfo::AUTHORS
12
+ spec.email = BerkeleyLibrary::Marc::ModuleInfo::AUTHOR_EMAILS
13
13
  spec.summary = BerkeleyLibrary::Marc::ModuleInfo::SUMMARY
14
14
  spec.description = BerkeleyLibrary::Marc::ModuleInfo::DESCRIPTION
15
15
  spec.license = BerkeleyLibrary::Marc::ModuleInfo::LICENSE
@@ -17,7 +17,6 @@ Gem::Specification.new do |spec|
17
17
  spec.homepage = BerkeleyLibrary::Marc::ModuleInfo::HOMEPAGE
18
18
 
19
19
  spec.files = `git ls-files -z`.split("\x0")
20
- spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
21
20
  spec.require_paths = ['lib']
22
21
 
23
22
  spec.required_ruby_version = ruby_version
@@ -30,15 +29,16 @@ Gem::Specification.new do |spec|
30
29
  spec.add_development_dependency 'ci_reporter_rspec', '~> 1.0'
31
30
  spec.add_development_dependency 'colorize', '~> 0.8'
32
31
  spec.add_development_dependency 'dotenv', '~> 2.7'
33
- spec.add_development_dependency 'listen', '>= 3.0.5', '< 3.2'
32
+ spec.add_development_dependency 'listen', '~> 3.2'
34
33
  spec.add_development_dependency 'nokogiri', '~> 1.13'
35
34
  spec.add_development_dependency 'rake', '~> 13.0'
36
35
  spec.add_development_dependency 'rspec', '~> 3.10'
37
- spec.add_development_dependency 'rubocop', '= 1.11'
38
- spec.add_development_dependency 'rubocop-rake', '~> 0.5'
39
- spec.add_development_dependency 'rubocop-rspec', '~> 2.2'
40
- spec.add_development_dependency 'ruby-prof', '~> 0.17.0'
36
+ spec.add_development_dependency 'rubocop', '~> 1.78.0'
37
+ spec.add_development_dependency 'rubocop-rake', '~> 0.7.0'
38
+ spec.add_development_dependency 'rubocop-rspec', '~> 3.6.0'
39
+ spec.add_development_dependency 'ruby-prof'
41
40
  spec.add_development_dependency 'simplecov', '~> 0.21'
42
41
  spec.add_development_dependency 'simplecov-rcov', '~> 0.2'
43
42
  spec.add_development_dependency 'yard', '~> 0.9.27'
43
+ spec.metadata['rubygems_mfa_required'] = 'true'
44
44
  end
@@ -12,7 +12,7 @@ module BerkeleyLibrary
12
12
  # it as obsolete, false otherwise
13
13
  # @return [Boolean] true if obsolete, false otherwise
14
14
  def obsolete?
15
- return unless respond_to?(:desc)
15
+ return false unless respond_to?(:desc)
16
16
 
17
17
  desc&.include?(OBSOLETE)
18
18
  end
@@ -43,7 +43,7 @@ module BerkeleyLibrary
43
43
  # see Object#to_s
44
44
  def to_s
45
45
  lines = ["$#{code_str} - #{desc}"]
46
- values.each { |v| lines << INDENT + v.to_s }
46
+ values.each { |v| lines << (INDENT + v.to_s) }
47
47
  lines.join("\n")
48
48
  end
49
49
 
@@ -51,10 +51,10 @@ module BerkeleyLibrary
51
51
  def concat_indented(blocks, values, header)
52
52
  return if values.empty?
53
53
 
54
- blocks << INDENT + header
54
+ blocks << (INDENT + header)
55
55
  values.each do |v|
56
56
  lines = v.to_s.lines(chomp: true)
57
- lines.each { |line| blocks << INDENT + INDENT + line }
57
+ lines.each { |line| blocks << (INDENT + INDENT + line) }
58
58
  end
59
59
  end
60
60
 
@@ -9,10 +9,10 @@ module BerkeleyLibrary
9
9
  NAME = 'berkeley_library-marc'.freeze
10
10
 
11
11
  # The author
12
- AUTHOR = 'David Moles'.freeze
12
+ AUTHORS = ['David Moles', 'maría a. matienzo'].freeze
13
13
 
14
14
  # Author contact email
15
- AUTHOR_EMAIL = 'dmoles@berkeley.edu'.freeze
15
+ AUTHOR_EMAILS = ['dmoles@berkeley.edu', 'matienzo@berkeley.edu'].freeze
16
16
 
17
17
  # Gem summary
18
18
  SUMMARY = 'MARC utilities for the UC Berkeley Library'.freeze
@@ -24,7 +24,7 @@ module BerkeleyLibrary
24
24
  LICENSE = 'MIT'.freeze
25
25
 
26
26
  # Gem version
27
- VERSION = '0.3.1'.freeze
27
+ VERSION = '0.3.2'.freeze
28
28
 
29
29
  # Gem homepage
30
30
  HOMEPAGE = 'https://github.com/BerkeleyLibrary/marc'.freeze
@@ -44,10 +44,10 @@ module MARCExtensions
44
44
 
45
45
  def indices_for(tags)
46
46
  sorted_tag_array(tags || tag_list)
47
- .lazy # prevent unnecessary allocations
48
- .map { |t| @tags[t] } # get indices for each tag
49
- .reject(&:nil?) # ignoring any tags we don't have fields for
50
- .flat_map { |x| x } # flatten list of indices -- equiv. Array#flatten
47
+ .lazy # prevent unnecessary allocations
48
+ .map { |t| @tags[t] } # get indices for each tag
49
+ .compact # ignoring any tags we don't have fields for
50
+ .flat_map { |x| x } # flatten list of indices -- equiv. Array#flatten
51
51
  end
52
52
 
53
53
  def sorted_tag_array(tags)
@@ -88,14 +88,14 @@ module MARCExtensions
88
88
  # Whether this record, its fields, and leader are all frozen.
89
89
  # @return [Boolean] true if the fields and leader are frozen
90
90
  def frozen?
91
- (fields.frozen? && leader.frozen?) && super
91
+ fields.frozen? && leader.frozen? && super
92
92
  end
93
93
 
94
94
  # Returns the canonical ID from the 001 control field.
95
95
  # @return [String, nil] the 001 control field value, or nil if not present
96
96
  def record_id
97
97
  cf_001 = self['001']
98
- return cf_001.value if cf_001
98
+ cf_001.value if cf_001
99
99
  end
100
100
 
101
101
  # Apply the provided [MARCSpec](http://marcspec.github.io/MARCspec/marc-spec.html)
@@ -0,0 +1,5 @@
1
+ inherit_from: ../.rubocop.yml
2
+
3
+ plugins:
4
+ - rubocop-rake
5
+
data/spec/.rubocop.yml CHANGED
@@ -1,5 +1,8 @@
1
1
  inherit_from: ../.rubocop.yml
2
2
 
3
+ plugins:
4
+ - rubocop-rspec
5
+
3
6
  AllCops:
4
7
  # Exclude generated files
5
8
  Exclude:
@@ -29,6 +32,24 @@ Metrics/ModuleLength:
29
32
  Metrics/MethodLength:
30
33
  Enabled: false
31
34
 
35
+ RSpec/ExampleLength:
36
+ Exclude:
37
+ - 'berkeley_library/marc/field_info/**/*.rb'
38
+ - 'marc_extensions/*.rb'
39
+
40
+ RSpec/RepeatedExampleGroupDescription:
41
+ Exclude:
42
+ - 'berkeley_library/marc/field_info/**/*.rb'
43
+
44
+ RSpec/MultipleExpectations:
45
+ Exclude:
46
+ - 'berkeley_library/marc/field_info/**/*.rb'
47
+ - 'marc_extensions/*.rb'
48
+
49
+ RSpec/SpecFilePathFormat:
50
+ Exclude:
51
+ - 'marc_extensions/*.rb'
52
+
32
53
  ############################################################
33
54
  # Added in Rubocop 0.89
34
55
 
@@ -6,7 +6,7 @@ module BerkeleyLibrary
6
6
  module VarFields
7
7
  describe VarFieldDef do
8
8
  describe 'to_s' do
9
- let(:fields) { %w[046 048].map { |t| [t, VarFields.standard.find { |vf| vf.tag == t }] }.to_h }
9
+ let(:fields) { %w[046 048].to_h { |t| [t, VarFields.standard.find { |vf| vf.tag == t }] } }
10
10
 
11
11
  it 'returns something like an EBCDList' do
12
12
  aggregate_failures('to_s') do
@@ -8,10 +8,10 @@ module BerkeleyLibrary
8
8
  module FieldInfo
9
9
  module VarFields
10
10
  describe VarFieldParser do
11
- let(:parser) { VarFieldParser.new }
11
+ let(:parser) { described_class.new }
12
12
  let(:printable_chars) { [0x21..0x3f, 0x5b..0x7b, 0x7d..0x7e].map(&:to_a).flatten.map { |cp| cp.chr(Encoding::UTF_8) } }
13
13
 
14
- describe(:blank) do
14
+ describe '#blank' do
15
15
  it 'matches space' do
16
16
  expect(parser.blank).to parse(' ', trace: true)
17
17
  end
@@ -21,7 +21,7 @@ module BerkeleyLibrary
21
21
  end
22
22
  end
23
23
 
24
- describe(:printable) do
24
+ describe '#printable' do
25
25
  it 'matches space' do
26
26
  expect(parser.printable).to parse(' ', trace: true)
27
27
  end
@@ -42,7 +42,7 @@ module BerkeleyLibrary
42
42
  end
43
43
  end
44
44
 
45
- describe(:text) do
45
+ describe '#text' do
46
46
  it 'matches text' do
47
47
  expect(parser.text).to parse('Undefined', trace: true)
48
48
  end
@@ -61,7 +61,7 @@ module BerkeleyLibrary
61
61
  end
62
62
  end
63
63
 
64
- describe(:ln_br) do
64
+ describe '#ln_br' do
65
65
  it 'matches a Windows line break' do
66
66
  expect(parser.ln_br).to parse("\r\n", trace: true)
67
67
  end
@@ -74,7 +74,7 @@ module BerkeleyLibrary
74
74
  end
75
75
  end
76
76
 
77
- describe(:eol) do
77
+ describe '#eol' do
78
78
  it 'matches a newline' do
79
79
  expect(parser.eol).to parse("\n", trace: true)
80
80
  end
@@ -84,13 +84,13 @@ module BerkeleyLibrary
84
84
  end
85
85
  end
86
86
 
87
- describe(:text) do
87
+ describe '#text' do
88
88
  it 'matches an ASCII printable sequence' do
89
89
  expect(parser.text).to parse(printable_chars.join, trace: true)
90
90
  end
91
91
  end
92
92
 
93
- describe(:comment) do
93
+ describe '#comment' do
94
94
  it 'matches a comment' do
95
95
  expect(parser.comment).to parse('// this is a comment', trace: true)
96
96
  end
@@ -100,7 +100,7 @@ module BerkeleyLibrary
100
100
  end
101
101
  end
102
102
 
103
- describe(:nc) do
103
+ describe '#nc' do
104
104
  it 'matches a comment' do
105
105
  expect(parser.nc).to parse('// this is a comment', trace: true)
106
106
  end
@@ -138,7 +138,7 @@ module BerkeleyLibrary
138
138
  end
139
139
  end
140
140
 
141
- describe(:ind_def) do
141
+ describe '#ind_def' do
142
142
  it 'parses an indicator definition' do
143
143
  ind_def = '0 - No added entry'
144
144
  expect(parser.ind_def).to parse(ind_def, trace: true)
@@ -155,7 +155,7 @@ module BerkeleyLibrary
155
155
  end
156
156
  end
157
157
 
158
- describe(:indicators) do
158
+ describe '#indicators' do
159
159
  it 'matches an empty indicator definition' do
160
160
  ind_def = <<~TXT.strip
161
161
  Indicators
@@ -240,7 +240,7 @@ module BerkeleyLibrary
240
240
  end
241
241
  end
242
242
 
243
- describe(:subfield_value) do
243
+ describe '#subfield_value' do
244
244
  it 'parses a single-character value' do
245
245
  expect(parser.subfield_value).to parse('1 - Form of name', trace: true)
246
246
  end
@@ -250,7 +250,7 @@ module BerkeleyLibrary
250
250
  end
251
251
  end
252
252
 
253
- describe(:subfield_def) do
253
+ describe '#subfield_def' do
254
254
  it 'parses a subfield code definition without values' do
255
255
  subfield_def = '$4 - Relationship (R)'
256
256
  expect(parser.subfield_def).to parse(subfield_def, trace: true)
@@ -276,7 +276,7 @@ module BerkeleyLibrary
276
276
  end
277
277
  end
278
278
 
279
- describe(:subfield_codes) do
279
+ describe '#subfield_codes' do
280
280
  it 'parses a typical set of subfield codes' do
281
281
  subfield_codes = <<~TXT.strip
282
282
  Subfield Codes
@@ -315,7 +315,7 @@ module BerkeleyLibrary
315
315
  end
316
316
  end
317
317
 
318
- describe(:ivc_def) do
318
+ describe '#ivc_def' do
319
319
  it 'parses instrument or voices codes' do
320
320
  ivc_def = <<~TXT.strip
321
321
  Instrument or Voices Codes
@@ -328,7 +328,7 @@ module BerkeleyLibrary
328
328
  end
329
329
  end
330
330
 
331
- describe(:vf) do
331
+ describe '#vf' do
332
332
  it 'parses a typical field' do
333
333
  vf = <<~TXT.strip
334
334
  886 - FOREIGN MARC INFORMATION FIELD (R)
@@ -396,13 +396,13 @@ module BerkeleyLibrary
396
396
  end
397
397
  end
398
398
 
399
- describe(:section_header) do
399
+ describe '#section_header' do
400
400
  it 'matches a section header' do
401
401
  expect(parser.section_header).to parse('--Number and Code Fields (01X-04X)--', trace: true)
402
402
  end
403
403
  end
404
404
 
405
- describe(:section) do
405
+ describe '#section' do
406
406
  it 'matches a section with header' do
407
407
  section = <<~TXT.strip
408
408
  --Number and Code Fields (01X-04X)--
@@ -460,7 +460,7 @@ module BerkeleyLibrary
460
460
  end
461
461
  end
462
462
 
463
- describe(:list) do
463
+ describe '#list' do
464
464
  it 'parses multiple sections' do
465
465
  sections = <<~TXT.strip
466
466
  --Number and Code Fields (01X-04X)--
@@ -510,7 +510,7 @@ module BerkeleyLibrary
510
510
 
511
511
  end
512
512
 
513
- describe(:parse) do
513
+ describe '#parse' do
514
514
  it 'parses the standard list' do
515
515
  list = File.read(VarFields::PATH_STANDARD)
516
516
  expect(parser).to parse(list, trace: true)
@@ -127,7 +127,7 @@ module BerkeleyLibrary
127
127
  ]
128
128
  }
129
129
  end
130
- let(:xform) { VarFieldTransform.new }
130
+ let(:xform) { described_class.new }
131
131
 
132
132
  it 'transforms a comment' do
133
133
  comment = { comment: 'A doc comment' }
@@ -6,8 +6,8 @@ module BerkeleyLibrary
6
6
  module FieldInfo
7
7
  describe VarFields do
8
8
 
9
- describe :standard do
10
- let(:standard) { VarFields.standard }
9
+ describe '#standard' do
10
+ let(:standard) { described_class.standard }
11
11
 
12
12
  it 'loads all standard fields' do
13
13
  expect(standard).to be_a(VarFields::VarFieldList)
@@ -59,7 +59,7 @@ module BerkeleyLibrary
59
59
  end
60
60
 
61
61
  it 'returns obsolete fields with a flag' do
62
- lines_actual = VarFields.standard(obsolete: true).to_s.lines(chomp: true).map(&:strip)
62
+ lines_actual = described_class.standard(obsolete: true).to_s.lines(chomp: true).map(&:strip)
63
63
 
64
64
  var_fields_standard_txt = File.read('lib/berkeley_library/marc/field_info/var_fields/data/var_fields_standard.txt')
65
65
  lines_expected = var_fields_standard_txt
@@ -70,7 +70,7 @@ module BerkeleyLibrary
70
70
  expect(lines_actual.size).to eq(lines_expected.size)
71
71
  lines_expected.each_with_index do |l_ex, i|
72
72
  # typo in standard.txt definition of 880 subfields
73
- l_ex = l_ex.sub('Same', '- Same') if i >= 5052 && i <= 5056
73
+ l_ex = l_ex.sub('Same', '- Same') if i.between?(5052, 5056)
74
74
  expect(lines_actual[i]).to eq(l_ex), "Wrong value at line #{i}:\n\texpected: #{l_ex}, actual: #{lines_actual[i]}"
75
75
  end
76
76
  end
@@ -78,7 +78,7 @@ module BerkeleyLibrary
78
78
  end
79
79
 
80
80
  describe 'custom fields' do
81
- describe :berkeley_9xx do
81
+ describe '#berkeley_9xx' do
82
82
  let(:berkeley_9xx) { VarFields.berkeley_9xx }
83
83
 
84
84
  it 'loads all berkeley_9xx fields' do
@@ -88,7 +88,8 @@ module BerkeleyLibrary
88
88
  end
89
89
 
90
90
  # TODO: get these working
91
- xdescribe :tind_reserved do
91
+ # rubocop:disable RSpec/PendingWithoutReason
92
+ xdescribe '#tind_reserved' do
92
93
  let(:tind_reserved) { VarFields.tind_reserved }
93
94
 
94
95
  it 'loads all tind_reserved fields' do
@@ -97,7 +98,7 @@ module BerkeleyLibrary
97
98
  end
98
99
  end
99
100
 
100
- xdescribe :berkeley_tind do
101
+ xdescribe '#berkeley_tind' do
101
102
  let(:berkeley_tind) { VarFields.berkeley_tind }
102
103
 
103
104
  it 'loads all berkeley_tind fields' do
@@ -105,6 +106,7 @@ module BerkeleyLibrary
105
106
  expect(berkeley_tind.size).to eq(9) # TODO: more assertions
106
107
  end
107
108
  end
109
+ # rubocop:enable RSpec/PendingWithoutReason
108
110
 
109
111
  end
110
112
  end
@@ -3,7 +3,7 @@ require 'spec_helper'
3
3
  describe MARC::DataField do
4
4
  let(:marc_record) { MARC::XMLReader.read('spec/data/record-187888.xml').first }
5
5
 
6
- describe :subfield_codes do
6
+ describe '#subfield_codes' do
7
7
  it 'returns the subfield codes in order' do
8
8
  expected_codes = %w[y 9 s u]
9
9
 
@@ -3,13 +3,13 @@ require 'spec_helper'
3
3
  describe MARC::Record do
4
4
  let(:marc_record) { MARC::XMLReader.read('spec/data/record-187888.xml').first }
5
5
 
6
- describe :record_id do
6
+ describe '#record_id' do
7
7
  it 'returns the 001 control field value, if present' do
8
8
  expect(marc_record.record_id).to eq('187888')
9
9
  end
10
10
  end
11
11
 
12
- describe :freeze do
12
+ describe '#freeze' do
13
13
  it 'freezes the fields' do
14
14
  expect(marc_record.fields).not_to be_frozen # just to be sure
15
15
  marc_record.freeze
@@ -22,11 +22,9 @@ describe MARC::Record do
22
22
  expect(marc_record.leader).to be_frozen
23
23
  end
24
24
 
25
- it 'freezes the fields' do
25
+ it 'freezes each field' do
26
26
  marc_record.freeze
27
- marc_record.fields.each do |df|
28
- expect(df).to be_frozen
29
- end
27
+ expect(marc_record.fields).to all(be_frozen)
30
28
  end
31
29
 
32
30
  it 'does not clobber the data' do
@@ -36,7 +34,7 @@ describe MARC::Record do
36
34
  end
37
35
  end
38
36
 
39
- describe :data_fields do
37
+ describe '#data_fields' do
40
38
  it 'returns only the data fields' do
41
39
  expected_tags = %w[024 035 245 336 505 505 505 505 505 505 540 852 856 856 901 902 902 980 982 991]
42
40
  dff = marc_record.data_fields
@@ -73,7 +71,7 @@ describe MARC::Record do
73
71
  end
74
72
  end
75
73
 
76
- describe :each_data_field do
74
+ describe '#each_data_field' do
77
75
  it 'returns only the data fields, in order' do
78
76
  each_data_field = marc_record.each_data_field
79
77
  expect(each_data_field.to_a).to eq(marc_record.data_fields)
@@ -103,7 +101,7 @@ describe MARC::Record do
103
101
  end
104
102
  end
105
103
 
106
- describe :each_sorted_by_tag do
104
+ describe '#each_sorted_by_tag' do
107
105
  let(:tags) do
108
106
  %w[856 852] # NOTE: not sorted
109
107
  end
@@ -144,7 +142,7 @@ describe MARC::Record do
144
142
  end
145
143
  end
146
144
 
147
- describe :data_fields_by_tag do
145
+ describe '#data_fields_by_tag' do
148
146
  it 'groups fields by tag' do
149
147
  fields = marc_record.fields
150
148
 
@@ -172,7 +170,7 @@ describe MARC::Record do
172
170
  end
173
171
  end
174
172
 
175
- describe :each_sorted_by_tag do
173
+ describe '#each_sorted_by_tag' do
176
174
  it 'returns all tags if not passed a tag list' do
177
175
  fields = marc_record.fields
178
176
 
@@ -186,7 +184,7 @@ describe MARC::Record do
186
184
  end
187
185
  end
188
186
 
189
- describe :each_control_field do
187
+ describe '#each_control_field' do
190
188
  it 'returns only the control fields' do
191
189
  expected_tags = %w[001 005]
192
190
  cff = marc_record.each_control_field.to_a
@@ -205,7 +203,7 @@ describe MARC::Record do
205
203
  end
206
204
  end
207
205
 
208
- describe :spec do
206
+ describe '#spec' do
209
207
  it 'returns the results of a MARCSpec query' do
210
208
  query_str = '856$u{$y~\2}'
211
209
 
@@ -1,50 +1,46 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  module MARC
4
+ # rubocop:disable RSpec/RepeatedExample,RSpec/MultipleExpectations
4
5
  describe XMLReader do
5
6
  let(:infile_path) { 'spec/data/record-187888.xml' }
6
- describe :new do
7
+
8
+ describe '#new' do
7
9
  # not our first choice, but it's the ruby-marc default behavior
8
10
  it 'returns a REXMLParser by default' do
9
- reader = XMLReader.new(infile_path)
11
+ reader = described_class.new(infile_path)
10
12
  expect(reader).to be_a(REXMLReader)
11
13
  end
12
14
 
13
15
  it 'works with Nokogiri' do
14
- reader = XMLReader.new(infile_path, { parser: 'nokogiri' })
16
+ reader = described_class.new(infile_path, { parser: 'nokogiri' })
15
17
  expect(reader).to be_a(NokogiriReader)
16
18
  end
17
19
 
18
20
  it 'accepts a hash of options' do
19
- reader = XMLReader.new(infile_path, { parser: 'nokogiri', freeze: true })
21
+ reader = described_class.new(infile_path, { parser: 'nokogiri', freeze: true })
20
22
  expect(reader).to be_a(NokogiriReader)
21
- expect(reader.instance_variable_get(:@freeze)).to eq(true)
23
+ expect(reader.instance_variable_get(:@freeze)).to be(true)
22
24
  end
23
25
 
24
26
  it 'accepts keyword arguments' do
25
- reader = XMLReader.new(infile_path, parser: 'nokogiri', freeze: true)
26
- expect(reader).to be_a(NokogiriReader)
27
- expect(reader.instance_variable_get(:@freeze)).to eq(true)
28
- end
29
-
30
- it 'accepts a hash of options' do
31
- reader = XMLReader.new(infile_path, { parser: 'nokogiri', freeze: true })
27
+ reader = described_class.new(infile_path, parser: 'nokogiri', freeze: true)
32
28
  expect(reader).to be_a(NokogiriReader)
33
- expect(reader.instance_variable_get(:@freeze)).to eq(true)
29
+ expect(reader.instance_variable_get(:@freeze)).to be(true)
34
30
  end
35
31
  end
36
32
 
37
- describe :read do
33
+ describe '#read' do
38
34
  it 'reads a file' do
39
- reader = XMLReader.read(infile_path)
40
- expect(reader).to be_a(MARC::XMLReader)
35
+ reader = described_class.read(infile_path)
36
+ expect(reader).to be_a(described_class)
41
37
  record = reader.first
42
38
  expect(record).to be_a(MARC::Record)
43
39
  end
44
40
 
45
41
  describe 'freeze: true' do
46
42
  it 'works with REXML' do
47
- reader = XMLReader.read(infile_path, { parser: 'rexml', freeze: true })
43
+ reader = described_class.read(infile_path, { parser: 'rexml', freeze: true })
48
44
  expect(reader).to be_a(MARC::REXMLReader)
49
45
  record = reader.first
50
46
  expect(record).to be_a(MARC::Record)
@@ -52,7 +48,7 @@ module MARC
52
48
  end
53
49
 
54
50
  it 'works with Nokogiri' do
55
- reader = XMLReader.read(infile_path, { parser: 'nokogiri', freeze: true })
51
+ reader = described_class.read(infile_path, { parser: 'nokogiri', freeze: true })
56
52
  expect(reader).to be_a(MARC::NokogiriReader)
57
53
  record = reader.first
58
54
  expect(record).to be_a(MARC::Record)
@@ -62,4 +58,5 @@ module MARC
62
58
 
63
59
  end
64
60
  end
61
+ # rubocop:enable RSpec/RepeatedExample,RSpec/MultipleExpectations
65
62
  end
metadata CHANGED
@@ -1,14 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: berkeley_library-marc
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.1
4
+ version: 0.3.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - David Moles
8
+ - maría a. matienzo
8
9
  autorequire:
9
10
  bindir: bin
10
11
  cert_chain: []
11
- date: 2022-01-26 00:00:00.000000000 Z
12
+ date: 2025-07-23 00:00:00.000000000 Z
12
13
  dependencies:
13
14
  - !ruby/object:Gem::Dependency
14
15
  name: marc
@@ -112,20 +113,14 @@ dependencies:
112
113
  name: listen
113
114
  requirement: !ruby/object:Gem::Requirement
114
115
  requirements:
115
- - - ">="
116
- - !ruby/object:Gem::Version
117
- version: 3.0.5
118
- - - "<"
116
+ - - "~>"
119
117
  - !ruby/object:Gem::Version
120
118
  version: '3.2'
121
119
  type: :development
122
120
  prerelease: false
123
121
  version_requirements: !ruby/object:Gem::Requirement
124
122
  requirements:
125
- - - ">="
126
- - !ruby/object:Gem::Version
127
- version: 3.0.5
128
- - - "<"
123
+ - - "~>"
129
124
  - !ruby/object:Gem::Version
130
125
  version: '3.2'
131
126
  - !ruby/object:Gem::Dependency
@@ -174,58 +169,58 @@ dependencies:
174
169
  name: rubocop
175
170
  requirement: !ruby/object:Gem::Requirement
176
171
  requirements:
177
- - - '='
172
+ - - "~>"
178
173
  - !ruby/object:Gem::Version
179
- version: '1.11'
174
+ version: 1.78.0
180
175
  type: :development
181
176
  prerelease: false
182
177
  version_requirements: !ruby/object:Gem::Requirement
183
178
  requirements:
184
- - - '='
179
+ - - "~>"
185
180
  - !ruby/object:Gem::Version
186
- version: '1.11'
181
+ version: 1.78.0
187
182
  - !ruby/object:Gem::Dependency
188
183
  name: rubocop-rake
189
184
  requirement: !ruby/object:Gem::Requirement
190
185
  requirements:
191
186
  - - "~>"
192
187
  - !ruby/object:Gem::Version
193
- version: '0.5'
188
+ version: 0.7.0
194
189
  type: :development
195
190
  prerelease: false
196
191
  version_requirements: !ruby/object:Gem::Requirement
197
192
  requirements:
198
193
  - - "~>"
199
194
  - !ruby/object:Gem::Version
200
- version: '0.5'
195
+ version: 0.7.0
201
196
  - !ruby/object:Gem::Dependency
202
197
  name: rubocop-rspec
203
198
  requirement: !ruby/object:Gem::Requirement
204
199
  requirements:
205
200
  - - "~>"
206
201
  - !ruby/object:Gem::Version
207
- version: '2.2'
202
+ version: 3.6.0
208
203
  type: :development
209
204
  prerelease: false
210
205
  version_requirements: !ruby/object:Gem::Requirement
211
206
  requirements:
212
207
  - - "~>"
213
208
  - !ruby/object:Gem::Version
214
- version: '2.2'
209
+ version: 3.6.0
215
210
  - !ruby/object:Gem::Dependency
216
211
  name: ruby-prof
217
212
  requirement: !ruby/object:Gem::Requirement
218
213
  requirements:
219
- - - "~>"
214
+ - - ">="
220
215
  - !ruby/object:Gem::Version
221
- version: 0.17.0
216
+ version: '0'
222
217
  type: :development
223
218
  prerelease: false
224
219
  version_requirements: !ruby/object:Gem::Requirement
225
220
  requirements:
226
- - - "~>"
221
+ - - ">="
227
222
  - !ruby/object:Gem::Version
228
- version: 0.17.0
223
+ version: '0'
229
224
  - !ruby/object:Gem::Dependency
230
225
  name: simplecov
231
226
  requirement: !ruby/object:Gem::Requirement
@@ -270,12 +265,15 @@ dependencies:
270
265
  version: 0.9.27
271
266
  description: A gem providing MARC-related utility code and extensions to ruby-marc
272
267
  for the UC Berkeley Library
273
- email: dmoles@berkeley.edu
268
+ email:
269
+ - dmoles@berkeley.edu
270
+ - matienzo@berkeley.edu
274
271
  executables: []
275
272
  extensions: []
276
273
  extra_rdoc_files: []
277
274
  files:
278
275
  - ".github/workflows/build.yml"
276
+ - ".github/workflows/gem-push.yml"
279
277
  - ".gitignore"
280
278
  - ".idea/inspectionProfiles/Project_Default.xml"
281
279
  - ".idea/marc.iml"
@@ -329,6 +327,7 @@ files:
329
327
  - lib/marc_extensions/record.rb
330
328
  - lib/marc_extensions/subfield.rb
331
329
  - lib/marc_extensions/xml_reader.rb
330
+ - rakelib/.rubocop.yml
332
331
  - rakelib/bundle.rake
333
332
  - rakelib/coverage.rake
334
333
  - rakelib/gem.rake
@@ -349,36 +348,25 @@ files:
349
348
  homepage: https://github.com/BerkeleyLibrary/marc
350
349
  licenses:
351
350
  - MIT
352
- metadata: {}
351
+ metadata:
352
+ rubygems_mfa_required: 'true'
353
353
  post_install_message:
354
354
  rdoc_options: []
355
355
  require_paths:
356
356
  - lib
357
357
  required_ruby_version: !ruby/object:Gem::Requirement
358
358
  requirements:
359
- - - ">="
359
+ - - "~>"
360
360
  - !ruby/object:Gem::Version
361
- version: '2.7'
361
+ version: '3.3'
362
362
  required_rubygems_version: !ruby/object:Gem::Requirement
363
363
  requirements:
364
364
  - - ">="
365
365
  - !ruby/object:Gem::Version
366
366
  version: '0'
367
367
  requirements: []
368
- rubygems_version: 3.1.6
368
+ rubygems_version: 3.5.22
369
369
  signing_key:
370
370
  specification_version: 4
371
371
  summary: MARC utilities for the UC Berkeley Library
372
- test_files:
373
- - spec/.rubocop.yml
374
- - spec/berkeley_library/marc/field_info/var_fields/var_field_def_spec.rb
375
- - spec/berkeley_library/marc/field_info/var_fields/var_field_parser_spec.rb
376
- - spec/berkeley_library/marc/field_info/var_fields/var_field_transform_spec.rb
377
- - spec/berkeley_library/marc/field_info/var_fields_spec.rb
378
- - spec/data/field_info/vf_046.txt
379
- - spec/data/field_info/vf_048.txt
380
- - spec/data/record-187888.xml
381
- - spec/marc_extensions/data_field_spec.rb
382
- - spec/marc_extensions/record_spec.rb
383
- - spec/marc_extensions/xml_reader_spec.rb
384
- - spec/spec_helper.rb
372
+ test_files: []