k_domain 0.0.23 → 0.0.26
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.builders/boot.rb +40 -0
- data/.builders/generators/configuration_generator.rb +22 -0
- data/.builders/run.rb +16 -0
- data/lib/k_domain/config/_.rb +4 -0
- data/lib/k_domain/config/config.rb +19 -0
- data/lib/k_domain/config/configuration.rb +76 -0
- data/lib/k_domain/domain_model/load.rb +41 -0
- data/lib/k_domain/domain_model/transform_steps/step1_db_schema.rb +1 -1
- data/lib/k_domain/domain_model/transform_steps/step2_domain_models.rb +1 -1
- data/lib/k_domain/domain_model/transform_steps/step7_rails_structure_controllers.rb +5 -3
- data/lib/k_domain/domain_model/transform_steps/step8_domain_columns.rb +51 -56
- data/lib/k_domain/rails_code_extractor/extract_controller.rb +2 -0
- data/lib/k_domain/rails_code_extractor/extract_model.rb +2 -0
- data/lib/k_domain/raw_db_schema/transform.rb +26 -2
- data/lib/k_domain/schemas/_.rb +3 -1
- data/lib/k_domain/schemas/domain/erd_file.rb +78 -77
- data/lib/k_domain/schemas/domain.rb +31 -36
- data/lib/k_domain/schemas/{domain/_.rb → domain_types.rb} +1 -8
- data/lib/k_domain/schemas/rails_structure.rb +10 -0
- data/lib/k_domain/version.rb +1 -1
- data/lib/k_domain.rb +3 -0
- data/templates/sample_config.rb +47 -0
- metadata +10 -7
- data/.builders/config/_.rb +0 -3
- data/.builders/setup.rb +0 -30
- data/templates/old_printspeek_schema copy.rb +0 -231
- data/templates/old_printspeek_schema.rb +0 -233
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 86f877b2fd5644c7ebd211c662cb4cd1ff63213dcc3cc588d3485f698a2bc7b9
|
4
|
+
data.tar.gz: 9999ee5fa153fa7c1833cd21a0a5a145cbee4a97cd11284c1bb4440157ae6d0a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 013e1f7524e395b9766831786cd1f4052eb6000fd35105c58bfb51869f9d1b93151f3fbc3e8fe349f59dd6819daf7d27e22a05ae5f95fba6826bf61af06eb235
|
7
|
+
data.tar.gz: c56d291ba618e70863e334bca9c1e817da700d6d0769e92ac5fb7d267b1f02068f6d4275e423264147066389d45dca831d3b3878eef45662d0f4ef8457d99e20
|
data/.builders/boot.rb
ADDED
@@ -0,0 +1,40 @@
|
|
1
|
+
# Boot Sequence
|
2
|
+
|
3
|
+
include KLog::Logging
|
4
|
+
|
5
|
+
CONFIG_KEY = :k_domain
|
6
|
+
|
7
|
+
log.kv 'working folder', Dir.pwd
|
8
|
+
|
9
|
+
Handlebars::Helpers.configure do |config|
|
10
|
+
config_file = File.join(Gem.loaded_specs['handlebars-helpers'].full_gem_path, '.handlebars_helpers.json')
|
11
|
+
config.helper_config_file = config_file
|
12
|
+
|
13
|
+
string_config_file = File.join(Gem.loaded_specs['handlebars-helpers'].full_gem_path, '.handlebars_string_formatters.json')
|
14
|
+
config.string_formatter_config_file = string_config_file
|
15
|
+
end
|
16
|
+
|
17
|
+
def builder
|
18
|
+
@builder ||= KBuilder::BaseBuilder.init(KConfig.configuration(CONFIG_KEY))
|
19
|
+
end
|
20
|
+
|
21
|
+
KConfig.configure(CONFIG_KEY) do |config|
|
22
|
+
global_template = File.expand_path('~/dev/kgems/k_templates/templates')
|
23
|
+
config.target_folders.add(:app, File.expand_path('../', Dir.pwd))
|
24
|
+
config.target_folders.add(:lib_config, :app, 'lib/k_domain/config')
|
25
|
+
config.template_folders.add(:global_template, global_template)
|
26
|
+
config.template_folders.add(:app_template, File.expand_path('.templates', Dir.pwd))
|
27
|
+
end
|
28
|
+
|
29
|
+
KConfig.configuration(CONFIG_KEY).debug
|
30
|
+
|
31
|
+
area = KManager.add_area(CONFIG_KEY)
|
32
|
+
resource_manager = area.resource_manager
|
33
|
+
resource_manager.add_resource('https://raw.githubusercontent.com/klueless-io/k_playground/main/ruby/components/configuration/.builders/configuration_director.rb', content_type: :ruby)
|
34
|
+
resource_manager
|
35
|
+
.fileset
|
36
|
+
.glob('*.rb', exclude: ['boot.rb'])
|
37
|
+
.glob('generators/**/*.rb')
|
38
|
+
resource_manager.add_resources
|
39
|
+
|
40
|
+
KManager.boot
|
@@ -0,0 +1,22 @@
|
|
1
|
+
KManager.action do
|
2
|
+
def on_action
|
3
|
+
puts '-' * 70
|
4
|
+
builder.cd(:lib_config)
|
5
|
+
director = ConfigurationDirector
|
6
|
+
.init(builder, on_exist: :compare)
|
7
|
+
.style(:single)
|
8
|
+
.name('Domain Configuration')
|
9
|
+
.main_namespace('KDomain', 'Config')
|
10
|
+
.add_config_key(:default_main_key, "nil")
|
11
|
+
.add_config_key(:default_traits, "%i[trait1 trait2 trait3]")
|
12
|
+
.add_config_key(:fallback_keys, "%i[]")
|
13
|
+
.add_config_key(:entities, "[]")
|
14
|
+
# .logit
|
15
|
+
|
16
|
+
# dom = director.dom
|
17
|
+
# data = director.data
|
18
|
+
|
19
|
+
director.add_config
|
20
|
+
# director.add_configuration
|
21
|
+
end
|
22
|
+
end
|
data/.builders/run.rb
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
# Run
|
2
|
+
|
3
|
+
KManager.action do
|
4
|
+
def on_action
|
5
|
+
end
|
6
|
+
end
|
7
|
+
|
8
|
+
KManager.opts.app_name = 'KDomain Generator'
|
9
|
+
KManager.opts.sleep = 5
|
10
|
+
KManager.opts.reboot_on_kill = 0
|
11
|
+
KManager.opts.reboot_sleep = 4
|
12
|
+
KManager.opts.exception_style = :short
|
13
|
+
KManager.opts.show.time_taken = true
|
14
|
+
KManager.opts.show.finished = true
|
15
|
+
KManager.opts.show.finished_message = 'FINISHED :)'
|
16
|
+
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Usage: include KDomain::Config::
|
4
|
+
|
5
|
+
module KDomain
|
6
|
+
module Config
|
7
|
+
def configuration
|
8
|
+
@configuration ||= KDomain::Config::Configuration.new
|
9
|
+
end
|
10
|
+
|
11
|
+
def reset
|
12
|
+
@configuration = KDomain::Config::Configuration.new
|
13
|
+
end
|
14
|
+
|
15
|
+
def configure
|
16
|
+
yield(configuration)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,76 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module KDomain
|
4
|
+
module Config
|
5
|
+
# Configuration object for Domain Configuration
|
6
|
+
class Configuration
|
7
|
+
include KLog::Logging
|
8
|
+
|
9
|
+
ConfigModel = Struct.new(:name, :main_key, :traits)
|
10
|
+
|
11
|
+
attr_accessor :default_main_key
|
12
|
+
attr_accessor :default_traits
|
13
|
+
attr_accessor :fallback_keys
|
14
|
+
attr_accessor :models
|
15
|
+
|
16
|
+
def initialize
|
17
|
+
@default_main_key = nil
|
18
|
+
@default_traits = %i[trait1 trait2 trait3]
|
19
|
+
@fallback_keys = %i[]
|
20
|
+
@models = []
|
21
|
+
end
|
22
|
+
|
23
|
+
def model(name, main_key: nil, traits: nil)
|
24
|
+
@models << new_config_model(
|
25
|
+
name,
|
26
|
+
main_key: main_key || default_main_key,
|
27
|
+
traits: traits || default_traits
|
28
|
+
)
|
29
|
+
end
|
30
|
+
|
31
|
+
def find_model(table_name)
|
32
|
+
@find_model ||= Hash.new do |h, key|
|
33
|
+
h[key] = begin
|
34
|
+
entity = models.find { |e| e.name == key }
|
35
|
+
entity ||= new_config_model(key)
|
36
|
+
entity
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
@find_model[table_name]
|
41
|
+
end
|
42
|
+
|
43
|
+
def fallback_key(columns)
|
44
|
+
column_names = columns.each_with_object({}) do |column, hash|
|
45
|
+
hash[column.name.to_sym] = column.name.to_sym
|
46
|
+
end
|
47
|
+
|
48
|
+
fallback_keys.find { |key| column_names.key?(key) }
|
49
|
+
end
|
50
|
+
|
51
|
+
def debug(heading: 'Domain configuration')
|
52
|
+
log.structure(to_h, title: heading) # , line_width: 150, formatter: formatter)
|
53
|
+
''
|
54
|
+
end
|
55
|
+
|
56
|
+
def to_h
|
57
|
+
{
|
58
|
+
default_main_key: default_main_key,
|
59
|
+
default_traits: default_traits,
|
60
|
+
fallback_keys: fallback_keys,
|
61
|
+
models: models.map(&:to_h)
|
62
|
+
}
|
63
|
+
end
|
64
|
+
|
65
|
+
private
|
66
|
+
|
67
|
+
def new_config_model(name, main_key: nil, traits: nil)
|
68
|
+
ConfigModel.new(
|
69
|
+
name,
|
70
|
+
main_key || default_main_key,
|
71
|
+
traits || default_traits
|
72
|
+
)
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
@@ -23,6 +23,8 @@ module KDomain
|
|
23
23
|
@raw_data = KUtil.data.json_parse(json, as: :hash_symbolized)
|
24
24
|
|
25
25
|
@data = KDomain::Schemas::DomainModel.new(@raw_data)
|
26
|
+
|
27
|
+
enrichment
|
26
28
|
end
|
27
29
|
|
28
30
|
def to_h
|
@@ -30,6 +32,45 @@ module KDomain
|
|
30
32
|
|
31
33
|
@raw_data
|
32
34
|
end
|
35
|
+
|
36
|
+
private
|
37
|
+
|
38
|
+
def enrichment
|
39
|
+
attach_rails_model_to_domain_model
|
40
|
+
end
|
41
|
+
|
42
|
+
def attach_rails_model_to_domain_model
|
43
|
+
@data.domain.models.each do |domain_model|
|
44
|
+
domain_model.rails_model = @data.rails_structure.find_model(domain_model.name)
|
45
|
+
|
46
|
+
if domain_model.rails_model
|
47
|
+
attach_column_relations(domain_model)
|
48
|
+
else
|
49
|
+
log.error("Rails Model not found for #{domain_model.name}") unless domain_model.rails_model
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
def attach_column_relations(domain_model)
|
55
|
+
domain_model.columns.each do |column|
|
56
|
+
column.relationships = []
|
57
|
+
add_column_relations(domain_model.rails_model, column, :belongs_to)
|
58
|
+
add_column_relations(domain_model.rails_model, column, :has_one)
|
59
|
+
add_column_relations(domain_model.rails_model, column, :has_many)
|
60
|
+
add_column_relations(domain_model.rails_model, column, :has_and_belongs_to_many)
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
def add_column_relations(rails_model, column, relation_type)
|
65
|
+
relations = rails_model.behaviours.send(relation_type)
|
66
|
+
|
67
|
+
return if relations.nil?
|
68
|
+
|
69
|
+
relations = relations.map { |relation| { relation_type: relation_type }.merge(relation.to_h) }
|
70
|
+
relations.select { |relation| column[:name] == relation.dig(:opts, :foreign_key) }.each do |relation|
|
71
|
+
column.relationships << KDomain::Schemas::Domain::Model::Relationship.new(relation)
|
72
|
+
end
|
73
|
+
end
|
33
74
|
end
|
34
75
|
end
|
35
76
|
end
|
@@ -8,7 +8,7 @@ module KDomain
|
|
8
8
|
raise 'Schema not supplied' if opts[:db_schema].nil?
|
9
9
|
|
10
10
|
self.database = opts[:db_schema].clone
|
11
|
-
database[:tables] = database[:tables] # .slice(156, 1)
|
11
|
+
database[:tables] = database[:tables] # .take(10) # .slice(156, 1)
|
12
12
|
|
13
13
|
guard('tables are missing') if database[:tables].nil?
|
14
14
|
guard('indexes are missing') if database[:indexes].nil?
|
@@ -18,7 +18,7 @@ class Step2DomainModels < KDomain::DomainModel::Step
|
|
18
18
|
name_plural: table_name, # need to check if this is correct as I know it is wrong for account_history_datum
|
19
19
|
table_name: table_name,
|
20
20
|
pk: primary_key(table),
|
21
|
-
file: nil
|
21
|
+
file: nil # will be set in step8_domain_columns
|
22
22
|
}
|
23
23
|
|
24
24
|
attach_columns(model)
|
@@ -66,7 +66,7 @@ class Step7RailsStructureControllers < KDomain::DomainModel::Step
|
|
66
66
|
end
|
67
67
|
controller[:behaviours] = extract_behavior(controller[:full_file])
|
68
68
|
klass_name = controller[:behaviours][:class_name]
|
69
|
-
controller[:functions] = extract_functions(klass_name)
|
69
|
+
controller[:functions] = extract_functions(klass_name, controller[:full_file])
|
70
70
|
end
|
71
71
|
end
|
72
72
|
|
@@ -97,13 +97,15 @@ class Step7RailsStructureControllers < KDomain::DomainModel::Step
|
|
97
97
|
shim_loader
|
98
98
|
end
|
99
99
|
|
100
|
-
def extract_functions(klass_name)
|
100
|
+
def extract_functions(klass_name, controller_file)
|
101
101
|
klass = Module.const_get(klass_name.classify)
|
102
102
|
|
103
103
|
class_info = Peeky.api.build_class_info(klass.new)
|
104
104
|
|
105
105
|
class_info.to_h
|
106
106
|
rescue StandardError => e
|
107
|
-
log.
|
107
|
+
log.kv 'controller_file', controller_file
|
108
|
+
log.exception(e, style: :short)
|
109
|
+
{}
|
108
110
|
end
|
109
111
|
end
|
@@ -9,15 +9,15 @@ class Step8DomainColumns < KDomain::DomainModel::Step
|
|
9
9
|
attr_reader :column_symbol
|
10
10
|
|
11
11
|
def call
|
12
|
+
@debug = true
|
12
13
|
enrich_columns
|
13
14
|
end
|
14
15
|
|
15
16
|
def enrich_columns
|
16
17
|
# .select {|m| m[:name] == 'app_user'}
|
17
18
|
domain_models.each do |model|
|
18
|
-
@domain_model = model
|
19
|
+
@domain_model = enrich_model(model)
|
19
20
|
# this will be nil if there is no rails model code
|
20
|
-
@rails_model = find_rails_structure_models(domain_model[:name])
|
21
21
|
|
22
22
|
# log.warn domain_model[:name]
|
23
23
|
domain_model[:columns].each do |column|
|
@@ -25,75 +25,29 @@ class Step8DomainColumns < KDomain::DomainModel::Step
|
|
25
25
|
@column_name = column[:name]
|
26
26
|
@column_symbol = column[:name].to_sym
|
27
27
|
|
28
|
-
attach_foreign_key
|
29
28
|
column[:structure_type] = structure_type
|
30
29
|
end
|
31
30
|
end
|
32
31
|
end
|
33
32
|
|
34
|
-
def
|
35
|
-
|
36
|
-
|
37
|
-
# is_foreign = foreign_key?(column_name)
|
38
|
-
structure_type = structure_type(is_foreign)
|
39
|
-
|
40
|
-
column.merge({
|
41
|
-
structure_type: structure_type,
|
42
|
-
foreign_key: is_foreign,
|
43
|
-
foreign_table: (foreign_table || '').singularize,
|
44
|
-
foreign_table_plural: (foreign_table || '').pluralize
|
45
|
-
})
|
46
|
-
end
|
47
|
-
|
48
|
-
def lookup_foreign_table(column_name)
|
49
|
-
foreign_table = find_foreign_table(table[:name], column_name)
|
50
|
-
|
51
|
-
return foreign_table if foreign_table
|
52
|
-
|
53
|
-
cn = column_name.to_s
|
54
|
-
|
55
|
-
if cn.ends_with?('_id')
|
56
|
-
table_name = column_name[0..-4]
|
57
|
-
table_name_plural = table_name.pluralize
|
58
|
-
|
59
|
-
if table_name_exist?(table_name_plural.to_s)
|
60
|
-
investigate(step: :step8_columns,
|
61
|
-
location: :lookup_foreign_table,
|
62
|
-
key: column_name,
|
63
|
-
message: "#{@table[:name]}.#{column_name} => #{table_name_plural} - Relationship not found in DB, so have inferred this relationship. You may want to check that this relation is correct")
|
64
|
-
|
65
|
-
return table_name
|
66
|
-
end
|
67
|
-
|
68
|
-
investigate(step: :step8_columns,
|
69
|
-
location: :lookup_foreign_table,
|
70
|
-
key: column_name,
|
71
|
-
message: "#{@table[:name]}.#{column_name} => #{table_name_plural} - Table not found for a column that looks like foreign_key")
|
72
|
-
end
|
73
|
-
|
74
|
-
nil
|
75
|
-
end
|
33
|
+
def enrich_model(model)
|
34
|
+
# NOTE: THIS MAY GET MOVED TO DomainModel::Load#enrichment
|
35
|
+
@rails_model = find_rails_structure_models(model[:name])
|
76
36
|
|
77
|
-
|
78
|
-
return if rails_model.nil? || rails_model[:behaviours].nil? || rails_model[:behaviours][:belongs_to].nil?
|
37
|
+
model[:file] = @rails_model[:file]
|
79
38
|
|
80
|
-
|
39
|
+
log.error "Rails model not found for: #{model[:name]}" unless @rails_model
|
81
40
|
|
82
|
-
|
83
|
-
|
84
|
-
# NEED TO PRE-LOAD the table, table_plural and model
|
85
|
-
domain_column[:foreign_table] = 'xxx1'
|
86
|
-
domain_column[:foreign_table_plural] = 'xxx3'
|
87
|
-
domain_column[:foreign_model] = 'xxx2'
|
41
|
+
model
|
88
42
|
end
|
89
43
|
|
90
44
|
# Need some configurable data dictionary where by
|
91
45
|
# _token can be setup on a project by project basis
|
92
46
|
def structure_type
|
93
47
|
return :primary_key if domain_model[:pk][:name] == column_name
|
94
|
-
return :foreign_key if
|
48
|
+
return :foreign_key if foreign_relationship?
|
49
|
+
return :foreign_type if column_symbol == :context_type || column_symbol == :element_type
|
95
50
|
|
96
|
-
return :timestamp if column_symbol == :created_at || column_symbol == :updated_at
|
97
51
|
return :timestamp if column_symbol == :created_at || column_symbol == :updated_at
|
98
52
|
return :deleted_at if column_symbol == :deleted_at
|
99
53
|
return :encrypted_password if column_symbol == :encrypted_password
|
@@ -101,4 +55,45 @@ class Step8DomainColumns < KDomain::DomainModel::Step
|
|
101
55
|
|
102
56
|
:data
|
103
57
|
end
|
58
|
+
|
59
|
+
def foreign_relationship?
|
60
|
+
return false if rails_model.nil? || rails_model[:behaviours].nil? || rails_model[:behaviours][:belongs_to].nil?
|
61
|
+
|
62
|
+
column_name = domain_column[:name].to_sym
|
63
|
+
rails_model[:behaviours][:belongs_to].any? { |belong| belong[:opts][:foreign_key].to_sym == column_name }
|
64
|
+
end
|
65
|
+
|
66
|
+
# def attach_relationships
|
67
|
+
# domain_column[:relationships] = []
|
68
|
+
# return if rails_model.nil? || rails_model[:behaviours].nil? || rails_model[:behaviours][:belongs_to].nil?
|
69
|
+
|
70
|
+
# column_name = domain_column[:name].to_sym
|
71
|
+
|
72
|
+
# attach_column_relationships(column_name)
|
73
|
+
# end
|
74
|
+
|
75
|
+
# def select_belongs_to(column_name)
|
76
|
+
# rails_model[:behaviours][:belongs_to].select { |belong| belong[:opts][:foreign_key].to_sym == column_name.to_sym }
|
77
|
+
# end
|
78
|
+
|
79
|
+
# # this just maps basic relationship information,
|
80
|
+
# # to go deeper you really need to use the Rails Model Behaviours
|
81
|
+
# def attach_column_relationships(column_name)
|
82
|
+
# select_belongs_to(column_name).each do |belongs_to|
|
83
|
+
# domain_column[:relationships] << map_belongs_to(belongs_to)
|
84
|
+
# end
|
85
|
+
# end
|
86
|
+
|
87
|
+
# def map_belongs_to(belongs_to)
|
88
|
+
# @domain_column[:structure_type] = :foreign_key
|
89
|
+
# # result = {
|
90
|
+
# # type: :belongs_to,
|
91
|
+
# # name: belongs_to[:name],
|
92
|
+
# # foreign_key: belongs_to.dig(:opts, :foreign_key) || @domain_column[:name],
|
93
|
+
# # }
|
94
|
+
|
95
|
+
# # result[:primary_key] = belongs_to.dig(:opts, :primary_key) if belongs_to.dig(:opts, :primary_key)
|
96
|
+
# # result[:class_name] = belongs_to.dig(:opts, :class_name) if belongs_to.dig(:opts, :class_name)
|
97
|
+
# result
|
98
|
+
# end
|
104
99
|
end
|
@@ -48,9 +48,11 @@ module KDomain
|
|
48
48
|
# puts e.message
|
49
49
|
if e.is_a?(NameError) && e.message != last_error&.message
|
50
50
|
log.kv('add module', e.name)
|
51
|
+
log.kv 'file', file
|
51
52
|
eval("module #{e.name}; end")
|
52
53
|
return load_retry(file, times - 1, e)
|
53
54
|
end
|
55
|
+
log.kv 'file', file
|
54
56
|
log.exception(e, style: :short, method_info: method(__callee__))
|
55
57
|
end
|
56
58
|
# rubocop:enable Security/Eval,Style/EvalWithLocation,Style/DocumentDynamicEvalDefinition,Metrics/AbcSize
|
@@ -58,9 +58,11 @@ module KDomain
|
|
58
58
|
# puts e.message
|
59
59
|
if e.is_a?(NameError) && e.message != last_error&.message
|
60
60
|
log.kv('add module', e.name)
|
61
|
+
log.kv 'file', file
|
61
62
|
eval("module #{e.name}; end")
|
62
63
|
return load_retry(file, times - 1, e)
|
63
64
|
end
|
65
|
+
log.kv 'file', file
|
64
66
|
log.exception(e, style: :short, method_info: method(__callee__))
|
65
67
|
end
|
66
68
|
# rubocop:enable Security/Eval,Style/EvalWithLocation,Style/DocumentDynamicEvalDefinition,Metrics/AbcSize
|
@@ -7,16 +7,29 @@
|
|
7
7
|
# builds the hash
|
8
8
|
module KDomain
|
9
9
|
module RawDbSchema
|
10
|
+
# class TransformFilter
|
11
|
+
# attr_accessor :take
|
12
|
+
# def initialize(take: :all)
|
13
|
+
# @take = take
|
14
|
+
# end
|
15
|
+
# end
|
16
|
+
|
10
17
|
class Transform
|
11
18
|
include KLog::Logging
|
12
19
|
|
13
20
|
attr_reader :source_file
|
14
21
|
attr_accessor :template_file
|
15
22
|
attr_reader :schema_loader
|
23
|
+
attr_reader :filter
|
16
24
|
|
17
|
-
|
25
|
+
# @param [String] source_file Rails Schema file
|
26
|
+
# @param [OpenStruct] filter Settings for filtering data before transformation, this is useful during debugging
|
27
|
+
# examples
|
28
|
+
# filter = os(run: 1, tables: os(offset: 10, limit: 10))
|
29
|
+
def initialize(source_file, filter)
|
18
30
|
@source_file = source_file
|
19
31
|
@template_file = KDomain::Gem.resource('templates/load_schema.rb')
|
32
|
+
@filter = filter
|
20
33
|
end
|
21
34
|
|
22
35
|
def call
|
@@ -73,11 +86,22 @@ module KDomain
|
|
73
86
|
|
74
87
|
loader = LoadSchema.new
|
75
88
|
loader.load_schema
|
76
|
-
|
89
|
+
|
90
|
+
apply_filter(loader.schema)
|
77
91
|
rescue StandardError => e
|
78
92
|
log.exception(e)
|
79
93
|
end
|
80
94
|
# rubocop:enable Security/Eval
|
95
|
+
|
96
|
+
# rubocop:disable Metrics/AbcSize
|
97
|
+
def apply_filter(schema)
|
98
|
+
return schema unless filter.active == 1
|
99
|
+
|
100
|
+
schema[:tables] = schema[:tables].slice(filter.table.offset, filter.table.limit) || [] if filter.table.offset.is_a?(Integer) && filter.table.limit.is_a?(Integer)
|
101
|
+
|
102
|
+
schema
|
103
|
+
end
|
104
|
+
# rubocop:enable Metrics/AbcSize
|
81
105
|
end
|
82
106
|
end
|
83
107
|
end
|
data/lib/k_domain/schemas/_.rb
CHANGED
@@ -11,6 +11,8 @@ require_relative 'rails_structure'
|
|
11
11
|
require_relative 'investigate'
|
12
12
|
require_relative 'database'
|
13
13
|
require_relative 'dictionary'
|
14
|
+
require_relative 'domain_types'
|
14
15
|
require_relative 'domain'
|
16
|
+
require_relative 'domain_model'
|
15
17
|
|
16
|
-
require_relative './domain_model'
|
18
|
+
# require_relative './domain_model'
|