kube-dsl 0.5.1 → 0.6.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: 739db8c0f3054804ce25cb35ea42611f2f43eea31f8dea92997d1351311696fe
4
- data.tar.gz: 361429db242279d9916f4f1759fa946f2be35c2d3d4a783e82f6640d098d7b7e
3
+ metadata.gz: 03cadaa643bb90a6baa5338e3de7905f8243c0032fde7991db072ad7b964691c
4
+ data.tar.gz: 40feae243bcc6e2a953b1b97ae0bbd865b6239354e7abe47b471227b2dff582a
5
5
  SHA512:
6
- metadata.gz: d12777c4d88d675c3f152d8ecb3cfa62fd61e4161d14752b3784f1c543e1e985bf143934b0d778de070d246bb918d8439f8f40f74d0ccf2eeb309c0e476b4892
7
- data.tar.gz: '096d6b76c15e982072f50f3207b990b60e61ecac9add7e55387974c9885afdca9f34b5369b1cb9081b364304e90bc29a876e5d2a543a1f4f8b21b405262841a5'
6
+ metadata.gz: f4c771dd4d07ee252b160c1ca4d0de23b913298974bf12f9374ac58ff05aa368a0962a458a9543cb959fea1e4a1596257b22a0b4571d88a0a6bf634f920d1210
7
+ data.tar.gz: 17ac1ab5ebea2c780623bc8d5bf7600b660b09d709c2a132bedb130477b9c61f8377ecf6f22cb9be8335778eb902f1736e5d0adf1d45fa4ad65a230c81be1bc9
data/CHANGELOG.md CHANGED
@@ -1,3 +1,6 @@
1
+ ## 0.6.0
2
+ * Improve path and namespace handling in generator.
3
+
1
4
  ## 0.5.1
2
5
  * Support Ruby 2.7
3
6
  - Stop using the `RubyToken` class from irb, which doesn't exist anymore.
data/Rakefile CHANGED
@@ -16,6 +16,7 @@ end
16
16
 
17
17
  task :generate do
18
18
  require 'dry/inflector'
19
+ require 'fileutils'
19
20
 
20
21
  FileUtils.rm_rf('./lib/kube-dsl/entrypoint.rb')
21
22
  FileUtils.rm_rf('./lib/kube-dsl/dsl.rb')
@@ -24,33 +25,36 @@ task :generate do
24
25
  FileUtils.mkdir_p('./vendor')
25
26
 
26
27
  export_url = "https://github.com/instrumenta/kubernetes-json-schema/trunk/v#{KubeDSL::KUBERNETES_VERSION}-local"
27
- local_path = "vendor/kubernetes-json-schema/v#{KubeDSL::KUBERNETES_VERSION}-local"
28
+ local_schema_path = "vendor/kubernetes-json-schema/v#{KubeDSL::KUBERNETES_VERSION}-local"
28
29
 
29
- unless File.exist?(local_path)
30
- system("svn export #{export_url} #{local_path}")
30
+ unless File.exist?(local_schema_path)
31
+ system("svn export #{export_url} #{local_schema_path}")
31
32
  end
32
33
 
33
- Dir.chdir('lib') do
34
- generator = KubeDSL::Generator.new(
35
- schema_dir: File.join('..', local_path),
36
- output_dir: File.join('kube-dsl', 'dsl'),
37
- inflector: Dry::Inflector.new do |inflections|
38
- inflections.acronym('DSL')
39
-
40
- inflections.plural('tls', 'tlses')
41
- inflections.singular('tls', 'tls')
42
- inflections.plural('enum', 'enums')
43
- inflections.plural('one_of', 'one_ofs')
44
- inflections.plural('any_of', 'any_ofs')
45
- inflections.plural('all_of', 'all_ofs')
46
- end
47
- )
48
-
49
- generator.generate_resource_files
50
- generator.generate_autoload_files
51
- generator.generate_entrypoint_file do |resource, ns|
52
- version = resource.ref.version || ''
53
- !version.include?('beta') && !version.include?('alpha')
34
+ generator = KubeDSL::Generator.new(
35
+ schema_dir: local_schema_path,
36
+ output_dir: File.join('lib'),
37
+ autoload_prefix: File.join('kube-dsl', 'dsl'),
38
+ dsl_namespace: ['KubeDSL', 'DSL'],
39
+ entrypoint_namespace: ['KubeDSL'],
40
+ inflector: Dry::Inflector.new do |inflections|
41
+ inflections.acronym('DSL')
42
+
43
+ inflections.singular('tls', 'tls')
44
+ inflections.singular('causes', 'cause')
45
+
46
+ inflections.plural('tls', 'tlses')
47
+ inflections.plural('enum', 'enums')
48
+ inflections.plural('one_of', 'one_ofs')
49
+ inflections.plural('any_of', 'any_ofs')
50
+ inflections.plural('all_of', 'all_ofs')
54
51
  end
52
+ )
53
+
54
+ generator.generate_resource_files
55
+ generator.generate_autoload_files
56
+ generator.generate_entrypoint_file do |resource, ns|
57
+ version = resource.ref.version || ''
58
+ !version.include?('beta') && !version.include?('alpha')
55
59
  end
56
60
  end
@@ -4,12 +4,17 @@ module KubeDSL
4
4
  class Builder
5
5
  include StringHelpers
6
6
 
7
- attr_reader :schema_dir, :output_dir, :namespace, :inflector, :resolvers
7
+ attr_reader :schema_dir, :output_dir, :autoload_prefix
8
+ attr_reader :dsl_namespace, :entrypoint_namespace
9
+ attr_reader :inflector, :resolvers
8
10
 
9
- def initialize(schema_dir:, output_dir:, inflector:)
11
+ def initialize(schema_dir:, output_dir:, autoload_prefix:, inflector:, dsl_namespace:, entrypoint_namespace:)
10
12
  @schema_dir = schema_dir
11
13
  @output_dir = output_dir
14
+ @autoload_prefix = autoload_prefix
12
15
  @inflector = inflector
16
+ @dsl_namespace = dsl_namespace
17
+ @entrypoint_namespace = entrypoint_namespace
13
18
  @resolvers ||= {}
14
19
  end
15
20
 
@@ -19,25 +24,17 @@ module KubeDSL
19
24
  end
20
25
  end
21
26
 
22
- def each_resource
27
+ def each_resource_file
23
28
  return to_enum(__method__) unless block_given?
24
29
 
25
- resources.each do |res|
26
- # "External" resources are ones that live outside the current
27
- # schema, i.e. k8s resources like ObjectMeta that other
28
- # k8s-compatible schemas depend on.
29
- #
30
- # Resources can be "empty" if they contain no properties. This
31
- # usually happens for resources that are really just aliases
32
- # for basic types like integer and string. The k8s' Duration
33
- # object is a good example. It's just an alias for string.
34
- yield res if !res.external? && !res.empty?
30
+ each_resource do |res|
31
+ yield File.join(output_dir, res.ref.ruby_autoload_path), res
35
32
  end
36
33
  end
37
34
 
38
35
  def entrypoint(&block)
39
36
  ''.tap do |ruby_code|
40
- ruby_code << "module #{namespace[0..-2].join('::')}::Entrypoint\n"
37
+ ruby_code << "module #{entrypoint_namespace.join('::')}::Entrypoint\n"
41
38
 
42
39
  each_resource do |resource|
43
40
  ns = resource.ref.ruby_namespace.join('::')
@@ -53,26 +50,15 @@ module KubeDSL
53
50
  end
54
51
  end
55
52
 
56
- def namespace
57
- @namespace ||= inflector.classify(
58
- File
59
- .split(output_dir)
60
- .map { |seg| inflector.camelize(underscore(seg)) }
61
- .join('/')
62
- ).split('::')
63
- end
64
-
65
53
  def entrypoint_path
66
- File.join(File.dirname(output_dir), 'entrypoint.rb')
54
+ File.join(output_dir, File.dirname(autoload_prefix), 'entrypoint.rb')
67
55
  end
68
56
 
69
57
  def each_autoload_file(&block)
70
58
  return to_enum(__method__) unless block
71
59
 
72
- start = output_dir.split(File::SEPARATOR).first
73
-
74
60
  each_autoload_file_helper(
75
- autoload_map[start], [start], &block
61
+ autoload_map[:root], [], &block
76
62
  )
77
63
  end
78
64
 
@@ -88,11 +74,27 @@ module KubeDSL
88
74
  end
89
75
 
90
76
  def parse_ref(ref_str)
91
- Ref.new(ref_str, namespace, output_dir, inflector, schema_dir)
77
+ Ref.new(ref_str, dsl_namespace, inflector, schema_dir, autoload_prefix)
92
78
  end
93
79
 
94
80
  private
95
81
 
82
+ def each_resource
83
+ return to_enum(__method__) unless block_given?
84
+
85
+ resources.each do |res|
86
+ # "External" resources are ones that live outside the current
87
+ # schema, i.e. k8s resources like ObjectMeta that other
88
+ # k8s-compatible schemas depend on.
89
+ #
90
+ # Resources can be "empty" if they contain no properties. This
91
+ # usually happens for resources that are really just aliases
92
+ # for basic types like integer and string. The k8s' Duration
93
+ # object is a good example. It's just an alias for string.
94
+ yield res if !res.external? && !res.empty?
95
+ end
96
+ end
97
+
96
98
  def resources
97
99
  JSON.parse(File.read(start_path))['oneOf'].map do |entry|
98
100
  resource_from_ref(resolve_ref(entry['$ref']))
@@ -105,7 +107,7 @@ module KubeDSL
105
107
  parts = res.ref.ruby_autoload_path.split(File::SEPARATOR)
106
108
  parts.reject!(&:empty?)
107
109
 
108
- parts.inject(amap) do |ret, seg|
110
+ [:root, *parts].inject(amap) do |ret, seg|
109
111
  if seg.end_with?('.rb')
110
112
  ret[seg] = res
111
113
  else
@@ -137,7 +139,7 @@ module KubeDSL
137
139
  end
138
140
 
139
141
  ruby_code << "end\n"
140
- yield File.join(*path, "#{ns}.rb"), ruby_code
142
+ yield File.join(output_dir, *path, "#{ns}.rb"), ruby_code
141
143
  each_autoload_file_helper(children, path + [ns], &block)
142
144
  end
143
145
  end
@@ -216,7 +218,7 @@ module KubeDSL
216
218
  end
217
219
 
218
220
  def start_path
219
- @entrypoint_path ||= File.join(schema_dir, 'all.json')
221
+ @start_path ||= File.join(schema_dir, 'all.json')
220
222
  end
221
223
 
222
224
  def resource_cache
@@ -1,6 +1,24 @@
1
1
  module KubeDSL::DSL::Pkg::Version
2
2
  class Info < ::KubeDSL::DSLObject
3
- value_fields :build_date, :compiler, :git_commit, :git_tree_state, :git_version, :go_version, :major, :minor, :platform
3
+ value_field :build_date
4
+ value_field :compiler
5
+ value_field :git_commit
6
+ value_field :git_tree_state
7
+ value_field :git_version
8
+ value_field :go_version
9
+ value_field :major
10
+ value_field :minor
11
+ value_field :platform
12
+
13
+ validates :build_date, field: { format: :string }, presence: false
14
+ validates :compiler, field: { format: :string }, presence: false
15
+ validates :git_commit, field: { format: :string }, presence: false
16
+ validates :git_tree_state, field: { format: :string }, presence: false
17
+ validates :git_version, field: { format: :string }, presence: false
18
+ validates :go_version, field: { format: :string }, presence: false
19
+ validates :major, field: { format: :string }, presence: false
20
+ validates :minor, field: { format: :string }, presence: false
21
+ validates :platform, field: { format: :string }, presence: false
4
22
 
5
23
  def serialize
6
24
  {}.tap do |result|
@@ -13,14 +13,14 @@ module KubeDSL
13
13
  end
14
14
 
15
15
  def generate_resource_files
16
- builder.each_resource do |res|
17
- FileUtils.mkdir_p(File.dirname(res.ref.ruby_autoload_path))
16
+ builder.each_resource_file do |path, res|
17
+ FileUtils.mkdir_p(File.dirname(path))
18
18
 
19
- if File.exist?(res.ref.ruby_autoload_path)
20
- puts "Skipping #{res.ref.ruby_autoload_path} because it already exists"
19
+ if File.exist?(path)
20
+ puts "Skipping #{path} because it already exists"
21
21
  else
22
- puts "Writing #{res.ref.ruby_autoload_path}"
23
- File.write(res.ref.ruby_autoload_path, res.to_ruby)
22
+ puts "Writing #{path}"
23
+ File.write(path, res.to_ruby)
24
24
  end
25
25
  end
26
26
  end
data/lib/kube-dsl/ref.rb CHANGED
@@ -5,12 +5,12 @@ module KubeDSL
5
5
  attr_reader :str, :kind, :namespace, :version, :inflector, :schema_dir
6
6
  attr_reader :ruby_namespace_prefix, :autoload_prefix
7
7
 
8
- def initialize(str, ruby_namespace_prefix, autoload_prefix, inflector, schema_dir)
8
+ def initialize(str, ruby_namespace_prefix, inflector, schema_dir, autoload_prefix)
9
9
  @str = str
10
10
  @ruby_namespace_prefix = ruby_namespace_prefix
11
- @autoload_prefix = autoload_prefix
12
11
  @inflector = inflector
13
12
  @schema_dir = schema_dir
13
+ @autoload_prefix = autoload_prefix
14
14
 
15
15
  ns, v, k = str.split('.').last(3)
16
16
 
@@ -41,15 +41,18 @@ module KubeDSL
41
41
  def ruby_namespace
42
42
  @ruby_namespace ||= begin
43
43
  [*ruby_namespace_prefix].tap do |mods|
44
- mods << capitalize(namespace) if namespace
45
- mods << capitalize(version) if version
44
+ mods << namespace if namespace
45
+ mods << version if version
46
+ mods.map! do |m|
47
+ inflector.camelize(underscore(m))
48
+ end
46
49
  end
47
50
  end
48
51
  end
49
52
 
50
53
  def ruby_autoload_path
51
54
  @ruby_autoload_path ||= File.join(
52
- [*autoload_prefix.split(File::SEPARATOR)].tap do |path|
55
+ [autoload_prefix].tap do |path|
53
56
  path << underscore(namespace) if namespace
54
57
  path << underscore(version) if version
55
58
  path << "#{underscore(kind)}.rb"
@@ -1,3 +1,3 @@
1
1
  module KubeDSL
2
- VERSION = '0.5.1'
2
+ VERSION = '0.6.0'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kube-dsl
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.1
4
+ version: 0.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Cameron Dutro
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-06-02 00:00:00.000000000 Z
11
+ date: 2021-08-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: dry-inflector
@@ -803,7 +803,7 @@ files:
803
803
  homepage: http://github.com/getkuby/kube-dsl
804
804
  licenses: []
805
805
  metadata: {}
806
- post_install_message:
806
+ post_install_message:
807
807
  rdoc_options: []
808
808
  require_paths:
809
809
  - lib
@@ -818,8 +818,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
818
818
  - !ruby/object:Gem::Version
819
819
  version: '0'
820
820
  requirements: []
821
- rubygems_version: 3.1.4
822
- signing_key:
821
+ rubygems_version: 3.1.6
822
+ signing_key:
823
823
  specification_version: 4
824
824
  summary: A Ruby DSL for defining Kubernetes resources.
825
825
  test_files: []