k_director 0.1.2 → 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: 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