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.
@@ -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
- module DomainModel
6
- # rubocop:disable Metrics/BlockLength
7
- class ErdFile < Dry::Struct
8
- attribute :name , Types::Strict::String
9
- attribute :name_plural , Types::Strict::String
10
- attribute :dsl_file , Types::Strict::String
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
- attribute? :source , Dry::Struct.optional.default(nil) do
13
- attribute :ruby , Types::Strict::String
14
- attribute :public , Types::Strict::String.optional.default(nil)
15
- attribute :private , Types::Strict::String.optional.default(nil)
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
- attribute? :all_methods , Dry::Struct.optional.default(nil) do
18
- attribute? :klass , Types::Strict::Array do
19
- attribute :name , Types::Strict::String
20
- attribute :scope , Types::Strict::String # .optional.default(nil)
21
- attribute :class_method , Types::Strict::Bool
22
- attribute :arguments , Types::Strict::String
23
- end
24
- attribute? :instance , Types::Strict::Array do
25
- attribute :name , Types::Strict::String
26
- attribute :scope , Types::Strict::String # .optional.default(nil)
27
- attribute :class_method , Types::Strict::Bool
28
- attribute :arguments , Types::Strict::String
29
- end
30
- attribute? :instance_public , Types::Strict::Array do
31
- attribute :name , Types::Strict::String
32
- attribute :scope , Types::Strict::String # .optional.default(nil)
33
- attribute :class_method , Types::Strict::Bool
34
- attribute :arguments , Types::Strict::String
35
- end
36
- attribute? :instance_private , Types::Strict::Array do
37
- attribute :name , Types::Strict::String
38
- attribute :scope , Types::Strict::String # .optional.default(nil)
39
- attribute :class_method , Types::Strict::Bool
40
- attribute :arguments , Types::Strict::String
41
- end
42
- end
43
- end
44
- attribute? :dsl , Dry::Struct.optional.default(nil) do
45
- attribute :default_scope , Types::Strict::String.optional.default(nil)
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
- attribute? :scopes , Types::Strict::Array do
48
- attribute :name , Types::Strict::String
49
- attribute :scope , Types::Strict::String # .optional.default(nil)
50
- end
51
- attribute? :belongs_to , Types::Strict::Array do
52
- attribute :name , Types::Strict::String
53
- attribute :options , Types::Strict::Hash.optional.default({}.freeze)
54
- attribute :raw_options , Types::Strict::String
55
- end
56
- attribute? :has_one , Types::Strict::Array do
57
- attribute :name , Types::Strict::String
58
- attribute :options , Types::Strict::Hash.optional.default({}.freeze)
59
- attribute :raw_options , Types::Strict::String
60
- end
61
- attribute? :has_many , Types::Strict::Array do
62
- attribute :name , Types::Strict::String
63
- attribute :options , Types::Strict::Hash.optional.default({}.freeze)
64
- attribute :raw_options , Types::Strict::String
65
- end
66
- attribute? :has_and_belongs_to_many , Types::Strict::Array do
67
- attribute :name , Types::Strict::String
68
- attribute :options , Types::Strict::Hash.optional.default({}.freeze)
69
- attribute :raw_options , Types::Strict::String
70
- end
71
- attribute? :validate_on , Types::Strict::Array do
72
- attribute :line , Types::Strict::String
73
- end
74
- attribute? :validates_on , Types::Strict::Array do
75
- attribute :name , Types::Strict::String
76
- attribute :raw_options , Types::Strict::String
77
- end
78
- end
79
- end
80
- # rubocop:enable Metrics/BlockLength
81
- end
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
@@ -5,6 +5,14 @@ module KDomain
5
5
  module Schemas
6
6
  class Domain < Dry::Struct
7
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
+
8
16
  class Column < Dry::Struct
9
17
  attribute :name , Types::Strict::String # "source_account_id"
10
18
  attribute :name_plural , Types::Strict::String # "source_account_ids"
@@ -17,35 +25,27 @@ module KDomain
17
25
  attribute :array , Types::Strict::Bool.optional.default(nil) # null
18
26
 
19
27
  # Calculated value
20
- attribute :structure_type , Types::Coercible::Symbol #
21
- # attribute :foreign_key , Types::Strict::Bool.optional.default(nil) #
22
- # attribute :foreign_table , Types::Strict::String #
23
- # attribute :foreign_table_plural , Types::Strict::String #
28
+ attribute :structure_type , Types::Coercible::Symbol
24
29
 
25
- # def data_column
26
- # @columns_data ||= structure_type?(:data)
27
- # end
28
-
29
- # def structure_type?(*structure_types)
30
- # structure_types.include?(column.structure_type)
31
- # end
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
32
 
33
33
  def db_type
34
34
  return @db_type if defined? @db_type
35
35
 
36
- @db_type = DB_TYPE[type] || '******'
36
+ @db_type = KDomain::Schemas::DB_TYPE[type] || '******'
37
37
  end
38
38
 
39
39
  def ruby_type
40
40
  return @ruby_type if defined? @ruby_type
41
41
 
42
- @ruby_type = RUBY_TYPE[type] || '******'
42
+ @ruby_type = KDomain::Schemas::RUBY_TYPE[type] || '******'
43
43
  end
44
44
 
45
45
  def csharp_type
46
46
  return @csharp_type if defined? @csharp_type
47
47
 
48
- @csharp_type = CSHARP_TYPE[type] || '******'
48
+ @csharp_type = KDomain::Schemas::CSHARP_TYPE[type] || '******'
49
49
  end
50
50
  end
51
51
 
@@ -64,6 +64,9 @@ module KDomain
64
64
  attribute :columns , Types::Strict::Array.of(KDomain::Schemas::Domain::Model::Column)
65
65
  attribute :file , Types::Strict::String.optional.default(nil)
66
66
 
67
+ # Link <KDomain::Schemas::RailsStructure::Model> to the domain model
68
+ attr_accessor :rails_model
69
+
67
70
  def ruby?
68
71
  file && File.exist?(file)
69
72
  end
@@ -72,35 +75,24 @@ module KDomain
72
75
  pk.exist
73
76
  end
74
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
+
75
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
76
84
  def main_key
77
- @main_key ||= MainKey.lookup(name, columns_data)
85
+ @main_key ||= config.main_key || KDomain.configuration.fallback_key(columns_data)
78
86
  end
79
87
 
80
88
  def traits
81
- @traits ||= Traits.lookup(name)
89
+ config.traits
82
90
  end
83
91
 
84
- # def where()
85
- # end
86
-
87
- # def columns_where()
88
- # end
89
-
90
- # Column filters
91
-
92
92
  def columns_data
93
93
  @columns_data ||= columns_for_structure_types(:data)
94
94
  end
95
95
 
96
- # def columns_data_optional
97
- # @columns_data_optional ||= columns_for_structure_types(:data).select { |c| true }
98
- # end
99
-
100
- # def columns_data_required
101
- # @columns_data_required ||= columns_for_structure_types(:data).select { |c| false }
102
- # end
103
-
104
96
  def columns_primary
105
97
  @columns_primary ||= columns_for_structure_types(:primary_key)
106
98
  end
@@ -109,6 +101,10 @@ module KDomain
109
101
  @columns_foreign ||= columns_for_structure_types(:foreign_key)
110
102
  end
111
103
 
104
+ def columns_foreign_type
105
+ @columns_foreign_type ||= columns_for_structure_types(:foreign_type)
106
+ end
107
+
112
108
  def columns_timestamp
113
109
  @columns_data_timestamp ||= columns_for_structure_types(:timestamp)
114
110
  end
@@ -118,7 +114,7 @@ module KDomain
118
114
  end
119
115
 
120
116
  def columns_virtual
121
- @columns_virtual ||= columns_for_structure_types(:timestamp, :deleted_at)
117
+ @columns_virtual ||= columns_for_structure_types(:foreign_type, :timestamp, :deleted_at)
122
118
  end
123
119
 
124
120
  def columns_data_foreign
@@ -132,12 +128,12 @@ module KDomain
132
128
  alias rows_fields_and_pk columns_data_primary
133
129
 
134
130
  def columns_data_virtual
135
- @columns_data_virtual ||= columns_for_structure_types(:data, :timestamp, :deleted_at)
131
+ @columns_data_virtual ||= columns_for_structure_types(:data, :foreign_type, :timestamp, :deleted_at)
136
132
  end
137
133
  alias rows_fields_and_virtual columns_data_virtual
138
134
 
139
135
  def columns_data_foreign_virtual
140
- @columns_data_foreign_virtual ||= columns_for_structure_types(:data, :foreign_key, :timestamp, :deleted_at)
136
+ @columns_data_foreign_virtual ||= columns_for_structure_types(:data, :foreign_key, :foreign_type, :timestamp, :deleted_at)
141
137
  end
142
138
 
143
139
  private
@@ -148,7 +144,6 @@ module KDomain
148
144
  end
149
145
 
150
146
  attribute :models , Types::Strict::Array.of(KDomain::Schemas::Domain::Model)
151
- # attribute :erd_files , Types::Strict::Array.of(KDomain::DomainModel::ErdFile)
152
147
  end
153
148
  end
154
149
  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 DomainModel
4
+ module Schemas
12
5
  RUBY_TYPE = {
13
6
  text: 'String',
14
7
  string: 'String',
@@ -51,6 +51,16 @@ module KDomain
51
51
  attribute :attr_accessor? , Types::Array.of(Types::Strict::String)
52
52
  attribute :attr_reader? , Types::Array.of(Types::Strict::String)
53
53
  attribute :attr_writer? , Types::Array.of(Types::Strict::String)
54
+
55
+ # Not sure if I need to do a behaviours by column names
56
+ # def belongs_to_by(foreign_key: )
57
+ # end
58
+ # def has_one_by(foreign_key: )
59
+ # end
60
+ # def has_many_by(foreign_key: )
61
+ # end
62
+ # def has_and_belongs_to_many_to_by(foreign_key: )
63
+ # end
54
64
  end
55
65
 
56
66
  class Method < Dry::Struct
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module KDomain
4
- VERSION = '0.0.23'
4
+ VERSION = '0.0.26'
5
5
  end
data/lib/k_domain.rb CHANGED
@@ -5,6 +5,7 @@ require 'dry-struct'
5
5
  require 'k_log'
6
6
  require 'peeky'
7
7
  require 'k_domain/version'
8
+ require 'k_domain/config/_'
8
9
  require 'k_domain/schemas/_'
9
10
  require 'k_domain/raw_db_schema/transform'
10
11
  require 'k_domain/raw_db_schema/load'
@@ -19,6 +20,8 @@ require 'k_domain/rails_code_extractor/_'
19
20
  # end
20
21
 
21
22
  module KDomain
23
+ extend KDomain::Config
24
+
22
25
  # raise KDomain::Error, 'Sample message'
23
26
  class Error < StandardError; end
24
27
 
@@ -0,0 +1,47 @@
1
+ KDomain.configure do |config|
2
+ config.default_main_key = nil
3
+ config.default_traits = %i[
4
+ trait1
5
+ trait2
6
+ trait3
7
+ ]
8
+
9
+ config.fallback_keys = %i[
10
+ name
11
+ category
12
+ description
13
+ global
14
+ key
15
+ klass
16
+ message
17
+ lead_source
18
+ body
19
+ status
20
+ subject
21
+ ]
22
+
23
+ config.register_entity(:action_log , main_key: :action)
24
+ config.register_entity(:backup , main_key: :filename)
25
+ config.register_entity(:campaign_calendar_entry , main_key: :date)
26
+ config.register_entity(:campaign_count , main_key: :total_count)
27
+ config.register_entity(:comment , main_key: :title)
28
+ config.register_entity(:contact_group , main_key: :email)
29
+ config.register_entity(:email_alias , main_key: :email)
30
+ config.register_entity(:unsubscribe , main_key: :email)
31
+ config.register_entity(:email_credential , main_key: :credentials)
32
+ config.register_entity(:email_soft_bounce , main_key: :email_address)
33
+ config.register_entity(:suppressed_address , main_key: :email_address)
34
+ config.register_entity(:email_template_value , main_key: :value)
35
+ config.register_entity(:email_validation , main_key: :address)
36
+ config.register_entity(:enterprise_togglefield , main_key: :field)
37
+ config.register_entity(:event_stat , main_key: :event_type)
38
+ config.register_entity(:holiday_date , main_key: :date)
39
+ config.register_entity(:job_stat , main_key: :job_name)
40
+ config.register_entity(:original_user , main_key: :target_user_id)
41
+ config.register_entity(:pending_attachment , main_key: :file_name)
42
+ config.register_entity(:sales_base_tax , main_key: :total)
43
+ config.register_entity(:shared_user , main_key: :shared_id)
44
+ config.register_entity(:task_repeat , main_key: :repeat_type)
45
+ config.register_entity(:user , main_key: :username)
46
+ config.register_entity(:token , main_key: :gmail_history_id)
47
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: k_domain
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.23
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-12-30 00:00:00.000000000 Z
11
+ date: 2022-04-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -74,8 +74,9 @@ executables: []
74
74
  extensions: []
75
75
  extra_rdoc_files: []
76
76
  files:
77
- - ".builders/config/_.rb"
78
- - ".builders/setup.rb"
77
+ - ".builders/boot.rb"
78
+ - ".builders/generators/configuration_generator.rb"
79
+ - ".builders/run.rb"
79
80
  - ".github/workflows/main.yml"
80
81
  - ".gitignore"
81
82
  - ".rspec"
@@ -97,6 +98,9 @@ files:
97
98
  - hooks/update-version
98
99
  - k_domain.gemspec
99
100
  - lib/k_domain.rb
101
+ - lib/k_domain/config/_.rb
102
+ - lib/k_domain/config/config.rb
103
+ - lib/k_domain/config/configuration.rb
100
104
  - lib/k_domain/domain_model/load.rb
101
105
  - lib/k_domain/domain_model/transform.rb
102
106
  - lib/k_domain/domain_model/transform_steps/_.rb
@@ -119,7 +123,6 @@ files:
119
123
  - lib/k_domain/schemas/database.rb
120
124
  - lib/k_domain/schemas/dictionary.rb
121
125
  - lib/k_domain/schemas/domain.rb
122
- - lib/k_domain/schemas/domain/_.rb
123
126
  - lib/k_domain/schemas/domain/erd_file.rb
124
127
  - lib/k_domain/schemas/domain/old/belongs_to.rb
125
128
  - lib/k_domain/schemas/domain/old/column_old.rb
@@ -138,6 +141,7 @@ files:
138
141
  - lib/k_domain/schemas/domain/old/validate.rb
139
142
  - lib/k_domain/schemas/domain/old/validates.rb
140
143
  - lib/k_domain/schemas/domain_model.rb
144
+ - lib/k_domain/schemas/domain_types.rb
141
145
  - lib/k_domain/schemas/investigate.rb
142
146
  - lib/k_domain/schemas/rails_resource.rb
143
147
  - lib/k_domain/schemas/rails_structure.rb
@@ -146,12 +150,11 @@ files:
146
150
  - templates/custom/controller_interceptors.rb
147
151
  - templates/custom/model_interceptors.rb
148
152
  - templates/load_schema.rb
149
- - templates/old_printspeek_schema copy.rb
150
- - templates/old_printspeek_schema.rb
151
153
  - templates/rails/action_controller.rb
152
154
  - templates/rails/active_record.rb
153
155
  - templates/ruby_code_extractor/attach_class_info.rb
154
156
  - templates/ruby_code_extractor/behaviour_accessors.rb
157
+ - templates/sample_config.rb
155
158
  - templates/simple/controller_interceptors.rb
156
159
  homepage: http://appydave.com/gems/k-domain
157
160
  licenses:
@@ -1,3 +0,0 @@
1
- puts '_'
2
-
3
- #require 'config/_initialize'
data/.builders/setup.rb DELETED
@@ -1,30 +0,0 @@
1
- require 'config/_'
2
- require_relative "../lib/k_domain"
3
-
4
- db_schema_ruby_file = '/Users/davidcruwys/dev/printspeak/printspeak-master/db/schema.rb'
5
-
6
- # /Users/davidcruwys/dev/printspeak/printspeak/.builders/config/raw/schema_printspeak.rb
7
- output_folder = File.expand_path('../.output')
8
- db_schema_json_file = File.join(output_folder, 'db_schema.json')
9
- schema_loader_file = File.join(output_folder, 'schema_printspeak.rb')
10
-
11
- transformer = KDomain::RawDbSchema::Transform.new(db_schema_ruby_file)
12
- transformer.template_file = '/Users/davidcruwys/dev/kgems/k_domain/templates/old_printspeek_schema.rb'
13
- puts db_schema_ruby_file
14
- puts transformer.template_file
15
- transformer.call
16
- transformer.write_json(db_schema_json_file)
17
- transformer.write_schema_loader(schema_loader_file)
18
- # transformer.schema
19
-
20
-
21
- # transform = KDomain::DomainModel::Transform.new(
22
- # db_schema: db_schema,
23
- # target_file: target_file,
24
- # target_step_file: target_step_file,
25
- # model_path: model_path,
26
- # controller_path: controller_path,
27
- # route_path: route_path
28
- # )
29
-
30
- puts 'done'