k_director 0.3.0 → 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: 98141965627ac652ecf0fea204874feaf97f6300d041257d85b3fab4e3e840d4
4
- data.tar.gz: cdacf1b080b8d05759aed30e7ec752d8216aafd8ae2acf7c960cb1eea514dc6e
3
+ metadata.gz: f18b4641c3f5638987c5e9d8922b51fd9ec509df88012d2408393ddcdf1353b6
4
+ data.tar.gz: 7d38f50be00a404f176c3817228208eb980ebb158ea87f9966374e703c23d627
5
5
  SHA512:
6
- metadata.gz: d68c2ad216eb2b02aa7009d102a5e279ae8a18462c25c116b0736e2efe7c05991b9ff69216fec5a20b3073a2fb6703cef6a9bea3f4db05c6fc2dc47b4282dafe
7
- data.tar.gz: d772867a03777163df1a034c55238a263974d9786b4849995c86945e41c8b136d77ffa296605b6c394b80d7c47c0e0528380f47d8576a65052353a7d23a6a005
6
+ metadata.gz: c9c4659dddb2c5b32a1e665ac633eb975711aee4e5f924d7ae26b97c63f4b0bcd6f406f4248a93dbf5c22c60cd3a03a099446aaa577168e053ba2bf1b61c71cd
7
+ data.tar.gz: 6ba9e757263833a14582d315d5dab1bb7b828b8f674486db65f566005386d2eeaa1f5d81d69540a75ba5ab14c7e6b69e67582f0ea7b61dcaa6efcd9788d09851
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/README.md CHANGED
@@ -1,3 +1,11 @@
1
+ # Agenda
2
+
3
+ - GitHub Copilot (Ruby)
4
+ - Writing specs
5
+ - DSL
6
+ - SemVer (conventionl commits)
7
+ - GitHub Copilot (GoLang) - Build a Game
8
+
1
9
  # K Director
2
10
 
3
11
  > KDirector provides domain specific language implementations for code generation
data/docs/CHANGELOG.md CHANGED
@@ -1,3 +1,36 @@
1
+ # [0.5.0](https://github.com/klueless-io/k_director/compare/v0.4.1...v0.5.0) (2022-01-31)
2
+
3
+
4
+ ### Features
5
+
6
+ * add group_set to action_builder ([62d87ed](https://github.com/klueless-io/k_director/commit/62d87ed27cb1479cf5ba3a2fa8cac70fa71f63fd))
7
+
8
+ ## [0.4.1](https://github.com/klueless-io/k_director/compare/v0.4.0...v0.4.1) (2022-01-30)
9
+
10
+
11
+ ### Bug Fixes
12
+
13
+ * refactor dom builder with set/add supporting key hierarchies ([8fee48d](https://github.com/klueless-io/k_director/commit/8fee48d12dfb37210ed87d0fb22222bd2db3da28))
14
+
15
+ # [0.4.0](https://github.com/klueless-io/k_director/compare/v0.3.0...v0.4.0) (2022-01-29)
16
+
17
+
18
+ ### Bug Fixes
19
+
20
+ * run rubocop ([e8805aa](https://github.com/klueless-io/k_director/commit/e8805aaddfde04ba1def563d3f7e5e311fa2841a))
21
+
22
+
23
+ ### Features
24
+
25
+ * add GitHub DSL ([e8de7d5](https://github.com/klueless-io/k_director/commit/e8de7d599af16be9dced907617d534f029e1e1ad))
26
+
27
+ # [0.3.0](https://github.com/klueless-io/k_director/compare/v0.2.0...v0.3.0) (2022-01-29)
28
+
29
+
30
+ ### Features
31
+
32
+ * add Blueprint DSL ([c27ec12](https://github.com/klueless-io/k_director/commit/c27ec124b8c55b84f2dfd67f37de6ab2c4fb8d22))
33
+
1
34
  # [0.2.0](https://github.com/klueless-io/k_director/compare/v0.1.2...v0.2.0) (2022-01-27)
2
35
 
3
36
 
@@ -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,16 @@ module KDirector
35
34
  @options.on_action ||= :queue # %i[queue execute]
36
35
  end
37
36
 
37
+ def data(**opts)
38
+ KDirector::Dsls::Children::Data.new(self, **opts)
39
+
40
+ self
41
+ end
42
+
43
+ def dom
44
+ builder.dom
45
+ end
46
+
38
47
  # Used by child directors to inherit options from parent
39
48
  def inherited_opts(**opts)
40
49
  {
@@ -48,6 +57,10 @@ module KDirector
48
57
  @options.director_name
49
58
  end
50
59
 
60
+ def director_name=(name)
61
+ @options.director_name = name
62
+ end
63
+
51
64
  def template_base_folder
52
65
  @options.template_base_folder
53
66
  end
@@ -66,8 +79,7 @@ module KDirector
66
79
  on_exist: on_exist
67
80
  }.merge(opts)
68
81
 
69
- # WHAT IS THIS FOR?
70
- opts[:dom] = dom if dom
82
+ opts[:dom] = dom.except(:actions) if dom
71
83
 
72
84
  handle_action(k_builder.add_file_action(file, **opts))
73
85
 
@@ -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
@@ -0,0 +1,35 @@
1
+ # frozen_string_literal: true
2
+
3
+ # klueless-io
4
+ # k_director
5
+ # kluless-sites
6
+
7
+ module KDirector
8
+ module Dsls
9
+ module Children
10
+ # Github DSL provides useful GitHub actions such as (create, delete, list, open repository).
11
+ class Github < KDirector::Directors::ChildDirector
12
+ def initialize(parent, **opts)
13
+ super(parent, **opts)
14
+
15
+ @options.repo_name ||= parent.options.repo_name
16
+ @options.repo_organization ||= parent.options.repo_organization
17
+ end
18
+
19
+ def repo
20
+ return parent.options.repo if defined? parent.options.repo
21
+
22
+ parent.options.repo = OpenStruct.new(name: nil, organization: nil)
23
+ end
24
+
25
+ def name
26
+ repo.repo_name
27
+ end
28
+
29
+ def organization
30
+ repo.repo_organization
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module KDirector
4
- VERSION = '0.3.0'
4
+ VERSION = '0.6.0'
5
5
  end
data/lib/k_director.rb CHANGED
@@ -5,11 +5,12 @@ 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
+ require_relative 'k_director/dsls/children/github'
13
14
 
14
15
  module KDirector
15
16
  # raise KDirector::Error, 'Sample message'
data/package-lock.json CHANGED
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "k_director",
3
- "version": "0.3.0",
3
+ "version": "0.6.0",
4
4
  "lockfileVersion": 2,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "k_director",
9
- "version": "0.3.0",
9
+ "version": "0.6.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.3.0",
3
+ "version": "0.6.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.3.0
4
+ version: 0.6.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-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,10 +86,11 @@ 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
93
+ - lib/k_director/dsls/children/github.rb
97
94
  - lib/k_director/version.rb
98
95
  - package-lock.json
99
96
  - package.json
@@ -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