k_doc 0.0.25 → 0.0.32

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: 2a629e6b0524e5610debb6b933e7473cf122518a9e7b0d86a8627e4d1e23380e
4
- data.tar.gz: bac4ddc4e068b3c975ed51fcb2c93c6bbbdd7b2c9da6d82dc7706432b803b4f1
3
+ metadata.gz: 627b725f7a57a7eed231bac5a00c2409cdaaf1e5bf5c9610b15c63725cae0fbc
4
+ data.tar.gz: 3da6428f327fcf696cf7af358bca4db24f894e52d526e7b096fbf42d1fbdaddd
5
5
  SHA512:
6
- metadata.gz: 1bf61c53b8f3c75e315bf9ca05473c0c0c7b08c371ca62135297a66e5f96f8991f34df27cb3e7a75244b6037dde8023ad33cff7c98435415024c49392f18c666
7
- data.tar.gz: 5f3c9aa53fdcf7022285818d5a857374050aad58523a74b1cb06c42a2bb603589d23745d0b36a018f2b8477b6aec666ed92be219cde9fd9e9a167766decb90da
6
+ metadata.gz: be14c2081ea3656f0d52cad2aef871bd8f31f474ebc2b7f6a004d02a2f9198e79c52fe4b5c9bcf86ad022fc43e2cb7d1373e72cba6d0317e7ff2b40bd163a8e2
7
+ data.tar.gz: 46ba2d4f053d7548006317c8e5398379ab8a8167cd7e1d02ae9aa8eda988dce8eac42f207e2aa9e7fb7957c7cd91349dda1f5e30df63b320ec0e7b09d43e364a
data/.rubocop.yml CHANGED
@@ -44,15 +44,19 @@ Layout/LineLength:
44
44
  Lint/UnusedMethodArgument:
45
45
  AllowUnusedKeywordArguments: true
46
46
 
47
- Style/Documentation:
47
+ Style/AccessorGrouping:
48
48
  Enabled: false
49
-
50
49
  Style/BlockComments:
51
50
  Enabled: false
52
51
  Include:
53
52
  - "**/spec/*"
54
-
55
- # My Preferences - Start
53
+ Style/Documentation:
54
+ Enabled: false
55
+ Style/EmptyMethod:
56
+ Exclude:
57
+ - "**/spec/**/*"
58
+ Style/OpenStructUse:
59
+ Enabled: false
56
60
  Metrics/ClassLength:
57
61
  Enabled: false
58
62
  Metrics/ModuleLength:
@@ -63,23 +67,14 @@ Naming/MemoizedInstanceVariableName:
63
67
  Naming/VariableNumber:
64
68
  Exclude:
65
69
  - "**/spec/**/*"
66
- Style/EmptyMethod:
67
- Exclude:
68
- - "**/spec/**/*"
69
70
  Metrics/ParameterLists:
70
71
  Exclude:
71
72
  - "**/spec/**/*"
72
73
  Layout/EmptyLineBetweenDefs:
73
74
  Exclude:
74
75
  - "**/spec/**/*"
75
-
76
76
  Lint/AmbiguousBlockAssociation:
77
77
  Exclude:
78
78
  - "**/spec/**/*"
79
-
80
- Style/AccessorGrouping:
81
- Enabled: false
82
-
83
79
  Layout/SpaceBeforeComma:
84
80
  Enabled: false
85
- # My Preferences - End
@@ -10,6 +10,10 @@ module KDoc
10
10
  include KDoc::Datum
11
11
  include KDoc::BlockProcessor
12
12
 
13
+ # OpenStruct to be populated with context data, this can be used inside the on_init
14
+ attr_reader :context
15
+
16
+ # Opts that are passed to the container. Some options will be removed when evaluated by different plugins (Taggable, BlockProcessor)
13
17
  attr_reader :opts
14
18
 
15
19
  # TODO: Owner/Owned need to be in a module and tested
@@ -20,11 +24,12 @@ module KDoc
20
24
  end
21
25
 
22
26
  def initialize(**opts, &block)
27
+ @context = OpenStruct.new
23
28
  @opts = opts
24
29
 
25
30
  initialize_tag(opts)
26
31
  initialize_data(opts)
27
- initialize_block(opts, &block)
32
+ initialize_block_processor(opts, &block)
28
33
  end
29
34
 
30
35
  def default_container_type
@@ -35,8 +40,13 @@ module KDoc
35
40
  @default_data_type ||= Hash
36
41
  end
37
42
 
43
+ def os(**opts)
44
+ OpenStruct.new(opts)
45
+ end
46
+
38
47
  def debug
39
- debug_container
48
+ debug_taggable
49
+ debug_block_processor
40
50
  debug_errors
41
51
  end
42
52
 
@@ -28,10 +28,6 @@ module KDoc
28
28
  @default_yaml_type = :yaml
29
29
  @default_settings_key = :settings
30
30
  @default_table_key = :table
31
-
32
- # @document_class = KDoc::Document
33
- @table_class = KDoc::Table
34
- @settings_class = KDoc::Settings
35
31
  end
36
32
  end
37
33
  end
@@ -3,23 +3,83 @@
3
3
  module KDoc
4
4
  # A container acts a base data object for any data that requires tagging
5
5
  # such as unique key, type and namespace.
6
- # Rename: BlockProcessor
6
+ #
7
+ # example usage of the container using model as the basis:
8
+ # KDoc.model do
9
+ # init do
10
+ # context.some_data = :xmen
11
+ # end
12
+ # settings do
13
+ # name context.some_data
14
+ # end
15
+ # action
16
+ # puts context.some_data
17
+ # end
18
+ # end
7
19
  module BlockProcessor
8
- attr_accessor :block
20
+ include KLog::Logging
9
21
 
10
- def initialize_block(_opts, &block)
22
+ attr_reader :block
23
+ attr_reader :block_state
24
+
25
+ attr_reader :init_block
26
+ attr_reader :action_block
27
+ attr_reader :children
28
+
29
+ def initialize_block_processor(_opts, &block)
11
30
  @block = block if block_given?
31
+ @block_state = :new
32
+
33
+ @init_block = nil
34
+ @action_block = nil
35
+ @children = []
36
+ end
37
+
38
+ def execute_block(run_actions: false)
39
+ # Evaluate the main block of code
40
+ fire_eval # aka primary eval
41
+
42
+ # Call the block of code attached to the init method
43
+ fire_init
44
+
45
+ # Call the each block in the child array of blocks in the order of creation (FIFO)
46
+ fire_children
47
+
48
+ # Call the block of code attached to the action method
49
+ fire_action if run_actions
50
+ end
51
+
52
+ # The underlying container is created and in the case of k_manager, registered
53
+ def new?
54
+ @block_state == :new
12
55
  end
13
56
 
14
- def execute_block(run_actions: nil)
15
- eval_block
16
- run_on_action if run_actions
57
+ # The main block has been evaluated, but child blocks are still to be processed
58
+ def evaluated?
59
+ @block_state == :evaluated || initialized?
17
60
  end
18
61
 
19
- def eval_block
20
- return if @block.nil?
62
+ # Has the init block been called?
63
+ def initialized?
64
+ @block_state == :initialized || children_evaluated?
65
+ end
21
66
 
22
- instance_eval(&@block)
67
+ # The block and the data it represents has been evaluated.
68
+ def children_evaluated?
69
+ @block_state == :children_evaluated || actioned?
70
+ end
71
+
72
+ # The on_action method has been called.
73
+ def actioned?
74
+ @block_state == :actioned
75
+ end
76
+
77
+ def fire_eval
78
+ return unless new?
79
+
80
+ instance_eval(&block) if block
81
+
82
+ @block_state = :evaluated
23
83
  rescue StandardError => e
24
84
  log.error('Standard error in document')
25
85
  # puts "key #{unique_key}"
@@ -29,10 +89,71 @@ module KDoc
29
89
  raise
30
90
  end
31
91
 
32
- def run_on_action
33
- return if @block.nil?
92
+ def init(&block)
93
+ @init_block = block
94
+ end
34
95
 
35
- on_action if respond_to?(:on_action)
96
+ def fire_init
97
+ return unless evaluated?
98
+
99
+ instance_eval(&init_block) if init_block
100
+
101
+ @block_state = :initialized
102
+ rescue StandardError => e
103
+ log.error('Standard error in document on_init')
104
+ # puts "key #{unique_key}"
105
+ # puts "file #{KUtil.data.console_file_hyperlink(resource.file, resource.file)}"
106
+ log.error(e.message)
107
+ @error = e
108
+ raise
109
+ end
110
+
111
+ def add_child(block)
112
+ @children << block
113
+ end
114
+
115
+ # Run blocks associated with the children
116
+ #
117
+ # A child can follow one of three patterns:
118
+ # 1. A block that is evaluated immediately against the parent class
119
+ # 2. A class that has its own custom block evaluation
120
+ # 3. A class that has a block which will be evaluated immediately against the child class
121
+ # rubocop:disable Metrics/AbcSize
122
+ def fire_children
123
+ return unless initialized?
124
+
125
+ children.each do |child|
126
+ if child.is_a?(Proc)
127
+ instance_eval(&child)
128
+ elsif child.respond_to?(:fire_eval)
129
+ child.fire_eval
130
+ elsif child.respond_to?(:block)
131
+ child.instance_eval(&child.block)
132
+ end
133
+ end
134
+
135
+ @block_state = :children_evaluated
136
+ rescue StandardError => e
137
+ log.error('Standard error in document with one of the child blocks')
138
+ # puts "key #{unique_key}"
139
+ # puts "file #{KUtil.data.console_file_hyperlink(resource.file, resource.file)}"
140
+ log.error(e.message)
141
+ @error = e
142
+ raise
143
+ end
144
+ # rubocop:enable Metrics/AbcSize
145
+
146
+ def action(&block)
147
+ @action_block = block
148
+ end
149
+
150
+ def fire_action
151
+ return unless children_evaluated?
152
+
153
+ if action_block
154
+ instance_eval(&action_block)
155
+ @block_state = :actioned
156
+ end
36
157
  rescue StandardError => e
37
158
  log.error('Standard error while running actions')
38
159
  # puts "key #{unique_key}"
@@ -41,5 +162,15 @@ module KDoc
41
162
  @error = e
42
163
  raise
43
164
  end
165
+
166
+ # rubocop:disable Metrics/AbcSize
167
+ def debug_block_processor
168
+ log.kv 'block_state' , block_state , debug_pad_size
169
+ log.kv 'new' , new? , debug_pad_size
170
+ log.kv 'evaluated' , evaluated? , debug_pad_size
171
+ log.kv 'children_evaluated' , children_evaluated? , debug_pad_size
172
+ log.kv 'actioned' , actioned? , debug_pad_size
173
+ end
174
+ # rubocop:enable Metrics/AbcSize
44
175
  end
45
176
  end
@@ -67,28 +67,10 @@ module KDoc
67
67
  @namespace = ns.is_a?(Array) ? ns : [ns]
68
68
  end
69
69
 
70
- # # Internal data object
71
- # def data
72
- # @data ||= @tag_options.delete(:data) || @tag_options.delete(:default_data) || default_data_value
73
- # # Settings and Table on Model needed access to @data for modification, I don't think this should be a clone
74
- # # never return the original data object, but at the same time
75
- # # do not re-clone it every time this accessor is called.
76
- # # @clone_data ||= @data.clone
77
- # end
78
-
79
- # Implement in container
80
- # def default_container_type
81
- # :container
82
- # end
83
-
84
- # def default_data_value
85
- # {}
86
- # end
87
-
88
70
  protected
89
71
 
90
72
  # rubocop:disable Metrics/AbcSize
91
- def debug_container
73
+ def debug_taggable
92
74
  log.kv 'tag' , tag , debug_pad_size
93
75
  log.kv 'project' , project , debug_pad_size unless project.nil? || project.empty?
94
76
  log.kv 'namespace' , namespace , debug_pad_size unless namespace.nil? || namespace.empty?
data/lib/k_doc/model.rb CHANGED
@@ -23,20 +23,29 @@ module KDoc
23
23
 
24
24
  # Need to look at Director as an alternative to this technique
25
25
  def settings(key = nil, **setting_opts, &block)
26
- setting_opts ||= {}
26
+ if block.nil?
27
+ log.warn 'You cannot call settings without a block. Did you mean to call data[:settings] or odata.settings?'
28
+ return
29
+ end
27
30
 
28
- setting_opts = {}.merge(opts) # Container options
31
+ setting_opts = {}.merge(opts) # Container options
29
32
  .merge(setting_opts) # Settings setting_opts
30
33
  .merge(parent: self)
31
34
 
32
- settings_instance(data, key, **setting_opts, &block)
33
- # settings.run_decorators(opts)
35
+ child = KDoc::Settings.new(self, data, key, **setting_opts, &block)
36
+
37
+ add_child(child)
34
38
  end
35
39
 
36
40
  def table(key = :table, **opts, &block)
37
- # NEED to add support for run_decorators I think
38
- opts.merge(parent: self)
39
- table_instance(data, key, **opts, &block)
41
+ if block.nil?
42
+ log.warn 'You cannot call table without a block. Did you mean to call data[:table] or odata.table?'
43
+ return
44
+ end
45
+
46
+ child = KDoc::Table.new(self, data, key, **opts, &block)
47
+
48
+ add_child(child)
40
49
  end
41
50
  alias rows table
42
51
 
@@ -75,6 +84,11 @@ module KDoc
75
84
 
76
85
  raise KDoc::Error, "Node not found: #{node_name}" if node_data.nil?
77
86
 
87
+ if node_data.is_a?(Array)
88
+ puts 'why is this?'
89
+ return nil
90
+ end
91
+
78
92
  if node_data.keys.length == 2 && (node_data.key?('fields') && node_data.key?('rows'))
79
93
  :table
80
94
  else
@@ -115,7 +129,8 @@ module KDoc
115
129
 
116
130
  def debug_header
117
131
  log.heading self.class.name
118
- debug_container
132
+ debug_taggable
133
+ debug_block_processor
119
134
  debug_header_keys
120
135
 
121
136
  log.line
@@ -126,15 +141,5 @@ module KDoc
126
141
  log.kv key, opts[key]
127
142
  end
128
143
  end
129
-
130
- private
131
-
132
- def settings_instance(data, key, **opts, &block)
133
- KDoc.opinion.settings_class.new(data, key, **opts, &block)
134
- end
135
-
136
- def table_instance(data, key, **opts, &block)
137
- KDoc.opinion.table_class.new(data, key, **opts, &block)
138
- end
139
144
  end
140
145
  end
@@ -1,36 +1,40 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'json'
4
-
5
3
  module KDoc
6
4
  # Builds up key/value settings from the block
7
- # and applies them to a key coded node on the hash
8
5
  class Settings
9
6
  include KLog::Logging
10
- # include KDoc::Decorators
11
7
 
12
8
  attr_reader :parent
13
9
  attr_reader :key
14
10
  attr_reader :decorators
11
+ attr_reader :block
15
12
 
16
- alias kp parent
13
+ def initialize(parent, data, key = nil, **opts, &block)
14
+ @parent = parent
15
+ @data = data
16
+ @key = (key || FakeOpinion.new.default_settings_key).to_s
17
+ @data[@key] = {}
18
+ @decorators = build_decorators(opts) # TODO: add tests for decorators
19
+ @block = block
20
+ end
17
21
 
18
- def initialize(data, key = nil, **options, &block)
19
- initialize_attributes(data, key, **options)
22
+ def fire_eval
23
+ return unless block
20
24
 
21
- # Need a way to find out the line number for errors and report it correctly
22
- begin
23
- instance_eval(&block) if block_given?
25
+ instance_eval(&block)
26
+ run_decorators
24
27
 
25
- run_decorators
28
+ # rubocop:disable Style/RescueStandardError
29
+ rescue => e
30
+ # rubocop:enable Style/RescueStandardError
31
+ log.error("Standard error while running settings for key: #{@key}")
32
+ log.error(e.message)
33
+ raise
34
+ end
26
35
 
27
- # rubocop:disable Style/RescueStandardError
28
- rescue => e
29
- # rubocop:enable Style/RescueStandardError
30
- puts "Invalid code block in settings_dsl: #{@key}"
31
- puts e.message
32
- raise
33
- end
36
+ def context
37
+ parent.context
34
38
  end
35
39
 
36
40
  # Return these settings which are attached to a data container using :key
@@ -54,7 +58,7 @@ module KDoc
54
58
  # puts "args.length : #{args.length}"
55
59
 
56
60
  if name != :type && !@parent.nil? && @parent.respond_to?(name)
57
- puts "NAME: #{name}"
61
+ puts "Settings.method_missing - NAME: #{name}"
58
62
  return @parent.public_send(name, *args, &block)
59
63
  end
60
64
  raise KDoc::Error, 'Multiple setting values is not supported' if args.length > 1
@@ -123,21 +127,11 @@ module KDoc
123
127
  decorators.each { |decorator| decorator.decorate(self, :settings) }
124
128
  end
125
129
 
126
- def initialize_attributes(data, key = nil, **options)
127
- @data = data
128
- @key = (key || FakeOpinion.new.default_settings_key).to_s
129
-
130
- @parent = options[:parent] if options.key?(:parent)
130
+ def build_decorators(opts)
131
+ decorator_list = opts[:decorators].nil? ? [] : opts[:decorators]
131
132
 
132
- decorator_list = options[:decorators].nil? ? [] : options[:decorators]
133
-
134
- # This code needs to work differently, it needs to support the 3 different types
135
- # Move the query into helpers
136
- @decorators = decorator_list
137
- .map(&:new)
133
+ decorator_list.map(&:new)
138
134
  .select { |decorator| decorator.compatible?(self) }
139
-
140
- @data[@key] = {}
141
135
  end
142
136
  end
143
137
  end
data/lib/k_doc/table.rb CHANGED
@@ -6,18 +6,38 @@ module KDoc
6
6
  include KLog::Logging
7
7
 
8
8
  attr_reader :parent
9
- attr_reader :name
9
+ attr_reader :key # used to be called name
10
10
  attr_reader :decorators
11
+ attr_reader :block
11
12
 
12
- def initialize(data, name = nil, **options, &block)
13
- initialize_attributes(data, name, **options)
13
+ def initialize(parent, data, key = nil, **opts, &block)
14
+ @parent = parent
15
+ @data = data
16
+ @key = (key || FakeOpinion.new.default_table_key).to_s
17
+ @data[@key] = { 'fields' => [], 'rows' => [] }
18
+ @decorators = build_decorators(opts)
19
+ @block = block
20
+ end
21
+
22
+ def fire_eval
23
+ return unless block
24
+
25
+ instance_eval(&block)
14
26
 
15
27
  @has_executed_field_decorators = false
16
28
  @has_executed_row_decorators = false
17
29
 
18
- instance_eval(&block) if block_given?
19
-
20
30
  run_decorators(:update_rows)
31
+
32
+ # rubocop:disable Style/RescueStandardError
33
+ rescue => e
34
+ # rubocop:enable Style/RescueStandardError
35
+ log.error("Table error for key: #{@key} - #{e.message}")
36
+ raise
37
+ end
38
+
39
+ def context
40
+ parent.context
21
41
  end
22
42
 
23
43
  # Pass fields in using the following format
@@ -27,7 +47,7 @@ module KDoc
27
47
  def fields(*field_definitions)
28
48
  field_definitions = *field_definitions[0] if field_definitions.length == 1 && field_definitions[0].is_a?(Array)
29
49
 
30
- fields = @data[@name]['fields']
50
+ fields = @data[@key]['fields']
31
51
 
32
52
  field_definitions.each do |fd|
33
53
  fields << if fd.is_a?(String) || fd.is_a?(Symbol)
@@ -42,7 +62,7 @@ module KDoc
42
62
 
43
63
  # rubocop:disable Metrics/AbcSize
44
64
  def row(*args, **named_args)
45
- fields = @data[@name]['fields']
65
+ fields = @data[@key]['fields']
46
66
 
47
67
  raise KType::Error, "To many values for row, argument #{args.length}" if args.length > fields.length
48
68
 
@@ -59,31 +79,31 @@ module KDoc
59
79
  end
60
80
 
61
81
  # Override with named args
62
- named_args.each_key do |key|
63
- row[key.to_s] = named_args[key] # KUtil.data.clean_symbol(named_args[key])
82
+ named_args.each_key do |arg_name|
83
+ row[arg_name.to_s] = named_args[arg_name] # KUtil.data.clean_symbol(named_args[key])
64
84
  end
65
85
 
66
- @data[@name]['rows'] << row
86
+ @data[@key]['rows'] << row
67
87
  row
68
88
  end
69
89
  # rubocop:enable Metrics/AbcSize
70
90
 
71
91
  # rubocop:disable Naming/AccessorMethodName
72
92
  def get_fields
73
- @data[@name]['fields']
93
+ @data[@key]['fields']
74
94
  end
75
95
 
76
96
  def get_rows
77
- @data[@name]['rows']
97
+ @data[@key]['rows']
78
98
  end
79
99
  # rubocop:enable Naming/AccessorMethodName
80
100
 
81
101
  def internal_data
82
- @data[@name]
102
+ @data[@key]
83
103
  end
84
104
 
85
105
  def find_row(key, value)
86
- @data[@name]['rows'].find { |r| r[key] == value }
106
+ @data[@key]['rows'].find { |r| r[key] == value }
87
107
  end
88
108
 
89
109
  # Field definition
@@ -134,24 +154,12 @@ module KDoc
134
154
  end
135
155
  # rubocop:enable Metrics/CyclomaticComplexity
136
156
 
137
- # rubocop:disable Metrics/AbcSize
138
- def initialize_attributes(data, name = nil, **options)
139
- @data = data
140
- @name = (name || FakeOpinion.new.default_table_key.to_s).to_s
141
-
142
- @parent = options[:parent] if !options.nil? && options.key?(:parent)
157
+ def build_decorators(opts)
158
+ decorator_list = opts[:decorators].nil? ? [] : opts[:decorators]
143
159
 
144
- # This code needs to work differently, it needs to support the 3 different types
145
- # Move the query into helpers
146
- decorator_list = options[:decorators].nil? ? [] : options[:decorators]
147
-
148
- @decorators = decorator_list
149
- .map(&:new)
160
+ decorator_list.map(&:new)
150
161
  .select { |decorator| decorator.compatible?(self) }
151
-
152
- @data[@name] = { 'fields' => [], 'rows' => [] }
153
162
  end
154
- # rubocop:enable Metrics/AbcSize
155
163
 
156
164
  def respond_to_missing?(name, *_args, &_block)
157
165
  (!@parent.nil? && @parent.respond_to?(name, true)) || super
data/lib/k_doc/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module KDoc
4
- VERSION = '0.0.25'
4
+ VERSION = '0.0.32'
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: k_doc
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.25
4
+ version: 0.0.32
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-02-12 00:00:00.000000000 Z
11
+ date: 2022-02-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -132,7 +132,6 @@ files:
132
132
  - lib/k_doc/mixins/guarded.rb
133
133
  - lib/k_doc/mixins/taggable.rb
134
134
  - lib/k_doc/model.rb
135
- - lib/k_doc/model_backup.rb
136
135
  - lib/k_doc/settings.rb
137
136
  - lib/k_doc/table.rb
138
137
  - lib/k_doc/version.rb
@@ -1,191 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- # module KDoc
4
- # # Model is a DSL for modeling general purpose data objects
5
- # #
6
- # # A model can have
7
- # # - 0 or more named setting groups each with their key/value pairs
8
- # # - 0 or more named table groups each with their own columns and rows
9
- # #
10
- # # A settings group without a name will default to name: :settings
11
- # # A table group without a name will default to name: :table
12
- # class Model < KDoc::Container
13
- # include KLog::Logging
14
-
15
- # # include KType::Error
16
- # # include KType::ManagedState
17
- # # include KType::NamedFolder
18
- # # include KType::LayeredFolder
19
-
20
- # attr_reader :options
21
-
22
- # # Create document
23
- # #
24
- # # @param [String|Symbol] name Name of the document
25
- # # @param args[0] Type of the document, defaults to KDoc:: FakeOpinion.new.default_model_type if not set
26
- # # @param default: Default value (using named params), as above
27
- # def initialize(key = nil, **options, &block)
28
- # super(key: key, type: options[:type] || KDoc.opinion.default_model_type) # , namespace: options[:namespace], project_key: options[:project_key])
29
- # initialize_attributes(**options)
30
-
31
- # @block = block if block_given?
32
- # end
33
-
34
- # # NOTE: Can this be moved out of the is object?
35
- # def execute_block(run_actions: nil)
36
- # return if @block.nil?
37
-
38
- # # The DSL actions method will only run on run_actions: true
39
- # @run_actions = run_actions
40
-
41
- # instance_eval(&@block)
42
-
43
- # on_action if run_actions && respond_to?(:on_action)
44
- # # rescue KDoc::Error => e
45
- # # puts('KDoc::Error in document')
46
- # # puts "key #{unique_key}"
47
- # # # puts "file #{KUtil.data.console_file_hyperlink(resource.file, resource.file)}"
48
- # # puts(e.message)
49
- # # @error = e
50
- # # raise
51
- # rescue StandardError => e
52
- # log.error('Standard error in document')
53
- # # puts "key #{unique_key}"
54
- # # puts "file #{KUtil.data.console_file_hyperlink(resource.file, resource.file)}"
55
- # log.error(e.message)
56
- # @error = e
57
- # # log.exception exception2
58
- # raise
59
- # ensure
60
- # @run_actions = nil
61
- # end
62
-
63
- # def settings(key = nil, **options, &block)
64
- # options ||= {}
65
-
66
- # opts = {}.merge(@options) # Data Options
67
- # .merge(options) # Settings Options
68
- # .merge(parent: self)
69
-
70
- # settings_instance(@data, key, **opts, &block)
71
- # # settings.run_decorators(opts)
72
- # end
73
-
74
- # def table(key = :table, **options, &block)
75
- # # NEED to add support for run_decorators I think
76
- # options.merge(parent: self)
77
- # table_instance(@data, key, **options, &block)
78
- # end
79
- # alias rows table
80
-
81
- # # Sweet add-on would be builders
82
- # # def builder(key, &block)
83
- # # # example
84
- # # KDoc::Builder::Shotstack.new(@data, key, &block)
85
- # # end
86
-
87
- # # Need to move this down to container
88
- # # Need to use some sort of cache invalidation to know if the internal data has been altered
89
- # def odata
90
- # @odata ||= data_struct
91
- # end
92
-
93
- # def oraw
94
- # @oraw ||= raw_data_struct
95
- # end
96
-
97
- # def data_struct
98
- # KUtil.data.to_open_struct(data)
99
- # end
100
- # # alias d data_struct
101
-
102
- # def raw_data_struct
103
- # KUtil.data.to_open_struct(raw_data)
104
- # end
105
-
106
- # def get_node_type(node_name)
107
- # node_name = KUtil.data.clean_symbol(node_name)
108
- # node_data = @data[node_name]
109
-
110
- # raise KDoc::Error, "Node not found: #{node_name}" if node_data.nil?
111
-
112
- # if node_data.keys.length == 2 && (node_data.key?('fields') && node_data.key?('rows'))
113
- # :table
114
- # else
115
- # :settings
116
- # end
117
- # end
118
-
119
- # # Removes any meta data eg. "fields" from a table and just returns the raw data
120
- # # REFACTOR: IT MAY BE BEST TO MOVE raw_data into each of the node_types
121
- # def raw_data
122
- # # REFACT, what if this is CSV, meaning it is just an array?
123
- # # add specs
124
- # result = data
125
-
126
- # result.each_key do |key|
127
- # # ANTI: get_node_type uses @data while we are using @data.clone here
128
- # result[key] = if get_node_type(key) == :table
129
- # # Old format was to keep the rows and delete the fields
130
- # # Now the format is to pull the row_value up to the key and remove rows and fields
131
- # # result[key].delete('fields')
132
- # result[key]['rows']
133
- # else
134
- # result[key]
135
- # end
136
- # end
137
-
138
- # result
139
- # end
140
-
141
- # # Move this out to the logger function when it has been refactor
142
- # def debug(include_header: false)
143
- # debug_header if include_header
144
-
145
- # # tp dsls.values, :k_key, :k_type, :state, :save_at, :last_at, :data, :last_data, :source, { :file => { :width => 150 } }
146
- # # puts JSON.pretty_generate(data)
147
- # log.o(raw_data_struct)
148
- # end
149
-
150
- # def debug_header
151
- # log.heading self.class.name
152
- # debug_container
153
- # debug_header_keys
154
-
155
- # log.line
156
- # end
157
-
158
- # def debug_header_keys
159
- # options&.keys&.reject { |k| k == :namespace }&.each do |key|
160
- # log.kv key, options[key]
161
- # end
162
- # end
163
-
164
- # private
165
-
166
- # def initialize_attributes(**options)
167
- # @options = options || {}
168
- # # Is parent a part of model, or is it part of k_manager::document_taggable (NOT SURE IF IT IS USED YET)
169
- # @parent = slice_option(:parent)
170
-
171
- # # Most documents live within a hash, some tabular documents such as CSV will use an []
172
- # @data = slice_option(:default_data) || {}
173
- # end
174
-
175
- # def settings_instance(data, key, **options, &block)
176
- # KDoc.opinion.settings_class.new(data, key, **options, &block)
177
- # end
178
-
179
- # def table_instance(data, key, **options, &block)
180
- # KDoc.opinion.table_class.new(data, key, **options, &block)
181
- # end
182
-
183
- # def slice_option(key)
184
- # return nil unless @options.key?(key)
185
-
186
- # result = @options[key]
187
- # @options.delete(key)
188
- # result
189
- # end
190
- # end
191
- # end