k_doc 0.0.22 → 0.0.26

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: 2dcd9625fafb133dca240894911cad20bf220718f4d12b9d73240d2079f4294f
4
- data.tar.gz: 592c2661f4b9a8cd905325b60d6488110029245e89f3dfdd7c1f0eb518205afd
3
+ metadata.gz: e43e7408a95cf8bf701922e28ef33115d12dd66dd77af00ca1f8b0e492c0952d
4
+ data.tar.gz: 74506c87934ece30b1e5e37b111fc6ff347ae277b8085aff50a0dce698946b7c
5
5
  SHA512:
6
- metadata.gz: 303a6524573902efd1e7488d080ed1affe6aa23abd4eac80371d7aaceac7289c06fc4ab8dea4b9c817e3a896fce6538ded912684929586487fa043ca9f14cae2
7
- data.tar.gz: 996f72379212f095f6786897287282a6add950ca83c5c554da61434556b919b258e1f5777d88116f57bbe756c247c9c09f19ca9b9536edb77c678786a5d16f50
6
+ metadata.gz: 92427570dd666fa9d679472fe48dd79771a877209ddd80df4143db1b03cf75ed587af99b1bca3f39e4f039e6ffa4e074c2173f19f8047811a17ca6c7d25cf248
7
+ data.tar.gz: 553d2c7d0bbf1304b7814e3196b3bf4d90a413c920c2209865918dd3351edabcd6fdad345cb4deb53fb5cb2678b637992caf00a7349218030a37518605071206
@@ -180,6 +180,6 @@ class Director
180
180
 
181
181
  return if @builder
182
182
 
183
- @builder = KBuilder::BaseBuilder.init(KBuilder.configuration(opts[:builder_config_name]))
183
+ @builder = KBuilder::BaseBuilder.init(KConfig.configuration(opts[:builder_config_name]))
184
184
  end
185
185
  end
@@ -1,5 +1,5 @@
1
1
  KBuilder.reset(:gem)
2
- KBuilder.configure(:gem) do |config|
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
- KBuilder.configure(:design_patterns) do |config|
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
- # KBuilder.configuration(:gem).debug
17
+ # KConfig.configuration(:gem).debug
18
18
 
19
19
  # def builder
20
20
  # @builder ||= KBuilder::BaseBuilder.init
data/.rubocop.yml CHANGED
@@ -44,15 +44,20 @@ 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
+ Exclude:
60
+ - "**/spec/**/*"
56
61
  Metrics/ClassLength:
57
62
  Enabled: false
58
63
  Metrics/ModuleLength:
@@ -63,23 +68,14 @@ Naming/MemoizedInstanceVariableName:
63
68
  Naming/VariableNumber:
64
69
  Exclude:
65
70
  - "**/spec/**/*"
66
- Style/EmptyMethod:
67
- Exclude:
68
- - "**/spec/**/*"
69
71
  Metrics/ParameterLists:
70
72
  Exclude:
71
73
  - "**/spec/**/*"
72
74
  Layout/EmptyLineBetweenDefs:
73
75
  Exclude:
74
76
  - "**/spec/**/*"
75
-
76
77
  Lint/AmbiguousBlockAssociation:
77
78
  Exclude:
78
79
  - "**/spec/**/*"
79
-
80
- Style/AccessorGrouping:
81
- Enabled: false
82
-
83
80
  Layout/SpaceBeforeComma:
84
81
  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).
@@ -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
@@ -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) if respond_to?(:initialize_import)
27
29
  initialize_block(opts, &block)
28
30
  end
29
31
 
@@ -32,11 +34,12 @@ module KDoc
32
34
  end
33
35
 
34
36
  def default_data_type
35
- Hash
37
+ @default_data_type ||= Hash
36
38
  end
37
39
 
38
40
  def debug
39
- debug_container
41
+ debug_taggable
42
+ debug_block_processor
40
43
  debug_errors
41
44
  end
42
45
 
@@ -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,9 +6,19 @@ 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
14
+ end
15
+
16
+ def evaluated?
17
+ @block_state == :evaluated || @block_state == :actioned
18
+ end
19
+
20
+ def actioned?
21
+ @block_state == :actioned
12
22
  end
13
23
 
14
24
  def execute_block(run_actions: nil)
@@ -20,6 +30,7 @@ module KDoc
20
30
  return if @block.nil?
21
31
 
22
32
  instance_eval(&@block)
33
+ @block_state = :evaluated
23
34
  rescue StandardError => e
24
35
  log.error('Standard error in document')
25
36
  # puts "key #{unique_key}"
@@ -32,7 +43,10 @@ module KDoc
32
43
  def run_on_action
33
44
  return if @block.nil?
34
45
 
35
- on_action if respond_to?(:on_action)
46
+ if respond_to?(:on_action)
47
+ on_action
48
+ @block_state = :actioned
49
+ end
36
50
  rescue StandardError => e
37
51
  log.error('Standard error while running actions')
38
52
  # puts "key #{unique_key}"
@@ -41,5 +55,11 @@ module KDoc
41
55
  @error = e
42
56
  raise
43
57
  end
58
+
59
+ def debug_block_processor
60
+ log.kv 'block_state', block_state , debug_pad_size if respond_to?(:block_state)
61
+ log.kv 'evaluated' , evaluated? , debug_pad_size if respond_to?(:evaluated?)
62
+ log.kv 'actioned' , actioned? , debug_pad_size if respond_to?(:actioned?)
63
+ end
44
64
  end
45
65
  end
@@ -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
 
@@ -24,6 +24,14 @@ module KDoc
24
24
  errors.map(&:message)
25
25
  end
26
26
 
27
+ def error_hash
28
+ errors.map(&:to_h)
29
+ end
30
+
31
+ # TODO: Add these predicates
32
+ # def errors?
33
+ # def warnings?
34
+
27
35
  def valid?
28
36
  errors.length.zero?
29
37
  end
@@ -34,5 +42,9 @@ module KDoc
34
42
  log.error error.message if error.type == :guard
35
43
  end
36
44
  end
45
+
46
+ def clear_errors
47
+ errors.clear
48
+ end
37
49
  end
38
50
  end
@@ -0,0 +1,52 @@
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
+ attr_reader :importer
10
+ attr_reader :imports
11
+
12
+ # Imports are provided via an options hash, these imports are remove from the hash as they are read
13
+ #
14
+ # Any container can import data from an existing container via the import options
15
+ # rubocop:disable Style/OpenStructUse
16
+ def initialize_import(opts)
17
+ # log.error 'initialize_import'
18
+ @importer = opts.delete(:importer)
19
+ @imports = OpenStruct.new
20
+ end
21
+ # rubocop:enable Style/OpenStructUse
22
+
23
+ def call_importer
24
+ return unless importer
25
+
26
+ importer.call(self)
27
+ end
28
+
29
+ # def import(tag)
30
+ # KManager.find_document(tag)
31
+ # end
32
+
33
+ # def import_data(tag, as: :document)
34
+ # doc = KManager.find_document(tag)
35
+
36
+ # return nil unless doc&.data
37
+
38
+ # # log.error 'about to import'
39
+ # doc.debug(include_header: true)
40
+
41
+ # return KUtil.data.to_open_struct(doc.data) if %i[open_struct ostruct].include?(as)
42
+
43
+ # doc.data
44
+ # end
45
+
46
+ protected
47
+
48
+ def debug_importable
49
+ # log.kv 'class type' , self.class.name , debug_pad_size
50
+ end
51
+ end
52
+ end
@@ -44,6 +44,7 @@ module KDoc
44
44
  @type ||= @tag_options.delete(:type) || default_container_type
45
45
  end
46
46
 
47
+ # TODO: rename to area (or area root namespace)
47
48
  # Project name
48
49
  #
49
50
  # Examples
@@ -66,39 +67,22 @@ module KDoc
66
67
  @namespace = ns.is_a?(Array) ? ns : [ns]
67
68
  end
68
69
 
69
- # # Internal data object
70
- # def data
71
- # @data ||= @tag_options.delete(:data) || @tag_options.delete(:default_data) || default_data_value
72
- # # Settings and Table on Model needed access to @data for modification, I don't think this should be a clone
73
- # # never return the original data object, but at the same time
74
- # # do not re-clone it every time this accessor is called.
75
- # # @clone_data ||= @data.clone
76
- # end
77
-
78
- # Implement in container
79
- # def default_container_type
80
- # :container
81
- # end
82
-
83
- # def default_data_value
84
- # {}
85
- # end
86
-
87
70
  protected
88
71
 
89
72
  # rubocop:disable Metrics/AbcSize
90
- def debug_container
91
- log.kv 'tag' , tag , debug_pad_size
92
- log.kv 'project' , project , debug_pad_size unless project.nil? || project.empty?
93
- log.kv 'namespace', namespace , debug_pad_size unless namespace.nil? || namespace.empty?
94
- log.kv 'key' , key , debug_pad_size
95
- log.kv 'type' , type , debug_pad_size
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
96
80
  # log.kv 'error' , error , debug_kv_pad_size
97
81
  end
98
82
  # rubocop:enable Metrics/AbcSize
99
83
 
100
84
  def debug_pad_size
101
- @debug_pad_size ||= @tag_options.delete(:debug_pad_size) || 15
85
+ @debug_pad_size ||= @tag_options.delete(:debug_pad_size) || 20
102
86
  end
103
87
 
104
88
  private
@@ -107,8 +91,8 @@ module KDoc
107
91
  values = []
108
92
  values << project if project
109
93
  values += namespace
110
- values << type if type
111
94
  values << key
95
+ values << type if type
112
96
  values -= [nil, '']
113
97
  @tag = values.join('_').to_sym
114
98
  end
data/lib/k_doc/model.rb CHANGED
@@ -115,7 +115,8 @@ module KDoc
115
115
 
116
116
  def debug_header
117
117
  log.heading self.class.name
118
- debug_container
118
+ debug_taggable
119
+ debug_block_processor
119
120
  debug_header_keys
120
121
 
121
122
  log.line
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.22'
4
+ VERSION = '0.0.26'
5
5
  end
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.22
4
+ version: 0.0.26
5
5
  platform: ruby
6
6
  authors:
7
7
  - David Cruwys
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-11-28 00:00:00.000000000 Z
11
+ date: 2022-02-13 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.7
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