k_director 0.4.0 → 0.6.1

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: 66bfeb5b766221eeda0cb0e7157b90c3852c7c617934a60e91794dd322090a18
4
- data.tar.gz: fdad194dbe2c758946e83ba609ab27e9f7651e71e12ebc78730a2036f2c66cde
3
+ metadata.gz: 97d6905104f3f742383cd45344b303269a1d5ee6c2054d107c5b0be97c0406f9
4
+ data.tar.gz: 60ad2bfd8f1dcc5693dcda4e46a307174143c4231825df818c523c41d4dfb08a
5
5
  SHA512:
6
- metadata.gz: ef4b7707f28b83b8d7c4a700e301c34729a501721f63e293c1772670f73c59cadf25f7b19abbcf91a31c110729b03e9633deb6699b603837948c7684691e6a2b
7
- data.tar.gz: 72043f631e73267482e4e0d9a52541f8e121ded63222d714f9fa2503ecebb8c4cba88a541748a2d7bba9379b67199ea58bf266b6da9ea84c52db039d24c27cb3
6
+ metadata.gz: 8db80227990301c8485f8d4ee1f95efc4275f2cf3dc648c3abb0899f3b7da2b260dc6ec2791d9f4b5be03261dc08987f9a33cf3576e184527278418eef59e104
7
+ data.tar.gz: aa7df6cadc8a21e0a50d7998fc35596a24190e6cbd8045b2d7080b2352a7de97007afdfef7b55d9615c24317d9c03b6464f705b1f632c2f9b3e0af859ce3f366
data/.builders/_.rb CHANGED
@@ -1,4 +1,3 @@
1
- require_relative './dsl/builders/dom_builder'
2
1
  require_relative './dsl/builders/actions_builder'
3
2
  require_relative './dsl/directors/base_director'
4
3
  require_relative './dsl/directors/child_director'
@@ -6,7 +6,9 @@ KManager.action :bootstrap do
6
6
  .init(k_builder,
7
7
  template_base_folder: 'ruby/gem',
8
8
  on_exist: :skip, # %i[skip write compare]
9
- on_action: :queue, # %i[queue execute]
9
+ on_action: :queue # %i[queue execute]
10
+ )
11
+ .dom(:settings,
10
12
  ruby_version: '2.7',
11
13
  repo_name: application_name,
12
14
  application: application_name,
@@ -25,6 +27,9 @@ KManager.action :bootstrap do
25
27
  .github do
26
28
  parent.options.repo_info = repo_info
27
29
 
30
+ self.repo
31
+ self.name
32
+
28
33
  # create_repository # (:k_director)
29
34
  # delete_repository # (:k_director)
30
35
  # list_repositories
data/docs/CHANGELOG.md CHANGED
@@ -1,3 +1,41 @@
1
+ # [0.6.0](https://github.com/klueless-io/k_director/compare/v0.5.0...v0.6.0) (2022-01-31)
2
+
3
+
4
+ ### Bug Fixes
5
+
6
+ * add improve group_set on action_builder ([b11ff25](https://github.com/klueless-io/k_director/commit/b11ff25475d48c07af67f3e82bff58ab903ae4a5))
7
+
8
+
9
+ ### Features
10
+
11
+ * add data director class ([510d970](https://github.com/klueless-io/k_director/commit/510d9701480a57580b0cc4f4a58398ce7752a431))
12
+
13
+ # [0.5.0](https://github.com/klueless-io/k_director/compare/v0.4.1...v0.5.0) (2022-01-31)
14
+
15
+
16
+ ### Features
17
+
18
+ * add group_set to action_builder ([62d87ed](https://github.com/klueless-io/k_director/commit/62d87ed27cb1479cf5ba3a2fa8cac70fa71f63fd))
19
+
20
+ ## [0.4.1](https://github.com/klueless-io/k_director/compare/v0.4.0...v0.4.1) (2022-01-30)
21
+
22
+
23
+ ### Bug Fixes
24
+
25
+ * refactor dom builder with set/add supporting key hierarchies ([8fee48d](https://github.com/klueless-io/k_director/commit/8fee48d12dfb37210ed87d0fb22222bd2db3da28))
26
+
27
+ # [0.4.0](https://github.com/klueless-io/k_director/compare/v0.3.0...v0.4.0) (2022-01-29)
28
+
29
+
30
+ ### Bug Fixes
31
+
32
+ * run rubocop ([e8805aa](https://github.com/klueless-io/k_director/commit/e8805aaddfde04ba1def563d3f7e5e311fa2841a))
33
+
34
+
35
+ ### Features
36
+
37
+ * add GitHub DSL ([e8de7d5](https://github.com/klueless-io/k_director/commit/e8de7d599af16be9dced907617d534f029e1e1ad))
38
+
1
39
  # [0.3.0](https://github.com/klueless-io/k_director/compare/v0.2.0...v0.3.0) (2022-01-29)
2
40
 
3
41
 
@@ -2,26 +2,120 @@
2
2
 
3
3
  module KDirector
4
4
  module Builders
5
- # Data builder for KBuilder Actions
6
- class ActionsBuilder < KDirector::Builders::DomBuilder
5
+ # Actions document builder
6
+ class ActionsBuilder
7
+ attr_reader :actions
8
+ attr_reader :dom
9
+ attr_reader :last_action
10
+
7
11
  def initialize
8
- super(schema)
12
+ reset
13
+ end
14
+
15
+ def reset
16
+ @actions = []
17
+ @dom = {}
18
+ @last_action = {}
9
19
  end
10
20
 
11
21
  def queue_action(action)
12
- dom[:actions] << current_node(action)
22
+ @actions << action
23
+ @last_action = action
13
24
  end
14
25
 
15
- def actions
16
- dom[:actions]
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
+ def debug
84
+ puts JSON.pretty_generate(actions)
85
+ # puts JSON.pretty_generate(dom)
86
+ # log.structure(dom)
87
+
88
+ self
89
+ end
90
+
91
+ def build
92
+ # hook into the set, add and queue_action methods form memoization
93
+ KUtil.data.to_open_struct(@dom)
17
94
  end
18
95
 
19
96
  private
20
97
 
21
- def schema
22
- {
23
- actions: []
24
- }
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
25
119
  end
26
120
  end
27
121
  end
@@ -22,7 +22,6 @@ module KDirector
22
22
  attr_reader :builder
23
23
  attr_reader :k_builder
24
24
  attr_reader :options
25
- attr_accessor :dom
26
25
 
27
26
  def initialize(k_builder, builder, **opts)
28
27
  @k_builder = k_builder
@@ -35,6 +34,22 @@ module KDirector
35
34
  @options.on_action ||= :queue # %i[queue execute]
36
35
  end
37
36
 
37
+ def data(name = nil, **opts)
38
+ KDirector::Directors::Data.new(self, name, **opts)
39
+
40
+ self
41
+ end
42
+
43
+ def settings(**opts)
44
+ KDirector::Directors::Data.new(self, :settings, **opts)
45
+
46
+ self
47
+ end
48
+
49
+ def dom
50
+ builder.dom
51
+ end
52
+
38
53
  # Used by child directors to inherit options from parent
39
54
  def inherited_opts(**opts)
40
55
  {
@@ -48,6 +63,10 @@ module KDirector
48
63
  @options.director_name
49
64
  end
50
65
 
66
+ def director_name=(name)
67
+ @options.director_name = name
68
+ end
69
+
51
70
  def template_base_folder
52
71
  @options.template_base_folder
53
72
  end
@@ -66,8 +85,7 @@ module KDirector
66
85
  on_exist: on_exist
67
86
  }.merge(opts)
68
87
 
69
- # WHAT IS THIS FOR?
70
- opts[:dom] = dom if dom
88
+ opts[:dom] = dom.except(:actions) if dom
71
89
 
72
90
  handle_action(k_builder.add_file_action(file, **opts))
73
91
 
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ module KDirector
4
+ module Directors
5
+ # Data can update the underlying ActionBuilder DOM.
6
+ class Data
7
+ attr_reader :parent
8
+ attr_reader :name
9
+
10
+ def initialize(parent, name, **opts)
11
+ @parent = parent
12
+ @name = name
13
+
14
+ parent.builder.group_set(name, **opts)
15
+ end
16
+ end
17
+ end
18
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module KDirector
4
- VERSION = '0.4.0'
4
+ VERSION = '0.6.1'
5
5
  end
data/lib/k_director.rb CHANGED
@@ -5,10 +5,10 @@ require 'k_util'
5
5
  require 'k_builder'
6
6
 
7
7
  require_relative 'k_director/version'
8
- require_relative 'k_director/builders/dom_builder'
9
8
  require_relative 'k_director/builders/actions_builder'
10
9
  require_relative 'k_director/directors/base_director'
11
10
  require_relative 'k_director/directors/child_director'
11
+ require_relative 'k_director/directors/data'
12
12
  require_relative 'k_director/dsls/children/blueprint'
13
13
  require_relative 'k_director/dsls/children/github'
14
14
 
data/package-lock.json CHANGED
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "k_director",
3
- "version": "0.4.0",
3
+ "version": "0.6.1",
4
4
  "lockfileVersion": 2,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "k_director",
9
- "version": "0.4.0",
9
+ "version": "0.6.1",
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.4.0",
3
+ "version": "0.6.1",
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.4.0
4
+ version: 0.6.1
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-01-29 00:00:00.000000000 Z
11
+ date: 2022-01-31 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: k_log
@@ -62,10 +62,6 @@ extra_rdoc_files: []
62
62
  files:
63
63
  - ".builders/_.rb"
64
64
  - ".builders/boot.rb"
65
- - ".builders/dsl/builders/actions_builder.rb"
66
- - ".builders/dsl/builders/dom_builder.rb"
67
- - ".builders/dsl/directors/base_director.rb"
68
- - ".builders/dsl/directors/child_director.rb"
69
65
  - ".builders/dsl/github_dsl.rb"
70
66
  - ".builders/dsl/ruby_gem_dsl.rb"
71
67
  - ".builders/generators/01-bootstrap.rb"
@@ -90,9 +86,9 @@ files:
90
86
  - k_director.gemspec
91
87
  - lib/k_director.rb
92
88
  - lib/k_director/builders/actions_builder.rb
93
- - lib/k_director/builders/dom_builder.rb
94
89
  - lib/k_director/directors/base_director.rb
95
90
  - lib/k_director/directors/child_director.rb
91
+ - lib/k_director/directors/data.rb
96
92
  - lib/k_director/dsls/children/blueprint.rb
97
93
  - lib/k_director/dsls/children/github.rb
98
94
  - lib/k_director/version.rb
@@ -1,27 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Dsl
4
- module Builders
5
- class ActionsBuilder < Dsl::Builders::DomBuilder
6
- def initialize
7
- super(schema)
8
- end
9
-
10
- def queue_action(action)
11
- dom[:actions] << current_node(action)
12
- end
13
-
14
- def actions
15
- dom[:actions]
16
- end
17
-
18
- private
19
-
20
- def schema
21
- {
22
- actions: []
23
- }
24
- end
25
- end
26
- end
27
- end
@@ -1,40 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Dsl
4
- module Builders
5
- class DomBuilder
6
- attr_reader :dom
7
- attr_reader :node
8
-
9
- def initialize(dom = nil)
10
- @dom = dom || schema
11
- end
12
-
13
- def current_node(node)
14
- @node = node
15
- end
16
-
17
- alias last_node node
18
-
19
- def reset
20
- @dom = schema
21
- @last_node = nil
22
- end
23
-
24
- def schema
25
- {}
26
- end
27
-
28
- def logit
29
- puts JSON.pretty_generate(dom)
30
- # log.structure(dom)
31
-
32
- self
33
- end
34
-
35
- def data
36
- KUtil.data.to_open_struct(@dom)
37
- end
38
- end
39
- end
40
- end
@@ -1,131 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Dsl
4
- module Directors
5
- class BaseDirector
6
- include KLog::Logging
7
-
8
- class << self
9
- def init(k_builder, builder = nil, **opts)
10
- if builder.nil?
11
- builder = Dsl::Builders::ActionsBuilder.new
12
- else
13
- builder.reset
14
- end
15
-
16
- new(k_builder, builder, **opts)
17
- end
18
- end
19
-
20
- attr_reader :builder
21
- attr_reader :k_builder
22
- attr_reader :options
23
- attr_accessor :dom
24
-
25
- def initialize(k_builder, builder, **opts)
26
- @k_builder = k_builder
27
- @builder = builder
28
- @options = OpenStruct.new(**opts)
29
-
30
- @options.director_name ||= default_director_name
31
- @options.template_base_folder ||= default_template_base_folder
32
- @options.on_exist ||= :skip # %i[skip write compare]
33
- @options.on_action ||= :queue # %i[queue execute]
34
- end
35
-
36
- def director_name
37
- @options.director_name
38
- end
39
-
40
- def template_base_folder
41
- @options.template_base_folder
42
- end
43
-
44
- def on_exist
45
- @options.on_exist
46
- end
47
-
48
- def on_action
49
- @options.on_action
50
- end
51
-
52
- def add_file(file, **opts)
53
- opts = {
54
- on_exist: on_exist
55
- }.merge(opts)
56
-
57
- opts[:dom] = dom if dom
58
-
59
- handle_action(k_builder.add_file_action(file, **opts))
60
-
61
- self
62
- end
63
-
64
- def set_current_folder_action(folder_key)
65
- # RUN (not handle)
66
- run_action(k_builder.set_current_folder_action(folder_key))
67
-
68
- self
69
- end
70
- alias cd set_current_folder_action
71
-
72
- def run_command(command)
73
- handle_action(k_builder.run_command_action(command))
74
-
75
- self
76
- end
77
-
78
- def run_script(script)
79
- handle_action(k_builder.run_script_action(script))
80
-
81
- self
82
- end
83
-
84
- def play_actions
85
- k_builder.play_actions(builder.actions)
86
- end
87
-
88
- def debug
89
- log.section_heading director_name
90
-
91
- h = options.to_h.sort.to_h
92
- h.keys.each do |key|
93
- log.kv(titleize.parse(key.to_s), h[key])
94
- end
95
- nil
96
- end
97
-
98
- # def debug_info
99
- # log.kv 'Template Root Folder' , k_builder.template_folders.folder_paths
100
- # log.kv 'Template Base Folder' , template_base_folder
101
- # log.kv 'on_exist' , on_exist
102
- # log.kv 'on_action' , on_action
103
- # end
104
-
105
- private
106
-
107
- def default_template_base_folder
108
- ''
109
- end
110
-
111
- def default_director_name
112
- titleize.parse(self.class.name.split("::").last)
113
- end
114
-
115
- def folder_parts(*parts)
116
- parts.reject(&:blank?).map(&:to_s)
117
- end
118
-
119
- def handle_action(action)
120
- builder.queue_action(action)
121
- k_builder.play_action(action) if on_action == :execute
122
- end
123
-
124
- # run action will queue an action just like handle_action, but it will also run it immediately
125
- def run_action(action)
126
- builder.queue_action(action)
127
- k_builder.run_action(action)
128
- end
129
- end
130
- end
131
- end
@@ -1,27 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Dsl
4
- module Directors
5
- class ChildDirector < Dsl::Directors::BaseDirector
6
- attr_reader :parent
7
-
8
- def initialize(parent, **opts)
9
- @parent = parent
10
-
11
- opts = {
12
- on_exist: parent.on_exist,
13
- on_action: parent.on_action,
14
- template_base_folder: parent.template_base_folder
15
- }.merge(opts)
16
-
17
- super(parent.k_builder, parent.builder, **opts)
18
- end
19
-
20
- def debug
21
- parent.debug
22
-
23
- super
24
- end
25
- end
26
- end
27
- end
@@ -1,41 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module KDirector
4
- module Builders
5
- # Base document builder
6
- class DomBuilder
7
- attr_reader :dom
8
- attr_reader :node
9
-
10
- def initialize(dom = nil)
11
- @dom = dom || schema
12
- end
13
-
14
- def current_node(node)
15
- @node = node
16
- end
17
-
18
- alias last_node node
19
-
20
- def reset
21
- @dom = schema
22
- @last_node = nil
23
- end
24
-
25
- def schema
26
- {}
27
- end
28
-
29
- def logit
30
- puts JSON.pretty_generate(dom)
31
- # log.structure(dom)
32
-
33
- self
34
- end
35
-
36
- def data
37
- KUtil.data.to_open_struct(@dom)
38
- end
39
- end
40
- end
41
- end