k_manager 0.0.13 → 0.0.22
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/.rubocop.yml +1 -0
- data/Gemfile +18 -0
- data/Rakefile +2 -0
- data/docs/flow.drawio +16 -0
- data/exe/k_manager +20 -0
- data/k_manager.gemspec +6 -0
- data/lib/k_manager/area.rb +47 -0
- data/lib/k_manager/document_factory.rb +74 -0
- data/lib/k_manager/manager.rb +58 -0
- data/lib/k_manager/overview/dashboard.rb +187 -0
- data/lib/k_manager/overview/dump_json.rb +35 -0
- data/lib/k_manager/overview/models.rb +76 -0
- data/lib/k_manager/overview/queries.rb +53 -0
- data/lib/k_manager/resources/base_resource.rb +189 -52
- data/lib/k_manager/resources/file_resource.rb +80 -58
- data/lib/k_manager/resources/{ruby_file_resource.rb → file_resources/ruby_file_resource.rb} +0 -0
- data/lib/k_manager/resources/{unknown_file_resource.rb → file_resources/unknown_file_resource.rb} +0 -0
- data/lib/k_manager/resources/mem_resource.rb +17 -0
- data/lib/k_manager/resources/resource_document_factory.rb +119 -0
- data/lib/k_manager/resources/resource_factory.rb +28 -0
- data/lib/k_manager/resources/resource_manager.rb +216 -0
- data/lib/k_manager/resources/resource_set.rb +90 -0
- data/lib/k_manager/resources/web_resource.rb +113 -0
- data/lib/k_manager/version.rb +1 -1
- data/lib/k_manager/watcher.rb +75 -0
- data/lib/k_manager/{x_project.rb → x_resource_documents/x_project.rb} +0 -0
- data/lib/k_manager/{x_project_manager.rb → x_resource_documents/x_project_manager.rb} +0 -0
- data/lib/k_manager/{x_register.rb → x_resource_documents/x_register.rb} +0 -0
- data/lib/k_manager.rb +93 -20
- data/tasks/watch.rake +113 -0
- metadata +70 -24
- data/Assessment1.md +0 -127
- data/Assessment2.md +0 -88
- data/lib/k_manager/create_document.rb +0 -31
- data/lib/k_manager/documents/basic_document.rb +0 -21
- data/lib/k_manager/documents/builder_document.rb +0 -18
- data/lib/k_manager/documents/document_taggable.rb +0 -94
- data/lib/k_manager/documents/model_document.rb +0 -19
- data/lib/k_manager/project.rb +0 -50
- data/lib/k_manager/resources/csv_file_resource.rb +0 -27
- data/lib/k_manager/resources/factories/document_factory.rb +0 -52
- data/lib/k_manager/resources/json_file_resource.rb +0 -22
- data/lib/k_manager/resources/yaml_file_resource.rb +0 -21
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2024c747b3ae20e56a669bda4c2940274007a63545759cf1fc93adc0a9ae5b40
|
4
|
+
data.tar.gz: 12030613016449e807b986cc368330bf6d4667cd89833051511c48ff7dd21c0b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f8746ca5b44f389938b92f8a17ca9c7947e560fc65046c5b780cbca3bcbfc0180e9035002cb0a9cc00c9b0f0e70277f7b631523e5b9976bdeff9adac19389eab
|
7
|
+
data.tar.gz: dba116da1e201cd22c39a2fdc68805dd9e8d019bfbdb7b5eb6a0d7bd283fb99a07dded3762b8c7b484a3015e62fd98ed29b16ee05ac0d8b7192049b4dde17a25
|
data/.rubocop.yml
CHANGED
data/Gemfile
CHANGED
@@ -23,3 +23,21 @@ group :development, :test do
|
|
23
23
|
gem 'rubocop-rake', require: false
|
24
24
|
gem 'rubocop-rspec', require: false
|
25
25
|
end
|
26
|
+
|
27
|
+
# If local dependency
|
28
|
+
if ENV['KLUE_LOCAL_GEMS']&.to_s&.downcase == 'true'
|
29
|
+
group :development, :test do
|
30
|
+
puts 'Using Local GEMs'
|
31
|
+
gem 'handlebars-helpers' , path: '../handlebars-helpers'
|
32
|
+
gem 'k_builder' , path: '../k_builder'
|
33
|
+
gem 'k_builder-dotnet' , path: '../k_builder-dotnet'
|
34
|
+
gem 'k_builder-package_json' , path: '../k_builder-package_json'
|
35
|
+
gem 'k_builder-webpack5' , path: '../k_builder-webpack5'
|
36
|
+
gem 'k_decor' , path: '../k_decor'
|
37
|
+
gem 'k_doc' , path: '../k_doc'
|
38
|
+
gem 'k_domain' , path: '../k_domain'
|
39
|
+
gem 'k_log' , path: '../k_log'
|
40
|
+
gem 'k_type' , path: '../k_type'
|
41
|
+
gem 'k_util' , path: '../k_util'
|
42
|
+
end
|
43
|
+
end
|
data/Rakefile
CHANGED
data/docs/flow.drawio
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
<mxfile host="65bd71144e">
|
2
|
+
<diagram id="AE9tsI4e_FXgj975v7li" name="Page-1">
|
3
|
+
<mxGraphModel dx="1087" dy="583" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1169" pageHeight="827" background="#ffffff" math="0" shadow="0">
|
4
|
+
<root>
|
5
|
+
<mxCell id="0"/>
|
6
|
+
<mxCell id="1" parent="0"/>
|
7
|
+
<mxCell id="2" value="KManager" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1">
|
8
|
+
<mxGeometry x="200" y="70" width="120" height="60" as="geometry"/>
|
9
|
+
</mxCell>
|
10
|
+
<mxCell id="3" value="" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1">
|
11
|
+
<mxGeometry x="390" y="210" width="120" height="60" as="geometry"/>
|
12
|
+
</mxCell>
|
13
|
+
</root>
|
14
|
+
</mxGraphModel>
|
15
|
+
</diagram>
|
16
|
+
</mxfile>
|
data/exe/k_manager
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
# frozen_string_literal: true
|
4
|
+
|
5
|
+
require 'pry'
|
6
|
+
|
7
|
+
lib_path = File.expand_path(File.join(File.dirname(__FILE__), '../lib'))
|
8
|
+
gem_path = File.expand_path(File.join(File.dirname(__FILE__), '../Gemfile'))
|
9
|
+
|
10
|
+
$LOAD_PATH.unshift(lib_path)
|
11
|
+
|
12
|
+
ENV['BUNDLE_GEMFILE'] = gem_path
|
13
|
+
|
14
|
+
require 'bundler/setup'
|
15
|
+
require 'k_manager'
|
16
|
+
|
17
|
+
puts 'david'
|
18
|
+
# options = KBuilder::Watch::Cli.parse_options
|
19
|
+
|
20
|
+
# KBuilder::Watch::Execute.new(options).run
|
data/k_manager.gemspec
CHANGED
@@ -38,10 +38,16 @@ Gem::Specification.new do |spec|
|
|
38
38
|
spec.require_paths = ['lib']
|
39
39
|
# spec.extensions = ['ext/k_manager/extconf.rb']
|
40
40
|
|
41
|
+
spec.add_dependency 'dry-struct', '~> 1'
|
42
|
+
spec.add_dependency 'filewatcher', '~> 2.0.0.beta5'
|
41
43
|
spec.add_dependency 'k_builder', '~> 0.0.0'
|
42
44
|
spec.add_dependency 'k_doc', '~> 0.0.0'
|
43
45
|
spec.add_dependency 'k_ext-github', '~> 0.0.0'
|
46
|
+
spec.add_dependency 'k_fileset', '~> 0.0.0'
|
44
47
|
spec.add_dependency 'k_log', '~> 0.0.0'
|
45
48
|
# spec.add_dependency 'k_type' , '~> 0.0.0'
|
46
49
|
# spec.add_dependency 'k_util' , '~> 0.0.0'
|
50
|
+
spec.metadata = {
|
51
|
+
'rubygems_mfa_required' => 'true'
|
52
|
+
}
|
47
53
|
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module KManager
|
4
|
+
class Area
|
5
|
+
include KLog::Logging
|
6
|
+
extend Forwardable
|
7
|
+
|
8
|
+
# TODO: I have not got a use for area name yet, it may be able to drive default config, but not sure.
|
9
|
+
attr_reader :name
|
10
|
+
attr_reader :namespace
|
11
|
+
attr_reader :config
|
12
|
+
|
13
|
+
def initialize(**opts)
|
14
|
+
@name = opts[:name]
|
15
|
+
|
16
|
+
raise 'Area name is required' unless @name
|
17
|
+
|
18
|
+
@namespace = opts[:namespace] || @name
|
19
|
+
@config = KBuilder.configuration(@name)
|
20
|
+
end
|
21
|
+
|
22
|
+
def resource_manager
|
23
|
+
@resource_manager ||= KManager::Resources::ResourceManager.new(self)
|
24
|
+
end
|
25
|
+
|
26
|
+
def_delegators :resource_manager, :resource_changed
|
27
|
+
|
28
|
+
def debug(*sections)
|
29
|
+
log.kv 'Area' , name
|
30
|
+
log.kv 'Namespace' , namespace
|
31
|
+
|
32
|
+
resource_manager.debug if sections.include?(:resource) || sections.include?(:resources)
|
33
|
+
config.debug if sections.include?(:config)
|
34
|
+
end
|
35
|
+
|
36
|
+
# rubocop:disable Metrics/AbcSize
|
37
|
+
def attribute_values(prefix = nil)
|
38
|
+
result = {}
|
39
|
+
result["#{prefix}name".to_sym] = name
|
40
|
+
result["#{prefix}namespace".to_sym] = namespace
|
41
|
+
result["#{prefix}resource_count".to_sym] = resource_manager.resources.length
|
42
|
+
result["#{prefix}document_count".to_sym] = resource_manager.resources.sum { |resource| resource.documents.length }
|
43
|
+
result
|
44
|
+
end
|
45
|
+
# rubocop:enable Metrics/AbcSize
|
46
|
+
end
|
47
|
+
end
|
@@ -0,0 +1,74 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module KManager
|
4
|
+
# Factories for creating common DSL documents quickly
|
5
|
+
#
|
6
|
+
# Example:
|
7
|
+
#
|
8
|
+
# KManager.csv(file: 'somepath/somefile.csv') do
|
9
|
+
# load
|
10
|
+
# end
|
11
|
+
class DocumentFactory
|
12
|
+
include KLog::Logging
|
13
|
+
|
14
|
+
# Create a KDoc::Model instance
|
15
|
+
def model(key = nil, **opts, &block)
|
16
|
+
document = new_document(KDoc::Model, key, **opts, &block)
|
17
|
+
|
18
|
+
attach_to_current_resource(document, change_content_type: :dsl)
|
19
|
+
end
|
20
|
+
|
21
|
+
# Create a KDoc::CsvDoc instance
|
22
|
+
def csv(key = nil, **opts, &block)
|
23
|
+
document = new_document(KDoc::CsvDoc, key, **opts, &block)
|
24
|
+
|
25
|
+
attach_to_current_resource(document, change_content_type: :dsl)
|
26
|
+
rescue StandardError => e
|
27
|
+
log.error(e)
|
28
|
+
end
|
29
|
+
|
30
|
+
# Create a KDoc::JsonDoc instance
|
31
|
+
def json(key = nil, **opts, &block)
|
32
|
+
document = new_document(KDoc::JsonDoc, key, **opts, &block)
|
33
|
+
|
34
|
+
attach_to_current_resource(document, change_content_type: :dsl)
|
35
|
+
rescue StandardError => e
|
36
|
+
log.error(e)
|
37
|
+
end
|
38
|
+
|
39
|
+
# Create a KDoc::YamlDoc instance
|
40
|
+
def yaml(key = nil, **opts, &block)
|
41
|
+
document = new_document(KDoc::YamlDoc, key, **opts, &block)
|
42
|
+
|
43
|
+
attach_to_current_resource(document, change_content_type: :dsl)
|
44
|
+
rescue StandardError => e
|
45
|
+
log.error(e)
|
46
|
+
end
|
47
|
+
|
48
|
+
private
|
49
|
+
|
50
|
+
# If document gets created dynamically due to class_eval then they
|
51
|
+
# can attach themselves to the currently focussed resource.
|
52
|
+
#
|
53
|
+
# It will throw an error if for_resource has not been called earlier
|
54
|
+
# in the thread lifecycle.
|
55
|
+
def attach_to_current_resource(document, change_content_type: nil)
|
56
|
+
return document unless KManager.current_resource
|
57
|
+
|
58
|
+
KManager.for_current_resource do |resource|
|
59
|
+
resource.attach_document(document, change_content_type: change_content_type)
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
# Create an instance of a document
|
64
|
+
#
|
65
|
+
# @param [Class<DocumentTaggable>] klass type of document to create
|
66
|
+
def new_document(klass, key = nil, **opts, &block)
|
67
|
+
# Should be able to infer
|
68
|
+
# key = KManager.current_resource.documents.length.zero? ? KManager.current_resource.infer_key : nil
|
69
|
+
|
70
|
+
# klass.new(key, **{ owner: KManager.current_resource }.merge(opts), &block)
|
71
|
+
klass.new(key, **opts, &block)
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
@@ -0,0 +1,58 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module KManager
|
4
|
+
# KManager is designed to work with one or more areas of concern
|
5
|
+
#
|
6
|
+
# TODO: Write Tests
|
7
|
+
class Manager
|
8
|
+
def areas
|
9
|
+
@areas ||= []
|
10
|
+
end
|
11
|
+
|
12
|
+
def add_area(name, namespace: nil)
|
13
|
+
area = find_area(name)
|
14
|
+
|
15
|
+
return area if area
|
16
|
+
|
17
|
+
area = KManager::Area.new(name: name, namespace: namespace)
|
18
|
+
areas << area
|
19
|
+
area
|
20
|
+
end
|
21
|
+
|
22
|
+
def fire_actions(*actions)
|
23
|
+
areas.each do |area|
|
24
|
+
# delegate
|
25
|
+
area.resource_manager.fire_actions(*actions)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
def find_area(name)
|
30
|
+
areas.find { |a| a.name == name }
|
31
|
+
end
|
32
|
+
|
33
|
+
def resource_changed(uri, state)
|
34
|
+
areas.each do |area|
|
35
|
+
area.resource_changed(uri, state)
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
def debug(*sections)
|
40
|
+
areas.each do |area|
|
41
|
+
area.debug(*sections)
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
# # May replace config with default channel name
|
46
|
+
# # Channels represent configurations that are independent of project or builder,
|
47
|
+
# # but a project may want to have a default channel that it supplies
|
48
|
+
# def initialize(name, config = nil, **opts)
|
49
|
+
# raise KType::Error, 'Provide a project name' unless name.is_a?(String) || name.is_a?(Symbol)
|
50
|
+
|
51
|
+
# @name = name
|
52
|
+
# @config = config || KManager::Configuration::ProjectConfig.new
|
53
|
+
# @resources = []
|
54
|
+
|
55
|
+
# initialize_opts(opts)
|
56
|
+
# end
|
57
|
+
end
|
58
|
+
end
|
@@ -0,0 +1,187 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module KManager
|
4
|
+
module Overview
|
5
|
+
# Generate dashboard information on the console
|
6
|
+
#
|
7
|
+
# TODO: ConsoleDashboard and HtmlConsole
|
8
|
+
class Dashboard
|
9
|
+
include KLog::Logging
|
10
|
+
|
11
|
+
attr_reader :queries
|
12
|
+
|
13
|
+
def initialize(manager)
|
14
|
+
@queries = KManager::Overview::Queries.new(manager)
|
15
|
+
end
|
16
|
+
|
17
|
+
def areas
|
18
|
+
data = queries.areas.map { |hash| KManager::Overview::Area.new(hash) }
|
19
|
+
graph = {
|
20
|
+
areas: {
|
21
|
+
columns: [
|
22
|
+
:name,
|
23
|
+
:namespace,
|
24
|
+
{ resource_count: { display_method: ->(row) { blank_zero(row.resource_count) } } },
|
25
|
+
{ document_count: { display_method: ->(row) { blank_zero(row.document_count) } } }
|
26
|
+
|
27
|
+
]
|
28
|
+
}
|
29
|
+
}
|
30
|
+
display(:areas, 'Areas', graph, data)
|
31
|
+
end
|
32
|
+
|
33
|
+
# rubocop:disable Metrics/AbcSize
|
34
|
+
def resources
|
35
|
+
# sort and remove repeating area
|
36
|
+
data = grouped_resources(queries.resources).map { |hash| KManager::Overview::Resource.new(hash) }
|
37
|
+
graph = {
|
38
|
+
resources: {
|
39
|
+
columns: [
|
40
|
+
{ area: { display_method: ->(row) { row.area_name } } },
|
41
|
+
{ area_ns: { display_method: ->(row) { row.area_namespace } } },
|
42
|
+
{ resource_docs: { display_method: ->(row) { resource_document_count(row) } } },
|
43
|
+
{ resource_id: { display_method: ->(row) { blank_zero(row.id) } } },
|
44
|
+
{ key: { display_method: ->(row) { row.key } } },
|
45
|
+
{ namespace: { display_method: ->(row) { row.namespace } } },
|
46
|
+
{ status: { display_method: ->(row) { row.status } } },
|
47
|
+
{ content_type: { display_method: ->(row) { row.content_type } } },
|
48
|
+
{ content: { display_method: ->(row) { row.content } } },
|
49
|
+
{ document_count: { display_method: ->(row) { blank_zero(row.document_count) } } },
|
50
|
+
{ valid: { display_method: ->(row) { row.valid } } },
|
51
|
+
{ error_count: { display_method: ->(row) { blank_zero(row.errors.length) } } },
|
52
|
+
{ scheme: { display_method: ->(row) { row.scheme } } },
|
53
|
+
{ root: { display_method: ->(row) { row.scheme == :file ? '' : row.host } } },
|
54
|
+
{ relative_path: { display_method: ->(row) { right(50, row.relative_path) }, width: 50 } },
|
55
|
+
{ exist: { display_method: ->(row) { row.exist } } }
|
56
|
+
]
|
57
|
+
}
|
58
|
+
}
|
59
|
+
|
60
|
+
display(:resources, 'Resource List', graph, data)
|
61
|
+
end
|
62
|
+
|
63
|
+
def documents
|
64
|
+
data = grouped_documents(queries.documents).map { |hash| KManager::Overview::Document.new(hash) }
|
65
|
+
|
66
|
+
graph = {
|
67
|
+
resources: {
|
68
|
+
columns: [
|
69
|
+
{ area: { display_method: ->(row) { row.area_name } } },
|
70
|
+
{ area_ns: { display_method: ->(row) { row.area_namespace } } },
|
71
|
+
{ resource_docs: { display_method: ->(row) { resource_document_count(row) } } },
|
72
|
+
{ resource_id: { display_method: ->(row) { blank_zero(row.resource_id) } } },
|
73
|
+
# { key: { display_method: -> (row) { row.resource_key } } },
|
74
|
+
# { namespace: { display_method: -> (row) { row.resource_namespace } } },
|
75
|
+
# { status: { display_method: -> (row) { row.resource_status } } },
|
76
|
+
# { content_type: { display_method: -> (row) { row.resource_content_type } } },
|
77
|
+
# { content: { display_method: -> (row) { row.resource_content } } },
|
78
|
+
# { document_count: { display_method: -> (row) { blank_zero(row.resource_document_count) } } },
|
79
|
+
# { valid: { display_method: -> (row) { row.resource_valid } } },
|
80
|
+
# { error_count: { display_method: -> (row) { blank_zero(row.resource_errors.length) } } },
|
81
|
+
# { scheme: { display_method: -> (row) { row.resource_scheme } } },
|
82
|
+
# # { path: { display_method: -> (row) { row.resource_path } } },
|
83
|
+
# { exist: { display_method: -> (row) { row.resource_exist } } },
|
84
|
+
{ document_id: { display_method: ->(row) { blank_zero(row.document_id) } } },
|
85
|
+
{ data: { display_method: ->(row) { row.document_data } } },
|
86
|
+
{ error_count: { display_method: ->(row) { blank_zero(row.document_errors.length) } } },
|
87
|
+
{ key: { display_method: ->(row) { row.document_key } } },
|
88
|
+
{ namespace: { display_method: ->(row) { row.document_namespace } } },
|
89
|
+
{ tag: { display_method: ->(row) { row.document_tag } } },
|
90
|
+
{ type: { display_method: ->(row) { row.document_type } } },
|
91
|
+
{ relative_path: { display_method: ->(row) { right(50, resource_path_location(row.resource_relative_path, row.document_location)) }, width: 50 } }
|
92
|
+
]
|
93
|
+
}
|
94
|
+
}
|
95
|
+
|
96
|
+
display(:resources, 'Document List', graph, data)
|
97
|
+
end
|
98
|
+
# rubocop:enable Metrics/AbcSize
|
99
|
+
|
100
|
+
private
|
101
|
+
|
102
|
+
def resource_path_location(path, location)
|
103
|
+
return path unless location
|
104
|
+
|
105
|
+
"#{path}:#{location}"
|
106
|
+
end
|
107
|
+
|
108
|
+
def display(section, title, graph, data)
|
109
|
+
data = {
|
110
|
+
section => data
|
111
|
+
}
|
112
|
+
opts = {
|
113
|
+
title: title,
|
114
|
+
title_type: :heading,
|
115
|
+
show_array_count: false,
|
116
|
+
graph: graph
|
117
|
+
}
|
118
|
+
log.structure(data, **opts)
|
119
|
+
end
|
120
|
+
|
121
|
+
def blank_zero(value)
|
122
|
+
return nil if value.nil? || (value.is_a?(Integer) && value.zero?)
|
123
|
+
|
124
|
+
value
|
125
|
+
end
|
126
|
+
|
127
|
+
def lpad(size, value)
|
128
|
+
value.to_s.rjust(size)
|
129
|
+
end
|
130
|
+
|
131
|
+
def right(size, value)
|
132
|
+
value.chars.last(size).join
|
133
|
+
end
|
134
|
+
|
135
|
+
def resource_document_count(row)
|
136
|
+
return nil if row.area_resource_count.nil? && row.area_document_count.nil?
|
137
|
+
|
138
|
+
resource = lpad(2, blank_zero(row.area_resource_count))
|
139
|
+
document = lpad(2, blank_zero(row.area_document_count))
|
140
|
+
[resource, document].join(' / ')
|
141
|
+
end
|
142
|
+
|
143
|
+
# rubocop:disable Metrics/AbcSize
|
144
|
+
def grouped_resources(resources)
|
145
|
+
return resources if resources.length < 2
|
146
|
+
|
147
|
+
grouped = resources.group_by { |resource| resource[:area_name] }
|
148
|
+
grouped.flat_map do |group|
|
149
|
+
group[1].map.with_index do |resource, index|
|
150
|
+
new_resource = resource.clone
|
151
|
+
if index.positive?
|
152
|
+
new_resource[:area_name] = nil
|
153
|
+
new_resource[:area_namespace] = nil
|
154
|
+
new_resource[:area_resource_count] = nil
|
155
|
+
new_resource[:area_document_count] = nil
|
156
|
+
end
|
157
|
+
new_resource
|
158
|
+
end
|
159
|
+
end
|
160
|
+
end
|
161
|
+
|
162
|
+
def grouped_documents(documents)
|
163
|
+
return documents if documents.length < 2
|
164
|
+
|
165
|
+
grouped = documents.group_by { |document| document[:area_name] }
|
166
|
+
grouped.flat_map do |group|
|
167
|
+
last_resource_id = 0
|
168
|
+
group[1].map.with_index do |document, index|
|
169
|
+
new_document = document.clone
|
170
|
+
if index.positive?
|
171
|
+
new_document[:area_name] = nil
|
172
|
+
new_document[:area_namespace] = nil
|
173
|
+
new_document[:area_resource_count] = nil
|
174
|
+
new_document[:area_document_count] = nil
|
175
|
+
|
176
|
+
new_document[:resource_id] = nil if last_resource_id == group[1][index][:resource_id]
|
177
|
+
|
178
|
+
end
|
179
|
+
last_resource_id = document[:resource_id]
|
180
|
+
new_document
|
181
|
+
end
|
182
|
+
end
|
183
|
+
end
|
184
|
+
# rubocop:enable Metrics/AbcSize
|
185
|
+
end
|
186
|
+
end
|
187
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module KManager
|
4
|
+
module Overview
|
5
|
+
class DumpJson
|
6
|
+
attr_reader :path
|
7
|
+
attr_reader :queries
|
8
|
+
|
9
|
+
def initialize(path, manager)
|
10
|
+
@path = path
|
11
|
+
@queries = KManager::Overview::Queries.new(manager)
|
12
|
+
end
|
13
|
+
|
14
|
+
def areas(file_name)
|
15
|
+
dump(file_name, queries.areas)
|
16
|
+
end
|
17
|
+
|
18
|
+
def resources(file_name)
|
19
|
+
dump(file_name, queries.resources)
|
20
|
+
end
|
21
|
+
|
22
|
+
def documents(file_name)
|
23
|
+
dump(file_name, queries.documents)
|
24
|
+
end
|
25
|
+
|
26
|
+
private
|
27
|
+
|
28
|
+
def dump(file_name, data)
|
29
|
+
file = File.join(path, file_name)
|
30
|
+
json = JSON.pretty_generate(data)
|
31
|
+
File.write(file, json)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,76 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# KDomain::Schemas::Domain::Column
|
4
|
+
# KDomain::Schemas::Domain::Model
|
5
|
+
|
6
|
+
module KManager
|
7
|
+
module Overview
|
8
|
+
module Types
|
9
|
+
include Dry.Types()
|
10
|
+
end
|
11
|
+
|
12
|
+
class Error < Dry::Struct
|
13
|
+
end
|
14
|
+
|
15
|
+
class Area < Dry::Struct
|
16
|
+
attribute :name , Types::Strict::String | Types::Strict::Symbol
|
17
|
+
attribute :namespace , Types::Strict::String.optional.default(nil) | Types::Strict::Symbol.optional.default(nil)
|
18
|
+
attribute :resource_count , Types::Strict::Integer
|
19
|
+
attribute :document_count , Types::Strict::Integer
|
20
|
+
end
|
21
|
+
|
22
|
+
class Resource < Dry::Struct
|
23
|
+
attribute :area_name , Types::Strict::String.optional.default(nil) | Types::Strict::Symbol.optional.default(nil)
|
24
|
+
attribute :area_namespace , Types::Strict::String.optional.default(nil) | Types::Strict::Symbol.optional.default(nil)
|
25
|
+
attribute :area_resource_count , Types::Strict::Integer.optional.default(nil)
|
26
|
+
attribute :area_document_count , Types::Strict::Integer.optional.default(nil)
|
27
|
+
attribute :id , Types::Strict::Integer
|
28
|
+
attribute :key , Types::Strict::String
|
29
|
+
attribute :namespace , Types::Strict::String | Types::Strict::Array.of(Types::Strict::String).optional.default(nil)
|
30
|
+
attribute :status , Types::Strict::String | Types::Strict::Symbol
|
31
|
+
attribute :source , Types::Strict::String
|
32
|
+
attribute :content_type , Types::Strict::String | Types::Strict::Symbol
|
33
|
+
attribute :content , Types::Strict::String.optional.default(nil)
|
34
|
+
attribute :document_count , Types::Strict::Integer
|
35
|
+
attribute :errors , Types::Strict::Array.of(KManager::Overview::Error).optional.default(nil)
|
36
|
+
attribute :valid? , Types::Strict::Bool
|
37
|
+
attribute :scheme , Types::Strict::String | Types::Strict::Symbol
|
38
|
+
attribute :host , Types::Strict::String
|
39
|
+
attribute :path , Types::Strict::String
|
40
|
+
attribute :relative_path , Types::Strict::String.optional.default(nil)
|
41
|
+
attribute :exist? , Types::Strict::Bool
|
42
|
+
end
|
43
|
+
|
44
|
+
class Document < Dry::Struct
|
45
|
+
attribute :area_name , Types::Strict::String.optional.default(nil) | Types::Strict::Symbol.optional.default(nil)
|
46
|
+
attribute :area_namespace , Types::Strict::String.optional.default(nil) | Types::Strict::Symbol.optional.default(nil)
|
47
|
+
attribute :area_resource_count , Types::Strict::Integer.optional.default(nil)
|
48
|
+
attribute :area_document_count , Types::Strict::Integer.optional.default(nil)
|
49
|
+
attribute :resource_id , Types::Strict::Integer.optional.default(nil)
|
50
|
+
attribute :resource_key , Types::Strict::String
|
51
|
+
attribute :resource_namespace , Types::Strict::Array.of(Types::Strict::String).optional.default(nil)
|
52
|
+
attribute :resource_status , Types::Strict::String | Types::Strict::Symbol
|
53
|
+
attribute :resource_source , Types::Strict::String
|
54
|
+
attribute :resource_content_type , Types::Strict::String | Types::Strict::Symbol
|
55
|
+
attribute :resource_content , Types::Strict::String.optional.default(nil)
|
56
|
+
attribute :resource_document_count , Types::Strict::Integer
|
57
|
+
attribute :resource_errors , Types::Strict::Array.of(KManager::Overview::Error).optional.default(nil)
|
58
|
+
attribute :resource_valid? , Types::Strict::Bool
|
59
|
+
attribute :resource_scheme , Types::Strict::String | Types::Strict::Symbol
|
60
|
+
attribute :resource_host , Types::Strict::String
|
61
|
+
attribute :resource_path , Types::Strict::String
|
62
|
+
attribute :resource_relative_path , Types::Strict::String.optional.default(nil)
|
63
|
+
attribute :resource_exist? , Types::Strict::Bool
|
64
|
+
attribute :document_id , Types::Strict::Integer
|
65
|
+
attribute :document_data , Types::Strict::Hash.optional.default(nil) | Types::Strict::Array.of(Types::Strict::Hash).optional.default(nil)
|
66
|
+
attribute :document_key , Types::Strict::String | Types::Strict::Symbol
|
67
|
+
attribute :document_namespace , Types::Strict::String | Types::Strict::Array.of(Types::Strict::String).optional.default(nil)
|
68
|
+
attribute :document_tag , Types::Strict::String | Types::Strict::Symbol
|
69
|
+
attribute :document_type , Types::Strict::String | Types::Strict::Symbol
|
70
|
+
# TODO: Write code to populate this with the resource line number
|
71
|
+
attribute :document_location , Types::Strict::Integer.optional.default(nil)
|
72
|
+
attribute :document_errors , Types::Strict::Array.of(KManager::Overview::Error).optional.default(nil)
|
73
|
+
attribute :document_valid? , Types::Strict::Bool
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module KManager
|
4
|
+
module Overview
|
5
|
+
class Queries
|
6
|
+
attr_reader :manager
|
7
|
+
|
8
|
+
def initialize(manager)
|
9
|
+
@manager = manager
|
10
|
+
end
|
11
|
+
|
12
|
+
def areas
|
13
|
+
manager.areas.map(&:attribute_values)
|
14
|
+
end
|
15
|
+
|
16
|
+
def resources
|
17
|
+
manager.areas.flat_map do |area|
|
18
|
+
# TODO: Some of these properties are only available on FileResource
|
19
|
+
# This will need to be refactored when implementing Mem and Web Resource
|
20
|
+
area.resource_manager.resource_set.resources.map do |resource|
|
21
|
+
{
|
22
|
+
**area.attribute_values('area_'),
|
23
|
+
**resource.attribute_values('')
|
24
|
+
}
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
# rubocop:disable Metrics/AbcSize
|
30
|
+
def documents
|
31
|
+
manager.areas.flat_map do |area|
|
32
|
+
area.resource_manager.resource_set.resources.flat_map do |resource|
|
33
|
+
resource.documents.map do |document|
|
34
|
+
{
|
35
|
+
**area.attribute_values('area_'),
|
36
|
+
**resource.attribute_values('resource_'),
|
37
|
+
document_id: document.object_id,
|
38
|
+
document_data: document.data,
|
39
|
+
document_key: document.key,
|
40
|
+
document_namespace: document.namespace,
|
41
|
+
document_tag: document.tag,
|
42
|
+
document_type: document.type,
|
43
|
+
document_errors: document.error_hash,
|
44
|
+
document_valid: document.valid?
|
45
|
+
}
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
# rubocop:enable Metrics/AbcSize
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|