k_director 0.4.0 → 0.4.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: 0036ab3aba8fde78577b1c3e02d9adb122d14631c309eb6cd8e849d43777928c
4
+ data.tar.gz: 7566359e95804068637fd4e52da588a8445d978d0986cbbc2cc6b84063728a30
5
5
  SHA512:
6
- metadata.gz: ef4b7707f28b83b8d7c4a700e301c34729a501721f63e293c1772670f73c59cadf25f7b19abbcf91a31c110729b03e9633deb6699b603837948c7684691e6a2b
7
- data.tar.gz: 72043f631e73267482e4e0d9a52541f8e121ded63222d714f9fa2503ecebb8c4cba88a541748a2d7bba9379b67199ea58bf266b6da9ea84c52db039d24c27cb3
6
+ metadata.gz: 004ca6fe76f586ef5eb163797dfca591098bd4d3454c0a80366bf9f43f1f4be2a1fd78f94ba522a6d227e9c1b4f6ece76e3e5877989757579d6c44cb9c37a674
7
+ data.tar.gz: 9d94e04bfe8b244ff8940700b6c3ce49a100eac27e28f29e14b3f7d27f995ece20178fa9f8380408ef7b03588f472135c6370b1916bdd26bdbc20814d34e8a99
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,15 @@
1
+ # [0.4.0](https://github.com/klueless-io/k_director/compare/v0.3.0...v0.4.0) (2022-01-29)
2
+
3
+
4
+ ### Bug Fixes
5
+
6
+ * run rubocop ([e8805aa](https://github.com/klueless-io/k_director/commit/e8805aaddfde04ba1def563d3f7e5e311fa2841a))
7
+
8
+
9
+ ### Features
10
+
11
+ * add GitHub DSL ([e8de7d5](https://github.com/klueless-io/k_director/commit/e8de7d599af16be9dced907617d534f029e1e1ad))
12
+
1
13
  # [0.3.0](https://github.com/klueless-io/k_director/compare/v0.2.0...v0.3.0) (2022-01-29)
2
14
 
3
15
 
@@ -2,26 +2,96 @@
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
24
+ end
25
+
26
+ # set key_set/value pair, can be used for
27
+ #
28
+ # - simple key/value pairs
29
+ # - initialize key/array pairs
30
+ #
31
+ # example:
32
+ # set(:a, 1)
33
+ # set(:a, [])
34
+ # set(:a, [1, 2, 3])
35
+ # set(:a, some_value, default_value: 'use if not supplied')
36
+ # set(:a, :b, 'nested value')
37
+ # set(:a, :b, :c, 'deeply nested value')
38
+ # set(:a, :b, :c, :d, :e, :f, 'depth is no barrier')
39
+ def set(*keyset_value, default_value: nil)
40
+ size = keyset_value.size
41
+
42
+ raise ArgumentError, 'set requires 2 or more arguments' if size < 2
43
+
44
+ target = initialize_hierarchy(keyset_value)
45
+
46
+ set_kv(target, keyset_value[size - 2], keyset_value[size - 1], default_value: default_value)
47
+ end
48
+
49
+ # add value to array
50
+ def add(*keyset_value, default_value: nil)
51
+ size = keyset_value.size
52
+
53
+ raise ArgumentError, 'add requires 2 or more arguments' if size < 2
54
+
55
+ target = initialize_hierarchy(keyset_value)
56
+
57
+ add_kv(target, keyset_value[size - 2], keyset_value[size - 1], default_value: default_value)
58
+ end
59
+
60
+ def debug
61
+ puts JSON.pretty_generate(dom)
62
+ # log.structure(dom)
63
+
64
+ self
13
65
  end
14
66
 
15
- def actions
16
- dom[:actions]
67
+ def build
68
+ # hook into the set, add and queue_action methods form memoization
69
+ KUtil.data.to_open_struct(@dom)
17
70
  end
18
71
 
19
72
  private
20
73
 
21
- def schema
22
- {
23
- actions: []
24
- }
74
+ def initialize_hierarchy(keys_value)
75
+ target = @dom
76
+
77
+ return target unless keys_value.size > 2
78
+
79
+ keys_value.slice(0..-3).each_with_index do |key, _index|
80
+ target[key] = {} unless target.key?(key)
81
+ target = target[key]
82
+ end
83
+ target
84
+ end
85
+
86
+ def set_kv(target, key, value, default_value: nil)
87
+ set_value = value.nil? ? default_value : value
88
+ target[key] = set_value
89
+ end
90
+
91
+ def add_kv(target, key, value, default_value: nil)
92
+ add_value = value.nil? ? default_value : value
93
+ target[key] = [] unless target.key?(key)
94
+ target[key] << add_value
25
95
  end
26
96
  end
27
97
  end
@@ -22,9 +22,9 @@ 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)
27
+ @index = 1
28
28
  @k_builder = k_builder
29
29
  @builder = builder
30
30
  @options = OpenStruct.new(**opts)
@@ -35,6 +35,12 @@ module KDirector
35
35
  @options.on_action ||= :queue # %i[queue execute]
36
36
  end
37
37
 
38
+ def dom
39
+ @index += 1
40
+ puts "dom#{@index}"
41
+ builder.dom
42
+ end
43
+
38
44
  # Used by child directors to inherit options from parent
39
45
  def inherited_opts(**opts)
40
46
  {
@@ -48,6 +54,10 @@ module KDirector
48
54
  @options.director_name
49
55
  end
50
56
 
57
+ def director_name=(name)
58
+ @options.director_name = name
59
+ end
60
+
51
61
  def template_base_folder
52
62
  @options.template_base_folder
53
63
  end
@@ -66,8 +76,7 @@ module KDirector
66
76
  on_exist: on_exist
67
77
  }.merge(opts)
68
78
 
69
- # WHAT IS THIS FOR?
70
- opts[:dom] = dom if dom
79
+ opts[:dom] = dom.except(:actions) if dom
71
80
 
72
81
  handle_action(k_builder.add_file_action(file, **opts))
73
82
 
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module KDirector
4
- VERSION = '0.4.0'
4
+ VERSION = '0.4.1'
5
5
  end
data/lib/k_director.rb CHANGED
@@ -5,7 +5,6 @@ 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'
data/package-lock.json CHANGED
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "k_director",
3
- "version": "0.4.0",
3
+ "version": "0.4.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.4.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.4.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.4.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-30 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,7 +86,6 @@ 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
96
91
  - lib/k_director/dsls/children/blueprint.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