cocina-models 0.108.3 → 0.110.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 +13 -0
- data/Gemfile.lock +134 -48
- data/cocina-models.gemspec +3 -5
- data/description_types.yml +1 -2
- data/docs/description_types.md +0 -1
- data/docs/index.html +1 -1
- data/lib/cocina/generator/generator.rb +3 -3
- data/lib/cocina/generator/schema_base.rb +2 -1
- data/lib/cocina/models/mapping/from_marc/access.rb +50 -0
- data/lib/cocina/models/mapping/from_marc/admin_metadata.rb +77 -0
- data/lib/cocina/models/mapping/from_marc/contributor.rb +109 -0
- data/lib/cocina/models/mapping/from_marc/description.rb +38 -0
- data/lib/cocina/models/mapping/from_marc/description_builder.rb +58 -0
- data/lib/cocina/models/mapping/from_marc/event.rb +152 -0
- data/lib/cocina/models/mapping/from_marc/form.rb +135 -0
- data/lib/cocina/models/mapping/from_marc/geographic.rb +45 -0
- data/lib/cocina/models/mapping/from_marc/identifier.rb +101 -0
- data/lib/cocina/models/mapping/from_marc/language.rb +49 -0
- data/lib/cocina/models/mapping/from_marc/marc_relators.rb +321 -0
- data/lib/cocina/models/mapping/from_marc/note.rb +186 -0
- data/lib/cocina/models/mapping/from_marc/title.rb +132 -0
- data/lib/cocina/models/mapping/from_marc/util.rb +27 -0
- data/lib/cocina/models/mapping/from_mods/description.rb +1 -1
- data/lib/cocina/models/mapping/from_mods/note.rb +0 -8
- data/lib/cocina/models/mapping/to_mods/contributor.rb +4 -4
- data/lib/cocina/models/mapping/to_mods/note.rb +1 -6
- data/lib/cocina/models/validators/open_api_validator.rb +8 -20
- data/lib/cocina/models/version.rb +1 -1
- data/lib/cocina/models.rb +6 -16
- data/lib/cocina/open_api_wrapper.rb +147 -0
- data/lib/cocina/rspec/factories.rb +3 -3
- data/openapi.yml +78 -72
- metadata +45 -24
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 8b9fe9682c10921ac206fea73e6526883ba31fe7fb08f720f17ff7601e54e0d4
|
|
4
|
+
data.tar.gz: c854536af0b5c26c355129317c6331ae0ff9c772edc666a03a1f68cde97c0c8e
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: cfe6d191ba1e17e102788fca888c4bd5e099eca554bd38e3642b155b453c26d4cba11f1dbc2b1e02547fe8d682a5382224eb0650d7c6be8dc3abb1636e968f25
|
|
7
|
+
data.tar.gz: adb832be7b97215ff35647f94fa20bc86eab92d7045a52e7e81d3274b935fc8156b11c250b0fd9079ac3d0197b266e628693a138aec84ba962791df720a6f79d
|
data/.rubocop.yml
CHANGED
|
@@ -540,3 +540,16 @@ Style/RedundantArrayFlatten: # new in 1.76
|
|
|
540
540
|
Enabled: true
|
|
541
541
|
Style/ArrayIntersectWithSingleElement: # new in 1.81
|
|
542
542
|
Enabled: true
|
|
543
|
+
|
|
544
|
+
Style/EmptyClassDefinition: # new in 1.83
|
|
545
|
+
Enabled: true
|
|
546
|
+
Style/ModuleMemberExistenceCheck: # new in 1.82
|
|
547
|
+
Enabled: true
|
|
548
|
+
Style/NegativeArrayIndex: # new in 1.83
|
|
549
|
+
Enabled: true
|
|
550
|
+
Style/ReverseFind: # new in 1.83
|
|
551
|
+
Enabled: true
|
|
552
|
+
RSpec/LeakyLocalVariable: # new in 3.8
|
|
553
|
+
Enabled: true
|
|
554
|
+
RSpec/Output: # new in 3.9
|
|
555
|
+
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.110.0)
|
|
5
5
|
activesupport
|
|
6
6
|
deprecation
|
|
7
7
|
dry-struct (~> 1.0)
|
|
@@ -9,9 +9,10 @@ PATH
|
|
|
9
9
|
edtf
|
|
10
10
|
equivalent-xml
|
|
11
11
|
i18n
|
|
12
|
+
json_schemer (~> 2.0)
|
|
12
13
|
jsonpath
|
|
14
|
+
marc (~> 1.3)
|
|
13
15
|
nokogiri
|
|
14
|
-
openapi_parser (~> 1.0)
|
|
15
16
|
super_diff
|
|
16
17
|
thor
|
|
17
18
|
zeitwerk (~> 2.1)
|
|
@@ -19,7 +20,7 @@ PATH
|
|
|
19
20
|
GEM
|
|
20
21
|
remote: https://rubygems.org/
|
|
21
22
|
specs:
|
|
22
|
-
activesupport (8.1.
|
|
23
|
+
activesupport (8.1.2)
|
|
23
24
|
base64
|
|
24
25
|
bigdecimal
|
|
25
26
|
concurrent-ruby (~> 1.0, >= 1.3.1)
|
|
@@ -35,15 +36,11 @@ GEM
|
|
|
35
36
|
ast (2.4.3)
|
|
36
37
|
attr_extras (7.1.0)
|
|
37
38
|
base64 (0.3.0)
|
|
38
|
-
bigdecimal (
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
concurrent-ruby (1.3.5)
|
|
44
|
-
connection_pool (2.5.4)
|
|
45
|
-
date (3.5.0)
|
|
46
|
-
debug (1.11.0)
|
|
39
|
+
bigdecimal (4.0.1)
|
|
40
|
+
concurrent-ruby (1.3.6)
|
|
41
|
+
connection_pool (3.0.2)
|
|
42
|
+
date (3.5.1)
|
|
43
|
+
debug (1.11.1)
|
|
47
44
|
irb (~> 1.10)
|
|
48
45
|
reline (>= 0.3.8)
|
|
49
46
|
deprecation (1.1.0)
|
|
@@ -51,11 +48,11 @@ GEM
|
|
|
51
48
|
diff-lcs (1.6.2)
|
|
52
49
|
docile (1.4.1)
|
|
53
50
|
drb (2.2.3)
|
|
54
|
-
dry-core (1.
|
|
51
|
+
dry-core (1.2.0)
|
|
55
52
|
concurrent-ruby (~> 1.0)
|
|
56
53
|
logger
|
|
57
54
|
zeitwerk (~> 2.6)
|
|
58
|
-
dry-inflector (1.
|
|
55
|
+
dry-inflector (1.3.1)
|
|
59
56
|
dry-logic (1.6.0)
|
|
60
57
|
bigdecimal
|
|
61
58
|
concurrent-ruby (~> 1.0)
|
|
@@ -66,8 +63,8 @@ GEM
|
|
|
66
63
|
dry-types (~> 1.8, >= 1.8.2)
|
|
67
64
|
ice_nine (~> 0.11)
|
|
68
65
|
zeitwerk (~> 2.6)
|
|
69
|
-
dry-types (1.
|
|
70
|
-
bigdecimal (
|
|
66
|
+
dry-types (1.9.1)
|
|
67
|
+
bigdecimal (>= 3.0)
|
|
71
68
|
concurrent-ruby (~> 1.0)
|
|
72
69
|
dry-core (~> 1.0)
|
|
73
70
|
dry-inflector (~> 1.0)
|
|
@@ -77,32 +74,40 @@ GEM
|
|
|
77
74
|
activesupport (>= 3.0, < 9.0)
|
|
78
75
|
equivalent-xml (0.6.0)
|
|
79
76
|
nokogiri (>= 1.4.3)
|
|
80
|
-
erb (6.0.
|
|
81
|
-
|
|
77
|
+
erb (6.0.1)
|
|
78
|
+
hana (1.3.7)
|
|
79
|
+
i18n (1.14.8)
|
|
82
80
|
concurrent-ruby (~> 1.0)
|
|
83
81
|
ice_nine (0.11.2)
|
|
84
|
-
io-console (0.8.
|
|
85
|
-
irb (1.
|
|
82
|
+
io-console (0.8.2)
|
|
83
|
+
irb (1.16.0)
|
|
86
84
|
pp (>= 0.6.0)
|
|
87
85
|
rdoc (>= 4.0.0)
|
|
88
86
|
reline (>= 0.4.2)
|
|
89
|
-
json (2.
|
|
90
|
-
|
|
87
|
+
json (2.18.1)
|
|
88
|
+
json_schemer (2.5.0)
|
|
89
|
+
bigdecimal
|
|
90
|
+
hana (~> 1.3)
|
|
91
|
+
regexp_parser (~> 2.0)
|
|
92
|
+
simpleidn (~> 0.2)
|
|
91
93
|
jsonpath (1.1.5)
|
|
92
94
|
multi_json
|
|
93
95
|
language_server-protocol (3.17.0.5)
|
|
94
96
|
lint_roller (1.1.0)
|
|
95
97
|
logger (1.7.0)
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
98
|
+
marc (1.4.0)
|
|
99
|
+
nokogiri (~> 1.0)
|
|
100
|
+
rexml
|
|
101
|
+
minitest (6.0.1)
|
|
102
|
+
prism (~> 1.5)
|
|
103
|
+
multi_json (1.19.1)
|
|
104
|
+
nokogiri (1.19.0-arm64-darwin)
|
|
105
|
+
racc (~> 1.4)
|
|
106
|
+
nokogiri (1.19.0-x86_64-linux-gnu)
|
|
101
107
|
racc (~> 1.4)
|
|
102
|
-
openapi_parser (1.0.0)
|
|
103
108
|
optimist (3.2.1)
|
|
104
109
|
parallel (1.27.0)
|
|
105
|
-
parser (3.3.10.
|
|
110
|
+
parser (3.3.10.1)
|
|
106
111
|
ast (~> 2.4.1)
|
|
107
112
|
racc
|
|
108
113
|
patience_diff (1.2.0)
|
|
@@ -110,21 +115,21 @@ GEM
|
|
|
110
115
|
pp (0.6.3)
|
|
111
116
|
prettyprint
|
|
112
117
|
prettyprint (0.2.0)
|
|
113
|
-
prism (1.
|
|
114
|
-
psych (5.
|
|
118
|
+
prism (1.9.0)
|
|
119
|
+
psych (5.3.1)
|
|
115
120
|
date
|
|
116
121
|
stringio
|
|
117
122
|
racc (1.8.1)
|
|
118
|
-
rack (3.2.4)
|
|
119
123
|
rainbow (3.1.1)
|
|
120
124
|
rake (13.3.1)
|
|
121
|
-
rdoc (
|
|
125
|
+
rdoc (7.1.0)
|
|
122
126
|
erb
|
|
123
127
|
psych (>= 4.0.0)
|
|
124
128
|
tsort
|
|
125
129
|
regexp_parser (2.11.3)
|
|
126
130
|
reline (0.6.3)
|
|
127
131
|
io-console (~> 0.5)
|
|
132
|
+
rexml (3.4.4)
|
|
128
133
|
rspec (3.13.2)
|
|
129
134
|
rspec-core (~> 3.13.0)
|
|
130
135
|
rspec-expectations (~> 3.13.0)
|
|
@@ -137,10 +142,10 @@ GEM
|
|
|
137
142
|
rspec-mocks (3.13.7)
|
|
138
143
|
diff-lcs (>= 1.2.0, < 2.0)
|
|
139
144
|
rspec-support (~> 3.13.0)
|
|
140
|
-
rspec-support (3.13.
|
|
145
|
+
rspec-support (3.13.7)
|
|
141
146
|
rspec_junit_formatter (0.6.0)
|
|
142
147
|
rspec-core (>= 2, < 4, != 2.12.0)
|
|
143
|
-
rubocop (1.
|
|
148
|
+
rubocop (1.84.1)
|
|
144
149
|
json (~> 2.3)
|
|
145
150
|
language_server-protocol (~> 3.17.0.2)
|
|
146
151
|
lint_roller (~> 1.1.0)
|
|
@@ -148,16 +153,16 @@ GEM
|
|
|
148
153
|
parser (>= 3.3.0.2)
|
|
149
154
|
rainbow (>= 2.2.2, < 4.0)
|
|
150
155
|
regexp_parser (>= 2.9.3, < 3.0)
|
|
151
|
-
rubocop-ast (>= 1.
|
|
156
|
+
rubocop-ast (>= 1.49.0, < 2.0)
|
|
152
157
|
ruby-progressbar (~> 1.7)
|
|
153
158
|
unicode-display_width (>= 2.4.0, < 4.0)
|
|
154
|
-
rubocop-ast (1.
|
|
159
|
+
rubocop-ast (1.49.0)
|
|
155
160
|
parser (>= 3.3.7.2)
|
|
156
|
-
prism (~> 1.
|
|
161
|
+
prism (~> 1.7)
|
|
157
162
|
rubocop-rake (0.7.1)
|
|
158
163
|
lint_roller (~> 1.1)
|
|
159
164
|
rubocop (>= 1.72.1)
|
|
160
|
-
rubocop-rspec (3.
|
|
165
|
+
rubocop-rspec (3.9.0)
|
|
161
166
|
lint_roller (~> 1.1)
|
|
162
167
|
rubocop (~> 1.81)
|
|
163
168
|
ruby-progressbar (1.13.0)
|
|
@@ -168,28 +173,29 @@ GEM
|
|
|
168
173
|
simplecov_json_formatter (~> 0.1)
|
|
169
174
|
simplecov-html (0.13.2)
|
|
170
175
|
simplecov_json_formatter (0.1.4)
|
|
171
|
-
|
|
172
|
-
|
|
176
|
+
simpleidn (0.2.3)
|
|
177
|
+
stringio (3.2.0)
|
|
178
|
+
super_diff (0.18.0)
|
|
173
179
|
attr_extras (>= 6.2.4)
|
|
174
180
|
diff-lcs
|
|
175
181
|
patience_diff
|
|
176
|
-
thor (1.
|
|
182
|
+
thor (1.5.0)
|
|
177
183
|
tsort (0.2.0)
|
|
178
184
|
tzinfo (2.0.6)
|
|
179
185
|
concurrent-ruby (~> 1.0)
|
|
180
186
|
unicode-display_width (3.2.0)
|
|
181
187
|
unicode-emoji (~> 4.1)
|
|
182
|
-
unicode-emoji (4.
|
|
188
|
+
unicode-emoji (4.2.0)
|
|
183
189
|
uri (1.1.1)
|
|
184
|
-
zeitwerk (2.7.
|
|
190
|
+
zeitwerk (2.7.4)
|
|
185
191
|
|
|
186
192
|
PLATFORMS
|
|
187
|
-
|
|
193
|
+
arm64-darwin
|
|
194
|
+
x86_64-linux-gnu
|
|
188
195
|
|
|
189
196
|
DEPENDENCIES
|
|
190
|
-
bundler (
|
|
197
|
+
bundler (>= 2.0, < 5)
|
|
191
198
|
cocina-models!
|
|
192
|
-
committee
|
|
193
199
|
debug
|
|
194
200
|
rake (~> 13.0)
|
|
195
201
|
rspec (~> 3.0)
|
|
@@ -199,5 +205,85 @@ DEPENDENCIES
|
|
|
199
205
|
rubocop-rspec
|
|
200
206
|
simplecov
|
|
201
207
|
|
|
208
|
+
CHECKSUMS
|
|
209
|
+
activesupport (8.1.2) sha256=88842578ccd0d40f658289b0e8c842acfe9af751afee2e0744a7873f50b6fdae
|
|
210
|
+
ast (2.4.3) sha256=954615157c1d6a382bc27d690d973195e79db7f55e9765ac7c481c60bdb4d383
|
|
211
|
+
attr_extras (7.1.0) sha256=d96fc9a9dd5d85ba2d37762440a816f840093959ae26bb90da994c2d9f1fc827
|
|
212
|
+
base64 (0.3.0) sha256=27337aeabad6ffae05c265c450490628ef3ebd4b67be58257393227588f5a97b
|
|
213
|
+
bigdecimal (4.0.1) sha256=8b07d3d065a9f921c80ceaea7c9d4ae596697295b584c296fe599dd0ad01c4a7
|
|
214
|
+
cocina-models (0.110.0)
|
|
215
|
+
concurrent-ruby (1.3.6) sha256=6b56837e1e7e5292f9864f34b69c5a2cbc75c0cf5338f1ce9903d10fa762d5ab
|
|
216
|
+
connection_pool (3.0.2) sha256=33fff5ba71a12d2aa26cb72b1db8bba2a1a01823559fb01d29eb74c286e62e0a
|
|
217
|
+
date (3.5.1) sha256=750d06384d7b9c15d562c76291407d89e368dda4d4fff957eb94962d325a0dc0
|
|
218
|
+
debug (1.11.1) sha256=2e0b0ac6119f2207a6f8ac7d4a73ca8eb4e440f64da0a3136c30343146e952b6
|
|
219
|
+
deprecation (1.1.0) sha256=01707cea9a6ed2d7270377457941f43394a345e6dd8048e1be6d18ff2f2a01e1
|
|
220
|
+
diff-lcs (1.6.2) sha256=9ae0d2cba7d4df3075fe8cd8602a8604993efc0dfa934cff568969efb1909962
|
|
221
|
+
docile (1.4.1) sha256=96159be799bfa73cdb721b840e9802126e4e03dfc26863db73647204c727f21e
|
|
222
|
+
drb (2.2.3) sha256=0b00d6fdb50995fe4a45dea13663493c841112e4068656854646f418fda13373
|
|
223
|
+
dry-core (1.2.0) sha256=0cc5a7da88df397f153947eeeae42e876e999c1e30900f3c536fb173854e96a1
|
|
224
|
+
dry-inflector (1.3.1) sha256=7fb0c2bb04f67638f25c52e7ba39ab435d922a3a5c3cd196120f63accb682dcc
|
|
225
|
+
dry-logic (1.6.0) sha256=da6fedbc0f90fc41f9b0cc7e6f05f5d529d1efaef6c8dcc8e0733f685745cea2
|
|
226
|
+
dry-struct (1.8.0) sha256=74c38b559924fb6462ac43ec780c4533a082d7b1d238a8d7857b773b3b8e2966
|
|
227
|
+
dry-types (1.9.1) sha256=baebeecdb9f8395d6c9d227b62011279440943e3ef2468fe8ccc1ba11467f178
|
|
228
|
+
edtf (3.2.0) sha256=a15a0ee274e49c8047a3ebb5d61d793ba44f7f8ffbf0595392c467e3ea8d2447
|
|
229
|
+
equivalent-xml (0.6.0) sha256=8919761efa848ad0846369ff8be1f646b17e5061698c4867b09829000cc3f487
|
|
230
|
+
erb (6.0.1) sha256=28ecdd99c5472aebd5674d6061e3c6b0a45c049578b071e5a52c2a7f13c197e5
|
|
231
|
+
hana (1.3.7) sha256=5425db42d651fea08859811c29d20446f16af196308162894db208cac5ce9b0d
|
|
232
|
+
i18n (1.14.8) sha256=285778639134865c5e0f6269e0b818256017e8cde89993fdfcbfb64d088824a5
|
|
233
|
+
ice_nine (0.11.2) sha256=5d506a7d2723d5592dc121b9928e4931742730131f22a1a37649df1c1e2e63db
|
|
234
|
+
io-console (0.8.2) sha256=d6e3ae7a7cc7574f4b8893b4fca2162e57a825b223a177b7afa236c5ef9814cc
|
|
235
|
+
irb (1.16.0) sha256=2abe56c9ac947cdcb2f150572904ba798c1e93c890c256f8429981a7675b0806
|
|
236
|
+
json (2.18.1) sha256=fe112755501b8d0466b5ada6cf50c8c3f41e897fa128ac5d263ec09eedc9f986
|
|
237
|
+
json_schemer (2.5.0) sha256=2f01fb4cce721a4e08dd068fc2030cffd0702a7f333f1ea2be6e8991f00ae396
|
|
238
|
+
jsonpath (1.1.5) sha256=29f70467193a2dc93ab864ec3d3326d54267961acc623f487340eb9c34931dbe
|
|
239
|
+
language_server-protocol (3.17.0.5) sha256=fd1e39a51a28bf3eec959379985a72e296e9f9acfce46f6a79d31ca8760803cc
|
|
240
|
+
lint_roller (1.1.0) sha256=2c0c845b632a7d172cb849cc90c1bce937a28c5c8ccccb50dfd46a485003cc87
|
|
241
|
+
logger (1.7.0) sha256=196edec7cc44b66cfb40f9755ce11b392f21f7967696af15d274dde7edff0203
|
|
242
|
+
marc (1.4.0) sha256=89f31a66c21f5a11e8fcf65fe06d207e121fb45ac6b23abef403f9ce912c7d10
|
|
243
|
+
minitest (6.0.1) sha256=7854c74f48e2e975969062833adc4013f249a4b212f5e7b9d5c040bf838d54bb
|
|
244
|
+
multi_json (1.19.1) sha256=7aefeff8f2c854bf739931a238e4aea64592845e0c0395c8a7d2eea7fdd631b7
|
|
245
|
+
nokogiri (1.19.0-arm64-darwin) sha256=0811dfd936d5f6dd3f6d32ef790568bf29b2b7bead9ba68866847b33c9cf5810
|
|
246
|
+
nokogiri (1.19.0-x86_64-linux-gnu) sha256=f482b95c713d60031d48c44ce14562f8d2ce31e3a9e8dd0ccb131e9e5a68b58c
|
|
247
|
+
optimist (3.2.1) sha256=8cf8a0fd69f3aa24ab48885d3a666717c27bc3d9edd6e976e18b9d771e72e34e
|
|
248
|
+
parallel (1.27.0) sha256=4ac151e1806b755fb4e2dc2332cbf0e54f2e24ba821ff2d3dcf86bf6dc4ae130
|
|
249
|
+
parser (3.3.10.1) sha256=06f6a725d2cd91e5e7f2b7c32ba143631e1f7c8ae2fb918fc4cebec187e6a688
|
|
250
|
+
patience_diff (1.2.0) sha256=f492094486af02fff4a80070fa6b4d0ebbcf4d42fb38bba29d095eef43f6822c
|
|
251
|
+
pp (0.6.3) sha256=2951d514450b93ccfeb1df7d021cae0da16e0a7f95ee1e2273719669d0ab9df6
|
|
252
|
+
prettyprint (0.2.0) sha256=2bc9e15581a94742064a3cc8b0fb9d45aae3d03a1baa6ef80922627a0766f193
|
|
253
|
+
prism (1.9.0) sha256=7b530c6a9f92c24300014919c9dcbc055bf4cdf51ec30aed099b06cd6674ef85
|
|
254
|
+
psych (5.3.1) sha256=eb7a57cef10c9d70173ff74e739d843ac3b2c019a003de48447b2963d81b1974
|
|
255
|
+
racc (1.8.1) sha256=4a7f6929691dbec8b5209a0b373bc2614882b55fc5d2e447a21aaa691303d62f
|
|
256
|
+
rainbow (3.1.1) sha256=039491aa3a89f42efa1d6dec2fc4e62ede96eb6acd95e52f1ad581182b79bc6a
|
|
257
|
+
rake (13.3.1) sha256=8c9e89d09f66a26a01264e7e3480ec0607f0c497a861ef16063604b1b08eb19c
|
|
258
|
+
rdoc (7.1.0) sha256=494899df0706c178596ca6e1d50f1b7eb285a9b2aae715be5abd742734f17363
|
|
259
|
+
regexp_parser (2.11.3) sha256=ca13f381a173b7a93450e53459075c9b76a10433caadcb2f1180f2c741fc55a4
|
|
260
|
+
reline (0.6.3) sha256=1198b04973565b36ec0f11542ab3f5cfeeec34823f4e54cebde90968092b1835
|
|
261
|
+
rexml (3.4.4) sha256=19e0a2c3425dfbf2d4fc1189747bdb2f849b6c5e74180401b15734bc97b5d142
|
|
262
|
+
rspec (3.13.2) sha256=206284a08ad798e61f86d7ca3e376718d52c0bc944626b2349266f239f820587
|
|
263
|
+
rspec-core (3.13.6) sha256=a8823c6411667b60a8bca135364351dda34cd55e44ff94c4be4633b37d828b2d
|
|
264
|
+
rspec-expectations (3.13.5) sha256=33a4d3a1d95060aea4c94e9f237030a8f9eae5615e9bd85718fe3a09e4b58836
|
|
265
|
+
rspec-mocks (3.13.7) sha256=0979034e64b1d7a838aaaddf12bf065ea4dc40ef3d4c39f01f93ae2c66c62b1c
|
|
266
|
+
rspec-support (3.13.7) sha256=0640e5570872aafefd79867901deeeeb40b0c9875a36b983d85f54fb7381c47c
|
|
267
|
+
rspec_junit_formatter (0.6.0) sha256=40dde674e6ae4e6cc0ff560da25497677e34fefd2338cc467a8972f602b62b15
|
|
268
|
+
rubocop (1.84.1) sha256=14cc626f355141f5a2ef53c10a68d66b13bb30639b26370a76559096cc6bcc1a
|
|
269
|
+
rubocop-ast (1.49.0) sha256=49c3676d3123a0923d333e20c6c2dbaaae2d2287b475273fddee0c61da9f71fd
|
|
270
|
+
rubocop-rake (0.7.1) sha256=3797f2b6810c3e9df7376c26d5f44f3475eda59eb1adc38e6f62ecf027cbae4d
|
|
271
|
+
rubocop-rspec (3.9.0) sha256=8fa70a3619408237d789aeecfb9beef40576acc855173e60939d63332fdb55e2
|
|
272
|
+
ruby-progressbar (1.13.0) sha256=80fc9c47a9b640d6834e0dc7b3c94c9df37f08cb072b7761e4a71e22cff29b33
|
|
273
|
+
securerandom (0.4.1) sha256=cc5193d414a4341b6e225f0cb4446aceca8e50d5e1888743fac16987638ea0b1
|
|
274
|
+
simplecov (0.22.0) sha256=fe2622c7834ff23b98066bb0a854284b2729a569ac659f82621fc22ef36213a5
|
|
275
|
+
simplecov-html (0.13.2) sha256=bd0b8e54e7c2d7685927e8d6286466359b6f16b18cb0df47b508e8d73c777246
|
|
276
|
+
simplecov_json_formatter (0.1.4) sha256=529418fbe8de1713ac2b2d612aa3daa56d316975d307244399fa4838c601b428
|
|
277
|
+
simpleidn (0.2.3) sha256=08ce96f03fa1605286be22651ba0fc9c0b2d6272c9b27a260bc88be05b0d2c29
|
|
278
|
+
stringio (3.2.0) sha256=c37cb2e58b4ffbd33fe5cd948c05934af997b36e0b6ca6fdf43afa234cf222e1
|
|
279
|
+
super_diff (0.18.0) sha256=9f5e77464fa75150619f7783174fbbe1bbac50a1eaf157cd39ad5584b0eac142
|
|
280
|
+
thor (1.5.0) sha256=e3a9e55fe857e44859ce104a84675ab6e8cd59c650a49106a05f55f136425e73
|
|
281
|
+
tsort (0.2.0) sha256=9650a793f6859a43b6641671278f79cfead60ac714148aabe4e3f0060480089f
|
|
282
|
+
tzinfo (2.0.6) sha256=8daf828cc77bcf7d63b0e3bdb6caa47e2272dcfaf4fbfe46f8c3a9df087a829b
|
|
283
|
+
unicode-display_width (3.2.0) sha256=0cdd96b5681a5949cdbc2c55e7b420facae74c4aaf9a9815eee1087cb1853c42
|
|
284
|
+
unicode-emoji (4.2.0) sha256=519e69150f75652e40bf736106cfbc8f0f73aa3fb6a65afe62fefa7f80b0f80f
|
|
285
|
+
uri (1.1.1) sha256=379fa58d27ffb1387eaada68c749d1426738bd0f654d812fcc07e7568f5c57c6
|
|
286
|
+
zeitwerk (2.7.4) sha256=2bef90f356bdafe9a6c2bd32bcd804f83a4f9b8bc27f3600fff051eb3edcec8b
|
|
287
|
+
|
|
202
288
|
BUNDLED WITH
|
|
203
|
-
|
|
289
|
+
4.0.6
|
data/cocina-models.gemspec
CHANGED
|
@@ -32,16 +32,14 @@ Gem::Specification.new do |spec|
|
|
|
32
32
|
spec.add_dependency 'equivalent-xml' # for diffing MODS
|
|
33
33
|
spec.add_dependency 'i18n' # for validating BCP 47 language tags, according to RFC 4646
|
|
34
34
|
spec.add_dependency 'jsonpath' # used for date/time validation
|
|
35
|
+
spec.add_dependency 'json_schemer', '~> 2.0'
|
|
36
|
+
spec.add_dependency 'marc', '~> 1.3'
|
|
35
37
|
spec.add_dependency 'nokogiri'
|
|
36
|
-
# Match these version requirements to what committee wants,
|
|
37
|
-
# so that our client (non-committee) users have the same dependencies.
|
|
38
|
-
spec.add_dependency 'openapi_parser', '~> 1.0'
|
|
39
38
|
spec.add_dependency 'super_diff'
|
|
40
39
|
spec.add_dependency 'thor'
|
|
41
40
|
spec.add_dependency 'zeitwerk', '~> 2.1'
|
|
42
41
|
|
|
43
|
-
spec.add_development_dependency 'bundler', '
|
|
44
|
-
spec.add_development_dependency 'committee'
|
|
42
|
+
spec.add_development_dependency 'bundler', '>= 2.0', '< 5'
|
|
45
43
|
spec.add_development_dependency 'rake', '~> 13.0'
|
|
46
44
|
spec.add_development_dependency 'rspec', '~> 3.0'
|
|
47
45
|
spec.add_development_dependency 'rubocop', '~> 1.24'
|
data/description_types.yml
CHANGED
|
@@ -347,7 +347,6 @@ identifier:
|
|
|
347
347
|
use: accession number
|
|
348
348
|
- value: accession number
|
|
349
349
|
- value: alternate case number
|
|
350
|
-
- value: anchor
|
|
351
350
|
- value: Apis ID
|
|
352
351
|
code: apis
|
|
353
352
|
- value: ARK
|
|
@@ -430,7 +429,7 @@ identifier:
|
|
|
430
429
|
code: urn
|
|
431
430
|
- value: videorecording identifier
|
|
432
431
|
code: videorecording-identifier
|
|
433
|
-
- value:
|
|
432
|
+
- value: "West Mat #"
|
|
434
433
|
- value: Wikidata
|
|
435
434
|
code: wikidata
|
|
436
435
|
note:
|
data/docs/description_types.md
CHANGED
data/docs/index.html
CHANGED
|
@@ -15,6 +15,6 @@
|
|
|
15
15
|
</head>
|
|
16
16
|
<body>
|
|
17
17
|
<redoc spec-url='https://raw.githubusercontent.com/sul-dlss/cocina-models/main/openapi.yml'></redoc>
|
|
18
|
-
<script src="https://cdn.
|
|
18
|
+
<script src="https://cdn.redoc.ly/redoc/latest/bundles/redoc.standalone.js"> </script>
|
|
19
19
|
</body>
|
|
20
20
|
</html>
|
|
@@ -96,9 +96,9 @@ module Cocina
|
|
|
96
96
|
end
|
|
97
97
|
|
|
98
98
|
def schemas
|
|
99
|
-
@schemas ||=
|
|
100
|
-
|
|
101
|
-
|
|
99
|
+
@schemas ||= Cocina::OpenApiWrapper.parse(YAML.load_file(options[:openapi]), strict_reference_validation: true)
|
|
100
|
+
.components
|
|
101
|
+
.schemas
|
|
102
102
|
end
|
|
103
103
|
|
|
104
104
|
def schema_for(schema_name, lite: false)
|
|
@@ -110,7 +110,8 @@ module Cocina
|
|
|
110
110
|
end
|
|
111
111
|
|
|
112
112
|
def defined_datatypes?(doc)
|
|
113
|
-
doc.one_of
|
|
113
|
+
doc.one_of.present? &&
|
|
114
|
+
doc.one_of.map(&:name)&.all? { |name| name.present? && schemas.include?(name) }
|
|
114
115
|
end
|
|
115
116
|
|
|
116
117
|
def any_datatype?(doc)
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Cocina
|
|
4
|
+
module Models
|
|
5
|
+
module Mapping
|
|
6
|
+
module FromMarc
|
|
7
|
+
# Maps Access to the cocina model
|
|
8
|
+
class Access
|
|
9
|
+
# @see #initialize
|
|
10
|
+
# @see #build
|
|
11
|
+
def self.build(...)
|
|
12
|
+
new(...).build
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
# @param [MARC::Record] marc MARC record from FOLIO
|
|
16
|
+
def initialize(marc:)
|
|
17
|
+
@marc = marc
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
# @return [Hash] a hash that can be mapped to a cocina model
|
|
21
|
+
def build
|
|
22
|
+
{ url:, physicalLocation: physical_location }.compact_blank
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
private
|
|
26
|
+
|
|
27
|
+
def physical_location
|
|
28
|
+
field = marc['099']
|
|
29
|
+
return unless field
|
|
30
|
+
|
|
31
|
+
[{
|
|
32
|
+
value: field['a'],
|
|
33
|
+
type: 'shelf locator'
|
|
34
|
+
}]
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def url
|
|
38
|
+
field = marc['856']
|
|
39
|
+
return unless field
|
|
40
|
+
|
|
41
|
+
notes = field.subfields.select { %(y z).include? it.code }.map { { value: it.value } }
|
|
42
|
+
[{ displayLabel: field['3'], value: field['u'], note: notes }.compact_blank]
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
attr_reader :marc
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
end
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Cocina
|
|
4
|
+
module Models
|
|
5
|
+
module Mapping
|
|
6
|
+
module FromMarc
|
|
7
|
+
# Maps AdminMetadata to the cocina model
|
|
8
|
+
class AdminMetadata
|
|
9
|
+
# @see #initialize
|
|
10
|
+
# @see #build
|
|
11
|
+
def self.build(...)
|
|
12
|
+
new(...).build
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
# @param [MARC::Record] marc MARC record from FOLIO
|
|
16
|
+
def initialize(marc:)
|
|
17
|
+
@marc = marc
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
# @return [Hash] a hash that can be mapped to a cocina model
|
|
21
|
+
def build
|
|
22
|
+
{ contributor:, event:, identifier:, note: }.compact_blank
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
private
|
|
26
|
+
|
|
27
|
+
def contributor
|
|
28
|
+
field = marc['040']
|
|
29
|
+
return unless field
|
|
30
|
+
|
|
31
|
+
[{
|
|
32
|
+
type: 'organization',
|
|
33
|
+
name: [{ code: field['a'], source: { code: 'marcorg' } }]
|
|
34
|
+
}]
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def event
|
|
38
|
+
[creation, modification].compact
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def creation
|
|
42
|
+
field = marc['008']
|
|
43
|
+
return unless field
|
|
44
|
+
|
|
45
|
+
{
|
|
46
|
+
type: 'creation',
|
|
47
|
+
date: [{ value: field.value[0..5], encoding: { code: 'marc' } }]
|
|
48
|
+
}
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def modification
|
|
52
|
+
field = marc['005']
|
|
53
|
+
return unless field
|
|
54
|
+
|
|
55
|
+
{
|
|
56
|
+
type: 'modification',
|
|
57
|
+
date: [{ value: field.value[0..7], encoding: { code: 'iso8601' } }]
|
|
58
|
+
}
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
def identifier
|
|
62
|
+
field = marc['001']
|
|
63
|
+
return unless field
|
|
64
|
+
|
|
65
|
+
[{ value: field.value, type: 'FOLIO' }]
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
def note
|
|
69
|
+
[{ value: "Converted from MARC to Cocina #{Date.today.iso8601}", type: 'record origin' }]
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
attr_reader :marc
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
end
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative 'marc_relators'
|
|
4
|
+
|
|
5
|
+
module Cocina
|
|
6
|
+
module Models
|
|
7
|
+
module Mapping
|
|
8
|
+
module FromMarc
|
|
9
|
+
# Maps contributor information from MARC records to Cocina models.
|
|
10
|
+
class Contributor
|
|
11
|
+
# @see #initialize
|
|
12
|
+
# @see #build
|
|
13
|
+
def self.build(...)
|
|
14
|
+
new(...).build
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
# @param [MARC::Record] marc MARC record from FOLIO
|
|
18
|
+
def initialize(marc:)
|
|
19
|
+
@marc = marc
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
# @return [Array<Hash>] an array of contributor hashes
|
|
23
|
+
def build
|
|
24
|
+
linked_100_field = Util.linked_field(marc, marc['100']) if marc['100']
|
|
25
|
+
linked_700_field = Util.linked_field(marc, marc['700']) if marc['700']
|
|
26
|
+
|
|
27
|
+
[
|
|
28
|
+
build_personal(marc['100'], primary: true),
|
|
29
|
+
build_personal(linked_100_field),
|
|
30
|
+
build_corporate(marc['110'], primary: true),
|
|
31
|
+
build_event(marc['111'], primary: true),
|
|
32
|
+
build_personal(marc['700']),
|
|
33
|
+
build_personal(linked_700_field),
|
|
34
|
+
build_corporate(marc['710']),
|
|
35
|
+
build_event(marc['711']),
|
|
36
|
+
build_personal(marc['720'])
|
|
37
|
+
|
|
38
|
+
].compact
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
private
|
|
42
|
+
|
|
43
|
+
def build_personal(field, primary: false)
|
|
44
|
+
return unless field
|
|
45
|
+
|
|
46
|
+
name_type = case field.indicator1
|
|
47
|
+
when '1', '2'
|
|
48
|
+
'person'
|
|
49
|
+
when '3'
|
|
50
|
+
'family'
|
|
51
|
+
end
|
|
52
|
+
contributor = { type: name_type }.compact
|
|
53
|
+
contributor[:name] = [build_personal_name(field)]
|
|
54
|
+
contributor[:role] = build_roles(field)
|
|
55
|
+
id = build_id(field).first
|
|
56
|
+
contributor[:identifier] = [{ value: id.delete_prefix('https://orcid.org/'), type: 'ORCID' }.compact_blank] if id&.start_with? 'https://orcid.org/'
|
|
57
|
+
contributor[:status] = 'primary' if primary
|
|
58
|
+
contributor.compact_blank
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
def build_personal_name(field)
|
|
62
|
+
return unless field
|
|
63
|
+
|
|
64
|
+
name = Util.strip_punctuation(field.subfields.select { |subfield| %w[a c q d].include? subfield.code }.map(&:value).join(' '))
|
|
65
|
+
{ value: name }
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
def build_id(field)
|
|
69
|
+
field.subfields.select { |subfield| %w[1].include? subfield.code }.map(&:value)
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
def build_roles(field, code: 'e')
|
|
73
|
+
expanded = field.subfields.select { |sf| sf.code == '4' }.map { |role| { value: MARC_RELATORS[role.value] }.compact_blank }
|
|
74
|
+
|
|
75
|
+
(field.subfields.select { |sf| sf.code == code }.map { |role| { value: role.value.sub(/.$/, '') } } +
|
|
76
|
+
expanded).uniq.compact_blank
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
def build_corporate(field, primary: false)
|
|
80
|
+
return unless field
|
|
81
|
+
|
|
82
|
+
contributor = { type: 'organization' }
|
|
83
|
+
name = field.subfields.select { |subfield| %w[a b q d].include? subfield.code }.map(&:value).join(' ')
|
|
84
|
+
contributor[:name] = [{ value: name }]
|
|
85
|
+
id = build_id(field).first
|
|
86
|
+
contributor[:identifier] = [{ uri: id }] if id
|
|
87
|
+
|
|
88
|
+
contributor[:status] = 'primary' if primary
|
|
89
|
+
contributor
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
def build_event(field, primary: false)
|
|
93
|
+
return unless field
|
|
94
|
+
|
|
95
|
+
contributor = { type: 'event' }
|
|
96
|
+
name = field.subfields.select { |subfield| %w[a n d c].include? subfield.code }.map(&:value).join(' ')
|
|
97
|
+
contributor[:name] = [{ value: name }]
|
|
98
|
+
roles = build_roles(field, code: 'j')
|
|
99
|
+
contributor[:role] = roles if roles.present?
|
|
100
|
+
contributor[:status] = 'primary' if primary
|
|
101
|
+
contributor
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
attr_reader :marc
|
|
105
|
+
end
|
|
106
|
+
end
|
|
107
|
+
end
|
|
108
|
+
end
|
|
109
|
+
end
|