kube_schema 1.9.0 → 1.9.2

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: 9946ce747cc72c7fd6ca85a8427daf711844160d0fd932e2ee0adaba687f4982
4
- data.tar.gz: 3b4843e1165f6ac2a61ded6415851d80a9515b4e7f0a533be9940560e55446ca
3
+ metadata.gz: ff3fedb44c520fb2db66f16b3ae12b6b4fbe3d8a947e636da9c196fa9e80c529
4
+ data.tar.gz: ca30582966d7fa750b14ef69d935a24ea2532d1b9b5eb330df9b611d1894a675
5
5
  SHA512:
6
- metadata.gz: f369dd4d71f53dc8ce4ad7b310c992283cabda559d0f493017400418043f69d5f340b6f8642b6e34a61db9610be206defdb5deeb6ac01f5f9e1f97f2dd3665bf
7
- data.tar.gz: 52cdb3057cd53c1ae36c1be4115d03ff353ec39707bf07f11ce7d7c0732de8c56a2ff2c5f5be8bfe0f244bef4fea82d54f33b407909bb61a9e9c5da0fb3884e3
6
+ metadata.gz: 199d71dcee2dc211d5bc06a5d748e1019a2df409d7dbfc086d9b3c397c8f7c72ddc4143739e8418d366799e5ec3c5dafa46e693f09722aaf0c7ca8138633f588
7
+ data.tar.gz: cf5ed7f39324cdd202585edc0aa5b52825c746daee4776d2900d9dc4b2b4f353dd854d986100b61b2815c9949f3cedbfaa74696296f320ff07a08c3e7a8c86f4
data/Gemfile.lock CHANGED
@@ -1,14 +1,13 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- kube_schema (1.9.0)
4
+ kube_schema (1.9.2)
5
5
  json_schemer (~> 2.5.0)
6
6
  rubyshell (~> 1.5.0)
7
7
 
8
8
  GEM
9
9
  remote: https://rubygems.org/
10
10
  specs:
11
- ast (2.4.3)
12
11
  async (2.39.0)
13
12
  console (~> 1.29)
14
13
  fiber-annotation
@@ -106,8 +105,6 @@ GEM
106
105
  hana (~> 1.3)
107
106
  regexp_parser (~> 2.0)
108
107
  simpleidn (~> 0.2)
109
- language_server-protocol (3.17.0.5)
110
- lint_roller (1.1.0)
111
108
  localhost (1.7.0)
112
109
  logger (1.7.0)
113
110
  mail (2.9.0)
@@ -135,10 +132,6 @@ GEM
135
132
  net-smtp (0.5.1)
136
133
  net-protocol
137
134
  openssl (4.0.1)
138
- parallel (2.0.1)
139
- parser (3.3.11.1)
140
- ast (~> 2.4.1)
141
- racc
142
135
  pp (0.6.3)
143
136
  prettyprint
144
137
  prettyprint (0.2.0)
@@ -158,13 +151,11 @@ GEM
158
151
  psych (5.3.1)
159
152
  date
160
153
  stringio
161
- racc (1.8.1)
162
154
  rack (3.2.6)
163
155
  rackula (1.4.1)
164
156
  falcon (~> 0.46)
165
157
  samovar (~> 2.1)
166
158
  variant
167
- rainbow (3.1.1)
168
159
  rake (13.4.2)
169
160
  rbs (4.0.2)
170
161
  logger
@@ -190,21 +181,6 @@ GEM
190
181
  diff-lcs (>= 1.2.0, < 2.0)
191
182
  rspec-support (~> 3.13.0)
192
183
  rspec-support (3.13.7)
193
- rubocop (1.86.1)
194
- json (~> 2.3)
195
- language_server-protocol (~> 3.17.0.2)
196
- lint_roller (~> 1.1.0)
197
- parallel (>= 1.10)
198
- parser (>= 3.3.0.2)
199
- rainbow (>= 2.2.2, < 4.0)
200
- regexp_parser (>= 2.9.3, < 3.0)
201
- rubocop-ast (>= 1.49.0, < 2.0)
202
- ruby-progressbar (~> 1.7)
203
- unicode-display_width (>= 2.4.0, < 4.0)
204
- rubocop-ast (1.49.1)
205
- parser (>= 3.3.7.2)
206
- prism (~> 1.7)
207
- ruby-progressbar (1.13.0)
208
184
  rubyshell (1.5.0)
209
185
  rugged (1.9.0)
210
186
  samovar (2.4.1)
@@ -217,9 +193,6 @@ GEM
217
193
  timeout (0.6.1)
218
194
  traces (0.18.2)
219
195
  tsort (0.2.0)
220
- unicode-display_width (3.2.0)
221
- unicode-emoji (~> 4.1)
222
- unicode-emoji (4.2.0)
223
196
  utopia (2.32.1)
224
197
  bake (~> 0.20)
225
198
  concurrent-ruby (~> 1.2)
@@ -258,7 +231,6 @@ DEPENDENCIES
258
231
  kube_schema!
259
232
  rake (~> 13.0)
260
233
  rspec (~> 3.13)
261
- rubocop (~> 1.21)
262
234
  utopia-project
263
235
 
264
236
  BUNDLED WITH
data/kube_schema.gemspec CHANGED
@@ -30,7 +30,6 @@ Gem::Specification.new do |spec|
30
30
 
31
31
  spec.add_development_dependency "rspec", "~> 3.13"
32
32
  spec.add_development_dependency "rake", "~> 13.0"
33
- spec.add_development_dependency "rubocop", "~> 1.21"
34
33
 
35
34
  spec.add_dependency "rubyshell", "~> 1.5.0"
36
35
  spec.add_dependency "json_schemer", "~> 2.5.0"
@@ -66,6 +66,12 @@ module Kube
66
66
  "\nExpected \"group/version/kind\" or \"version/kind\"."
67
67
  end
68
68
 
69
+ # Custom schemas take precedence on full-GVK lookups too.
70
+ custom = find_custom_entry_by_gvk(group, version, kind)
71
+ if custom
72
+ return build_resource_class(custom[:schema], custom[:defaults])
73
+ end
74
+
69
75
  entry = find_gvk_entry_by_full_gvk(group, version, kind)
70
76
  else
71
77
  # Kind-only lookup — custom schemas take precedence.
@@ -92,7 +98,8 @@ module Kube
92
98
  #
93
99
  # @return [Array<String>] sorted kind names
94
100
  def list_resources
95
- (gvk_index.keys + Schema.custom_schemas.keys).uniq.sort
101
+ custom_kinds = Schema.custom_schemas.values.map { |v| v[:defaults]["kind"] }
102
+ (gvk_index.keys + custom_kinds).uniq.sort
96
103
  end
97
104
 
98
105
  # Look up a sub-spec definition by short name (e.g. "Container",
@@ -243,19 +250,25 @@ module Kube
243
250
  end
244
251
  end
245
252
 
246
- # Find a custom schema entry by kind (case-insensitive).
253
+ # Find a custom schema entry by kind (case-insensitive). The registry
254
+ # is keyed by full GVK, so match on each entry's recorded kind. When
255
+ # several groups register the same kind, the first registered wins.
247
256
  # Returns the { schema:, defaults: } hash or nil.
248
257
  def find_custom_entry(kind)
249
258
  registry = Schema.custom_schemas
250
- return registry[kind] if registry.key?(kind)
251
-
252
- registry.each do |k, v|
253
- return v if k.downcase == kind.downcase
254
- end
259
+ registry.each_value { |v| return v if v[:defaults]["kind"] == kind }
260
+ registry.each_value { |v| return v if v[:defaults]["kind"].casecmp?(kind) }
255
261
 
256
262
  nil
257
263
  end
258
264
 
265
+ # Find a custom schema entry by exact group, version, and kind.
266
+ # Returns the { schema:, defaults: } hash or nil.
267
+ def find_custom_entry_by_gvk(group, version, kind)
268
+ api_version = group.empty? ? version : "#{group}/#{version}"
269
+ Schema.custom_schemas["#{api_version}/#{kind}"]
270
+ end
271
+
259
272
  # Build a Resource subclass from a JSONSchemer instance and defaults hash.
260
273
  def build_resource_class(schema_instance, defaults)
261
274
  Class.new(::Kube::Schema::Resource) do
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Kube
4
4
  module Schema
5
- VERSION = "1.9.0"
5
+ VERSION = "1.9.2"
6
6
  end
7
7
  end
data/lib/kube/schema.rb CHANGED
@@ -74,7 +74,12 @@ module Kube
74
74
  "schema must be a Hash, a JSON string, or a file path — got #{schema.class}"
75
75
  end
76
76
 
77
- @custom_schemas[kind] = {
77
+ # Key by full GVK ("group/version/Kind") so a registered CRD resolves
78
+ # on fully-qualified lookups (e.g. the api_version/kind path that
79
+ # Resource#rebuild reconstructs), not just kind-only lookups. Keying by
80
+ # bare kind also collided when two CRDs shared a kind across groups.
81
+ key = api_version ? "#{api_version}/#{kind}" : kind
82
+ @custom_schemas[key] = {
78
83
  schema: JSONSchemer.schema(parsed),
79
84
  defaults: { "apiVersion" => api_version, "kind" => kind }.freeze
80
85
  }
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kube_schema
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.9.0
4
+ version: 1.9.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nathan K
@@ -37,20 +37,6 @@ dependencies:
37
37
  - - "~>"
38
38
  - !ruby/object:Gem::Version
39
39
  version: '13.0'
40
- - !ruby/object:Gem::Dependency
41
- name: rubocop
42
- requirement: !ruby/object:Gem::Requirement
43
- requirements:
44
- - - "~>"
45
- - !ruby/object:Gem::Version
46
- version: '1.21'
47
- type: :development
48
- prerelease: false
49
- version_requirements: !ruby/object:Gem::Requirement
50
- requirements:
51
- - - "~>"
52
- - !ruby/object:Gem::Version
53
- version: '1.21'
54
40
  - !ruby/object:Gem::Dependency
55
41
  name: rubyshell
56
42
  requirement: !ruby/object:Gem::Requirement