cocina-models 0.90.0 → 0.91.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 3b9b6b1b7c20ec706258be8c9ece8408096195d6f82e35557f77d66ef513b806
4
- data.tar.gz: 8ab0c377065f728a79f6dc88d5fcd8be80f8b913773a77811db8fc716ce86fb7
3
+ metadata.gz: f7ef9101cd3e5b9e42625b2afbc651919ba5f8e1617d5372324cb950a8f78b23
4
+ data.tar.gz: 433c3651004d4f32c380f0cee4b38887fe2ef3bc550436e326af299db01d12b3
5
5
  SHA512:
6
- metadata.gz: 9a3b581d427489cd9f280c0d0e9a086cfcb37d97ff43a983cde52302eb09fa537730c650fa429b3f4310621b25972790505c103366b109bba47bdf23e0ceb0df
7
- data.tar.gz: 5219483d1199ea3ea2ab6014c6e4bb9c8ca63c5a3bd601aa9cc18424b30f98cdfa47b3078cf7429db88503478187b2712a68189a34a29c7426c3fc3524f8850f
6
+ metadata.gz: 74cfeeb356d0fd34295010870f2e81c2ef08d9db3c3679ec1b22a8e6f6325bfb62058a23654c024d58a19a59a8b1dd73d611cfec749f2adce2aa6ac938f46c92
7
+ data.tar.gz: 906583af0a50b81f26f4c487b3288196f918d116f617c253ce10cc72564e7f459bb1ff422bc0af6def4d222571232fa4e1c52609be82e5226eb4d85f92f1c42c
data/.circleci/config.yml CHANGED
@@ -1,6 +1,6 @@
1
1
  version: 2.1
2
2
  orbs:
3
- ruby-rails: sul-dlss/ruby-rails@3.2.0
3
+ ruby-rails: sul-dlss/ruby-rails@4.1.0
4
4
  workflows:
5
5
  build:
6
6
  jobs:
data/.rubocop.yml CHANGED
@@ -298,7 +298,7 @@ RSpec/IdenticalEqualityAssertion: # new in 2.4
298
298
  Enabled: true
299
299
  RSpec/SubjectDeclaration: # new in 2.5
300
300
  Enabled: true
301
- RSpec/FactoryBot/SyntaxMethods: # new in 2.7
301
+ FactoryBot/SyntaxMethods: # new in 2.7
302
302
  Enabled: true
303
303
  RSpec/Rails/AvoidSetupHook: # new in 2.4
304
304
  Enabled: true
@@ -387,9 +387,9 @@ RSpec/PendingWithoutReason: # new in 2.16
387
387
  Enabled: true
388
388
  RSpec/SortMetadata: # new in 2.14
389
389
  Enabled: true
390
- RSpec/FactoryBot/ConsistentParenthesesStyle: # new in 2.14
390
+ FactoryBot/ConsistentParenthesesStyle: # new in 2.14
391
391
  Enabled: true
392
- RSpec/FactoryBot/FactoryNameStyle: # new in 2.16
392
+ FactoryBot/FactoryNameStyle: # new in 2.16
393
393
  Enabled: true
394
394
  RSpec/Rails/InferredSpecType: # new in 2.14
395
395
  Enabled: true
@@ -410,3 +410,49 @@ RSpec/SkipBlockInsideExample: # new in 2.19
410
410
  Enabled: true
411
411
  RSpec/Rails/TravelAround: # new in 2.19
412
412
  Enabled: true
413
+
414
+ Lint/DuplicateMatchPattern: # new in 1.50
415
+ Enabled: true
416
+ Style/DataInheritance: # new in 1.49
417
+ Enabled: true
418
+ Style/ExactRegexpMatch: # new in 1.51
419
+ Enabled: true
420
+ Style/RedundantArrayConstructor: # new in 1.52
421
+ Enabled: true
422
+ Style/RedundantFilterChain: # new in 1.52
423
+ Enabled: true
424
+ Style/RedundantLineContinuation: # new in 1.49
425
+ Enabled: true
426
+ Style/RedundantRegexpConstructor: # new in 1.52
427
+ Enabled: true
428
+ FactoryBot/AssociationStyle: # new in 2.23
429
+ Enabled: true
430
+ FactoryBot/FactoryAssociationWithStrategy: # new in 2.23
431
+ Enabled: true
432
+ FactoryBot/RedundantFactoryOption: # new in 2.23
433
+ Enabled: true
434
+ RSpec/BeEmpty: # new in 2.20
435
+ Enabled: true
436
+ RSpec/ContainExactly: # new in 2.19
437
+ Enabled: true
438
+ RSpec/IndexedLet: # new in 2.20
439
+ Enabled: true
440
+ RSpec/MatchArray: # new in 2.19
441
+ Enabled: true
442
+
443
+ Lint/MixedCaseRange: # new in 1.53
444
+ Enabled: true
445
+ Lint/RedundantRegexpQuantifiers: # new in 1.53
446
+ Enabled: true
447
+ Style/RedundantCurrentDirectoryInPath: # new in 1.53
448
+ Enabled: true
449
+ Style/RedundantRegexpArgument: # new in 1.53
450
+ Enabled: true
451
+ Style/ReturnNilInPredicateMethodDefinition: # new in 1.53
452
+ Enabled: true
453
+ Style/YAMLFileRead: # new in 1.53
454
+ Enabled: true
455
+ RSpec/ReceiveMessages: # new in 2.23
456
+ Enabled: true
457
+ RSpec/Rails/NegationBeValid: # new in 2.23
458
+ Enabled: true
data/.rubocop_todo.yml CHANGED
@@ -1,12 +1,12 @@
1
1
  # This configuration was generated by
2
2
  # `rubocop --auto-gen-config --auto-gen-only-exclude`
3
- # on 2023-03-13 15:58:18 UTC using RuboCop version 1.48.1.
3
+ # on 2023-06-20 05:46:00 UTC using RuboCop version 1.52.1.
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: 3
9
+ # Offense count: 8
10
10
  # Configuration parameters: EnforcedStyle, AllowedGems, Include.
11
11
  # SupportedStyles: Gemfile, gems.rb, gemspec
12
12
  # Include: **/*.gemspec, **/Gemfile, **/gems.rb
@@ -69,12 +69,11 @@ RSpec/NestedGroups:
69
69
  - 'spec/cocina/models/mapping/normalizers/mods/origin_info_normalizer_spec.rb'
70
70
  - 'spec/cocina/models/validators/date_time_validator_spec.rb'
71
71
 
72
- # Offense count: 24
72
+ # Offense count: 19
73
73
  RSpec/PendingWithoutReason:
74
74
  Exclude:
75
75
  - 'spec/cocina/models/mapping/descriptive/mods/name_spec.rb'
76
76
  - 'spec/cocina/models/mapping/descriptive/mods/origin_info_place_spec.rb'
77
- - 'spec/cocina/models/mapping/descriptive/mods/part_spec.rb'
78
77
  - 'spec/cocina/models/mapping/descriptive/mods/physical_description_spec.rb'
79
78
  - 'spec/cocina/models/mapping/descriptive/mods/record_info_spec.rb'
80
79
  - 'spec/cocina/models/mapping/descriptive/mods/subject_classification_spec.rb'
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- cocina-models (0.90.0)
4
+ cocina-models (0.91.0)
5
5
  activesupport
6
6
  deprecation
7
7
  dry-struct (~> 1.0)
@@ -11,7 +11,7 @@ PATH
11
11
  jsonpath
12
12
  nokogiri
13
13
  openapi3_parser
14
- openapi_parser (>= 0.11.1, < 1.0)
14
+ openapi_parser (~> 1.0)
15
15
  rss
16
16
  super_diff
17
17
  thor
@@ -20,25 +20,26 @@ PATH
20
20
  GEM
21
21
  remote: https://rubygems.org/
22
22
  specs:
23
- activesupport (7.0.4.3)
23
+ activesupport (7.0.8)
24
24
  concurrent-ruby (~> 1.0, >= 1.0.2)
25
25
  i18n (>= 1.6, < 2)
26
26
  minitest (>= 5.1)
27
27
  tzinfo (~> 2.0)
28
28
  ast (2.4.2)
29
29
  attr_extras (7.1.0)
30
+ base64 (0.1.1)
30
31
  byebug (11.1.3)
31
- committee (4.99.1)
32
+ committee (5.0.0)
32
33
  json_schema (~> 0.14, >= 0.14.3)
33
- openapi_parser (>= 0.11.1, < 1.0)
34
+ openapi_parser (~> 1.0)
34
35
  rack (>= 1.5)
35
- commonmarker (0.23.8)
36
+ commonmarker (0.23.10)
36
37
  concurrent-ruby (1.2.2)
37
38
  deprecation (1.1.0)
38
39
  activesupport
39
40
  diff-lcs (1.5.0)
40
41
  docile (1.4.0)
41
- dry-core (1.0.0)
42
+ dry-core (1.0.1)
42
43
  concurrent-ruby (~> 1.0)
43
44
  zeitwerk (~> 2.6)
44
45
  dry-inflector (1.0.0)
@@ -61,70 +62,77 @@ GEM
61
62
  activesupport (>= 3.0, < 8.0)
62
63
  equivalent-xml (0.6.0)
63
64
  nokogiri (>= 1.4.3)
64
- i18n (1.12.0)
65
+ i18n (1.14.1)
65
66
  concurrent-ruby (~> 1.0)
66
67
  ice_nine (0.11.2)
67
68
  json (2.6.3)
68
69
  json_schema (0.21.0)
69
- jsonpath (1.1.2)
70
+ jsonpath (1.1.3)
70
71
  multi_json
71
- mini_portile2 (2.8.1)
72
- minitest (5.18.0)
72
+ language_server-protocol (3.17.0.3)
73
+ mini_portile2 (2.8.4)
74
+ minitest (5.20.0)
73
75
  multi_json (1.15.0)
74
- nokogiri (1.14.2)
75
- mini_portile2 (~> 2.8.0)
76
+ nokogiri (1.15.4)
77
+ mini_portile2 (~> 2.8.2)
76
78
  racc (~> 1.4)
77
79
  openapi3_parser (0.9.2)
78
80
  commonmarker (~> 0.17)
79
- openapi_parser (0.15.0)
80
- optimist (3.0.1)
81
- parallel (1.22.1)
82
- parser (3.2.1.1)
81
+ openapi_parser (1.0.0)
82
+ optimist (3.1.0)
83
+ parallel (1.23.0)
84
+ parser (3.2.2.3)
83
85
  ast (~> 2.4.1)
86
+ racc
84
87
  patience_diff (1.2.0)
85
88
  optimist (~> 3.0)
86
- racc (1.6.2)
87
- rack (3.0.7)
89
+ racc (1.7.1)
90
+ rack (3.0.8)
88
91
  rainbow (3.1.1)
89
92
  rake (13.0.6)
90
- regexp_parser (2.7.0)
91
- rexml (3.2.5)
93
+ regexp_parser (2.8.1)
94
+ rexml (3.2.6)
92
95
  rspec (3.12.0)
93
96
  rspec-core (~> 3.12.0)
94
97
  rspec-expectations (~> 3.12.0)
95
98
  rspec-mocks (~> 3.12.0)
96
- rspec-core (3.12.1)
99
+ rspec-core (3.12.2)
97
100
  rspec-support (~> 3.12.0)
98
- rspec-expectations (3.12.2)
101
+ rspec-expectations (3.12.3)
99
102
  diff-lcs (>= 1.2.0, < 2.0)
100
103
  rspec-support (~> 3.12.0)
101
- rspec-mocks (3.12.4)
104
+ rspec-mocks (3.12.6)
102
105
  diff-lcs (>= 1.2.0, < 2.0)
103
106
  rspec-support (~> 3.12.0)
104
- rspec-support (3.12.0)
107
+ rspec-support (3.12.1)
105
108
  rspec_junit_formatter (0.6.0)
106
109
  rspec-core (>= 2, < 4, != 2.12.0)
107
- rss (0.2.9)
110
+ rss (0.3.0)
108
111
  rexml
109
- rubocop (1.48.1)
112
+ rubocop (1.56.3)
113
+ base64 (~> 0.1.1)
110
114
  json (~> 2.3)
115
+ language_server-protocol (>= 3.17.0)
111
116
  parallel (~> 1.10)
112
- parser (>= 3.2.0.0)
117
+ parser (>= 3.2.2.3)
113
118
  rainbow (>= 2.2.2, < 4.0)
114
119
  regexp_parser (>= 1.8, < 3.0)
115
120
  rexml (>= 3.2.5, < 4.0)
116
- rubocop-ast (>= 1.26.0, < 2.0)
121
+ rubocop-ast (>= 1.28.1, < 2.0)
117
122
  ruby-progressbar (~> 1.7)
118
123
  unicode-display_width (>= 2.4.0, < 3.0)
119
- rubocop-ast (1.28.0)
124
+ rubocop-ast (1.29.0)
120
125
  parser (>= 3.2.1.0)
121
- rubocop-capybara (2.17.1)
126
+ rubocop-capybara (2.18.0)
122
127
  rubocop (~> 1.41)
128
+ rubocop-factory_bot (2.23.1)
129
+ rubocop (~> 1.33)
123
130
  rubocop-rake (0.6.0)
124
131
  rubocop (~> 1.0)
125
- rubocop-rspec (2.19.0)
132
+ rubocop-rspec (2.24.0)
126
133
  rubocop (~> 1.33)
127
134
  rubocop-capybara (~> 2.17)
135
+ rubocop-factory_bot (~> 2.22)
128
136
  ruby-progressbar (1.13.0)
129
137
  simplecov (0.22.0)
130
138
  docile (~> 1.1)
@@ -136,11 +144,11 @@ GEM
136
144
  attr_extras (>= 6.2.4)
137
145
  diff-lcs
138
146
  patience_diff
139
- thor (1.2.1)
147
+ thor (1.2.2)
140
148
  tzinfo (2.0.6)
141
149
  concurrent-ruby (~> 1.0)
142
150
  unicode-display_width (2.4.2)
143
- zeitwerk (2.6.7)
151
+ zeitwerk (2.6.11)
144
152
 
145
153
  PLATFORMS
146
154
  ruby
@@ -159,4 +167,4 @@ DEPENDENCIES
159
167
  simplecov
160
168
 
161
169
  BUNDLED WITH
162
- 2.3.17
170
+ 2.4.13
@@ -35,7 +35,7 @@ Gem::Specification.new do |spec|
35
35
  spec.add_dependency 'openapi3_parser' # Parsing openapi doc
36
36
  # Match these version requirements to what committee wants,
37
37
  # so that our client (non-committee) users have the same dependencies.
38
- spec.add_dependency 'openapi_parser', '>= 0.11.1', '< 1.0'
38
+ spec.add_dependency 'openapi_parser', '~> 1.0'
39
39
  spec.add_dependency 'rss' # used for date/time validation
40
40
  spec.add_dependency 'super_diff'
41
41
  spec.add_dependency 'thor'
@@ -24,6 +24,11 @@ module Cocina
24
24
  generate_for(schema) if schema
25
25
  end
26
26
 
27
+ %w[DRO Collection AdminPolicy].each do |schema_name|
28
+ schema = schema_for(schema_name, lite: true)
29
+ filepaths << generate_for(schema)
30
+ end
31
+
27
32
  auto_format(filepaths)
28
33
  generate_vocab
29
34
  generate_descriptive_docs
@@ -94,13 +99,13 @@ module Cocina
94
99
  @schemas ||= Openapi3Parser.load_file(options[:openapi]).components.schemas
95
100
  end
96
101
 
97
- def schema_for(schema_name)
102
+ def schema_for(schema_name, lite: false)
98
103
  schema_doc = schemas[schema_name]
99
104
  return nil if schema_doc.nil?
100
105
 
101
106
  case schema_doc.type
102
107
  when 'object'
103
- Schema.new(schema_doc, schemas: schemas.keys)
108
+ Schema.new(schema_doc, schemas: schemas.keys, lite: lite)
104
109
  when 'string'
105
110
  Datatype.new(schema_doc, schemas: schemas.keys)
106
111
  when NilClass
@@ -71,7 +71,7 @@ module Cocina
71
71
  end
72
72
 
73
73
  def validatable?
74
- !schema_doc.node_context.document.paths["/validate/#{schema_doc.name}"].nil?
74
+ !schema_doc.node_context.document.paths["/validate/#{schema_doc.name}"].nil? && !lite
75
75
  end
76
76
 
77
77
  def properties
@@ -119,12 +119,14 @@ module Cocina
119
119
 
120
120
  def schema_properties_for(doc)
121
121
  doc.properties.map do |key, properties_doc|
122
- property_class_for(properties_doc).new(properties_doc,
123
- key: key,
124
- required: doc.requires?(key),
125
- nullable: properties_doc.nullable?,
126
- parent: self,
127
- schemas: schemas)
122
+ clazz = property_class_for(properties_doc)
123
+ clazz.new(properties_doc,
124
+ key: key,
125
+ required: doc.requires?(key),
126
+ relaxed: lite && clazz != SchemaValue,
127
+ nullable: properties_doc.nullable?,
128
+ parent: self,
129
+ schemas: schemas)
128
130
  end
129
131
  end
130
132
  end
@@ -4,9 +4,9 @@ module Cocina
4
4
  module Generator
5
5
  # Base class for generating from openapi
6
6
  class SchemaBase
7
- attr_reader :schema_doc, :key, :required, :nullable, :parent, :relaxed, :schemas
7
+ attr_reader :schema_doc, :key, :required, :nullable, :parent, :relaxed, :schemas, :lite
8
8
 
9
- def initialize(schema_doc, key: nil, required: false, nullable: false, parent: nil, relaxed: false, schemas: [])
9
+ def initialize(schema_doc, key: nil, required: false, nullable: false, parent: nil, relaxed: false, schemas: [], lite: false)
10
10
  @schema_doc = schema_doc
11
11
  @key = key
12
12
  @required = required
@@ -14,6 +14,7 @@ module Cocina
14
14
  @parent = parent
15
15
  @relaxed = relaxed
16
16
  @schemas = schemas
17
+ @lite = lite
17
18
  end
18
19
 
19
20
  def filename
@@ -21,7 +22,7 @@ module Cocina
21
22
  end
22
23
 
23
24
  def name
24
- key || schema_doc.name
25
+ "#{key || schema_doc.name}#{lite ? 'Lite' : ''}"
25
26
  end
26
27
 
27
28
  # Allows nullable values to be set to nil. This is useful when doing an
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Cocina
4
+ module Models
5
+ class AdminPolicyLite < Struct
6
+ include Checkable
7
+
8
+ TYPES = ['https://cocina.sul.stanford.edu/models/admin_policy'].freeze
9
+
10
+ # The version of Cocina with which this object conforms.
11
+ # example: 1.2.3
12
+ attribute :cocinaVersion, CocinaVersion.default(VERSION)
13
+ attribute :type, Types::Strict::String.enum(*AdminPolicyLite::TYPES)
14
+ # example: druid:bc123df4567
15
+ attribute :externalIdentifier, Druid
16
+ attribute :label, Types::Strict::String
17
+ attribute :version, Types::Strict::Integer
18
+ attribute? :administrative, AdminPolicyAdministrative.optional
19
+ attribute? :description, Description.optional
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,32 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Cocina
4
+ module Models
5
+ # A group of Digital Repository Objects that indicate some type of conceptual grouping within the domain that is worth reusing across the system.
6
+ class CollectionLite < Struct
7
+ include Checkable
8
+
9
+ TYPES = ['https://cocina.sul.stanford.edu/models/collection',
10
+ 'https://cocina.sul.stanford.edu/models/curated-collection',
11
+ 'https://cocina.sul.stanford.edu/models/user-collection',
12
+ 'https://cocina.sul.stanford.edu/models/exhibit',
13
+ 'https://cocina.sul.stanford.edu/models/series'].freeze
14
+
15
+ # The version of Cocina with which this object conforms.
16
+ # example: 1.2.3
17
+ attribute :cocinaVersion, CocinaVersion.default(VERSION)
18
+ # The content type of the Collection. Selected from an established set of values.
19
+ attribute :type, Types::Strict::String.enum(*CollectionLite::TYPES)
20
+ # example: druid:bc123df4567
21
+ attribute :externalIdentifier, Druid
22
+ # Primary processing label (can be same as title) for a Collection.
23
+ attribute :label, Types::Strict::String
24
+ # Version for the Collection within SDR.
25
+ attribute :version, Types::Strict::Integer
26
+ attribute? :access, CollectionAccess.optional
27
+ attribute? :administrative, Administrative.optional
28
+ attribute? :description, Description.optional
29
+ attribute? :identification, CollectionIdentification.optional
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,44 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Cocina
4
+ module Models
5
+ # Domain-defined abstraction of a 'work'. Digital Repository Objects' abstraction is describable for our domain’s purposes, i.e. for management needs within our system.
6
+ class DROLite < Struct
7
+ include Checkable
8
+
9
+ TYPES = ['https://cocina.sul.stanford.edu/models/object',
10
+ 'https://cocina.sul.stanford.edu/models/3d',
11
+ 'https://cocina.sul.stanford.edu/models/agreement',
12
+ 'https://cocina.sul.stanford.edu/models/book',
13
+ 'https://cocina.sul.stanford.edu/models/document',
14
+ 'https://cocina.sul.stanford.edu/models/geo',
15
+ 'https://cocina.sul.stanford.edu/models/image',
16
+ 'https://cocina.sul.stanford.edu/models/page',
17
+ 'https://cocina.sul.stanford.edu/models/photograph',
18
+ 'https://cocina.sul.stanford.edu/models/manuscript',
19
+ 'https://cocina.sul.stanford.edu/models/map',
20
+ 'https://cocina.sul.stanford.edu/models/media',
21
+ 'https://cocina.sul.stanford.edu/models/track',
22
+ 'https://cocina.sul.stanford.edu/models/webarchive-binary',
23
+ 'https://cocina.sul.stanford.edu/models/webarchive-seed'].freeze
24
+
25
+ # The version of Cocina with which this object conforms.
26
+ # example: 1.2.3
27
+ attribute :cocinaVersion, CocinaVersion.default(VERSION)
28
+ # The content type of the DRO. Selected from an established set of values.
29
+ attribute :type, Types::Strict::String.enum(*DROLite::TYPES)
30
+ # example: druid:bc123df4567
31
+ attribute :externalIdentifier, Druid
32
+ # Primary processing label (can be same as title) for a DRO.
33
+ attribute :label, Types::Strict::String
34
+ # Version for the DRO within SDR.
35
+ attribute :version, Types::Strict::Integer
36
+ attribute? :access, DROAccess.optional
37
+ attribute? :administrative, Administrative.optional
38
+ attribute? :description, Description.optional
39
+ attribute? :identification, Identification.optional
40
+ attribute? :structural, DROStructural.optional
41
+ attribute? :geographic, Geographic.optional
42
+ end
43
+ end
44
+ end
@@ -145,7 +145,7 @@ module Cocina
145
145
  return if raw_type.blank?
146
146
 
147
147
  first_event_type = event_type(origin_info_nodes.first)
148
- return first_event_type if origin_info_nodes.all? { |node| event_type(node) == first_event_type }
148
+ first_event_type if origin_info_nodes.all? { |node| event_type(node) == first_event_type }
149
149
  end
150
150
 
151
151
  # @return String displayLabel for the cocina event if it is the same for all the origin_info_nodes, o.w. nil
@@ -154,7 +154,7 @@ module Cocina
154
154
  return if raw_label.blank?
155
155
 
156
156
  first_label = display_label(origin_info_nodes.first)
157
- return first_label if origin_info_nodes.all? { |node| display_label(node) == first_label }
157
+ first_label if origin_info_nodes.all? { |node| display_label(node) == first_label }
158
158
  end
159
159
 
160
160
  def add_info_to_event(event, origin_info_node)
@@ -93,7 +93,8 @@ module Cocina
93
93
 
94
94
  def build_subject
95
95
  return [build_subject_for_center_point] unless centerpoint.empty?
96
- return build_subject_for_bounding_box unless envelope.empty?
96
+
97
+ build_subject_for_bounding_box unless envelope.empty?
97
98
  end
98
99
 
99
100
  def build_subject_for_center_point
@@ -235,7 +235,7 @@ module Cocina
235
235
  cocina_roles = role_nodes.filter_map { |role_node| role_for(role_node) }.presence
236
236
  return if cocina_roles.blank?
237
237
 
238
- return 'event' if cocina_roles.first[:value] == 'event'
238
+ 'event' if cocina_roles.first[:value] == 'event'
239
239
  end
240
240
 
241
241
  def activity_date?(name_part_node)
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Cocina
4
4
  module Models
5
- VERSION = '0.90.0'
5
+ VERSION = '0.91.0'
6
6
  end
7
7
  end
data/lib/cocina/models.rb CHANGED
@@ -23,6 +23,7 @@ class CocinaModelsInflector < Zeitwerk::Inflector
23
23
  'dro' => 'DRO',
24
24
  'request_dro' => 'RequestDRO',
25
25
  'dro_access' => 'DROAccess',
26
+ 'dro_lite' => 'DROLite',
26
27
  'dro_structural' => 'DROStructural',
27
28
  'dro_with_metadata' => 'DROWithMetadata',
28
29
  'request_dro_structural' => 'RequestDROStructural',
@@ -117,6 +118,31 @@ module Cocina
117
118
  clazz.new(dyn, false, validate)
118
119
  end
119
120
 
121
+ # Build "lite" versions of DROs, Collections, and AdminPolicies.
122
+ # Lite versions do not require attributes that are required in the normal versions.
123
+ # For example, "description" is required for a DRO, but optional for a DROLite.
124
+ # Lite versions also are not validated / validatable.
125
+ # Lite versions are useful for instantiating partially populated cocina objects similar to an
126
+ # ActiveRecord instantiated using .select (See https://guides.rubyonrails.org/active_record_querying.html#selecting-specific-fields)
127
+ # @param [Hash] dyn a ruby hash representation of the JSON serialization of a Collection, DRO, or AdminPolicy
128
+ # @return [DROLite,CollectionLite,AdminPolicyLite]
129
+ # @raises [UnknownTypeError] if a valid type is not found in the data
130
+ # @raises [ValidationError] if a type field cannot be found in the data
131
+ def self.build_lite(dyn)
132
+ clazz = case type_for(dyn)
133
+ when *DRO::TYPES
134
+ DROLite
135
+ when *Collection::TYPES
136
+ CollectionLite
137
+ when *AdminPolicy::TYPES
138
+ AdminPolicyLite
139
+ else
140
+ raise UnknownTypeError, "Unknown type: '#{dyn.with_indifferent_access.fetch('type')}'"
141
+ end
142
+ # dyn for lite may contain extra keys
143
+ clazz.new(dyn.with_indifferent_access.slice(*clazz.attribute_names))
144
+ end
145
+
120
146
  # Coerces DROWithMetadata, CollectionWithMetadata, AdminPolicyWithMetadata to DRO, Collection, AdminPolicy
121
147
  # @param [DROWithMetadata,CollectionWithMetadata,AdminPolicyWithMetadata] cocina_object
122
148
  # @return [DRO,Collection,AdminPolicy]
@@ -15,10 +15,13 @@ module Cocina
15
15
  SUPPORTED_TYPES = %i[
16
16
  admin_policy
17
17
  admin_policy_with_metadata
18
+ admin_policy_lite
18
19
  collection
19
20
  collection_with_metadata
21
+ collection_lite
20
22
  dro
21
23
  dro_with_metadata
24
+ dro_lite
22
25
  request_admin_policy
23
26
  request_collection
24
27
  request_dro
@@ -88,6 +91,10 @@ module Cocina
88
91
  Cocina::Models.build(build_dro_properties(**DRO_DEFAULTS.merge(attributes)))
89
92
  end
90
93
 
94
+ def self.build_dro_lite(attributes)
95
+ Cocina::Models.build_lite(build_dro_properties(**DRO_DEFAULTS.merge(attributes)))
96
+ end
97
+
91
98
  # rubocop:disable Metrics/ParameterLists
92
99
  def self.build_request_dro_properties(type:, version:, label:, title:, source_id:, admin_policy_id:,
93
100
  barcode: nil, catkeys: [], folio_instance_hrids: [], collection_ids: [])
@@ -166,6 +173,10 @@ module Cocina
166
173
  Cocina::Models.build(build_collection_properties(**COLLECTION_DEFAULTS.merge(attributes)))
167
174
  end
168
175
 
176
+ def self.build_collection_lite(attributes)
177
+ Cocina::Models.build_lite(build_collection_properties(**COLLECTION_DEFAULTS.merge(attributes)))
178
+ end
179
+
169
180
  def self.build_request_collection(attributes)
170
181
  Cocina::Models.build_request(build_request_collection_properties(**REQUEST_COLLECTION_DEFAULTS.merge(attributes)))
171
182
  end
@@ -174,6 +185,10 @@ module Cocina
174
185
  Cocina::Models.build(build_admin_policy_properties(**ADMIN_POLICY_DEFAULTS.merge(attributes)))
175
186
  end
176
187
 
188
+ def self.build_admin_policy_lite(attributes)
189
+ Cocina::Models.build_lite(build_admin_policy_properties(**ADMIN_POLICY_DEFAULTS.merge(attributes)))
190
+ end
191
+
177
192
  def self.build_request_admin_policy(attributes)
178
193
  Cocina::Models.build_request(build_request_admin_policy_properties(**REQUEST_ADMIN_POLICY_DEFAULTS.merge(attributes)))
179
194
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cocina-models
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.90.0
4
+ version: 0.91.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Justin Coyne
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-03-31 00:00:00.000000000 Z
11
+ date: 2023-09-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -140,20 +140,14 @@ dependencies:
140
140
  name: openapi_parser
141
141
  requirement: !ruby/object:Gem::Requirement
142
142
  requirements:
143
- - - ">="
144
- - !ruby/object:Gem::Version
145
- version: 0.11.1
146
- - - "<"
143
+ - - "~>"
147
144
  - !ruby/object:Gem::Version
148
145
  version: '1.0'
149
146
  type: :runtime
150
147
  prerelease: false
151
148
  version_requirements: !ruby/object:Gem::Requirement
152
149
  requirements:
153
- - - ">="
154
- - !ruby/object:Gem::Version
155
- version: 0.11.1
156
- - - "<"
150
+ - - "~>"
157
151
  - !ruby/object:Gem::Version
158
152
  version: '1.0'
159
153
  - !ruby/object:Gem::Dependency
@@ -367,6 +361,7 @@ files:
367
361
  - lib/cocina/models/admin_policy.rb
368
362
  - lib/cocina/models/admin_policy_access_template.rb
369
363
  - lib/cocina/models/admin_policy_administrative.rb
364
+ - lib/cocina/models/admin_policy_lite.rb
370
365
  - lib/cocina/models/admin_policy_with_metadata.rb
371
366
  - lib/cocina/models/administrative.rb
372
367
  - lib/cocina/models/applies_to.rb
@@ -384,6 +379,7 @@ files:
384
379
  - lib/cocina/models/collection.rb
385
380
  - lib/cocina/models/collection_access.rb
386
381
  - lib/cocina/models/collection_identification.rb
382
+ - lib/cocina/models/collection_lite.rb
387
383
  - lib/cocina/models/collection_with_metadata.rb
388
384
  - lib/cocina/models/contributor.rb
389
385
  - lib/cocina/models/controlled_digital_lending_access.rb
@@ -407,6 +403,7 @@ files:
407
403
  - lib/cocina/models/doi_pattern.rb
408
404
  - lib/cocina/models/dro.rb
409
405
  - lib/cocina/models/dro_access.rb
406
+ - lib/cocina/models/dro_lite.rb
410
407
  - lib/cocina/models/dro_structural.rb
411
408
  - lib/cocina/models/dro_with_metadata.rb
412
409
  - lib/cocina/models/druid.rb
@@ -548,7 +545,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
548
545
  - !ruby/object:Gem::Version
549
546
  version: '0'
550
547
  requirements: []
551
- rubygems_version: 3.2.32
548
+ rubygems_version: 3.3.7
552
549
  signing_key:
553
550
  specification_version: 4
554
551
  summary: Data models for the SDR