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 +4 -4
- data/.github/workflows/build.yml +17 -5
- data/.github/workflows/gem-push.yml +33 -0
- data/.rubocop.yml +222 -1
- data/CHANGES.md +5 -0
- data/Dockerfile +5 -4
- data/README.md +15 -1
- data/berkeley_library-marc.gemspec +9 -9
- data/lib/berkeley_library/marc/field_info/var_fields/obsolescible.rb +1 -1
- data/lib/berkeley_library/marc/field_info/var_fields/subfield_def.rb +1 -1
- data/lib/berkeley_library/marc/field_info/var_fields/var_field_def.rb +2 -2
- data/lib/berkeley_library/marc/module_info.rb +3 -3
- data/lib/marc_extensions/field_map.rb +4 -4
- data/lib/marc_extensions/record.rb +2 -2
- data/rakelib/.rubocop.yml +5 -0
- data/spec/.rubocop.yml +21 -0
- data/spec/berkeley_library/marc/field_info/var_fields/var_field_def_spec.rb +1 -1
- data/spec/berkeley_library/marc/field_info/var_fields/var_field_parser_spec.rb +20 -20
- data/spec/berkeley_library/marc/field_info/var_fields/var_field_transform_spec.rb +1 -1
- data/spec/berkeley_library/marc/field_info/var_fields_spec.rb +9 -7
- data/spec/marc_extensions/data_field_spec.rb +1 -1
- data/spec/marc_extensions/record_spec.rb +11 -13
- data/spec/marc_extensions/xml_reader_spec.rb +15 -18
- metadata +28 -40
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e65fb996c3685c2a6df95cce8aad97cb5d691feb628145c3282030a25cbc614f
|
4
|
+
data.tar.gz: 7514006d6baf02613db35cd6ecd28c2d96df13e130c26a7dfc5615c28e6ce57c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4553db7137cc4bbd44658e8826ac5e01382233a129c62a72e0adcafd1425e70fc1d3fc9c5ee0619eedaa3debd2127f606a650c5b58e5b4840d00dcb9b23d36bd
|
7
|
+
data.tar.gz: 210df0e0c6f3afb9f1d99259444ceb09c8a011af50e5d8924b7767576d3419a1f6ef25c31623231aa9971928c2dead31205e2b5e066833e1d219e37e0e9ac6ab
|
data/.github/workflows/build.yml
CHANGED
@@ -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: [ '
|
9
|
+
ruby: [ '3.3', '3.4' ]
|
10
10
|
runs-on: ${{ matrix.os }}
|
11
11
|
|
12
12
|
steps:
|
13
|
-
-
|
14
|
-
|
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
|
-
|
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/
|
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
data/Dockerfile
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
# =============================================================================
|
2
2
|
# Target: base
|
3
3
|
|
4
|
-
FROM ruby:
|
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
|
33
|
-
RUN gem install bundler -v 2.
|
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 [
|
58
|
+
CMD ["bundle", "exec", "rake"]
|
data/README.md
CHANGED
@@ -1,7 +1,21 @@
|
|
1
1
|
# BerkeleyLibrary::Marc
|
2
2
|
|
3
3
|
[](https://github.com/BerkeleyLibrary/marc/actions/workflows/build.yml)
|
4
|
-
[](https://
|
4
|
+
[](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 = '
|
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::
|
12
|
-
spec.email = BerkeleyLibrary::Marc::ModuleInfo::
|
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', '
|
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', '
|
38
|
-
spec.add_development_dependency 'rubocop-rake', '~> 0.
|
39
|
-
spec.add_development_dependency 'rubocop-rspec', '~>
|
40
|
-
spec.add_development_dependency 'ruby-prof'
|
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
|
@@ -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
|
-
|
12
|
+
AUTHORS = ['David Moles', 'maría a. matienzo'].freeze
|
13
13
|
|
14
14
|
# Author contact email
|
15
|
-
|
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.
|
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
|
48
|
-
.map { |t| @tags[t] }
|
49
|
-
.
|
50
|
-
.flat_map { |x| x }
|
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
|
-
|
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
|
-
|
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)
|
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].
|
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) {
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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)
|
@@ -6,8 +6,8 @@ module BerkeleyLibrary
|
|
6
6
|
module FieldInfo
|
7
7
|
describe VarFields do
|
8
8
|
|
9
|
-
describe
|
10
|
-
let(: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 =
|
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
|
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
|
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
|
-
|
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
|
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
|
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
|
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
|
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
|
25
|
+
it 'freezes each field' do
|
26
26
|
marc_record.freeze
|
27
|
-
marc_record.fields.
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
-
|
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 =
|
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 =
|
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 =
|
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
|
23
|
+
expect(reader.instance_variable_get(:@freeze)).to be(true)
|
22
24
|
end
|
23
25
|
|
24
26
|
it 'accepts keyword arguments' do
|
25
|
-
reader =
|
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
|
29
|
+
expect(reader.instance_variable_get(:@freeze)).to be(true)
|
34
30
|
end
|
35
31
|
end
|
36
32
|
|
37
|
-
describe
|
33
|
+
describe '#read' do
|
38
34
|
it 'reads a file' do
|
39
|
-
reader =
|
40
|
-
expect(reader).to be_a(
|
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 =
|
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 =
|
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.
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
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
|
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
|
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:
|
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: '
|
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.
|
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: []
|