k_director 0.1.2 → 0.4.1

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: d209a43e4a6ff73dcaee458f9c1b7a568a2afd4f554028054ce5392918c1dcc3
4
- data.tar.gz: a54f0d64cf0bc1f5e55c3599d886585f3062c50c30deac454a1ac1dea14478b6
3
+ metadata.gz: 0036ab3aba8fde78577b1c3e02d9adb122d14631c309eb6cd8e849d43777928c
4
+ data.tar.gz: 7566359e95804068637fd4e52da588a8445d978d0986cbbc2cc6b84063728a30
5
5
  SHA512:
6
- metadata.gz: 80737996ee3d29ac2aab7f3bb86ccb0184354298897f686d214be6bb35b1c9e71e5304a610e48f0b8691a20b8aee38531910ca7db895dc9aec881fc2142eb50b
7
- data.tar.gz: 8f8f1ae7621f296216a3b7a8b5d1decd2335382ec648f631015bc9966aa689ac6d87ac16f39484881063a2fe32ee47463346d88a1c0c8bd6f66d102bdc08d806
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/.rubocop.yml CHANGED
@@ -52,6 +52,9 @@ Style/BlockComments:
52
52
  Include:
53
53
  - "**/spec/*"
54
54
 
55
+ Style/OpenStructUse:
56
+ Enabled: false
57
+
55
58
  # My Preferences - Start
56
59
  Metrics/ClassLength:
57
60
  Enabled: false
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 ADDED
@@ -0,0 +1,39 @@
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
+
13
+ # [0.3.0](https://github.com/klueless-io/k_director/compare/v0.2.0...v0.3.0) (2022-01-29)
14
+
15
+
16
+ ### Features
17
+
18
+ * add Blueprint DSL ([c27ec12](https://github.com/klueless-io/k_director/commit/c27ec124b8c55b84f2dfd67f37de6ab2c4fb8d22))
19
+
20
+ # [0.2.0](https://github.com/klueless-io/k_director/compare/v0.1.2...v0.2.0) (2022-01-27)
21
+
22
+
23
+ ### Features
24
+
25
+ * add BaseDirector and ChildDirector ([d32265a](https://github.com/klueless-io/k_director/commit/d32265a1e46811bde6bdfbef4b8c9dc8602a8f88))
26
+
27
+ ## [0.1.2](https://github.com/klueless-io/k_director/compare/v0.1.1...v0.1.2) (2022-01-26)
28
+
29
+
30
+ ### Bug Fixes
31
+
32
+ * add semver change log ([2069bd2](https://github.com/klueless-io/k_director/commit/2069bd24b9d32649c666480da76781514beeecf3))
33
+
34
+
35
+ ## [0.1.1](https://github.com/klueless-io/k_director/compare/v0.1.0...v0.1.1) (2022-01-26)
36
+
37
+ ### Feature
38
+
39
+ * add dom and action builder ([a61e841](https://github.com/klueless-io/k_director/commit/a61e841a40f544f4751e4aaa012d60a447d2dfab))
data/k_director.gemspec CHANGED
@@ -43,5 +43,6 @@ Gem::Specification.new do |spec|
43
43
 
44
44
  spec.add_dependency 'k_log', '~> 0.0.0'
45
45
  # spec.add_dependency 'k_type', '~> 0.0.0'
46
+ spec.add_dependency 'k_builder', '~> 0.0.0'
46
47
  spec.add_dependency 'k_util', '~> 0.0.0'
47
48
  end
@@ -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
@@ -1,14 +1,16 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- module Dsl
3
+ module KDirector
4
4
  module Directors
5
+ # Base Director is paired with the ActionsBuilder and provides a base
6
+ # on which to build code generation directors.
5
7
  class BaseDirector
6
8
  include KLog::Logging
7
9
 
8
10
  class << self
9
11
  def init(k_builder, builder = nil, **opts)
10
12
  if builder.nil?
11
- builder = Dsl::Builders::ActionsBuilder.new
13
+ builder = KDirector::Builders::ActionsBuilder.new
12
14
  else
13
15
  builder.reset
14
16
  end
@@ -20,9 +22,9 @@ module Dsl
20
22
  attr_reader :builder
21
23
  attr_reader :k_builder
22
24
  attr_reader :options
23
- attr_accessor :dom
24
-
25
+
25
26
  def initialize(k_builder, builder, **opts)
27
+ @index = 1
26
28
  @k_builder = k_builder
27
29
  @builder = builder
28
30
  @options = OpenStruct.new(**opts)
@@ -33,10 +35,29 @@ module Dsl
33
35
  @options.on_action ||= :queue # %i[queue execute]
34
36
  end
35
37
 
38
+ def dom
39
+ @index += 1
40
+ puts "dom#{@index}"
41
+ builder.dom
42
+ end
43
+
44
+ # Used by child directors to inherit options from parent
45
+ def inherited_opts(**opts)
46
+ {
47
+ on_exist: @options.on_exist,
48
+ on_action: @options.on_action,
49
+ template_base_folder: @options.template_base_folder
50
+ }.merge(opts)
51
+ end
52
+
36
53
  def director_name
37
54
  @options.director_name
38
55
  end
39
56
 
57
+ def director_name=(name)
58
+ @options.director_name = name
59
+ end
60
+
40
61
  def template_base_folder
41
62
  @options.template_base_folder
42
63
  end
@@ -49,38 +70,46 @@ module Dsl
49
70
  @options.on_action
50
71
  end
51
72
 
73
+ # Add a file to target folder
52
74
  def add_file(file, **opts)
53
75
  opts = {
54
76
  on_exist: on_exist
55
77
  }.merge(opts)
56
78
 
57
- opts[:dom] = dom if dom
79
+ opts[:dom] = dom.except(:actions) if dom
58
80
 
59
81
  handle_action(k_builder.add_file_action(file, **opts))
60
82
 
61
83
  self
62
84
  end
63
85
 
86
+ # Set current target folder
87
+ # rubocop:disable Naming/AccessorMethodName
64
88
  def set_current_folder_action(folder_key)
65
- # RUN (not handle)
89
+ # RUN (not handle), current folder effects subsequent actions and so it needs to be executed straight away.
66
90
  run_action(k_builder.set_current_folder_action(folder_key))
67
91
 
68
92
  self
69
93
  end
94
+ # rubocop:enable Naming/AccessorMethodName
70
95
  alias cd set_current_folder_action
71
96
 
97
+ # Run a command using shell, this is useful with command line tools
72
98
  def run_command(command)
73
99
  handle_action(k_builder.run_command_action(command))
74
100
 
75
101
  self
76
102
  end
77
103
 
104
+ # Run a command using Open3.capture2, can be used in place of run_command
105
+ # but is also useful with multiline scripts
78
106
  def run_script(script)
79
107
  handle_action(k_builder.run_script_action(script))
80
108
 
81
109
  self
82
110
  end
83
111
 
112
+ # play any un-played actions
84
113
  def play_actions
85
114
  k_builder.play_actions(builder.actions)
86
115
  end
@@ -89,7 +118,8 @@ module Dsl
89
118
  log.section_heading director_name
90
119
 
91
120
  h = options.to_h.sort.to_h
92
- h.keys.each do |key|
121
+ h.each_key do |key|
122
+ # requires k_funky
93
123
  log.kv(titleize.parse(key.to_s), h[key])
94
124
  end
95
125
  nil
@@ -109,7 +139,7 @@ module Dsl
109
139
  end
110
140
 
111
141
  def default_director_name
112
- titleize.parse(self.class.name.split("::").last)
142
+ titleize.parse(self.class.name.split('::').last)
113
143
  end
114
144
 
115
145
  def folder_parts(*parts)
@@ -126,6 +156,11 @@ module Dsl
126
156
  builder.queue_action(action)
127
157
  k_builder.run_action(action)
128
158
  end
159
+
160
+ def titleize
161
+ require 'handlebars/helpers/string_formatting/titleize'
162
+ Handlebars::Helpers::StringFormatting::Titleize.new
163
+ end
129
164
  end
130
165
  end
131
- end
166
+ end
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ module KDirector
4
+ module Directors
5
+ # Child directors hang of a parent director and provide fluent builders for
6
+ # specialized flow control, e.g branching of a RubyGem Director into a GitHub
7
+ # Child director
8
+ class ChildDirector < KDirector::Directors::BaseDirector
9
+ attr_reader :parent
10
+
11
+ def initialize(parent, **opts)
12
+ @parent = parent
13
+
14
+ super(parent.k_builder, parent.builder, **@parent.inherited_opts(**opts))
15
+ end
16
+ end
17
+ end
18
+ 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.1.2'
4
+ VERSION = '0.4.1'
5
5
  end
data/lib/k_director.rb CHANGED
@@ -1,10 +1,15 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'k_log'
3
4
  require 'k_util'
5
+ require 'k_builder'
4
6
 
5
7
  require_relative 'k_director/version'
6
- require_relative 'k_director/builders/dom_builder'
7
8
  require_relative 'k_director/builders/actions_builder'
9
+ require_relative 'k_director/directors/base_director'
10
+ require_relative 'k_director/directors/child_director'
11
+ require_relative 'k_director/dsls/children/blueprint'
12
+ require_relative 'k_director/dsls/children/github'
8
13
 
9
14
  module KDirector
10
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.1.2",
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.1.2",
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.1.2",
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.1.2
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-26 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
@@ -24,6 +24,20 @@ dependencies:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: 0.0.0
27
+ - !ruby/object:Gem::Dependency
28
+ name: k_builder
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: 0.0.0
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: 0.0.0
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: k_util
29
43
  requirement: !ruby/object:Gem::Requirement
@@ -48,10 +62,6 @@ extra_rdoc_files: []
48
62
  files:
49
63
  - ".builders/_.rb"
50
64
  - ".builders/boot.rb"
51
- - ".builders/dsl/builders/actions_builder.rb"
52
- - ".builders/dsl/builders/dom_builder.rb"
53
- - ".builders/dsl/directors/base_director.rb"
54
- - ".builders/dsl/directors/child_director.rb"
55
65
  - ".builders/dsl/github_dsl.rb"
56
66
  - ".builders/dsl/ruby_gem_dsl.rb"
57
67
  - ".builders/generators/01-bootstrap.rb"
@@ -70,12 +80,16 @@ files:
70
80
  - Rakefile
71
81
  - bin/console
72
82
  - bin/setup
83
+ - docs/CHANGELOG.md
73
84
  - docs/CODE_OF_CONDUCT.md
74
85
  - docs/LICENSE.txt
75
86
  - k_director.gemspec
76
87
  - lib/k_director.rb
77
88
  - lib/k_director/builders/actions_builder.rb
78
- - lib/k_director/builders/dom_builder.rb
89
+ - lib/k_director/directors/base_director.rb
90
+ - lib/k_director/directors/child_director.rb
91
+ - lib/k_director/dsls/children/blueprint.rb
92
+ - lib/k_director/dsls/children/github.rb
79
93
  - lib/k_director/version.rb
80
94
  - package-lock.json
81
95
  - 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,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