k_director 0.11.2 → 0.13.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: '080320db2da48079ad1ed3423f6856187cb9bdc90bdd8932ca7956d037a893da'
4
- data.tar.gz: c9ba83b95704695ac09568c866b061fb8745bf28acb7f07a77682dbfaef945ee
3
+ metadata.gz: 0645035ffbb7e6e30736af97a519db598dd647447a6b6786ad36eb95c204cd6c
4
+ data.tar.gz: a7b8f8fe828b920f23334f5924c788b3795200be39b29668ce302b6754ed0ddf
5
5
  SHA512:
6
- metadata.gz: 34b5b5092ed72be396cff0e16de843c80f08cda90663a73e1941317bade6f1dd240050456e10d640aa031a1cd95881c80b15a0b5a589f78ad729e65275d8c9cc
7
- data.tar.gz: '0088962799499fed1afdb02d925362b4bb7194c529fce42fcdb12a1742b68de9ae54a81053242e622539dd83eacd83cea2c6603cf2080d98c177f99954d22048'
6
+ metadata.gz: 5b275862af73871cde31be688c7e93a5e5fb9fd030fc1b05a6caaee66f152ec6cabec2695f23e29378ae68a48ce53023c4fd485eb45951bfe508a9cfee550db6
7
+ data.tar.gz: 6005f09b2a060177da0c5378d9638d42cae1b97e932d97ed220147a658ee9b2907bae4d3715017923247587309baf230212a81b69fc5ccc6e6feee495c49b432
data/docs/CHANGELOG.md CHANGED
@@ -1,3 +1,32 @@
1
+ ## [0.12.1](https://github.com/klueless-io/k_director/compare/v0.12.0...v0.12.1) (2022-02-11)
2
+
3
+
4
+ ### Bug Fixes
5
+
6
+ * builder can be configured via #default_builder_type ([f82c46f](https://github.com/klueless-io/k_director/commit/f82c46f10aea06b154d5ac957e71cce1216cae4a))
7
+
8
+ # [0.12.0](https://github.com/klueless-io/k_director/compare/v0.11.3...v0.12.0) (2022-02-11)
9
+
10
+
11
+ ### Features
12
+
13
+ * split dom_builder out from actions_builder ([f728e0e](https://github.com/klueless-io/k_director/commit/f728e0e04ef668928ed78ed6e008c3996a2023e8))
14
+
15
+ ## [0.11.3](https://github.com/klueless-io/k_director/compare/v0.11.2...v0.11.3) (2022-02-08)
16
+
17
+
18
+ ### Bug Fixes
19
+
20
+ * add simple dsl ([0fd61ab](https://github.com/klueless-io/k_director/commit/0fd61abbe90a136c96b750fcf7456bc46aa73463))
21
+
22
+ ## [0.11.2](https://github.com/klueless-io/k_director/compare/v0.11.1...v0.11.2) (2022-02-08)
23
+
24
+
25
+ ### Bug Fixes
26
+
27
+ * add typed_dom to base_director ([22ee75d](https://github.com/klueless-io/k_director/commit/22ee75da20cd00fe1f48f7027775b59dcf1c17a5))
28
+ * move add, oadd, tadd, fadd from blueprint_director to base_director ([82f6aa0](https://github.com/klueless-io/k_director/commit/82f6aa02311ec04b9cb716846630274700deefb5))
29
+
1
30
  ## [0.11.1](https://github.com/klueless-io/k_director/compare/v0.11.0...v0.11.1) (2022-02-07)
2
31
 
3
32
 
@@ -3,18 +3,13 @@
3
3
  module KDirector
4
4
  module Builders
5
5
  # Actions document builder
6
- class ActionsBuilder
6
+ class ActionsBuilder < KDirector::Builders::DomBuilder
7
7
  attr_reader :actions
8
- attr_reader :dom
9
8
  attr_reader :last_action
10
9
 
11
- def initialize
12
- reset
13
- end
14
-
15
10
  def reset
11
+ super
16
12
  @actions = []
17
- @dom = {}
18
13
  @last_action = {}
19
14
  end
20
15
 
@@ -23,100 +18,12 @@ module KDirector
23
18
  @last_action = action
24
19
  end
25
20
 
26
- # Set many key/value pairs gainst a group
27
- #
28
- # example:
29
- # set_many(:github, repo_name: 'repo-name', organization: 'org-name')
30
- def group_set(group = nil, **opts)
31
- return if group.nil? && opts.empty?
32
-
33
- if group.nil?
34
- opts.each do |key, value|
35
- set(key, value)
36
- end
37
- else
38
- dom[group] = {} if opts.empty? # initialize the group name if no options are provided
39
- opts.each do |key, value|
40
- set(group, key, value)
41
- end
42
- end
43
- end
44
-
45
- # set key_set/value pair, can be used for
46
- #
47
- # - simple key/value pairs
48
- # - initialize key/array pairs
49
- #
50
- # example:
51
- # set(:a, 1)
52
- # set(:a, [])
53
- # set(:a, [1, 2, 3])
54
- # set(:a, some_value, default_value: 'use if not supplied')
55
- # set(:a, :b, 'nested value')
56
- # set(:a, :b, :c, 'deeply nested value')
57
- # set(:a, :b, :c, :d, :e, :f, 'depth is no barrier')
58
- def set(*keyset_value, default_value: nil)
59
- size = keyset_value.size
60
-
61
- raise ArgumentError, 'set requires 2 or more arguments' if size < 2
62
-
63
- target = initialize_hierarchy(keyset_value)
64
-
65
- set_kv(target, keyset_value[size - 2], keyset_value[size - 1], default_value: default_value)
66
- end
67
-
68
- # add value to array
69
- # set(:a, [])
70
- # add(:a, 1])
71
- # add(:a, 2])
72
- # add(:a, 3])
73
- def add(*keyset_value, default_value: nil)
74
- size = keyset_value.size
75
-
76
- raise ArgumentError, 'add requires 2 or more arguments' if size < 2
77
-
78
- target = initialize_hierarchy(keyset_value)
79
-
80
- add_kv(target, keyset_value[size - 2], keyset_value[size - 1], default_value: default_value)
81
- end
82
-
83
21
  def debug
84
22
  puts JSON.pretty_generate(actions)
85
- puts JSON.pretty_generate(dom)
86
- # log.structure(dom)
23
+ super
87
24
 
88
25
  self
89
26
  end
90
-
91
- def build
92
- # hook into the set, add and queue_action methods form memoization
93
- KUtil.data.to_open_struct(@dom)
94
- end
95
-
96
- private
97
-
98
- def initialize_hierarchy(keys_value)
99
- target = @dom
100
-
101
- return target unless keys_value.size > 2
102
-
103
- keys_value.slice(0..-3).each_with_index do |key, _index|
104
- target[key] = {} unless target.key?(key)
105
- target = target[key]
106
- end
107
- target
108
- end
109
-
110
- def set_kv(target, key, value, default_value: nil)
111
- set_value = value.nil? ? default_value : value
112
- target[key] = set_value
113
- end
114
-
115
- def add_kv(target, key, value, default_value: nil)
116
- add_value = value.nil? ? default_value : value
117
- target[key] = [] unless target.key?(key)
118
- target[key] << add_value
119
- end
120
27
  end
121
28
  end
122
29
  end
@@ -0,0 +1,115 @@
1
+ # frozen_string_literal: true
2
+
3
+ module KDirector
4
+ module Builders
5
+ # Dom builder
6
+ class DomBuilder
7
+ attr_reader :dom
8
+
9
+ def initialize
10
+ reset
11
+ end
12
+
13
+ def reset
14
+ @dom = {}
15
+ end
16
+
17
+ # Set many key/value pairs gainst a group
18
+ #
19
+ # example:
20
+ # group_set(:github, repo_name: 'repo-name', organization: 'org-name')
21
+ def group_set(group = nil, **opts)
22
+ return if group.nil? && opts.empty?
23
+
24
+ if group.nil?
25
+ opts.each do |key, value|
26
+ set(key, value: value)
27
+ end
28
+ else
29
+ dom[group] = {} if opts.empty? # initialize the group name if no options are provided
30
+ opts.each do |key, value|
31
+ set(group, key, value: value)
32
+ end
33
+ end
34
+ end
35
+
36
+ # set key_set/value pair, can be used for
37
+ #
38
+ # - simple key/value pairs
39
+ # - initialize key/array pairs
40
+ #
41
+ # example:
42
+ # set(:a, value: 1)
43
+ # set(:a, value: [])
44
+ # set(:a, value: [1, 2, 3])
45
+ # set(:a, value: { a: 1, b: 2 })
46
+ # set(:a, value: some_value, default_value: 'use if not supplied')
47
+ # set(:a, value: :b, 'nested value')
48
+ # set(:a, value: :b, :c, 'deeply nested value')
49
+ # set(:a, value: :b, :c, :d, :e, :f, 'depth is no barrier')
50
+ def set(*keys, value: nil, default_value: nil)
51
+ size = keys.size
52
+
53
+ raise ArgumentError, 'set requires 1 or more keys' if size < 1
54
+
55
+ target = initialize_hierarchy(keys)
56
+
57
+ set_kv(target, keys[size - 1], value, default_value: default_value)
58
+ end
59
+
60
+ # add value to array
61
+ # add(:a, 1)
62
+ # add(:a, 2)
63
+ # add(:a, 3)
64
+ # add(:a, {key: 1})
65
+ # add(:a, {key: 2})
66
+ # add(:a, {key: 3})
67
+ def add(*keys, value: nil, default_value: nil)
68
+ size = keys.size
69
+
70
+ raise ArgumentError, 'add requires 1 or more keys' if size < 1
71
+
72
+ target = initialize_hierarchy(keys)
73
+
74
+ add_kv(target, keys[size - 1], value, default_value: default_value)
75
+ end
76
+
77
+ def debug
78
+ puts JSON.pretty_generate(dom)
79
+ # log.structure(dom)
80
+
81
+ self
82
+ end
83
+
84
+ def build
85
+ # hook into the set, add and queue_action methods form memoization
86
+ KUtil.data.to_open_struct(@dom)
87
+ end
88
+
89
+ private
90
+
91
+ def initialize_hierarchy(keys)
92
+ target = @dom
93
+
94
+ return target unless keys.size > 1
95
+
96
+ keys.slice(0..-2).each_with_index do |key, _index|
97
+ target[key] = {} unless target.key?(key)
98
+ target = target[key]
99
+ end
100
+ target
101
+ end
102
+
103
+ def set_kv(target, key, value, default_value: nil)
104
+ set_value = value.nil? ? default_value : value
105
+ target[key] = set_value
106
+ end
107
+
108
+ def add_kv(target, key, value, default_value: nil)
109
+ add_value = value.nil? ? default_value : value
110
+ target[key] = [] unless target.key?(key)
111
+ target[key] << add_value
112
+ end
113
+ end
114
+ end
115
+ end
@@ -10,13 +10,23 @@ module KDirector
10
10
  class << self
11
11
  def init(k_builder, builder = nil, **opts)
12
12
  if builder.nil?
13
- builder = KDirector::Builders::ActionsBuilder.new
13
+ builder = builder_type.new
14
14
  else
15
15
  builder.reset
16
16
  end
17
17
 
18
18
  new(k_builder, builder, **opts)
19
19
  end
20
+
21
+ def builder_type
22
+ return @builder_type if defined? @builder_type
23
+
24
+ @builder_type = KDirector::Builders::ActionsBuilder
25
+ end
26
+
27
+ def default_builder_type(type)
28
+ @builder_type = type
29
+ end
20
30
  end
21
31
 
22
32
  attr_reader :builder
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ module KDirector
4
+ module Dsls
5
+ # BasicDsl is a DSL for generating basic projects.
6
+ class BasicDsl < KDirector::Directors::BaseDirector
7
+ def default_template_base_folder
8
+ 'basic'
9
+ end
10
+ end
11
+ end
12
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module KDirector
4
- VERSION = '0.11.2'
4
+ VERSION = '0.13.0'
5
5
  end
data/lib/k_director.rb CHANGED
@@ -7,6 +7,7 @@ require 'k_builder'
7
7
  require 'k_ext/github'
8
8
 
9
9
  require_relative 'k_director/version'
10
+ require_relative 'k_director/builders/dom_builder'
10
11
  require_relative 'k_director/builders/actions_builder'
11
12
  require_relative 'k_director/directors/base_director'
12
13
  require_relative 'k_director/directors/child_director'
@@ -17,6 +18,7 @@ require_relative 'k_director/dsls/children/package_json_configuration'
17
18
  require_relative 'k_director/dsls/children/package_json'
18
19
  require_relative 'k_director/dsls/nuxt3_dsl'
19
20
  require_relative 'k_director/dsls/ruby_gem_dsl'
21
+ require_relative 'k_director/dsls/simple_dsl'
20
22
 
21
23
  module KDirector
22
24
  # raise KDirector::Error, 'Sample message'
data/package-lock.json CHANGED
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "k_director",
3
- "version": "0.11.2",
3
+ "version": "0.13.0",
4
4
  "lockfileVersion": 2,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "k_director",
9
- "version": "0.11.2",
9
+ "version": "0.13.0",
10
10
  "devDependencies": {
11
11
  "@klueless-js/semantic-release-rubygem": "github:klueless-js/semantic-release-rubygem",
12
12
  "@semantic-release/changelog": "^6.0.1",
data/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "k_director",
3
- "version": "0.11.2",
3
+ "version": "0.13.0",
4
4
  "description": "Command line and CI/CD tools for k_director",
5
5
  "scripts": {
6
6
  "release": "semantic-release"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: k_director
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.11.2
4
+ version: 0.13.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - David Cruwys
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-02-08 00:00:00.000000000 Z
11
+ date: 2022-02-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: k_config
@@ -90,7 +90,6 @@ extra_rdoc_files: []
90
90
  files:
91
91
  - ".builders/_.rb"
92
92
  - ".builders/boot.rb"
93
- - ".builders/dsl/ruby_gem_dsl.rb"
94
93
  - ".builders/generators/01-bootstrap.rb"
95
94
  - ".builders/run.rb"
96
95
  - ".githooks/commit-msg"
@@ -113,6 +112,7 @@ files:
113
112
  - k_director.gemspec
114
113
  - lib/k_director.rb
115
114
  - lib/k_director/builders/actions_builder.rb
115
+ - lib/k_director/builders/dom_builder.rb
116
116
  - lib/k_director/directors/base_director.rb
117
117
  - lib/k_director/directors/child_director.rb
118
118
  - lib/k_director/directors/data.rb
@@ -122,6 +122,7 @@ files:
122
122
  - lib/k_director/dsls/children/package_json_configuration.rb
123
123
  - lib/k_director/dsls/nuxt3_dsl.rb
124
124
  - lib/k_director/dsls/ruby_gem_dsl.rb
125
+ - lib/k_director/dsls/simple_dsl.rb
125
126
  - lib/k_director/version.rb
126
127
  - package-lock.json
127
128
  - package.json
@@ -1,77 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Dsl
4
- class RubyGemDsl < Dsl::Directors::BaseDirector
5
- def default_director_name
6
- 'Ruby Gem'
7
- end
8
-
9
- def repo_name
10
- options.repo_name
11
- end
12
-
13
- def repo_account
14
- options.repo_account
15
- end
16
-
17
- # def default_template_base_folder
18
- # end
19
- # def initialize(k_builder, builder, **opts)
20
- # super(k_builder, builder, **opts)
21
- # # @on_action = opts[:on_action] || :queue # %i[queue execute]
22
- # end
23
- def github(**opts, &block)
24
- github = Dsl::Github.new(self, **opts)
25
- github.instance_eval(&block)
26
-
27
- self
28
- end
29
-
30
- def blueprint(**opts, &block)
31
- blueprint = Dsl::RubyGemBlueprint.new(self, **opts)
32
- blueprint.instance_eval(&block)
33
-
34
- self
35
- end
36
- end
37
-
38
- class RubyGemBlueprint < Dsl::Directors::ChildDirector
39
- def template_content(template_filename)
40
- template_parts = [template_base_folder, template_filename]
41
- template_file = File.join(*template_parts)
42
-
43
- file = k_builder.find_template_file(template_file)
44
- File.read(file)
45
- end
46
-
47
- def run_template_script(template_filename, **opts)
48
- template_parts = [template_base_folder, template_filename]
49
- template_file = File.join(*template_parts)
50
-
51
- script = k_builder.process_any_content(template_file: template_file, **opts)
52
-
53
- run_script(script)
54
- # action = k_builder.run_script_action(script)
55
- # run_action(action)
56
- end
57
-
58
- # Create a single file
59
- #
60
- # @param [String] output_filename The output file name, this can be a relative path
61
- # @param [Hash] **opts The options
62
- # @option opts [String] :template_filename Template filename can be set or it will default to the same value as the output file name
63
- # @option opts [String] :template_subfolder Template subfolder
64
- def add(output_file, **opts)
65
- template_file = opts[:template_file] || output_file
66
- template_parts = [template_base_folder, opts[:template_subfolder], opts[:template_variant], template_file].reject(&:blank?)
67
-
68
- opts[:template_file] = File.join(*template_parts)
69
-
70
- add_file(output_file, **opts)
71
- end
72
-
73
- def oadd(name, **opts); add(name, **{ open: true }.merge(opts)); end
74
- def tadd(name, **opts); add(name, **{ open_template: true }.merge(opts)); end
75
- def fadd(name, **opts); add(name, **{ on_exist: :write }.merge(opts)); end
76
- end
77
- end