k_director 0.3.0 → 0.6.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: 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