cocina-models 0.91.3 → 0.92.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: 8062f7e04f843861947c0d53bf9d909620f991d262457f6ecb80842a67dcfe21
4
- data.tar.gz: 9b1da95041e78c09ec88e70ec63cb940d29edcc22fd408428cd351a665223970
3
+ metadata.gz: 0fb90197036280ad978dc4e59b548fcb954d7b602799294cfdde8bd3ef2a1568
4
+ data.tar.gz: fd7c2c49522772f866dc04d629296c537f88d88dd8943ce4b74bb77460be31d9
5
5
  SHA512:
6
- metadata.gz: dc5c8c49ed0765cd5281f7a5c3a05b92862b7c6e6e3d982891c381af2881d05026fe22f8d718c0219522f6dffe7639fda3d59e90c13a141f8fd693d17db3cecd
7
- data.tar.gz: 78802018f0a02aa4683c01663535bacd89ded3ffe4ff43433e69d267f33283f935182aabf24d23d2abaceb2a748fae7208e6c9f4cb2f0b450ba06d22cab50dbe
6
+ metadata.gz: 84a09b86f9f922ba9b8c433760fe3613035d72cba102f5a93dc9e7ec07a4d7bfdef5f449375fa4792eb0b8045f3324f23360183b0f9b5aa8ea21082336681b22
7
+ data.tar.gz: 93b59a61650aae4c19cab66d84a216f66f65a289444e58fc48fdbd9088d33dd083fe9c57f57971574dae13a0b21ab4453ee48f8bad14f408ee3149534eb2aa99
data/.rubocop.yml CHANGED
@@ -116,6 +116,9 @@ Naming/PredicateName:
116
116
 
117
117
  # ----- RSpec ------
118
118
 
119
+ RSpec/NestedGroups:
120
+ Max: 5
121
+
119
122
  RSpec/BeEq: # new in 2.9.0
120
123
  Enabled: true
121
124
 
data/.rubocop_todo.yml CHANGED
@@ -1,6 +1,6 @@
1
1
  # This configuration was generated by
2
2
  # `rubocop --auto-gen-config --auto-gen-only-exclude`
3
- # on 2023-06-20 05:46:00 UTC using RuboCop version 1.52.1.
3
+ # on 2023-11-01 19:51:40 UTC using RuboCop version 1.57.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
@@ -57,18 +57,11 @@ Metrics/ParameterLists:
57
57
  RSpec/DescribeClass:
58
58
  Enabled: false
59
59
 
60
- # Offense count: 87
60
+ # Offense count: 224
61
61
  # Configuration parameters: CountAsOne.
62
62
  RSpec/ExampleLength:
63
63
  Max: 103
64
64
 
65
- # Offense count: 10
66
- # Configuration parameters: Max, AllowedGroups.
67
- RSpec/NestedGroups:
68
- Exclude:
69
- - 'spec/cocina/models/mapping/normalizers/mods/origin_info_normalizer_spec.rb'
70
- - 'spec/cocina/models/validators/date_time_validator_spec.rb'
71
-
72
65
  # Offense count: 19
73
66
  RSpec/PendingWithoutReason:
74
67
  Exclude:
@@ -99,7 +92,7 @@ Style/MultilineBlockChain:
99
92
  - 'lib/cocina/models/mapping/to_mods/form.rb'
100
93
  - 'lib/cocina/models/mapping/to_mods/subject.rb'
101
94
 
102
- # Offense count: 239
95
+ # Offense count: 249
103
96
  # This cop supports safe autocorrection (--autocorrect).
104
97
  # Configuration parameters: AllowHeredoc, AllowURI, URISchemes, IgnoreCopDirectives, AllowedPatterns.
105
98
  # URISchemes: http, https
data/Gemfile.lock CHANGED
@@ -1,13 +1,14 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- cocina-models (0.91.3)
4
+ cocina-models (0.92.0)
5
5
  activesupport
6
6
  deprecation
7
7
  dry-struct (~> 1.0)
8
8
  dry-types (~> 1.1)
9
9
  edtf
10
10
  equivalent-xml
11
+ i18n
11
12
  jsonpath
12
13
  nokogiri
13
14
  openapi3_parser
@@ -79,7 +80,7 @@ GEM
79
80
  jsonpath (1.1.5)
80
81
  multi_json
81
82
  language_server-protocol (3.17.0.3)
82
- mini_portile2 (2.8.4)
83
+ mini_portile2 (2.8.5)
83
84
  minitest (5.20.0)
84
85
  multi_json (1.15.0)
85
86
  mutex_m (0.1.2)
@@ -99,7 +100,7 @@ GEM
99
100
  racc (1.7.1)
100
101
  rack (3.0.8)
101
102
  rainbow (3.1.1)
102
- rake (13.0.6)
103
+ rake (13.1.0)
103
104
  regexp_parser (2.8.2)
104
105
  rexml (3.2.6)
105
106
  rspec (3.12.0)
@@ -119,8 +120,7 @@ GEM
119
120
  rspec-core (>= 2, < 4, != 2.12.0)
120
121
  rss (0.3.0)
121
122
  rexml
122
- rubocop (1.57.1)
123
- base64 (~> 0.1.1)
123
+ rubocop (1.57.2)
124
124
  json (~> 2.3)
125
125
  language_server-protocol (>= 3.17.0)
126
126
  parallel (~> 1.10)
@@ -131,7 +131,7 @@ GEM
131
131
  rubocop-ast (>= 1.28.1, < 2.0)
132
132
  ruby-progressbar (~> 1.7)
133
133
  unicode-display_width (>= 2.4.0, < 3.0)
134
- rubocop-ast (1.29.0)
134
+ rubocop-ast (1.30.0)
135
135
  parser (>= 3.2.1.0)
136
136
  rubocop-capybara (2.19.0)
137
137
  rubocop (~> 1.41)
@@ -139,8 +139,8 @@ GEM
139
139
  rubocop (~> 1.33)
140
140
  rubocop-rake (0.6.0)
141
141
  rubocop (~> 1.0)
142
- rubocop-rspec (2.24.1)
143
- rubocop (~> 1.33)
142
+ rubocop-rspec (2.25.0)
143
+ rubocop (~> 1.40)
144
144
  rubocop-capybara (~> 2.17)
145
145
  rubocop-factory_bot (~> 2.22)
146
146
  ruby-progressbar (1.13.0)
@@ -155,7 +155,7 @@ GEM
155
155
  attr_extras (>= 6.2.4)
156
156
  diff-lcs
157
157
  patience_diff
158
- thor (1.2.2)
158
+ thor (1.3.0)
159
159
  tzinfo (2.0.6)
160
160
  concurrent-ruby (~> 1.0)
161
161
  unicode-display_width (2.5.0)
@@ -30,6 +30,7 @@ Gem::Specification.new do |spec|
30
30
  spec.add_dependency 'dry-types', '~> 1.1'
31
31
  spec.add_dependency 'edtf' # used for date/time validation
32
32
  spec.add_dependency 'equivalent-xml' # for diffing MODS
33
+ spec.add_dependency 'i18n' # for validating BCP 47 language tags, according to RFC 4646
33
34
  spec.add_dependency 'jsonpath' # used for date/time validation
34
35
  spec.add_dependency 'nokogiri'
35
36
  spec.add_dependency 'openapi3_parser' # Parsing openapi doc
@@ -356,6 +356,8 @@ identifier:
356
356
  - value: DOI
357
357
  code: doi
358
358
  - value: druid
359
+ - value: FOLIO
360
+ description: FOLIO HRID for the source record of the metadata.
359
361
  - value: GTIN-14 ID
360
362
  code: gtin-14
361
363
  - value: Handle
@@ -363,6 +363,8 @@ _Path: identifier.type_
363
363
  * document number
364
364
  * DOI
365
365
  * druid
366
+ * FOLIO
367
+ * FOLIO HRID for the source record of the metadata.
366
368
  * GTIN-14 ID
367
369
  * Handle
368
370
  * inventory number
@@ -22,6 +22,8 @@ module Cocina
22
22
  attribute :version, Types::Strict::Integer
23
23
  # MIME Type of the File.
24
24
  attribute? :hasMimeType, Types::Strict::String
25
+ # BCP 47 language tag: https://www.rfc-editor.org/rfc/rfc4646.txt -- other applications (like media players) expect language codes of this format, see e.g. https://videojs.com/guides/text-tracks/#srclang
26
+ attribute? :languageTag, Types::Strict::String
25
27
  # Use for the File.
26
28
  attribute? :use, Types::Strict::String
27
29
  attribute :hasMessageDigests, Types::Strict::Array.of(MessageDigest).default([].freeze)
@@ -13,6 +13,7 @@ module Cocina
13
13
  attribute? :size, Types::Strict::Integer
14
14
  attribute :version, Types::Strict::Integer
15
15
  attribute? :hasMimeType, Types::Strict::String
16
+ attribute? :languageTag, Types::Strict::String
16
17
  attribute? :externalIdentifier, Types::Strict::String
17
18
  attribute? :use, Types::Strict::String
18
19
  attribute :hasMessageDigests, Types::Strict::Array.of(MessageDigest).default([].freeze)
@@ -0,0 +1,48 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Cocina
4
+ module Models
5
+ module Validators
6
+ # Validates that a languageTag is valid according to RFC 4646, if one is present
7
+ class LanguageTagValidator
8
+ def self.validate(clazz, attributes)
9
+ new(clazz, attributes).validate
10
+ end
11
+
12
+ def initialize(clazz, attributes)
13
+ @clazz = clazz
14
+ @attributes = attributes
15
+ end
16
+
17
+ def validate
18
+ return unless meets_preconditions?
19
+
20
+ return if valid_language_tag?
21
+
22
+ raise ValidationError, 'The provided language tag is not valid according to RFC 4646: ' \
23
+ "#{attributes[:languageTag]}"
24
+ end
25
+
26
+ private
27
+
28
+ attr_reader :clazz, :attributes
29
+
30
+ def meets_preconditions?
31
+ file? && attributes[:languageTag].present?
32
+ end
33
+
34
+ def file?
35
+ (clazz::TYPES & File::TYPES).any?
36
+ rescue NameError
37
+ false
38
+ end
39
+
40
+ def valid_language_tag?
41
+ parsed_tag = I18n::Locale::Tag::Rfc4646.tag(attributes[:languageTag])
42
+
43
+ parsed_tag.present? && parsed_tag.is_a?(I18n::Locale::Tag::Rfc4646)
44
+ end
45
+ end
46
+ end
47
+ end
48
+ end
@@ -11,9 +11,12 @@ module Cocina
11
11
  PurlValidator,
12
12
  CatalogLinksValidator,
13
13
  AssociatedNameValidator,
14
- DescriptionTypesValidator,
14
+ # Removing until production data can be remediated and/or additional types can be added to configuration.
15
+ # See also spec/cocina/models/validatable_spec.rb:59
16
+ # DescriptionTypesValidator,
15
17
  DescriptionValuesValidator,
16
- DateTimeValidator
18
+ DateTimeValidator,
19
+ LanguageTagValidator
17
20
  ].freeze
18
21
 
19
22
  def self.validate(clazz, attributes)
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Cocina
4
4
  module Models
5
- VERSION = '0.91.3'
5
+ VERSION = '0.92.0'
6
6
  end
7
7
  end
data/openapi.yml CHANGED
@@ -1044,6 +1044,9 @@ components:
1044
1044
  hasMimeType:
1045
1045
  description: MIME Type of the File.
1046
1046
  type: string
1047
+ languageTag:
1048
+ description: "BCP 47 language tag: https://www.rfc-editor.org/rfc/rfc4646.txt -- other applications (like media players) expect language codes of this format, see e.g. https://videojs.com/guides/text-tracks/#srclang"
1049
+ type: string
1047
1050
  use:
1048
1051
  description: Use for the File.
1049
1052
  type: string
@@ -1775,6 +1778,8 @@ components:
1775
1778
  type: integer
1776
1779
  hasMimeType:
1777
1780
  type: string
1781
+ languageTag:
1782
+ type: string
1778
1783
  externalIdentifier:
1779
1784
  type: string
1780
1785
  use:
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.91.3
4
+ version: 0.92.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-10-17 00:00:00.000000000 Z
11
+ date: 2023-11-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -94,6 +94,20 @@ dependencies:
94
94
  - - ">="
95
95
  - !ruby/object:Gem::Version
96
96
  version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: i18n
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :runtime
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
97
111
  - !ruby/object:Gem::Dependency
98
112
  name: jsonpath
99
113
  requirement: !ruby/object:Gem::Requirement
@@ -516,6 +530,7 @@ files:
516
530
  - lib/cocina/models/validators/date_time_validator.rb
517
531
  - lib/cocina/models/validators/description_types_validator.rb
518
532
  - lib/cocina/models/validators/description_values_validator.rb
533
+ - lib/cocina/models/validators/language_tag_validator.rb
519
534
  - lib/cocina/models/validators/open_api_validator.rb
520
535
  - lib/cocina/models/validators/purl_validator.rb
521
536
  - lib/cocina/models/validators/validator.rb
@@ -545,7 +560,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
545
560
  - !ruby/object:Gem::Version
546
561
  version: '0'
547
562
  requirements: []
548
- rubygems_version: 3.3.7
563
+ rubygems_version: 3.4.19
549
564
  signing_key:
550
565
  specification_version: 4
551
566
  summary: Data models for the SDR