k_director 0.2.0 → 0.5.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: d0c8985292cf5c11bd7bd5e7887be4c29bf72e13095a4c7f1b7195595188a39a
4
- data.tar.gz: aa90b26840c62e1c8e60edc0b4aeda07b62a76fa106de2618eb2571a48791680
3
+ metadata.gz: '0208f9ecd1fa6a0a1a649266a9a6a823e7db688c632e9f79681c9386d6a4a3fb'
4
+ data.tar.gz: '08140ee775462704f34ade6c236000ed615e877007b9fc1d48dc748de222c72b'
5
5
  SHA512:
6
- metadata.gz: '0458d1254d8ca4e459d3aa2a6bf23de2b3437d8df7cf0ded66376f6618f5f55f3ae4016506cde7381a81c095140200835950161b47041e6aaa6d086197547aaf'
7
- data.tar.gz: 5f8d84e42051822825f82310c3a6ac1afb6fb87beeb10acb68137583b351fa6c92fe7d09356bbc4f03df4c0922cce9a9dd0a5ac4747174ca1f33d4a7c853b9e4
6
+ metadata.gz: 49321aaf3a58a70ea34e0668cfe89e91ff069bffa2301cd90b51ab64a446b41d69dc2501f2d3cea469d47f8af31f57965840b664f55bad79e14321bbcefd436e
7
+ data.tar.gz: 04d83e5f3b8d1f8d89ea07eba68b393836a13d8e0876069d38017d1001fe5bd02f1e68803e208f3e020d783eabd5a3280fa673e5784f5ca7f5816f4eb795369e
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.4.1](https://github.com/klueless-io/k_director/compare/v0.4.0...v0.4.1) (2022-01-30)
2
+
3
+
4
+ ### Bug Fixes
5
+
6
+ * refactor dom builder with set/add supporting key hierarchies ([8fee48d](https://github.com/klueless-io/k_director/commit/8fee48d12dfb37210ed87d0fb22222bd2db3da28))
7
+
8
+ # [0.4.0](https://github.com/klueless-io/k_director/compare/v0.3.0...v0.4.0) (2022-01-29)
9
+
10
+
11
+ ### Bug Fixes
12
+
13
+ * run rubocop ([e8805aa](https://github.com/klueless-io/k_director/commit/e8805aaddfde04ba1def563d3f7e5e311fa2841a))
14
+
15
+
16
+ ### Features
17
+
18
+ * add GitHub DSL ([e8de7d5](https://github.com/klueless-io/k_director/commit/e8de7d599af16be9dced907617d534f029e1e1ad))
19
+
20
+ # [0.3.0](https://github.com/klueless-io/k_director/compare/v0.2.0...v0.3.0) (2022-01-29)
21
+
22
+
23
+ ### Features
24
+
25
+ * add Blueprint DSL ([c27ec12](https://github.com/klueless-io/k_director/commit/c27ec124b8c55b84f2dfd67f37de6ab2c4fb8d22))
26
+
27
+ # [0.2.0](https://github.com/klueless-io/k_director/compare/v0.1.2...v0.2.0) (2022-01-27)
28
+
29
+
30
+ ### Features
31
+
32
+ * add BaseDirector and ChildDirector ([d32265a](https://github.com/klueless-io/k_director/commit/d32265a1e46811bde6bdfbef4b8c9dc8602a8f88))
33
+
1
34
  ## [0.1.2](https://github.com/klueless-io/k_director/compare/v0.1.1...v0.1.2) (2022-01-26)
2
35
 
3
36
 
@@ -10,4 +43,4 @@
10
43
 
11
44
  ### Feature
12
45
 
13
- * add dom and action builder ([a61e841](https://github.com/klueless-io/k_director/commit/a61e841a40f544f4751e4aaa012d60a447d2dfab))
46
+ * add dom and action builder ([a61e841](https://github.com/klueless-io/k_director/commit/a61e841a40f544f4751e4aaa012d60a447d2dfab))
@@ -2,26 +2,111 @@
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 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, **opts)
31
+ opts.each do |key, value|
32
+ set(group, key, value)
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, 1)
43
+ # set(:a, [])
44
+ # set(:a, [1, 2, 3])
45
+ # set(:a, some_value, default_value: 'use if not supplied')
46
+ # set(:a, :b, 'nested value')
47
+ # set(:a, :b, :c, 'deeply nested value')
48
+ # set(:a, :b, :c, :d, :e, :f, 'depth is no barrier')
49
+ def set(*keyset_value, default_value: nil)
50
+ size = keyset_value.size
51
+
52
+ raise ArgumentError, 'set requires 2 or more arguments' if size < 2
53
+
54
+ target = initialize_hierarchy(keyset_value)
55
+
56
+ set_kv(target, keyset_value[size - 2], keyset_value[size - 1], default_value: default_value)
57
+ end
58
+
59
+ # add value to array
60
+ # set(:a, [])
61
+ # add(:a, 1])
62
+ # add(:a, 2])
63
+ # add(:a, 3])
64
+ def add(*keyset_value, default_value: nil)
65
+ size = keyset_value.size
66
+
67
+ raise ArgumentError, 'add requires 2 or more arguments' if size < 2
68
+
69
+ target = initialize_hierarchy(keyset_value)
70
+
71
+ add_kv(target, keyset_value[size - 2], keyset_value[size - 1], default_value: default_value)
72
+ end
73
+
74
+ def debug
75
+ puts JSON.pretty_generate(actions)
76
+ # puts JSON.pretty_generate(dom)
77
+ # log.structure(dom)
78
+
79
+ self
13
80
  end
14
81
 
15
- def actions
16
- dom[:actions]
82
+ def build
83
+ # hook into the set, add and queue_action methods form memoization
84
+ KUtil.data.to_open_struct(@dom)
17
85
  end
18
86
 
19
87
  private
20
88
 
21
- def schema
22
- {
23
- actions: []
24
- }
89
+ def initialize_hierarchy(keys_value)
90
+ target = @dom
91
+
92
+ return target unless keys_value.size > 2
93
+
94
+ keys_value.slice(0..-3).each_with_index do |key, _index|
95
+ target[key] = {} unless target.key?(key)
96
+ target = target[key]
97
+ end
98
+ target
99
+ end
100
+
101
+ def set_kv(target, key, value, default_value: nil)
102
+ set_value = value.nil? ? default_value : value
103
+ target[key] = set_value
104
+ end
105
+
106
+ def add_kv(target, key, value, default_value: nil)
107
+ add_value = value.nil? ? default_value : value
108
+ target[key] = [] unless target.key?(key)
109
+ target[key] << add_value
25
110
  end
26
111
  end
27
112
  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,10 @@ module KDirector
35
34
  @options.on_action ||= :queue # %i[queue execute]
36
35
  end
37
36
 
37
+ def dom
38
+ builder.dom
39
+ end
40
+
38
41
  # Used by child directors to inherit options from parent
39
42
  def inherited_opts(**opts)
40
43
  {
@@ -48,6 +51,10 @@ module KDirector
48
51
  @options.director_name
49
52
  end
50
53
 
54
+ def director_name=(name)
55
+ @options.director_name = name
56
+ end
57
+
51
58
  def template_base_folder
52
59
  @options.template_base_folder
53
60
  end
@@ -66,8 +73,7 @@ module KDirector
66
73
  on_exist: on_exist
67
74
  }.merge(opts)
68
75
 
69
- # WHAT IS THIS FOR?
70
- opts[:dom] = dom if dom
76
+ opts[:dom] = dom.except(:actions) if dom
71
77
 
72
78
  handle_action(k_builder.add_file_action(file, **opts))
73
79
 
@@ -0,0 +1,58 @@
1
+ # frozen_string_literal: true
2
+
3
+ module KDirector
4
+ module Dsls
5
+ module Children
6
+ # Blueprint DSL is used to add files to the target folder.
7
+ #
8
+ # A blueprint is a recipe that you can follow to build out assets on the target application
9
+ class Blueprint < KDirector::Directors::ChildDirector
10
+ # Add a single file into the code base
11
+ #
12
+ # @param [String] output_filename The output file name, this can be a relative path
13
+ # @param [Hash] **opts The options
14
+ # @option opts [String] :template_filename Template filename can be set or it will default to the same value as the output file name
15
+ # @option opts [String] :template_subfolder Template subfolder
16
+ def add(output_file, **opts)
17
+ template_file = opts[:template_file] || output_file
18
+ template_parts = [template_base_folder, opts[:template_subfolder], template_file].reject(&:blank?)
19
+ template_path = File.join(*template_parts)
20
+
21
+ # maybe template_file should be renamed to template_path in k_builder
22
+ opts[:template_file] = template_path
23
+
24
+ add_file(output_file, **opts)
25
+ end
26
+
27
+ def oadd(name, **opts)
28
+ add(name, **{ open: true }.merge(opts))
29
+ end
30
+
31
+ def tadd(name, **opts)
32
+ add(name, **{ open_template: true }.merge(opts))
33
+ end
34
+
35
+ def fadd(name, **opts)
36
+ add(name, **{ on_exist: :write }.merge(opts))
37
+ end
38
+
39
+ # def template_content(template_file, **opts)
40
+ # template_parts = [template_base_folder, opts[:template_subfolder], template_file].reject(&:blank?)
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_file, **opts)
48
+ template_parts = [template_base_folder, opts[:template_subfolder], template_file].reject(&:blank?)
49
+ template_path = File.join(*template_parts)
50
+
51
+ script = k_builder.process_any_content(template_file: template_path, **opts)
52
+
53
+ run_script(script)
54
+ end
55
+ end
56
+ end
57
+ end
58
+ end
@@ -0,0 +1,58 @@
1
+ # frozen_string_literal: true
2
+
3
+ module KDirector
4
+ module Dsls
5
+ module Children
6
+ # Blueprint DSL is used to add files to the target folder.
7
+ #
8
+ # A blueprint is a recipe that you can follow to build out assets on the target application
9
+ class Blueprint < KDirector::Directors::ChildDirector
10
+ # Add a single file into the code base
11
+ #
12
+ # @param [String] output_filename The output file name, this can be a relative path
13
+ # @param [Hash] **opts The options
14
+ # @option opts [String] :template_filename Template filename can be set or it will default to the same value as the output file name
15
+ # @option opts [String] :template_subfolder Template subfolder
16
+ def add(output_file, **opts)
17
+ template_file = opts[:template_file] || output_file
18
+ template_parts = [template_base_folder, opts[:template_subfolder], template_file].reject(&:blank?)
19
+ template_path = File.join(*template_parts)
20
+
21
+ # maybe template_file should be renamed to template_path in k_builder
22
+ opts[:template_file] = template_path
23
+
24
+ add_file(output_file, **opts)
25
+ end
26
+
27
+ def oadd(name, **opts)
28
+ add(name, **{ open: true }.merge(opts))
29
+ end
30
+
31
+ def tadd(name, **opts)
32
+ add(name, **{ open_template: true }.merge(opts))
33
+ end
34
+
35
+ def fadd(name, **opts)
36
+ add(name, **{ on_exist: :write }.merge(opts))
37
+ end
38
+
39
+ # def template_content(template_file, **opts)
40
+ # template_parts = [template_base_folder, opts[:template_subfolder], template_file].reject(&:blank?)
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_file, **opts)
48
+ template_parts = [template_base_folder, opts[:template_subfolder], template_file].reject(&:blank?)
49
+ template_path = File.join(*template_parts)
50
+
51
+ script = k_builder.process_any_content(template_file: template_path, **opts)
52
+
53
+ run_script(script)
54
+ end
55
+ end
56
+ end
57
+ end
58
+ 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.2.0'
4
+ VERSION = '0.5.0'
5
5
  end
data/lib/k_director.rb CHANGED
@@ -5,10 +5,11 @@ 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/dsls/children/blueprint'
12
+ require_relative 'k_director/dsls/children/github'
12
13
 
13
14
  module KDirector
14
15
  # raise KDirector::Error, 'Sample message'
data/package-lock.json CHANGED
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "k_director",
3
- "version": "0.2.0",
3
+ "version": "0.5.0",
4
4
  "lockfileVersion": 2,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "k_director",
9
- "version": "0.2.0",
9
+ "version": "0.5.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.2.0",
3
+ "version": "0.5.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.2.0
4
+ version: 0.5.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-27 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,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
92
+ - lib/k_director/dsls/children/blueprint.rb
93
+ - lib/k_director/dsls/children/github.rb
96
94
  - lib/k_director/version.rb
97
95
  - package-lock.json
98
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