k_domain 0.0.16 → 0.0.26
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/boot.rb +40 -0
- data/.builders/generators/configuration_generator.rb +22 -0
- data/.builders/run.rb +16 -0
- data/.gitignore +1 -0
- data/.rubocop.yml +1 -2
- data/Guardfile +1 -0
- data/README.md +15 -0
- data/STORIES.md +35 -6
- 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.rb +27 -55
- data/lib/k_domain/domain_model/transform_steps/_.rb +8 -7
- data/lib/k_domain/domain_model/transform_steps/step.rb +27 -1
- data/lib/k_domain/domain_model/transform_steps/{step1_attach_db_schema.rb → step1_db_schema.rb} +2 -1
- data/lib/k_domain/domain_model/transform_steps/{step5_attach_dictionary.rb → step20_dictionary.rb} +7 -4
- data/lib/k_domain/domain_model/transform_steps/step2_domain_models.rb +123 -0
- data/lib/k_domain/domain_model/transform_steps/{step8_rails_resource_models.rb → step4_rails_resource_models.rb} +4 -4
- data/lib/k_domain/domain_model/transform_steps/step5_rails_resource_routes.rb +36 -0
- data/lib/k_domain/domain_model/transform_steps/step6_rails_structure_models.rb +90 -0
- data/lib/k_domain/domain_model/transform_steps/step7_rails_structure_controllers.rb +111 -0
- data/lib/k_domain/domain_model/transform_steps/step8_domain_columns.rb +99 -0
- data/lib/k_domain/rails_code_extractor/_.rb +5 -0
- data/lib/k_domain/rails_code_extractor/extract_controller.rb +61 -0
- data/lib/k_domain/rails_code_extractor/extract_model.rb +56 -6
- data/lib/k_domain/rails_code_extractor/{load_shim.rb → shim_loader.rb} +3 -5
- data/lib/k_domain/raw_db_schema/load.rb +1 -1
- data/lib/k_domain/raw_db_schema/transform.rb +28 -3
- data/lib/k_domain/schemas/_.rb +6 -3
- data/lib/k_domain/schemas/database.rb +86 -0
- data/lib/k_domain/schemas/domain/erd_file.rb +78 -77
- data/lib/k_domain/schemas/domain.rb +149 -0
- data/lib/k_domain/schemas/domain_model.rb +6 -5
- data/lib/k_domain/schemas/{domain/_.rb → domain_types.rb} +1 -8
- data/lib/k_domain/schemas/rails_resource.rb +43 -6
- data/lib/k_domain/schemas/rails_structure.rb +182 -0
- data/lib/k_domain/version.rb +1 -1
- data/lib/k_domain.rb +4 -2
- data/templates/custom/action_controller.rb +36 -0
- data/templates/custom/controller_interceptors.rb +78 -0
- data/templates/custom/model_interceptors.rb +71 -0
- data/templates/load_schema.rb +7 -0
- data/templates/rails/action_controller.rb +301 -0
- data/templates/{active_record_shims.rb → rails/active_record.rb} +42 -49
- data/templates/ruby_code_extractor/attach_class_info.rb +13 -0
- data/templates/ruby_code_extractor/behaviour_accessors.rb +39 -0
- data/templates/sample_config.rb +47 -0
- data/templates/simple/controller_interceptors.rb +2 -0
- metadata +33 -22
- data/lib/k_domain/domain_model/transform_steps/step2_attach_models.rb +0 -62
- data/lib/k_domain/domain_model/transform_steps/step3_attach_columns.rb +0 -137
- data/lib/k_domain/domain_model/transform_steps/step4_attach_erd_files.rb +0 -457
- data/lib/k_domain/domain_model/transform_steps/step9_rails_structure_models.rb +0 -33
- data/lib/k_domain/schemas/database/_.rb +0 -7
- data/lib/k_domain/schemas/database/foreign_key.rb +0 -14
- data/lib/k_domain/schemas/database/index.rb +0 -14
- data/lib/k_domain/schemas/database/schema.rb +0 -31
- data/lib/k_domain/schemas/database/table.rb +0 -32
- data/lib/k_domain/schemas/domain/domain.rb +0 -11
- data/lib/k_domain/schemas/domain/models/column.rb +0 -49
- data/lib/k_domain/schemas/domain/models/model.rb +0 -111
- data/templates/fake_module_shims.rb +0 -42
@@ -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
|
@@ -24,6 +37,7 @@ module KDomain
|
|
24
37
|
# log.kv 'template_file', template_file
|
25
38
|
# log.kv 'source_file?', File.exist?(source_file)
|
26
39
|
# log.kv 'template_file?', File.exist?(template_file)
|
40
|
+
|
27
41
|
log.error "Template not found: #{template_file}" unless File.exist?(template_file)
|
28
42
|
|
29
43
|
content = File.read(source_file)
|
@@ -72,11 +86,22 @@ module KDomain
|
|
72
86
|
|
73
87
|
loader = LoadSchema.new
|
74
88
|
loader.load_schema
|
75
|
-
|
89
|
+
|
90
|
+
apply_filter(loader.schema)
|
76
91
|
rescue StandardError => e
|
77
92
|
log.exception(e)
|
78
93
|
end
|
79
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
|
80
105
|
end
|
81
106
|
end
|
82
107
|
end
|
data/lib/k_domain/schemas/_.rb
CHANGED
@@ -7,9 +7,12 @@ module Types
|
|
7
7
|
end
|
8
8
|
|
9
9
|
require_relative 'rails_resource'
|
10
|
+
require_relative 'rails_structure'
|
10
11
|
require_relative 'investigate'
|
11
|
-
require_relative 'database
|
12
|
+
require_relative 'database'
|
12
13
|
require_relative 'dictionary'
|
13
|
-
require_relative '
|
14
|
+
require_relative 'domain_types'
|
15
|
+
require_relative 'domain'
|
16
|
+
require_relative 'domain_model'
|
14
17
|
|
15
|
-
require_relative './domain_model'
|
18
|
+
# require_relative './domain_model'
|
@@ -0,0 +1,86 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# KDomain::Schemas::Domain::Column
|
4
|
+
# KDomain::Schemas::Domain::Model
|
5
|
+
|
6
|
+
module KDomain
|
7
|
+
module Schemas
|
8
|
+
class Database < Dry::Struct
|
9
|
+
class ForeignKey < Dry::Struct
|
10
|
+
attribute :left , Types::Strict::String
|
11
|
+
attribute :right , Types::Strict::String
|
12
|
+
attribute :name? , Types::Strict::String.optional.default(nil)
|
13
|
+
attribute :on_update? , Types::Strict::String.optional.default(nil)
|
14
|
+
attribute :on_delete? , Types::Strict::String.optional.default(nil)
|
15
|
+
attribute :column? , Types::Strict::String.optional.default(nil)
|
16
|
+
end
|
17
|
+
|
18
|
+
class Index < Dry::Struct
|
19
|
+
attribute :name , Types::Strict::String
|
20
|
+
attribute :fields , Types::Nominal::Any.optional.default('xxxxx1')
|
21
|
+
attribute :using , Types::Nominal::String
|
22
|
+
attribute :order? , Types::Nominal::Hash
|
23
|
+
attribute :where? , Types::Nominal::Any.optional.default(nil)
|
24
|
+
attribute :unique? , Types::Nominal::Any.optional.default(nil)
|
25
|
+
end
|
26
|
+
|
27
|
+
class View < Dry::Struct
|
28
|
+
attribute :name , Types::Strict::String
|
29
|
+
attribute :materialized , Types::Strict::Bool
|
30
|
+
attribute :sql_definition , Types::Nominal::String
|
31
|
+
end
|
32
|
+
|
33
|
+
class Table < Dry::Struct
|
34
|
+
class RailsSchema < Dry::Struct
|
35
|
+
attribute :primary_key , Types::Nominal::Any.optional.default(nil)
|
36
|
+
attribute :id , Types::Nominal::Any.optional.default(nil)
|
37
|
+
attribute :force , Types::Nominal::Any.optional.default(nil)
|
38
|
+
end
|
39
|
+
|
40
|
+
class Column < Dry::Struct
|
41
|
+
attribute :name , Types::Strict::String
|
42
|
+
attribute :type , Types::Strict::String
|
43
|
+
attribute :precision? , Types::Strict::Integer.optional.default(nil)
|
44
|
+
attribute :scale? , Types::Strict::Integer.optional.default(nil)
|
45
|
+
attribute :default? , Types::Nominal::Any.optional.default(nil)
|
46
|
+
attribute :array? , Types::Strict::Bool.optional.default(nil)
|
47
|
+
attribute :null? , Types::Strict::Bool.optional.default(nil)
|
48
|
+
attribute :limit? , Types::Strict::Integer.optional.default(nil)
|
49
|
+
end
|
50
|
+
|
51
|
+
attribute :name , Types::Strict::String
|
52
|
+
attribute :primary_key , Types::Strict::String.optional.default(nil)
|
53
|
+
attribute :primary_key_type , Types::Strict::String.optional.default(nil)
|
54
|
+
attribute :id? , Types::Nominal::Any.optional.default(nil)
|
55
|
+
attribute :columns , Types::Strict::Array.of(KDomain::Schemas::Database::Table::Column)
|
56
|
+
attribute :indexes , Types::Strict::Array.of(KDomain::Schemas::Database::Index)
|
57
|
+
attribute :rails_schema , KDomain::Schemas::Database::Table::RailsSchema
|
58
|
+
end
|
59
|
+
|
60
|
+
class DbInfo < Dry::Struct
|
61
|
+
attribute :type , Types::Strict::String
|
62
|
+
attribute :version , Types::Nominal::Any.optional.default(nil)
|
63
|
+
attribute :extensions , Types::Strict::Array
|
64
|
+
end
|
65
|
+
|
66
|
+
class UniqueKey < Dry::Struct
|
67
|
+
attribute :type , Types::Strict::String
|
68
|
+
attribute :category , Types::Strict::String.optional
|
69
|
+
attribute :key , Types::Strict::String
|
70
|
+
attribute :keys , Types::Strict::Array
|
71
|
+
end
|
72
|
+
|
73
|
+
class Meta < Dry::Struct
|
74
|
+
attribute :rails , Types::Strict::Integer
|
75
|
+
attribute :db_info , KDomain::Schemas::Database::DbInfo
|
76
|
+
attribute :unique_keys , Types::Strict::Array.of(KDomain::Schemas::Database::UniqueKey)
|
77
|
+
end
|
78
|
+
|
79
|
+
attribute :tables , Types::Strict::Array.of(KDomain::Schemas::Database::Table)
|
80
|
+
attribute :foreign_keys? , Types::Strict::Array.of(KDomain::Schemas::Database::ForeignKey)
|
81
|
+
attribute :indexes? , Types::Strict::Array.of(KDomain::Schemas::Database::Index)
|
82
|
+
attribute :views? , Types::Strict::Array.of(KDomain::Schemas::Database::View)
|
83
|
+
attribute :meta , KDomain::Schemas::Database::Meta
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
@@ -1,82 +1,83 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
# # frozen_string_literal: true
|
2
3
|
|
3
|
-
# Domain class holds a list of the entities
|
4
|
-
module KDomain
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
4
|
+
# # Domain class holds a list of the entities
|
5
|
+
# module KDomain
|
6
|
+
# module DomainModel
|
7
|
+
#
|
8
|
+
# class ErdFile < Dry::Struct
|
9
|
+
# attribute :name , Types::Strict::String
|
10
|
+
# attribute :name_plural , Types::Strict::String
|
11
|
+
# attribute :dsl_file , Types::Strict::String
|
11
12
|
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
# attribute? :source , Dry::Struct.optional.default(nil) do
|
14
|
+
# attribute :ruby , Types::Strict::String
|
15
|
+
# attribute :public , Types::Strict::String.optional.default(nil)
|
16
|
+
# attribute :private , Types::Strict::String.optional.default(nil)
|
16
17
|
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
18
|
+
# attribute? :all_methods , Dry::Struct.optional.default(nil) do
|
19
|
+
# attribute? :klass , Types::Strict::Array do
|
20
|
+
# attribute :name , Types::Strict::String
|
21
|
+
# attribute :scope , Types::Strict::String # .optional.default(nil)
|
22
|
+
# attribute :class_method , Types::Strict::Bool
|
23
|
+
# attribute :arguments , Types::Strict::String
|
24
|
+
# end
|
25
|
+
# attribute? :instance , Types::Strict::Array do
|
26
|
+
# attribute :name , Types::Strict::String
|
27
|
+
# attribute :scope , Types::Strict::String # .optional.default(nil)
|
28
|
+
# attribute :class_method , Types::Strict::Bool
|
29
|
+
# attribute :arguments , Types::Strict::String
|
30
|
+
# end
|
31
|
+
# attribute? :instance_public , Types::Strict::Array do
|
32
|
+
# attribute :name , Types::Strict::String
|
33
|
+
# attribute :scope , Types::Strict::String # .optional.default(nil)
|
34
|
+
# attribute :class_method , Types::Strict::Bool
|
35
|
+
# attribute :arguments , Types::Strict::String
|
36
|
+
# end
|
37
|
+
# attribute? :instance_private , Types::Strict::Array do
|
38
|
+
# attribute :name , Types::Strict::String
|
39
|
+
# attribute :scope , Types::Strict::String # .optional.default(nil)
|
40
|
+
# attribute :class_method , Types::Strict::Bool
|
41
|
+
# attribute :arguments , Types::Strict::String
|
42
|
+
# end
|
43
|
+
# end
|
44
|
+
# end
|
45
|
+
# attribute? :dsl , Dry::Struct.optional.default(nil) do
|
46
|
+
# attribute :default_scope , Types::Strict::String.optional.default(nil)
|
46
47
|
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
end
|
48
|
+
# attribute? :scopes , Types::Strict::Array do
|
49
|
+
# attribute :name , Types::Strict::String
|
50
|
+
# attribute :scope , Types::Strict::String # .optional.default(nil)
|
51
|
+
# end
|
52
|
+
# attribute? :belongs_to , Types::Strict::Array do
|
53
|
+
# attribute :name , Types::Strict::String
|
54
|
+
# attribute :options , Types::Strict::Hash.optional.default({}.freeze)
|
55
|
+
# attribute :raw_options , Types::Strict::String
|
56
|
+
# end
|
57
|
+
# attribute? :has_one , Types::Strict::Array do
|
58
|
+
# attribute :name , Types::Strict::String
|
59
|
+
# attribute :options , Types::Strict::Hash.optional.default({}.freeze)
|
60
|
+
# attribute :raw_options , Types::Strict::String
|
61
|
+
# end
|
62
|
+
# attribute? :has_many , Types::Strict::Array do
|
63
|
+
# attribute :name , Types::Strict::String
|
64
|
+
# attribute :options , Types::Strict::Hash.optional.default({}.freeze)
|
65
|
+
# attribute :raw_options , Types::Strict::String
|
66
|
+
# end
|
67
|
+
# attribute? :has_and_belongs_to_many , Types::Strict::Array do
|
68
|
+
# attribute :name , Types::Strict::String
|
69
|
+
# attribute :options , Types::Strict::Hash.optional.default({}.freeze)
|
70
|
+
# attribute :raw_options , Types::Strict::String
|
71
|
+
# end
|
72
|
+
# attribute? :validate_on , Types::Strict::Array do
|
73
|
+
# attribute :line , Types::Strict::String
|
74
|
+
# end
|
75
|
+
# attribute? :validates_on , Types::Strict::Array do
|
76
|
+
# attribute :name , Types::Strict::String
|
77
|
+
# attribute :raw_options , Types::Strict::String
|
78
|
+
# end
|
79
|
+
# end
|
80
|
+
# end
|
81
|
+
# # rubocop:enable Metrics/BlockLength
|
82
|
+
# end
|
83
|
+
# end
|
@@ -0,0 +1,149 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Domain class holds a list of the entities
|
4
|
+
module KDomain
|
5
|
+
module Schemas
|
6
|
+
class Domain < Dry::Struct
|
7
|
+
class Model < Dry::Struct
|
8
|
+
class Relationship < KDomain::Schemas::RailsStructure::NameOptsType
|
9
|
+
attribute :relation_type , Types::Coercible::Symbol
|
10
|
+
|
11
|
+
def to_s
|
12
|
+
"#{relation_type}: :#{name} fk: #{opts[:foreign_key]}"
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
class Column < Dry::Struct
|
17
|
+
attribute :name , Types::Strict::String # "source_account_id"
|
18
|
+
attribute :name_plural , Types::Strict::String # "source_account_ids"
|
19
|
+
attribute :type , Types::Coercible::Symbol # "integer"
|
20
|
+
attribute :precision , Types::Strict::Integer.optional.default(nil) # null
|
21
|
+
attribute :scale , Types::Strict::Integer.optional.default(nil) # null
|
22
|
+
attribute :default , Types::Nominal::Any.optional.default(nil) # null
|
23
|
+
attribute :null , Types::Nominal::Any.optional.default(nil) # null
|
24
|
+
attribute :limit , Types::Strict::Integer.optional.default(nil) # null
|
25
|
+
attribute :array , Types::Strict::Bool.optional.default(nil) # null
|
26
|
+
|
27
|
+
# Calculated value
|
28
|
+
attribute :structure_type , Types::Coercible::Symbol
|
29
|
+
|
30
|
+
# Any column may have a bunch of related models using various relationship types (belong_to, has_one, has_many etc...)
|
31
|
+
attr_accessor :relationships
|
32
|
+
|
33
|
+
def db_type
|
34
|
+
return @db_type if defined? @db_type
|
35
|
+
|
36
|
+
@db_type = KDomain::Schemas::DB_TYPE[type] || '******'
|
37
|
+
end
|
38
|
+
|
39
|
+
def ruby_type
|
40
|
+
return @ruby_type if defined? @ruby_type
|
41
|
+
|
42
|
+
@ruby_type = KDomain::Schemas::RUBY_TYPE[type] || '******'
|
43
|
+
end
|
44
|
+
|
45
|
+
def csharp_type
|
46
|
+
return @csharp_type if defined? @csharp_type
|
47
|
+
|
48
|
+
@csharp_type = KDomain::Schemas::CSHARP_TYPE[type] || '******'
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
class Pk < Dry::Struct
|
53
|
+
attribute :name , Types::Strict::String.optional.default(nil)
|
54
|
+
attribute :type , Types::Strict::String.optional.default(nil)
|
55
|
+
attribute :exist , Types::Strict::Bool
|
56
|
+
end
|
57
|
+
|
58
|
+
attribute :name , Types::Strict::String
|
59
|
+
attribute :name_plural , Types::Strict::String
|
60
|
+
attribute :table_name , Types::Strict::String
|
61
|
+
# Model type - :entity, :basic_user, :admin_user, possibly: m2m, agg_root
|
62
|
+
attribute :type , Types::Strict::Symbol.optional.default(:entity)
|
63
|
+
attribute :pk , KDomain::Schemas::Domain::Model::Pk
|
64
|
+
attribute :columns , Types::Strict::Array.of(KDomain::Schemas::Domain::Model::Column)
|
65
|
+
attribute :file , Types::Strict::String.optional.default(nil)
|
66
|
+
|
67
|
+
# Link <KDomain::Schemas::RailsStructure::Model> to the domain model
|
68
|
+
attr_accessor :rails_model
|
69
|
+
|
70
|
+
def ruby?
|
71
|
+
file && File.exist?(file)
|
72
|
+
end
|
73
|
+
|
74
|
+
def pk?
|
75
|
+
pk.exist
|
76
|
+
end
|
77
|
+
|
78
|
+
# Custom model configurations such as main_key and traits
|
79
|
+
def config
|
80
|
+
@config ||= KDomain.configuration.find_model(name.to_sym)
|
81
|
+
end
|
82
|
+
|
83
|
+
# If filled in, the model has a main field that is useful for rendering and may be used for unique constraint, may also be called display_name
|
84
|
+
def main_key
|
85
|
+
@main_key ||= config.main_key || KDomain.configuration.fallback_key(columns_data)
|
86
|
+
end
|
87
|
+
|
88
|
+
def traits
|
89
|
+
config.traits
|
90
|
+
end
|
91
|
+
|
92
|
+
def columns_data
|
93
|
+
@columns_data ||= columns_for_structure_types(:data)
|
94
|
+
end
|
95
|
+
|
96
|
+
def columns_primary
|
97
|
+
@columns_primary ||= columns_for_structure_types(:primary_key)
|
98
|
+
end
|
99
|
+
|
100
|
+
def columns_foreign
|
101
|
+
@columns_foreign ||= columns_for_structure_types(:foreign_key)
|
102
|
+
end
|
103
|
+
|
104
|
+
def columns_foreign_type
|
105
|
+
@columns_foreign_type ||= columns_for_structure_types(:foreign_type)
|
106
|
+
end
|
107
|
+
|
108
|
+
def columns_timestamp
|
109
|
+
@columns_data_timestamp ||= columns_for_structure_types(:timestamp)
|
110
|
+
end
|
111
|
+
|
112
|
+
def columns_deleted_at
|
113
|
+
@columns_data_deleted_at ||= columns_for_structure_types(:deleted_at)
|
114
|
+
end
|
115
|
+
|
116
|
+
def columns_virtual
|
117
|
+
@columns_virtual ||= columns_for_structure_types(:foreign_type, :timestamp, :deleted_at)
|
118
|
+
end
|
119
|
+
|
120
|
+
def columns_data_foreign
|
121
|
+
@columns_data_foreign ||= columns_for_structure_types(:data, :foreign_key)
|
122
|
+
end
|
123
|
+
alias rows_fields_and_fk columns_data_foreign
|
124
|
+
|
125
|
+
def columns_data_primary
|
126
|
+
@columns_data_primary ||= columns_for_structure_types(:data, :primary_key)
|
127
|
+
end
|
128
|
+
alias rows_fields_and_pk columns_data_primary
|
129
|
+
|
130
|
+
def columns_data_virtual
|
131
|
+
@columns_data_virtual ||= columns_for_structure_types(:data, :foreign_type, :timestamp, :deleted_at)
|
132
|
+
end
|
133
|
+
alias rows_fields_and_virtual columns_data_virtual
|
134
|
+
|
135
|
+
def columns_data_foreign_virtual
|
136
|
+
@columns_data_foreign_virtual ||= columns_for_structure_types(:data, :foreign_key, :foreign_type, :timestamp, :deleted_at)
|
137
|
+
end
|
138
|
+
|
139
|
+
private
|
140
|
+
|
141
|
+
def columns_for_structure_types(*structure_types)
|
142
|
+
columns.select { |column| structure_types.include?(column.structure_type) }
|
143
|
+
end
|
144
|
+
end
|
145
|
+
|
146
|
+
attribute :models , Types::Strict::Array.of(KDomain::Schemas::Domain::Model)
|
147
|
+
end
|
148
|
+
end
|
149
|
+
end
|
@@ -4,11 +4,12 @@
|
|
4
4
|
module KDomain
|
5
5
|
module Schemas
|
6
6
|
class DomainModel < Dry::Struct
|
7
|
-
attribute :domain
|
8
|
-
attribute :database
|
9
|
-
attribute :dictionary
|
10
|
-
attribute :rails_resource
|
11
|
-
attribute :
|
7
|
+
attribute :domain , KDomain::Schemas::Domain
|
8
|
+
attribute :database , KDomain::Schemas::Database
|
9
|
+
attribute :dictionary , KDomain::Schemas::Dictionary
|
10
|
+
attribute :rails_resource , KDomain::Schemas::RailsResource
|
11
|
+
attribute :rails_structure , KDomain::Schemas::RailsStructure
|
12
|
+
attribute :investigate , KDomain::Schemas::Investigate
|
12
13
|
end
|
13
14
|
end
|
14
15
|
end
|
@@ -1,14 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
# log.warn 'models->domain' if AppDebug.require?
|
4
|
-
|
5
|
-
require_relative './models/column'
|
6
|
-
require_relative './models/model'
|
7
|
-
require_relative './erd_file'
|
8
|
-
require_relative './domain'
|
9
|
-
|
10
3
|
module KDomain
|
11
|
-
module
|
4
|
+
module Schemas
|
12
5
|
RUBY_TYPE = {
|
13
6
|
text: 'String',
|
14
7
|
string: 'String',
|
@@ -3,13 +3,50 @@
|
|
3
3
|
# Domain class holds a dictionary entry
|
4
4
|
module KDomain
|
5
5
|
module Schemas
|
6
|
+
# Route related files
|
7
|
+
module Types
|
8
|
+
include Dry.Types()
|
9
|
+
|
10
|
+
Verb = Strict::String.enum('', 'GET', 'PATCH', 'POST', 'PUT', 'DELETE')
|
11
|
+
end
|
12
|
+
|
13
|
+
class Route < Dry::Struct
|
14
|
+
attribute :name , Types::String
|
15
|
+
attribute :controller_name , Types::String
|
16
|
+
attribute :controller_path , Types::String
|
17
|
+
attribute :controller_namespace , Types::String
|
18
|
+
attribute :controller_file , Types::String
|
19
|
+
attribute :controller_exist , Types::Bool
|
20
|
+
attribute :action , Types::String.optional
|
21
|
+
attribute :uri_path , Types::String
|
22
|
+
attribute :mime_match , Types::String
|
23
|
+
attribute :verbs , Types.Array(Types::Verb)
|
24
|
+
attribute :file , Types::String
|
25
|
+
attribute :exist , Types::Bool
|
26
|
+
attribute :duplicate_verb , Types::Bool
|
27
|
+
end
|
28
|
+
|
29
|
+
# Model related files
|
30
|
+
class Model < Dry::Struct
|
31
|
+
attribute :model_name , Types::String
|
32
|
+
attribute :table_name , Types::String
|
33
|
+
attribute :file , Types::String
|
34
|
+
attribute :exist , Types::Bool
|
35
|
+
attribute :state , Types::String
|
36
|
+
end
|
37
|
+
|
6
38
|
class RailsResource < Dry::Struct
|
7
|
-
attribute :models
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
39
|
+
attribute :models, Types.Array(Model)
|
40
|
+
attribute :routes, Types.Array(Route)
|
41
|
+
|
42
|
+
# def find_route(name)
|
43
|
+
# name = name.to_s
|
44
|
+
# routes.find { |route| route.name.to_s == name }
|
45
|
+
# end
|
46
|
+
|
47
|
+
def find_model(name)
|
48
|
+
name = name.to_s
|
49
|
+
models.find { |model| model.model_name.to_s == name }
|
13
50
|
end
|
14
51
|
end
|
15
52
|
end
|