k_domain 0.0.20 → 0.0.27

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.
Files changed (69) hide show
  1. checksums.yaml +4 -4
  2. data/.builders/boot.rb +40 -0
  3. data/.builders/generators/configuration_generator.rb +22 -0
  4. data/.builders/run.rb +16 -0
  5. data/.github/workflows/main.yml +5 -3
  6. data/.gitignore +2 -0
  7. data/.rubocop.yml +9 -5
  8. data/Gemfile +1 -1
  9. data/Guardfile +1 -0
  10. data/README.md +15 -0
  11. data/k_domain.gemspec +1 -1
  12. data/lib/k_domain/config/_.rb +4 -0
  13. data/lib/k_domain/config/config.rb +19 -0
  14. data/lib/k_domain/config/configuration.rb +76 -0
  15. data/lib/k_domain/domain_model/build_rich_models.rb +64 -0
  16. data/lib/k_domain/domain_model/load.rb +44 -1
  17. data/lib/k_domain/domain_model/transform.rb +28 -16
  18. data/lib/k_domain/domain_model/transform_steps/_.rb +7 -5
  19. data/lib/k_domain/domain_model/transform_steps/step.rb +20 -0
  20. data/lib/k_domain/domain_model/transform_steps/{step1_attach_db_schema.rb → step1_db_schema.rb} +2 -1
  21. data/lib/k_domain/domain_model/transform_steps/{step6_attach_dictionary.rb → step20_dictionary.rb} +6 -6
  22. data/lib/k_domain/domain_model/transform_steps/step2_domain_models.rb +123 -0
  23. data/lib/k_domain/domain_model/transform_steps/step4_rails_resource_models.rb +3 -3
  24. data/lib/k_domain/domain_model/transform_steps/step5_rails_resource_routes.rb +36 -0
  25. data/lib/k_domain/domain_model/transform_steps/step6_rails_structure_models.rb +91 -0
  26. data/lib/k_domain/domain_model/transform_steps/step7_rails_structure_controllers.rb +114 -0
  27. data/lib/k_domain/domain_model/transform_steps/step8_domain_columns.rb +99 -0
  28. data/lib/k_domain/queries/_.rb +4 -0
  29. data/lib/k_domain/queries/base_query.rb +13 -0
  30. data/lib/k_domain/queries/domain_model_query.rb +88 -0
  31. data/lib/k_domain/rails_code_extractor/_.rb +5 -0
  32. data/lib/k_domain/rails_code_extractor/extract_controller.rb +61 -0
  33. data/lib/k_domain/rails_code_extractor/extract_model.rb +21 -8
  34. data/lib/k_domain/rails_code_extractor/shim_loader.rb +4 -1
  35. data/lib/k_domain/raw_db_schema/load.rb +1 -1
  36. data/lib/k_domain/raw_db_schema/transform.rb +28 -3
  37. data/lib/k_domain/schemas/_.rb +5 -3
  38. data/lib/k_domain/schemas/database.rb +86 -0
  39. data/lib/k_domain/schemas/domain/erd_file.rb +78 -77
  40. data/lib/k_domain/schemas/domain.rb +153 -0
  41. data/lib/k_domain/schemas/{domain/_.rb → domain_types.rb} +1 -8
  42. data/lib/k_domain/schemas/{domain_model.rb → main_dataset.rb} +4 -4
  43. data/lib/k_domain/schemas/rails_resource.rb +43 -6
  44. data/lib/k_domain/schemas/rails_structure.rb +104 -14
  45. data/lib/k_domain/version.rb +1 -1
  46. data/lib/k_domain.rb +7 -3
  47. data/templates/custom/action_controller.rb +7 -0
  48. data/templates/custom/controller_interceptors.rb +80 -0
  49. data/templates/custom/model_interceptors.rb +95 -0
  50. data/templates/load_schema.rb +7 -0
  51. data/templates/rails/action_controller.rb +301 -0
  52. data/templates/{active_record_shims.rb → rails/active_record.rb} +23 -41
  53. data/templates/ruby_code_extractor/attach_class_info.rb +13 -0
  54. data/templates/ruby_code_extractor/behaviour_accessors.rb +39 -0
  55. data/templates/sample_config.rb +47 -0
  56. data/templates/simple/controller_interceptors.rb +2 -0
  57. metadata +36 -21
  58. data/lib/k_domain/domain_model/transform_steps/step2_attach_models.rb +0 -62
  59. data/lib/k_domain/domain_model/transform_steps/step3_attach_columns.rb +0 -137
  60. data/lib/k_domain/domain_model/transform_steps/step5_rails_models.rb +0 -71
  61. data/lib/k_domain/schemas/database/_.rb +0 -7
  62. data/lib/k_domain/schemas/database/foreign_key.rb +0 -14
  63. data/lib/k_domain/schemas/database/index.rb +0 -14
  64. data/lib/k_domain/schemas/database/schema.rb +0 -31
  65. data/lib/k_domain/schemas/database/table.rb +0 -32
  66. data/lib/k_domain/schemas/domain/domain.rb +0 -11
  67. data/lib/k_domain/schemas/domain/models/column.rb +0 -49
  68. data/lib/k_domain/schemas/domain/models/model.rb +0 -111
  69. data/templates/fake_module_shims.rb +0 -42
@@ -8,26 +8,26 @@ module KDomain
8
8
  attribute :block? , Types::Strict::String
9
9
  end
10
10
 
11
- class BaseType < Dry::Struct
12
- attribute :name? , Types::Strict::String
11
+ class NameOptsType < Dry::Struct
12
+ attribute :name? , Types::Strict::String | Types::Strict::Bool
13
13
  attribute :opts? , Types::Strict::Hash
14
14
  attribute :block? , Types::Strict::String.optional.default(nil)
15
15
  end
16
16
 
17
- class Scope < KDomain::Schemas::RailsStructure::BaseType
17
+ class OptsType < Dry::Struct
18
+ attribute :opts? , Types::Strict::Hash
18
19
  end
19
20
 
20
- class BelongsTo < KDomain::Schemas::RailsStructure::BaseType
21
- end
21
+ # Model Behaviours
22
+ class Scope < KDomain::Schemas::RailsStructure::NameOptsType; end
22
23
 
23
- class HasOne < KDomain::Schemas::RailsStructure::BaseType
24
- end
24
+ class BelongsTo < KDomain::Schemas::RailsStructure::NameOptsType; end
25
25
 
26
- class HasMany < KDomain::Schemas::RailsStructure::BaseType
27
- end
26
+ class HasOne < KDomain::Schemas::RailsStructure::NameOptsType; end
28
27
 
29
- class HasAndBelongsToMany < KDomain::Schemas::RailsStructure::BaseType
30
- end
28
+ class HasMany < KDomain::Schemas::RailsStructure::NameOptsType; end
29
+
30
+ class HasAndBelongsToMany < KDomain::Schemas::RailsStructure::NameOptsType; end
31
31
 
32
32
  class Validate < Dry::Struct
33
33
  attribute :names? , Types::Array.of(Types::Strict::String)
@@ -35,10 +35,10 @@ module KDomain
35
35
  attribute :block? , Types::Strict::String.optional.default(nil)
36
36
  end
37
37
 
38
- class Validates < KDomain::Schemas::RailsStructure::BaseType
38
+ class Validates < KDomain::Schemas::RailsStructure::NameOptsType
39
39
  end
40
40
 
41
- class Behaviours < Dry::Struct
41
+ class ModelBehaviours < Dry::Struct
42
42
  attribute :class_name? , Types::Strict::String
43
43
  attribute :default_scope? , KDomain::Schemas::RailsStructure::DefaultScope
44
44
  attribute :scopes? , Types::Strict::Array.of(KDomain::Schemas::RailsStructure::Scope)
@@ -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
@@ -76,15 +86,95 @@ module KDomain
76
86
  attribute :exist , Types::Strict::Bool
77
87
  attribute :state , Types::Strict::String
78
88
  attribute :code , Types::Strict::String
79
- attribute :behaviours? , KDomain::Schemas::RailsStructure::Behaviours
89
+ attribute :behaviours? , KDomain::Schemas::RailsStructure::ModelBehaviours
80
90
  attribute :functions? , KDomain::Schemas::RailsStructure::Functions
81
91
  end
82
92
 
93
+ # Controller Behaviours
94
+ class AfterAction < KDomain::Schemas::RailsStructure::NameOptsType; end
95
+
96
+ class AroundAction < KDomain::Schemas::RailsStructure::NameOptsType; end
97
+
98
+ class BeforeAction < KDomain::Schemas::RailsStructure::NameOptsType; end
99
+
100
+ # rubocop:disable Naming/ClassAndModuleCamelCase
101
+ class Prepend_beforeAction < KDomain::Schemas::RailsStructure::NameOptsType; end
102
+
103
+ class Skip_beforeAction < KDomain::Schemas::RailsStructure::NameOptsType; end
104
+ # rubocop:enable Naming/ClassAndModuleCamelCase
105
+
106
+ class BeforeFilter < KDomain::Schemas::RailsStructure::NameOptsType; end
107
+
108
+ class SkipBeforeFilter < KDomain::Schemas::RailsStructure::NameOptsType; end
109
+
110
+ class Layout < KDomain::Schemas::RailsStructure::NameOptsType; end
111
+
112
+ class HttpBasicAuthenticateWith < KDomain::Schemas::RailsStructure::OptsType; end
113
+
114
+ class ProtectFromForgery < KDomain::Schemas::RailsStructure::OptsType; end
115
+
116
+ class RescueFrom < Dry::Struct
117
+ attribute :type , Types::Strict::String
118
+ end
119
+
120
+ class HelperMethod < Dry::Struct
121
+ attribute :names , Types::Strict::Array.of(Types::Strict::String)
122
+ end
123
+
124
+ class Helper < Dry::Struct
125
+ attribute :name , Types::Strict::String
126
+ end
127
+
128
+ class ControllerBehaviours < Dry::Struct
129
+ attribute :class_name? , Types::Strict::String
130
+ attribute :after_action? , Types::Strict::Array.of(KDomain::Schemas::RailsStructure::AfterAction)
131
+ attribute :around_action? , Types::Strict::Array.of(KDomain::Schemas::RailsStructure::AroundAction)
132
+ attribute :before_action? , Types::Strict::Array.of(KDomain::Schemas::RailsStructure::BeforeAction)
133
+ attribute :prepend_before_action? , Types::Strict::Array.of(KDomain::Schemas::RailsStructure::Prepend_beforeAction)
134
+ attribute :skip_before_action? , Types::Strict::Array.of(KDomain::Schemas::RailsStructure::Skip_beforeAction)
135
+ attribute :before_filter? , Types::Strict::Array.of(KDomain::Schemas::RailsStructure::BeforeFilter)
136
+ attribute :skip_before_filter? , Types::Strict::Array.of(KDomain::Schemas::RailsStructure::SkipBeforeFilter)
137
+ attribute :layout? , KDomain::Schemas::RailsStructure::Layout
138
+ attribute :http_basic_authenticate_with? , KDomain::Schemas::RailsStructure::OptsType
139
+ attribute :protect_from_forgery? , KDomain::Schemas::RailsStructure::OptsType
140
+
141
+ attribute :rescue_from? , Types::Strict::Array.of(KDomain::Schemas::RailsStructure::RescueFrom)
142
+ attribute :helper_method? , Types::Strict::Array.of(KDomain::Schemas::RailsStructure::HelperMethod)
143
+ attribute :helper? , Types::Strict::Array.of(KDomain::Schemas::RailsStructure::Helper)
144
+ end
145
+
146
+ class ControllerActions < Dry::Struct
147
+ attribute :route_name? , Types::Strict::String
148
+ attribute :action? , Types::String.optional
149
+ attribute :uri_path? , Types::String
150
+ attribute :mime_match? , Types::String
151
+ attribute :verbs? , Types.Array(Types::Verb)
152
+ end
153
+
83
154
  class Controller < Dry::Struct
155
+ attribute :name , Types::String
156
+ attribute :path , Types::String
157
+ attribute :namespace , Types::String
158
+ attribute :file , Types::String
159
+ attribute :exist , Types::Bool
160
+ attribute :full_file , Types::String
161
+ attribute :behaviours? , KDomain::Schemas::RailsStructure::ControllerBehaviours
162
+ attribute :functions? , KDomain::Schemas::RailsStructure::Functions
163
+ attribute :actions? , Types::Strict::Array.of(KDomain::Schemas::RailsStructure::ControllerActions)
84
164
  end
85
165
 
86
166
  attribute :models , Types::Strict::Array.of(KDomain::Schemas::RailsStructure::Model)
87
167
  attribute :controllers , Types::Strict::Array.of(KDomain::Schemas::RailsStructure::Controller)
168
+
169
+ def find_controller(path)
170
+ path = path.to_s
171
+ controllers.find { |controller| controller.path.to_s == path }
172
+ end
173
+
174
+ def find_model(name)
175
+ name = name.to_s
176
+ models.find { |model| model.model_name.to_s == name }
177
+ end
88
178
  end
89
179
  end
90
180
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module KDomain
4
- VERSION = '0.0.20'
4
+ VERSION = '0.0.27'
5
5
  end
data/lib/k_domain.rb CHANGED
@@ -5,14 +5,16 @@ 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'
11
12
  require 'k_domain/domain_model/transform'
12
13
  require 'k_domain/domain_model/transform_steps/_'
13
14
  require 'k_domain/domain_model/load'
14
- require 'k_domain/rails_code_extractor/shim_loader'
15
- require 'k_domain/rails_code_extractor/extract_model'
15
+ require 'k_domain/domain_model/build_rich_models'
16
+ require 'k_domain/rails_code_extractor/_'
17
+ require 'k_domain/queries/_'
16
18
 
17
19
  # # This is useful if you want to initialize structures via Hash
18
20
  # class SymbolizeStruct < Dry::Struct
@@ -20,6 +22,8 @@ require 'k_domain/rails_code_extractor/extract_model'
20
22
  # end
21
23
 
22
24
  module KDomain
25
+ extend KDomain::Config
26
+
23
27
  # raise KDomain::Error, 'Sample message'
24
28
  class Error < StandardError; end
25
29
 
@@ -36,7 +40,7 @@ module KDomain
36
40
  # Your code goes here...
37
41
  end
38
42
 
39
- if ENV['KLUE_DEBUG']&.to_s&.downcase == 'true'
43
+ if ENV.fetch('KLUE_DEBUG', 'false').downcase == 'true'
40
44
  namespace = 'KDomain::Version'
41
45
  file_path = $LOADED_FEATURES.find { |f| f.include?('k_domain/version') }
42
46
  version = KDomain::VERSION.ljust(9)
@@ -0,0 +1,7 @@
1
+ module ActionController
2
+ class Base
3
+ def self.require(require)
4
+ add(:require, require)
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,80 @@
1
+ class Rails
2
+ def self.env; end
3
+
4
+ def self.application
5
+ OpenStruct.new(
6
+ secrets: OpenStruct.new(
7
+ credentials_secret_key: Base64.encode64('ABC'),
8
+ aws_secret_access_key: Base64.encode64('ABC')
9
+ )
10
+ )
11
+ end
12
+ end
13
+ class ApplicationController < ActionController::Base
14
+ def self.require(*_p, **_o); end
15
+ end
16
+
17
+ module Admin
18
+ class BaseController < ActionController::Base
19
+ end
20
+ end
21
+ module Api
22
+ module V1
23
+ class BaseController < ActionController::Base
24
+ end
25
+ end
26
+ end
27
+
28
+ module Enterprises
29
+ class BaseController < ActionController::Base
30
+ end
31
+ end
32
+
33
+ module Portal
34
+ class BaseController < ApplicationController
35
+ end
36
+ end
37
+ module ActiveRecord
38
+ class RecordNotFound
39
+ end
40
+ end
41
+ class RegionConfig < ActiveRecord::Base
42
+ def self.require_value(*_p, **_o, &block)
43
+ return 'ABC'
44
+ end
45
+ def self.get_value
46
+ return 'ABC'
47
+ end
48
+ end
49
+ module Aws
50
+ class Credentials
51
+ def initialize(*_p, **_o, &block); end
52
+ end
53
+ module S3
54
+ class Client
55
+ def initialize(*_p, **_o, &block); end
56
+ end
57
+ end
58
+ end
59
+
60
+ module Devise
61
+ class SessionsController < ActionController::Base
62
+ end
63
+ class Mapping
64
+ def self.find_scope!(*_p, **_o); end
65
+ end
66
+ end
67
+
68
+ module Respondable; end
69
+ module ContactUpdateable; end
70
+ module SalesRepUpdateable; end
71
+ module MIME; end
72
+ module MaterialIconsHelper; end
73
+ module LocationUpdateable; end
74
+ module WantedByUpdateable; end
75
+ module FollowUpUpdateable; end
76
+ module EstimateArchiveUpdateable; end
77
+ module ContextContactUpdateable; end
78
+ module ProofDateUpdateable; end
79
+ module PoUpdateable; end
80
+ module SalesRepUpdateable; end
@@ -0,0 +1,95 @@
1
+ class Rails
2
+ def self.env; end
3
+
4
+ def self.application
5
+ OpenStruct.new(secrets: OpenStruct.new(credentials_secret_key: Base64.encode64('ABC')))
6
+ end
7
+ end
8
+
9
+ module ActsAsCommentable
10
+ module Comment
11
+ end
12
+ end
13
+
14
+ module Scopes
15
+ module CompanyScopes
16
+ end
17
+ end
18
+
19
+ class Thread
20
+ def initialize(*_p, **_o, &block); end
21
+ end
22
+
23
+ class ApplicationRecord < ActiveRecord::Base
24
+ end
25
+
26
+ class Email < ActiveRecord::Base
27
+ def self.ses_send(*_p, **_o); end
28
+ end
29
+
30
+ module Emails
31
+ class Task
32
+ def new_task(*_p, **_o); end
33
+ end
34
+ class Salesrep
35
+ def change_sales_rep(*_p, **_o); end
36
+ end
37
+ end
38
+
39
+ module EstimateConvertable; end
40
+ module ApiLoggable; end
41
+ module Excludable; end
42
+ module Bookmarkable; end
43
+ module Categorizable; end
44
+ module PgSearch
45
+ module Model
46
+ end
47
+ end
48
+ module Excludable; end
49
+ module JsonbStore
50
+ def self.included(klass)
51
+ klass.extend(ClassMethods)
52
+ end
53
+
54
+ module ClassMethods
55
+ def jsonb_store(*_p, **_o); end
56
+ end
57
+ end
58
+ module ActionView
59
+ module Helpers
60
+ module NumberHelper
61
+ end
62
+ end
63
+ end
64
+ module PrintSpeak
65
+ class Application
66
+ def self.google_oath_secret_key
67
+ 'ABC'
68
+ end
69
+ end
70
+ end
71
+ class RegionConfig < ActiveRecord::Base
72
+ def self.require_value(*_p, **_o, &block)
73
+ 'ABC'
74
+ end
75
+ def self.get_value
76
+ return 'ABC'
77
+ end
78
+ end
79
+ module RailsUpgrade
80
+ def rails4?
81
+ true
82
+ end
83
+
84
+ def rails5?
85
+ true
86
+ end
87
+
88
+ def rails6?
89
+ true
90
+ end
91
+
92
+ def belongs_to_required
93
+ {}
94
+ end
95
+ end
@@ -1,6 +1,7 @@
1
1
  class LoadSchema
2
2
  attr_reader :schema
3
3
 
4
+ # XMEN
4
5
  def initialize
5
6
  @unique_keys = {}
6
7
  @current_table = nil
@@ -9,6 +10,7 @@ class LoadSchema
9
10
  tables: [],
10
11
  foreign_keys: [],
11
12
  indexes: [],
13
+ views: [],
12
14
  meta: {
13
15
  rails: @rails_version,
14
16
  db_info: {
@@ -131,6 +133,11 @@ class LoadSchema
131
133
  add_index(name, fields, **opts)
132
134
  end
133
135
 
136
+ def create_view(name, **opts)
137
+ row = { name: name, **opts }
138
+ schema[:views] << row
139
+ add_unique_keys(row.keys, type: :views)
140
+ end
134
141
 
135
142
  def add_foreign_key(left_table, right_table, **opts)
136
143
  # puts "add_foreign_key(#{left_table}, #{right_table})"