k_doc 0.0.23 → 0.0.27
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 +4 -4
- data/.builders/directors/director.rb +1 -1
- data/.builders/initializers/configure_builder.rb +3 -3
- data/.rubocop.yml +8 -13
- data/README.md +0 -11
- data/lib/k_doc/action.rb +28 -0
- data/lib/k_doc/container.rb +9 -2
- data/lib/k_doc/fake_opinion.rb +4 -1
- data/lib/k_doc/mixins/block_processor.rb +23 -2
- data/lib/k_doc/mixins/guarded.rb +5 -1
- data/lib/k_doc/mixins/importable.rb +27 -0
- data/lib/k_doc/mixins/taggable.rb +8 -25
- data/lib/k_doc/model.rb +13 -1
- data/lib/k_doc/settings.rb +4 -0
- data/lib/k_doc/table.rb +4 -0
- data/lib/k_doc/version.rb +1 -1
- data/lib/k_doc.rb +8 -0
- metadata +5 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 13425498035dd9742336c907655e6555a37f7b4293c99443921bea29b38b0db9
|
4
|
+
data.tar.gz: 63ff3b0ad02f17833cc23318d529c80cc1e0165eae4d18fb096db484f331808b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d623d3964433ecbd4b33d4c4cce608d5e1923836ab6ffb3ab91c05dc9ae517719d2da2a14ca0ab3c83e5cace4593d2afaad80f24eaa4c8e8e48dd7b6229c886a
|
7
|
+
data.tar.gz: 9557e8c8082bcfed3acb10fea6a4516e7aec04a49cfdf3f99fb3800faf32531937df8f52278db7a0e02f6543b8e22e25bbadef7d472e530a5ccaf6c8ae053081
|
@@ -1,5 +1,5 @@
|
|
1
1
|
KBuilder.reset(:gem)
|
2
|
-
|
2
|
+
KConfig.configure(:gem) do |config|
|
3
3
|
# config.template_folders.add(:global , '~/dev/kgems/k_templates/definitions/genesis')
|
4
4
|
config.target_folders.add(:root , File.expand_path('..', Dir.getwd))
|
5
5
|
config.target_folders.add(:lib , :root, 'lib', 'k_doc')
|
@@ -7,14 +7,14 @@ KBuilder.configure(:gem) do |config|
|
|
7
7
|
end
|
8
8
|
|
9
9
|
KBuilder.reset(:design_patterns)
|
10
|
-
|
10
|
+
KConfig.configure(:design_patterns) do |config|
|
11
11
|
config.template_folders.add(:global , '~/dev/kgems/k_templates/templates/ruby_design_patterns')
|
12
12
|
config.target_folders.add(:root , File.expand_path('..', Dir.getwd))
|
13
13
|
config.target_folders.add(:lib , :root, 'lib', 'k_doc')
|
14
14
|
config.target_folders.add(:spec , :root, 'spec', 'k_doc')
|
15
15
|
end
|
16
16
|
|
17
|
-
#
|
17
|
+
# KConfig.configuration(:gem).debug
|
18
18
|
|
19
19
|
# def builder
|
20
20
|
# @builder ||= KBuilder::BaseBuilder.init
|
data/.rubocop.yml
CHANGED
@@ -44,15 +44,19 @@ Layout/LineLength:
|
|
44
44
|
Lint/UnusedMethodArgument:
|
45
45
|
AllowUnusedKeywordArguments: true
|
46
46
|
|
47
|
-
Style/
|
47
|
+
Style/AccessorGrouping:
|
48
48
|
Enabled: false
|
49
|
-
|
50
49
|
Style/BlockComments:
|
51
50
|
Enabled: false
|
52
51
|
Include:
|
53
52
|
- "**/spec/*"
|
54
|
-
|
55
|
-
|
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
|
data/README.md
CHANGED
@@ -52,17 +52,6 @@ Checkout the repo
|
|
52
52
|
git clone klueless-io/k_doc
|
53
53
|
```
|
54
54
|
|
55
|
-
After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests.
|
56
|
-
|
57
|
-
You can also run `bin/console` for an interactive prompt that will allow you to experiment.
|
58
|
-
|
59
|
-
```bash
|
60
|
-
bin/console
|
61
|
-
|
62
|
-
Aaa::Bbb::Program.execute()
|
63
|
-
# => ""
|
64
|
-
```
|
65
|
-
|
66
55
|
`k_doc` is setup with Guard, run `guard`, this will watch development file changes and run tests automatically, if successful, it will then run rubocop for style quality.
|
67
56
|
|
68
57
|
To release a new version, update the version number in `version.rb`, build the gem and push the `.gem` file to [rubygems.org](https://rubygems.org).
|
data/lib/k_doc/action.rb
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module KDoc
|
4
|
+
# Action is a DSL for modeling JSON data objects
|
5
|
+
class Action < KDoc::Container
|
6
|
+
attr_reader :file
|
7
|
+
|
8
|
+
# Simple Ruby Action
|
9
|
+
#
|
10
|
+
# @param [String|Symbol] name Name of the document
|
11
|
+
# @param args[0] Type of the document, defaults to KDoc:: FakeOpinion.new.default_action_type if not set
|
12
|
+
# @param default: Default value (using named params), as above
|
13
|
+
# @param [Proc] block The block is stored and accessed different types in the document loading workflow.
|
14
|
+
def initialize(key = nil, **opts, &_block)
|
15
|
+
super(**{ key: key }.merge(opts))
|
16
|
+
end
|
17
|
+
|
18
|
+
private
|
19
|
+
|
20
|
+
def default_data_type
|
21
|
+
String
|
22
|
+
end
|
23
|
+
|
24
|
+
def default_container_type
|
25
|
+
:action
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
data/lib/k_doc/container.rb
CHANGED
@@ -9,6 +9,7 @@ module KDoc
|
|
9
9
|
include KDoc::Taggable
|
10
10
|
include KDoc::Datum
|
11
11
|
include KDoc::BlockProcessor
|
12
|
+
include KDoc::Importable
|
12
13
|
|
13
14
|
attr_reader :opts
|
14
15
|
|
@@ -24,6 +25,7 @@ module KDoc
|
|
24
25
|
|
25
26
|
initialize_tag(opts)
|
26
27
|
initialize_data(opts)
|
28
|
+
initialize_import(opts)
|
27
29
|
initialize_block(opts, &block)
|
28
30
|
end
|
29
31
|
|
@@ -32,11 +34,16 @@ module KDoc
|
|
32
34
|
end
|
33
35
|
|
34
36
|
def default_data_type
|
35
|
-
Hash
|
37
|
+
@default_data_type ||= Hash
|
38
|
+
end
|
39
|
+
|
40
|
+
def os(**opts)
|
41
|
+
OpenStruct.new(opts)
|
36
42
|
end
|
37
43
|
|
38
44
|
def debug
|
39
|
-
|
45
|
+
debug_taggable
|
46
|
+
debug_block_processor
|
40
47
|
debug_errors
|
41
48
|
end
|
42
49
|
|
data/lib/k_doc/fake_opinion.rb
CHANGED
@@ -7,6 +7,7 @@ module KDoc
|
|
7
7
|
# how I want to implement this
|
8
8
|
# Need to look at the configuration patterns, this is really a configuration
|
9
9
|
class FakeOpinion
|
10
|
+
attr_accessor :default_action_type
|
10
11
|
attr_accessor :default_model_type
|
11
12
|
attr_accessor :default_csv_type
|
12
13
|
attr_accessor :default_json_type
|
@@ -19,7 +20,9 @@ module KDoc
|
|
19
20
|
attr_accessor :table_class
|
20
21
|
|
21
22
|
def initialize
|
22
|
-
@default_model_type = :entity
|
23
|
+
# @default_model_type = :entity
|
24
|
+
@default_action_type = :action
|
25
|
+
@default_model_type = :kdoc
|
23
26
|
@default_csv_type = :csv
|
24
27
|
@default_json_type = :json
|
25
28
|
@default_yaml_type = :yaml
|
@@ -6,12 +6,23 @@ module KDoc
|
|
6
6
|
# Rename: BlockProcessor
|
7
7
|
module BlockProcessor
|
8
8
|
attr_accessor :block
|
9
|
+
attr_accessor :block_state
|
9
10
|
|
10
11
|
def initialize_block(_opts, &block)
|
11
12
|
@block = block if block_given?
|
13
|
+
@block_state = :initial
|
12
14
|
end
|
13
15
|
|
14
|
-
def
|
16
|
+
def evaluated?
|
17
|
+
@block_state == :evaluated || @block_state == :actioned
|
18
|
+
end
|
19
|
+
|
20
|
+
def actioned?
|
21
|
+
@block_state == :actioned
|
22
|
+
end
|
23
|
+
|
24
|
+
def execute_block(run_importer: nil, run_actions: nil)
|
25
|
+
run_on_import if run_importer
|
15
26
|
eval_block
|
16
27
|
run_on_action if run_actions
|
17
28
|
end
|
@@ -20,6 +31,7 @@ module KDoc
|
|
20
31
|
return if @block.nil?
|
21
32
|
|
22
33
|
instance_eval(&@block)
|
34
|
+
@block_state = :evaluated
|
23
35
|
rescue StandardError => e
|
24
36
|
log.error('Standard error in document')
|
25
37
|
# puts "key #{unique_key}"
|
@@ -32,7 +44,10 @@ module KDoc
|
|
32
44
|
def run_on_action
|
33
45
|
return if @block.nil?
|
34
46
|
|
35
|
-
|
47
|
+
if respond_to?(:on_action)
|
48
|
+
on_action
|
49
|
+
@block_state = :actioned
|
50
|
+
end
|
36
51
|
rescue StandardError => e
|
37
52
|
log.error('Standard error while running actions')
|
38
53
|
# puts "key #{unique_key}"
|
@@ -41,5 +56,11 @@ module KDoc
|
|
41
56
|
@error = e
|
42
57
|
raise
|
43
58
|
end
|
59
|
+
|
60
|
+
def debug_block_processor
|
61
|
+
log.kv 'block_state', block_state , debug_pad_size if respond_to?(:block_state)
|
62
|
+
log.kv 'evaluated' , evaluated? , debug_pad_size if respond_to?(:evaluated?)
|
63
|
+
log.kv 'actioned' , actioned? , debug_pad_size if respond_to?(:actioned?)
|
64
|
+
end
|
44
65
|
end
|
45
66
|
end
|
data/lib/k_doc/mixins/guarded.rb
CHANGED
@@ -7,7 +7,7 @@ module KDoc
|
|
7
7
|
module Guarded
|
8
8
|
Guard = Struct.new(:type, :message)
|
9
9
|
|
10
|
-
def guard(message)
|
10
|
+
def guard(message, log: false)
|
11
11
|
errors << Guard.new(:guard, message)
|
12
12
|
end
|
13
13
|
|
@@ -42,5 +42,9 @@ module KDoc
|
|
42
42
|
log.error error.message if error.type == :guard
|
43
43
|
end
|
44
44
|
end
|
45
|
+
|
46
|
+
def clear_errors
|
47
|
+
errors.clear
|
48
|
+
end
|
45
49
|
end
|
46
50
|
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module KDoc
|
4
|
+
# Alow documents to import data from other sources (usually other documents)
|
5
|
+
|
6
|
+
module Importable
|
7
|
+
include KLog::Logging
|
8
|
+
|
9
|
+
# Proc/Handler to be called when importing data
|
10
|
+
attr_reader :on_import
|
11
|
+
|
12
|
+
# OpenStruct to be populated with data from import
|
13
|
+
attr_reader :imports
|
14
|
+
|
15
|
+
def initialize_import(opts)
|
16
|
+
# log.error 'initialize_import'
|
17
|
+
@on_import = opts.delete(:on_import)
|
18
|
+
@imports = OpenStruct.new
|
19
|
+
end
|
20
|
+
|
21
|
+
def run_on_import
|
22
|
+
return unless on_import
|
23
|
+
|
24
|
+
instance_eval(&on_import)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -67,39 +67,22 @@ 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
|
92
|
-
log.kv 'tag'
|
93
|
-
log.kv 'project'
|
94
|
-
log.kv 'namespace', namespace
|
95
|
-
log.kv 'key'
|
96
|
-
log.kv 'type'
|
73
|
+
def debug_taggable
|
74
|
+
log.kv 'tag' , tag , debug_pad_size
|
75
|
+
log.kv 'project' , project , debug_pad_size unless project.nil? || project.empty?
|
76
|
+
log.kv 'namespace' , namespace , debug_pad_size unless namespace.nil? || namespace.empty?
|
77
|
+
log.kv 'key' , key , debug_pad_size
|
78
|
+
log.kv 'type' , type , debug_pad_size
|
79
|
+
log.kv 'class type' , self.class.name , debug_pad_size
|
97
80
|
# log.kv 'error' , error , debug_kv_pad_size
|
98
81
|
end
|
99
82
|
# rubocop:enable Metrics/AbcSize
|
100
83
|
|
101
84
|
def debug_pad_size
|
102
|
-
@debug_pad_size ||= @tag_options.delete(:debug_pad_size) ||
|
85
|
+
@debug_pad_size ||= @tag_options.delete(:debug_pad_size) || 20
|
103
86
|
end
|
104
87
|
|
105
88
|
private
|
data/lib/k_doc/model.rb
CHANGED
@@ -23,6 +23,12 @@ 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
|
+
# TODO: add test
|
27
|
+
if block.nil?
|
28
|
+
log.warn 'You cannot call settings without a block. Did you mean to call data[:settings] or odata.settings?'
|
29
|
+
return
|
30
|
+
end
|
31
|
+
|
26
32
|
setting_opts ||= {}
|
27
33
|
|
28
34
|
setting_opts = {}.merge(opts) # Container options
|
@@ -34,6 +40,11 @@ module KDoc
|
|
34
40
|
end
|
35
41
|
|
36
42
|
def table(key = :table, **opts, &block)
|
43
|
+
if block.nil?
|
44
|
+
log.warn 'You cannot call table without a block. Did you mean to call data[:table] or odata.table?'
|
45
|
+
return
|
46
|
+
end
|
47
|
+
|
37
48
|
# NEED to add support for run_decorators I think
|
38
49
|
opts.merge(parent: self)
|
39
50
|
table_instance(data, key, **opts, &block)
|
@@ -115,7 +126,8 @@ module KDoc
|
|
115
126
|
|
116
127
|
def debug_header
|
117
128
|
log.heading self.class.name
|
118
|
-
|
129
|
+
debug_taggable
|
130
|
+
debug_block_processor
|
119
131
|
debug_header_keys
|
120
132
|
|
121
133
|
log.line
|
data/lib/k_doc/settings.rb
CHANGED
@@ -33,6 +33,10 @@ module KDoc
|
|
33
33
|
end
|
34
34
|
end
|
35
35
|
|
36
|
+
def imports
|
37
|
+
parent.imports
|
38
|
+
end
|
39
|
+
|
36
40
|
# Return these settings which are attached to a data container using :key
|
37
41
|
# internal_data is a bad name, but it is unlikely to interfere with any setting names
|
38
42
|
# Maybe I rename this to raw_data
|
data/lib/k_doc/table.rb
CHANGED
data/lib/k_doc/version.rb
CHANGED
data/lib/k_doc.rb
CHANGED
@@ -15,8 +15,10 @@ require 'k_doc/mixins/taggable'
|
|
15
15
|
require 'k_doc/mixins/datum'
|
16
16
|
require 'k_doc/mixins/block_processor'
|
17
17
|
require 'k_doc/mixins/composable_components'
|
18
|
+
require 'k_doc/mixins/importable'
|
18
19
|
require 'k_doc/container'
|
19
20
|
# require 'k_doc/data'
|
21
|
+
require 'k_doc/action'
|
20
22
|
require 'k_doc/csv_doc'
|
21
23
|
require 'k_doc/json_doc'
|
22
24
|
require 'k_doc/yaml_doc'
|
@@ -52,6 +54,12 @@ module KDoc
|
|
52
54
|
model(key, **{ type: :app_settings }.merge(**options), &block)
|
53
55
|
end
|
54
56
|
|
57
|
+
def action(key = nil, **options, &block)
|
58
|
+
doc = KDoc::Action.new(key, **options, &block)
|
59
|
+
doc.execute_block
|
60
|
+
doc
|
61
|
+
end
|
62
|
+
|
55
63
|
def csv(key = nil, **options, &block)
|
56
64
|
doc = KDoc::CsvDoc.new(key, **options, &block)
|
57
65
|
doc.execute_block
|
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.
|
4
|
+
version: 0.0.27
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- David Cruwys
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2022-02-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -119,6 +119,7 @@ files:
|
|
119
119
|
- hooks/update-version
|
120
120
|
- k_doc.gemspec
|
121
121
|
- lib/k_doc.rb
|
122
|
+
- lib/k_doc/action.rb
|
122
123
|
- lib/k_doc/container.rb
|
123
124
|
- lib/k_doc/csv_doc.rb
|
124
125
|
- lib/k_doc/decorators/settings_decorator.rb
|
@@ -129,6 +130,7 @@ files:
|
|
129
130
|
- lib/k_doc/mixins/composable_components.rb
|
130
131
|
- lib/k_doc/mixins/datum.rb
|
131
132
|
- lib/k_doc/mixins/guarded.rb
|
133
|
+
- lib/k_doc/mixins/importable.rb
|
132
134
|
- lib/k_doc/mixins/taggable.rb
|
133
135
|
- lib/k_doc/model.rb
|
134
136
|
- lib/k_doc/model_backup.rb
|
@@ -156,7 +158,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
156
158
|
- !ruby/object:Gem::Version
|
157
159
|
version: '0'
|
158
160
|
requirements: []
|
159
|
-
rubygems_version: 3.2.
|
161
|
+
rubygems_version: 3.2.33
|
160
162
|
signing_key:
|
161
163
|
specification_version: 4
|
162
164
|
summary: KDoc provides a document in the form a DSL that contains flexible key/value
|