cocina-models 0.106.0 → 0.107.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.rubocop.yml +19 -2
- data/Gemfile.lock +7 -7
- data/cocina-models.gemspec +1 -1
- data/lib/cocina/generator/schema_base.rb +1 -1
- data/lib/cocina/models/builders/title_builder.rb +1 -0
- data/lib/cocina/models/checkable.rb +5 -5
- data/lib/cocina/models/mapping/to_mods/subject.rb +2 -2
- data/lib/cocina/models/validatable.rb +2 -2
- data/lib/cocina/models/validators/catalog_links_validator.rb +2 -2
- data/lib/cocina/models/validators/dark_validator.rb +1 -1
- data/lib/cocina/models/validators/description_values_validator.rb +12 -4
- data/lib/cocina/models/validators/language_tag_validator.rb +1 -1
- data/lib/cocina/models/validators/reserved_filename_validator.rb +1 -1
- data/lib/cocina/models/version.rb +1 -1
- data/lib/cocina/rspec/factories.rb +6 -6
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5274bff6327cebe2e04f7cc145fde055203131ae9885b4f654ff83dbbbe57408
|
4
|
+
data.tar.gz: 2cf28892860fdf3eb011a54aaaf4f6a25663f85cf66b8a1b15280b4165fe52f3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 46b42f34df5bf8aba16f2d47110f8d81ae5f1be62b0b5aeda6fba9898b911540788a6f9ff23318cc7e0870a6c57a8dc95a14b50ced333628ef6f703fd842872f
|
7
|
+
data.tar.gz: a769621283a3433cebb98fff0e3a872f21016050e38770932af0aafc1634993631d31e50bddc58cc0720c6002fcaa9ae48fac840aa6042f39d55a745c6a7ec0b
|
data/.rubocop.yml
CHANGED
@@ -6,7 +6,7 @@ plugins:
|
|
6
6
|
- rubocop-rspec
|
7
7
|
|
8
8
|
AllCops:
|
9
|
-
TargetRubyVersion: 3.
|
9
|
+
TargetRubyVersion: 3.4
|
10
10
|
|
11
11
|
# ----- Layout ------
|
12
12
|
|
@@ -110,7 +110,7 @@ Metrics/PerceivedComplexity:
|
|
110
110
|
- 'lib/cocina/models/mapping/to_mods/*'
|
111
111
|
- 'lib/cocina/models/mapping/normalizers/**/*'
|
112
112
|
|
113
|
-
Naming/
|
113
|
+
Naming/PredicatePrefix:
|
114
114
|
ForbiddenPrefixes:
|
115
115
|
- is_
|
116
116
|
|
@@ -521,3 +521,20 @@ Style/ItBlockParameter: # new in 1.75
|
|
521
521
|
Enabled: true
|
522
522
|
RSpec/IncludeExamples: # new in 3.6
|
523
523
|
Enabled: true
|
524
|
+
|
525
|
+
Gemspec/AttributeAssignment: # new in 1.77
|
526
|
+
Enabled: true
|
527
|
+
Layout/EmptyLinesAfterModuleInclusion: # new in 1.79
|
528
|
+
Enabled: true
|
529
|
+
Lint/UselessDefaultValueArgument: # new in 1.76
|
530
|
+
Enabled: true
|
531
|
+
Lint/UselessOr: # new in 1.76
|
532
|
+
Enabled: true
|
533
|
+
Naming/PredicateMethod: # new in 1.76
|
534
|
+
Enabled: true
|
535
|
+
Style/CollectionQuerying: # new in 1.77
|
536
|
+
Enabled: true
|
537
|
+
Style/EmptyStringInsideInterpolation: # new in 1.76
|
538
|
+
Enabled: true
|
539
|
+
Style/RedundantArrayFlatten: # new in 1.76
|
540
|
+
Enabled: true
|
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
cocina-models (0.
|
4
|
+
cocina-models (0.107.0)
|
5
5
|
activesupport
|
6
6
|
deprecation
|
7
7
|
dry-struct (~> 1.0)
|
@@ -19,7 +19,7 @@ PATH
|
|
19
19
|
GEM
|
20
20
|
remote: https://rubygems.org/
|
21
21
|
specs:
|
22
|
-
activesupport (8.0.
|
22
|
+
activesupport (8.0.3)
|
23
23
|
base64
|
24
24
|
benchmark (>= 0.3)
|
25
25
|
bigdecimal
|
@@ -78,7 +78,7 @@ GEM
|
|
78
78
|
i18n (1.14.7)
|
79
79
|
concurrent-ruby (~> 1.0)
|
80
80
|
ice_nine (0.11.2)
|
81
|
-
json (2.
|
81
|
+
json (2.15.0)
|
82
82
|
json_schema (0.21.0)
|
83
83
|
jsonpath (1.1.5)
|
84
84
|
multi_json
|
@@ -117,10 +117,10 @@ GEM
|
|
117
117
|
rspec-mocks (3.13.5)
|
118
118
|
diff-lcs (>= 1.2.0, < 2.0)
|
119
119
|
rspec-support (~> 3.13.0)
|
120
|
-
rspec-support (3.13.
|
120
|
+
rspec-support (3.13.6)
|
121
121
|
rspec_junit_formatter (0.6.0)
|
122
122
|
rspec-core (>= 2, < 4, != 2.12.0)
|
123
|
-
rubocop (1.
|
123
|
+
rubocop (1.81.1)
|
124
124
|
json (~> 2.3)
|
125
125
|
language_server-protocol (~> 3.17.0.2)
|
126
126
|
lint_roller (~> 1.1.0)
|
@@ -128,10 +128,10 @@ GEM
|
|
128
128
|
parser (>= 3.3.0.2)
|
129
129
|
rainbow (>= 2.2.2, < 4.0)
|
130
130
|
regexp_parser (>= 2.9.3, < 3.0)
|
131
|
-
rubocop-ast (>= 1.
|
131
|
+
rubocop-ast (>= 1.47.1, < 2.0)
|
132
132
|
ruby-progressbar (~> 1.7)
|
133
133
|
unicode-display_width (>= 2.4.0, < 4.0)
|
134
|
-
rubocop-ast (1.
|
134
|
+
rubocop-ast (1.47.1)
|
135
135
|
parser (>= 3.3.7.2)
|
136
136
|
prism (~> 1.4)
|
137
137
|
rubocop-rake (0.7.1)
|
data/cocina-models.gemspec
CHANGED
@@ -22,7 +22,7 @@ Gem::Specification.new do |spec|
|
|
22
22
|
spec.bindir = 'exe'
|
23
23
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
24
24
|
spec.require_paths = ['lib']
|
25
|
-
spec.required_ruby_version = '>= 3.
|
25
|
+
spec.required_ruby_version = '>= 3.4'
|
26
26
|
|
27
27
|
spec.add_dependency 'activesupport'
|
28
28
|
spec.add_dependency 'deprecation'
|
@@ -8,6 +8,7 @@ module Cocina
|
|
8
8
|
# TitleBuilder selects the prefered title from the cocina object for solr indexing
|
9
9
|
class TitleBuilder # rubocop:disable Metrics/ClassLength
|
10
10
|
extend Deprecation
|
11
|
+
|
11
12
|
# @param [Array<Cocina::Models::Title,Cocina::Models::DescriptiveValue>] titles the titles to consider
|
12
13
|
# @param [Array<Cocina::Models::FolioCatalogLink>] catalog_links the folio catalog links to check for digital serials part labels
|
13
14
|
# @param [Symbol] strategy ":first" is the strategy for selection when primary or display
|
@@ -5,23 +5,23 @@ module Cocina
|
|
5
5
|
# A common interface for interrogating a model instance's type
|
6
6
|
module Checkable
|
7
7
|
def admin_policy?
|
8
|
-
|
8
|
+
self.class::TYPES.intersect?(AdminPolicy::TYPES)
|
9
9
|
end
|
10
10
|
|
11
11
|
def collection?
|
12
|
-
|
12
|
+
self.class::TYPES.intersect?(Collection::TYPES)
|
13
13
|
end
|
14
14
|
|
15
15
|
def dro?
|
16
|
-
|
16
|
+
self.class::TYPES.intersect?(DRO::TYPES)
|
17
17
|
end
|
18
18
|
|
19
19
|
def file?
|
20
|
-
|
20
|
+
self.class::TYPES.intersect?(File::TYPES)
|
21
21
|
end
|
22
22
|
|
23
23
|
def file_set?
|
24
|
-
|
24
|
+
self.class::TYPES.intersect?(FileSet::TYPES)
|
25
25
|
end
|
26
26
|
end
|
27
27
|
end
|
@@ -91,8 +91,8 @@ module Cocina
|
|
91
91
|
|
92
92
|
def geographic_and_geographic_code?(subject, subject_values)
|
93
93
|
subject.type == 'place' &&
|
94
|
-
subject_values.
|
95
|
-
subject_values.
|
94
|
+
subject_values.one?(&:value) &&
|
95
|
+
subject_values.one?(&:code)
|
96
96
|
end
|
97
97
|
|
98
98
|
# rubocop:disable Metrics/CyclomaticComplexity
|
@@ -7,9 +7,9 @@ module Cocina
|
|
7
7
|
extend ActiveSupport::Concern
|
8
8
|
|
9
9
|
class_methods do
|
10
|
-
def new(attributes = default_attributes, safe = false, validate = true, &
|
10
|
+
def new(attributes = default_attributes, safe = false, validate = true, &)
|
11
11
|
Validators::Validator.validate(self, attributes) if validate
|
12
|
-
super(attributes, safe, &
|
12
|
+
super(attributes, safe, &)
|
13
13
|
end
|
14
14
|
end
|
15
15
|
|
@@ -61,13 +61,13 @@ module Cocina
|
|
61
61
|
end
|
62
62
|
|
63
63
|
def dro?
|
64
|
-
|
64
|
+
clazz::TYPES.intersect?(DRO::TYPES)
|
65
65
|
rescue NameError
|
66
66
|
false
|
67
67
|
end
|
68
68
|
|
69
69
|
def collection?
|
70
|
-
|
70
|
+
clazz::TYPES.intersect?(Collection::TYPES)
|
71
71
|
rescue NameError
|
72
72
|
false
|
73
73
|
end
|
@@ -62,22 +62,30 @@ module Cocina
|
|
62
62
|
end
|
63
63
|
|
64
64
|
def validate_values_for_multiples(hash, path)
|
65
|
-
return unless hash.count { |key, value| %
|
65
|
+
return unless hash.count { |key, value| %w[value groupedValue structuredValue parallelValue].include?(key) && value.present? } > 1
|
66
66
|
|
67
67
|
error_paths_multiple << path_to_s(path)
|
68
68
|
end
|
69
69
|
|
70
70
|
def validate_title_type(hash, path)
|
71
71
|
# only apply to title.structuredValue, title.parallelValue.structuredValue, or relatedResource.title with a value
|
72
|
-
return unless hash[:value] && (path
|
72
|
+
return unless hash[:value] && (structured_value_title?(path) || related_resource_title?(path))
|
73
73
|
|
74
74
|
# if there is a "value" key, make sure there is also a "type" key, only for title.structuredValue
|
75
75
|
error_paths_missing_title_type << path_to_s(path) unless hash[:type]
|
76
76
|
end
|
77
77
|
|
78
78
|
def related_resource_title?(path)
|
79
|
-
# title is
|
80
|
-
path
|
79
|
+
# title is within relatedResource, e.g ["relatedResource", 0, "title", 0, "structuredValue", 0])
|
80
|
+
structured_value_path = path[4] == 'structuredValue' || (path[4] == 'parallelValue' && path[6] == 'structuredValue')
|
81
|
+
path.first == 'relatedResource' && path[2] == 'title' && structured_value_path
|
82
|
+
end
|
83
|
+
|
84
|
+
def structured_value_title?(path)
|
85
|
+
# title path includes a structuredValue directly or within a parallelValue
|
86
|
+
# e.g. ["title", 0, "structuredValue", 0] or ["title", 0, "parallelValue", 0, "structuredValue", 0])
|
87
|
+
structured_value_path = path[2] == 'structuredValue' || (path[2] == 'parallelValue' && path[4] == 'structuredValue')
|
88
|
+
path.first == 'title' && structured_value_path
|
81
89
|
end
|
82
90
|
|
83
91
|
def path_to_s(path)
|
@@ -28,7 +28,7 @@ module Cocina
|
|
28
28
|
attr_reader :clazz, :attributes
|
29
29
|
|
30
30
|
def dro?
|
31
|
-
|
31
|
+
clazz::TYPES.intersect?(DRO::TYPES) && attributes[:externalIdentifier].present?
|
32
32
|
rescue NameError
|
33
33
|
false
|
34
34
|
end
|
@@ -80,8 +80,8 @@ module Cocina
|
|
80
80
|
|
81
81
|
REQUEST_ADMIN_POLICY_DEFAULTS = ADMIN_POLICY_DEFAULTS.except(:id)
|
82
82
|
|
83
|
-
def self.build_dro_properties(id:, **
|
84
|
-
build_request_dro_properties(**
|
83
|
+
def self.build_dro_properties(id:, **)
|
84
|
+
build_request_dro_properties(**)
|
85
85
|
.merge(externalIdentifier: id)
|
86
86
|
.tap do |props|
|
87
87
|
props[:description][:purl] = "https://purl.stanford.edu/#{id.delete_prefix('druid:')}"
|
@@ -134,8 +134,8 @@ module Cocina
|
|
134
134
|
Cocina::Models.build_request(build_request_dro_properties(**REQUEST_DRO_DEFAULTS.merge(attributes)))
|
135
135
|
end
|
136
136
|
|
137
|
-
def self.build_collection_properties(id:, **
|
138
|
-
build_request_collection_properties(**
|
137
|
+
def self.build_collection_properties(id:, **)
|
138
|
+
build_request_collection_properties(**)
|
139
139
|
.merge(externalIdentifier: id)
|
140
140
|
.tap do |props|
|
141
141
|
props[:description][:purl] = "https://purl.stanford.edu/#{id.delete_prefix('druid:')}"
|
@@ -194,8 +194,8 @@ module Cocina
|
|
194
194
|
Cocina::Models.build_request(build_request_admin_policy_properties(**REQUEST_ADMIN_POLICY_DEFAULTS.merge(attributes)))
|
195
195
|
end
|
196
196
|
|
197
|
-
def self.build_admin_policy_properties(id:, **
|
198
|
-
build_request_admin_policy_properties(**
|
197
|
+
def self.build_admin_policy_properties(id:, **)
|
198
|
+
build_request_admin_policy_properties(**)
|
199
199
|
.merge(externalIdentifier: id)
|
200
200
|
.tap do |props|
|
201
201
|
props[:description][:purl] = "https://purl.stanford.edu/#{id.delete_prefix('druid:')}"
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cocina-models
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.107.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Justin Coyne
|
8
8
|
bindir: exe
|
9
9
|
cert_chain: []
|
10
|
-
date:
|
10
|
+
date: 1980-01-02 00:00:00.000000000 Z
|
11
11
|
dependencies:
|
12
12
|
- !ruby/object:Gem::Dependency
|
13
13
|
name: activesupport
|
@@ -528,14 +528,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
528
528
|
requirements:
|
529
529
|
- - ">="
|
530
530
|
- !ruby/object:Gem::Version
|
531
|
-
version: '3.
|
531
|
+
version: '3.4'
|
532
532
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
533
533
|
requirements:
|
534
534
|
- - ">="
|
535
535
|
- !ruby/object:Gem::Version
|
536
536
|
version: '0'
|
537
537
|
requirements: []
|
538
|
-
rubygems_version: 3.
|
538
|
+
rubygems_version: 3.7.0
|
539
539
|
specification_version: 4
|
540
540
|
summary: Data models for the SDR
|
541
541
|
test_files: []
|