cocina-models 0.75.0 → 0.76.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rubocop.yml +40 -12
- data/.rubocop_todo.yml +71 -2
- data/README.md +10 -3
- data/cocina-models.gemspec +2 -0
- data/description_types.yml +165 -38
- data/docs/description_types.md +469 -216
- data/lib/cocina/generator/generator.rb +7 -12
- data/lib/cocina/generator/schema.rb +1 -3
- data/lib/cocina/generator/schema_base.rb +0 -8
- data/lib/cocina/generator/schema_ref.rb +1 -1
- data/lib/cocina/generator/schema_value.rb +14 -4
- data/lib/cocina/models/access.rb +4 -4
- data/lib/cocina/models/admin_policy.rb +1 -1
- data/lib/cocina/models/admin_policy_access_template.rb +7 -7
- data/lib/cocina/models/admin_policy_administrative.rb +1 -1
- data/lib/cocina/models/admin_policy_with_metadata.rb +3 -3
- data/lib/cocina/models/builders/name_title_group_builder.rb +0 -4
- data/lib/cocina/models/builders/title_builder.rb +0 -2
- data/lib/cocina/models/citation_only_access.rb +2 -2
- data/lib/cocina/models/collection_access.rb +4 -4
- data/lib/cocina/models/collection_identification.rb +1 -1
- data/lib/cocina/models/collection_with_metadata.rb +2 -2
- data/lib/cocina/models/contributor.rb +4 -4
- data/lib/cocina/models/controlled_digital_lending_access.rb +2 -2
- data/lib/cocina/models/dark_access.rb +4 -4
- data/lib/cocina/models/description.rb +3 -3
- data/lib/cocina/models/descriptive_basic_value.rb +13 -13
- data/lib/cocina/models/descriptive_parallel_contributor.rb +5 -5
- data/lib/cocina/models/descriptive_parallel_event.rb +3 -3
- data/lib/cocina/models/descriptive_value.rb +13 -13
- data/lib/cocina/models/descriptive_value_language.rb +6 -6
- data/lib/cocina/models/dro.rb +1 -1
- data/lib/cocina/models/dro_access.rb +8 -8
- data/lib/cocina/models/dro_with_metadata.rb +3 -3
- data/lib/cocina/models/embargo.rb +5 -5
- data/lib/cocina/models/event.rb +3 -3
- data/lib/cocina/models/file.rb +4 -4
- data/lib/cocina/models/file_access.rb +4 -4
- data/lib/cocina/models/identification.rb +2 -2
- data/lib/cocina/models/language.rb +12 -12
- data/lib/cocina/models/location_based_access.rb +1 -1
- data/lib/cocina/models/location_based_download_access.rb +1 -1
- data/lib/cocina/models/mapping/error_notifier.rb +36 -0
- data/lib/cocina/models/mapping/from_mods/access.rb +177 -0
- data/lib/cocina/models/mapping/from_mods/admin_metadata.rb +217 -0
- data/lib/cocina/models/mapping/from_mods/alt_rep_group.rb +26 -0
- data/lib/cocina/models/mapping/from_mods/authority.rb +51 -0
- data/lib/cocina/models/mapping/from_mods/contributor.rb +161 -0
- data/lib/cocina/models/mapping/from_mods/description.rb +99 -0
- data/lib/cocina/models/mapping/from_mods/description_builder.rb +61 -0
- data/lib/cocina/models/mapping/from_mods/event.rb +543 -0
- data/lib/cocina/models/mapping/from_mods/form.rb +381 -0
- data/lib/cocina/models/mapping/from_mods/geographic.rb +219 -0
- data/lib/cocina/models/mapping/from_mods/hydrus_default_title_builder.rb +28 -0
- data/lib/cocina/models/mapping/from_mods/identifier.rb +51 -0
- data/lib/cocina/models/mapping/from_mods/identifier_builder.rb +71 -0
- data/lib/cocina/models/mapping/from_mods/identifier_type.rb +292 -0
- data/lib/cocina/models/mapping/from_mods/language.rb +36 -0
- data/lib/cocina/models/mapping/from_mods/language_script.rb +30 -0
- data/lib/cocina/models/mapping/from_mods/language_term.rb +106 -0
- data/lib/cocina/models/mapping/from_mods/name_builder.rb +307 -0
- data/lib/cocina/models/mapping/from_mods/note.rb +162 -0
- data/lib/cocina/models/mapping/from_mods/part_builder.rb +147 -0
- data/lib/cocina/models/mapping/from_mods/primary.rb +27 -0
- data/lib/cocina/models/mapping/from_mods/purl.rb +53 -0
- data/lib/cocina/models/mapping/from_mods/related_resource.rb +105 -0
- data/lib/cocina/models/mapping/from_mods/subject.rb +413 -0
- data/lib/cocina/models/mapping/from_mods/subject_authority_codes.rb +794 -0
- data/lib/cocina/models/mapping/from_mods/title.rb +160 -0
- data/lib/cocina/models/mapping/from_mods/title_builder.rb +106 -0
- data/lib/cocina/models/mapping/from_mods/title_builder_strategy.rb +19 -0
- data/lib/cocina/models/mapping/from_mods/value_uri.rb +25 -0
- data/lib/cocina/models/mapping/normalizers/base.rb +16 -0
- data/lib/cocina/models/mapping/normalizers/mods/geo_extension_normalizer.rb +69 -0
- data/lib/cocina/models/mapping/normalizers/mods/name_normalizer.rb +191 -0
- data/lib/cocina/models/mapping/normalizers/mods/origin_info_normalizer.rb +157 -0
- data/lib/cocina/models/mapping/normalizers/mods/subject_normalizer.rb +296 -0
- data/lib/cocina/models/mapping/normalizers/mods/title_normalizer.rb +91 -0
- data/lib/cocina/models/mapping/normalizers/mods_normalizer.rb +409 -0
- data/lib/cocina/models/mapping/purl.rb +28 -0
- data/lib/cocina/models/mapping/to_mods/access.rb +155 -0
- data/lib/cocina/models/mapping/to_mods/admin_metadata.rb +129 -0
- data/lib/cocina/models/mapping/to_mods/contributor.rb +49 -0
- data/lib/cocina/models/mapping/to_mods/description.rb +63 -0
- data/lib/cocina/models/mapping/to_mods/event.rb +200 -0
- data/lib/cocina/models/mapping/to_mods/form.rb +292 -0
- data/lib/cocina/models/mapping/to_mods/geographic.rb +151 -0
- data/lib/cocina/models/mapping/to_mods/id_generator.rb +25 -0
- data/lib/cocina/models/mapping/to_mods/identifier.rb +57 -0
- data/lib/cocina/models/mapping/to_mods/language.rb +82 -0
- data/lib/cocina/models/mapping/to_mods/mods_writer.rb +38 -0
- data/lib/cocina/models/mapping/to_mods/name_title_group.rb +29 -0
- data/lib/cocina/models/mapping/to_mods/name_writer.rb +228 -0
- data/lib/cocina/models/mapping/to_mods/note.rb +105 -0
- data/lib/cocina/models/mapping/to_mods/part_writer.rb +115 -0
- data/lib/cocina/models/mapping/to_mods/related_resource.rb +108 -0
- data/lib/cocina/models/mapping/to_mods/role_writer.rb +50 -0
- data/lib/cocina/models/mapping/to_mods/subject.rb +486 -0
- data/lib/cocina/models/mapping/to_mods/title.rb +260 -0
- data/lib/cocina/models/object_metadata.rb +2 -2
- data/lib/cocina/models/presentation.rb +2 -2
- data/lib/cocina/models/related_resource.rb +9 -9
- data/lib/cocina/models/release_tag.rb +4 -4
- data/lib/cocina/models/request_admin_policy.rb +1 -1
- data/lib/cocina/models/request_administrative.rb +1 -1
- data/lib/cocina/models/request_collection.rb +2 -2
- data/lib/cocina/models/request_description.rb +3 -3
- data/lib/cocina/models/request_dro.rb +4 -4
- data/lib/cocina/models/request_file.rb +5 -5
- data/lib/cocina/models/request_identification.rb +1 -1
- data/lib/cocina/models/sequence.rb +1 -1
- data/lib/cocina/models/source.rb +4 -4
- data/lib/cocina/models/standard.rb +5 -5
- data/lib/cocina/models/stanford_access.rb +2 -2
- data/lib/cocina/models/title.rb +13 -13
- data/lib/cocina/models/validators/dark_validator.rb +4 -2
- data/lib/cocina/models/validators/open_api_validator.rb +0 -4
- data/lib/cocina/models/version.rb +1 -1
- data/lib/cocina/models/world_access.rb +2 -2
- data/lib/cocina/models.rb +4 -0
- data/lib/cocina/rspec/factories.rb +157 -0
- data/lib/cocina/rspec.rb +2 -0
- data/openapi.yml +4 -4
- metadata +88 -3
- data/docs/_config.yml +0 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ff6e03954275e59dcc8fbf693f3aeef4b90742767771865508e81541f53f1cbf
|
4
|
+
data.tar.gz: dacc3005506e32d5cca5b599477d1c450844272715e9500f8242bc19bf69972b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bf5f815fb3c09ae4cba6d0e1cf16aafd7502cb731f523004c643806579475d6ac11882845a5d0178732f8d3c9edad56901bf8e05df7d5681a0afdc0032f14058
|
7
|
+
data.tar.gz: 5b88e55c0e25e6dad32a4326a2063bf5a72fedc8146e90a7ead461a1fad0bb1f0f293d360f16884daf5582fa16f4e95fdb61307487e21b7a28b2250c69c1d9ad
|
data/.rubocop.yml
CHANGED
@@ -11,15 +11,13 @@ AllCops:
|
|
11
11
|
|
12
12
|
# ----- Layout ------
|
13
13
|
|
14
|
-
Layout/LineLength:
|
15
|
-
Max: 114
|
16
|
-
Exclude:
|
17
|
-
- lib/cocina/models/*
|
18
|
-
|
19
14
|
Layout/BeginEndAlignment: # (new in 0.91)
|
20
15
|
Enabled: true
|
21
16
|
Layout/EmptyLinesAroundAttributeAccessor:
|
22
17
|
Enabled: true
|
18
|
+
Layout/LineLength:
|
19
|
+
Exclude:
|
20
|
+
- lib/cocina/models/*
|
23
21
|
Layout/SpaceAroundMethodCallOperator:
|
24
22
|
Enabled: true
|
25
23
|
|
@@ -79,12 +77,36 @@ Metrics/BlockLength:
|
|
79
77
|
- cocina-models.gemspec
|
80
78
|
- spec/cocina/**/*
|
81
79
|
- lib/cocina/rspec/matchers.rb
|
80
|
+
- 'spec/support/mods_mapping_spec_helper.rb'
|
81
|
+
|
82
|
+
# Offense count: 16
|
83
|
+
# Configuration parameters: CountComments, CountAsOne.
|
84
|
+
Metrics/ClassLength:
|
85
|
+
Max: 100
|
86
|
+
Exclude:
|
87
|
+
- 'lib/cocina/rspec/factories.rb'
|
82
88
|
|
83
89
|
Metrics/MethodLength:
|
84
90
|
Max: 14
|
85
91
|
Exclude:
|
86
92
|
- 'spec/cocina/models/file_access_spec.rb'
|
87
93
|
- 'spec/cocina/models/dro_access_spec.rb'
|
94
|
+
- 'lib/cocina/rspec/factories.rb'
|
95
|
+
- 'lib/cocina/models/mapping/to_mods/*'
|
96
|
+
- 'lib/cocina/models/mapping/from_mods/*'
|
97
|
+
- 'lib/cocina/models/mapping/normalizers/mods/origin_info_normalizer.rb'
|
98
|
+
- 'lib/cocina/models/mapping/normalizers/mods/subject_normalizer.rb'
|
99
|
+
- 'lib/cocina/models/mapping/normalizers/mods_normalizer.rb'
|
100
|
+
|
101
|
+
|
102
|
+
# Offense count: 37
|
103
|
+
# Configuration parameters: IgnoredMethods.
|
104
|
+
Metrics/PerceivedComplexity:
|
105
|
+
# Max: 20
|
106
|
+
Exclude:
|
107
|
+
- 'lib/cocina/models/mapping/from_mods/*'
|
108
|
+
- 'lib/cocina/models/mapping/to_mods/*'
|
109
|
+
- 'lib/cocina/models/mapping/normalizers/**/*'
|
88
110
|
|
89
111
|
# ----- RSpec ------
|
90
112
|
|
@@ -94,13 +116,6 @@ RSpec/BeEq: # new in 2.9.0
|
|
94
116
|
RSpec/BeNil: # new in 2.9.0
|
95
117
|
Enabled: true
|
96
118
|
|
97
|
-
RSpec/ExampleLength:
|
98
|
-
Max: 18
|
99
|
-
Exclude:
|
100
|
-
- spec/cocina/models/description_spec.rb
|
101
|
-
- spec/cocina/models/dro_shared_examples.rb
|
102
|
-
- spec/cocina/models/builders/name_title_group_builder_spec.rb
|
103
|
-
|
104
119
|
RSpec/MultipleExpectations:
|
105
120
|
Enabled: false
|
106
121
|
|
@@ -283,3 +298,16 @@ RSpec/Rails/AvoidSetupHook: # new in 2.4
|
|
283
298
|
Enabled: true
|
284
299
|
Style/NestedFileDirname: # new in 1.26
|
285
300
|
Enabled: true
|
301
|
+
|
302
|
+
Lint/RefinementImportMethods: # new in 1.27
|
303
|
+
Enabled: true
|
304
|
+
Security/CompoundHash: # new in 1.28
|
305
|
+
Enabled: true
|
306
|
+
Style/FetchEnvVar: # new in 1.28
|
307
|
+
Enabled: true
|
308
|
+
Style/ObjectThen: # new in 1.28
|
309
|
+
Enabled: true
|
310
|
+
Style/RedundantInitialize: # new in 1.27
|
311
|
+
Enabled: true
|
312
|
+
RSpec/VerifiedDoubleReference: # new in 2.10.0
|
313
|
+
Enabled: true
|
data/.rubocop_todo.yml
CHANGED
@@ -1,11 +1,16 @@
|
|
1
1
|
# This configuration was generated by
|
2
2
|
# `rubocop --auto-gen-config --auto-gen-only-exclude`
|
3
|
-
# on 2022-
|
3
|
+
# on 2022-04-27 19:20:35 UTC using RuboCop version 1.28.2.
|
4
4
|
# The point is for the user to remove these configuration records
|
5
5
|
# one by one as the offenses are removed from the code base.
|
6
6
|
# Note that changes in the inspected code, or installation of new
|
7
7
|
# versions of RuboCop, may require this file to be generated again.
|
8
8
|
|
9
|
+
# Offense count: 1
|
10
|
+
Lint/NoReturnInBeginEndBlocks:
|
11
|
+
Exclude:
|
12
|
+
- 'lib/cocina/models/mapping/to_mods/description.rb'
|
13
|
+
|
9
14
|
# Offense count: 1
|
10
15
|
# Configuration parameters: AllowedMethods.
|
11
16
|
# AllowedMethods: present?, blank?, presence, try, try!, in?
|
@@ -13,14 +18,78 @@ Lint/SafeNavigationChain:
|
|
13
18
|
Exclude:
|
14
19
|
- 'lib/cocina/generator/schema_base.rb'
|
15
20
|
|
21
|
+
# Offense count: 13
|
22
|
+
# This cop supports safe auto-correction (--auto-correct).
|
23
|
+
# Configuration parameters: AllowUnusedKeywordArguments, IgnoreEmptyMethods, IgnoreNotImplementedMethods.
|
24
|
+
Lint/UnusedMethodArgument:
|
25
|
+
Exclude:
|
26
|
+
- 'lib/cocina/models/mapping/from_mods/admin_metadata.rb'
|
27
|
+
- 'lib/cocina/models/mapping/from_mods/contributor.rb'
|
28
|
+
- 'lib/cocina/models/mapping/from_mods/event.rb'
|
29
|
+
- 'lib/cocina/models/mapping/from_mods/form.rb'
|
30
|
+
- 'lib/cocina/models/mapping/from_mods/geographic.rb'
|
31
|
+
- 'lib/cocina/models/mapping/from_mods/hydrus_default_title_builder.rb'
|
32
|
+
- 'lib/cocina/models/mapping/from_mods/identifier.rb'
|
33
|
+
- 'lib/cocina/models/mapping/from_mods/language.rb'
|
34
|
+
- 'lib/cocina/models/mapping/from_mods/note.rb'
|
35
|
+
- 'lib/cocina/models/mapping/from_mods/subject.rb'
|
36
|
+
- 'lib/cocina/models/mapping/to_mods/event.rb'
|
37
|
+
|
38
|
+
# Offense count: 95
|
39
|
+
# Configuration parameters: IgnoredMethods, CountRepeatedAttributes.
|
40
|
+
Metrics/AbcSize:
|
41
|
+
Max: 40
|
42
|
+
|
43
|
+
# Offense count: 42
|
44
|
+
# Configuration parameters: IgnoredMethods.
|
45
|
+
Metrics/CyclomaticComplexity:
|
46
|
+
Max: 12
|
47
|
+
|
16
48
|
# Offense count: 1
|
17
49
|
# Configuration parameters: Max, CountKeywordArgs, MaxOptionalParameters.
|
18
50
|
Metrics/ParameterLists:
|
19
51
|
Exclude:
|
20
52
|
- 'lib/cocina/generator/schema_base.rb'
|
21
53
|
|
54
|
+
# Offense count: 41
|
55
|
+
# Configuration parameters: IgnoredMetadata.
|
56
|
+
RSpec/DescribeClass:
|
57
|
+
Enabled: false
|
58
|
+
|
59
|
+
# Offense count: 89
|
60
|
+
# Configuration parameters: CountAsOne.
|
61
|
+
RSpec/ExampleLength:
|
62
|
+
Max: 128
|
63
|
+
|
64
|
+
# Offense count: 9
|
65
|
+
# Configuration parameters: Max.
|
66
|
+
RSpec/NestedGroups:
|
67
|
+
Exclude:
|
68
|
+
- 'spec/cocina/models/mapping/normalizers/mods/origin_info_normalizer_spec.rb'
|
69
|
+
|
22
70
|
# Offense count: 1
|
23
|
-
# Configuration parameters: MinBodyLength.
|
71
|
+
# Configuration parameters: MinBodyLength, AllowConsecutiveConditionals.
|
24
72
|
Style/GuardClause:
|
25
73
|
Exclude:
|
26
74
|
- 'lib/cocina/generator/schema_base.rb'
|
75
|
+
|
76
|
+
# Offense count: 1
|
77
|
+
# This cop supports safe auto-correction (--auto-correct).
|
78
|
+
Style/IfUnlessModifier:
|
79
|
+
Exclude:
|
80
|
+
- 'lib/cocina/models/validators/open_api_validator.rb'
|
81
|
+
|
82
|
+
# Offense count: 9
|
83
|
+
Style/MultilineBlockChain:
|
84
|
+
Exclude:
|
85
|
+
- 'lib/cocina/models/mapping/to_mods/access.rb'
|
86
|
+
- 'lib/cocina/models/mapping/to_mods/contributor.rb'
|
87
|
+
- 'lib/cocina/models/mapping/to_mods/form.rb'
|
88
|
+
- 'lib/cocina/models/mapping/to_mods/subject.rb'
|
89
|
+
|
90
|
+
# Offense count: 206
|
91
|
+
# This cop supports safe auto-correction (--auto-correct).
|
92
|
+
# Configuration parameters: AllowHeredoc, AllowURI, URISchemes, IgnoreCopDirectives, AllowedPatterns, IgnoredPatterns.
|
93
|
+
# URISchemes: http, https
|
94
|
+
Layout/LineLength:
|
95
|
+
Max: 187
|
data/README.md
CHANGED
@@ -6,11 +6,18 @@
|
|
6
6
|
|
7
7
|
# Cocina::Models
|
8
8
|
|
9
|
-
|
9
|
+
The cocina-models gem is a Ruby implementation of the Stanford Digital Repository (SDR) data model, which we named "Cocina." The data being modeled is oriented around digital repository objects.
|
10
10
|
|
11
|
-
|
11
|
+
The data model is expressed in an OpenAPI specification that lives in this codebase. Expressing the model in such a spec allows for rich validation (using gems such as `OpenAPIParser` and `committee`). The gem provides a set of generators (see below) to generate Ruby classes from the specification, with modeling provided by dry-struct / dry-types. Together, these provide a way for consumers to validate objects against models and to manipulate those objects.
|
12
12
|
|
13
|
-
|
13
|
+
Note that the data model encodes properties as camelCase, which the team believes to be consistent with other HTTP APIs and the original design of the Cocina data model. While using camelCase in Ruby code may look and feel wrong, we did explore automagic conversion between camelCase in the model and snake_case in the Ruby context. We ultimately concluded that we have enough representations of the data model in enough codebases to reasonably worry about data inconsistency problems, none of which we need in our work on SDR.
|
14
|
+
|
15
|
+
## Configuration
|
16
|
+
|
17
|
+
Set the PURL url base:
|
18
|
+
```ruby
|
19
|
+
Cocina::Models::Mapping::Purl.base_url = Settings.release.purl_base_url
|
20
|
+
```
|
14
21
|
|
15
22
|
## Generate models from openapi.yml
|
16
23
|
|
data/cocina-models.gemspec
CHANGED
@@ -28,6 +28,8 @@ Gem::Specification.new do |spec|
|
|
28
28
|
spec.add_dependency 'deprecation'
|
29
29
|
spec.add_dependency 'dry-struct', '~> 1.0'
|
30
30
|
spec.add_dependency 'dry-types', '~> 1.1'
|
31
|
+
spec.add_dependency 'equivalent-xml' # for diffing MODS
|
32
|
+
spec.add_dependency 'nokogiri'
|
31
33
|
spec.add_dependency 'openapi3_parser' # Parsing openapi doc
|
32
34
|
# Match these version requirements to what committee wants,
|
33
35
|
# so that our client (non-committee) users have the same dependencies.
|