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.
Files changed (64) 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/.gitignore +1 -0
  6. data/.rubocop.yml +1 -2
  7. data/Guardfile +1 -0
  8. data/README.md +15 -0
  9. data/STORIES.md +35 -6
  10. data/lib/k_domain/config/_.rb +4 -0
  11. data/lib/k_domain/config/config.rb +19 -0
  12. data/lib/k_domain/config/configuration.rb +76 -0
  13. data/lib/k_domain/domain_model/load.rb +41 -0
  14. data/lib/k_domain/domain_model/transform.rb +27 -55
  15. data/lib/k_domain/domain_model/transform_steps/_.rb +8 -7
  16. data/lib/k_domain/domain_model/transform_steps/step.rb +27 -1
  17. data/lib/k_domain/domain_model/transform_steps/{step1_attach_db_schema.rb → step1_db_schema.rb} +2 -1
  18. data/lib/k_domain/domain_model/transform_steps/{step5_attach_dictionary.rb → step20_dictionary.rb} +7 -4
  19. data/lib/k_domain/domain_model/transform_steps/step2_domain_models.rb +123 -0
  20. data/lib/k_domain/domain_model/transform_steps/{step8_rails_resource_models.rb → step4_rails_resource_models.rb} +4 -4
  21. data/lib/k_domain/domain_model/transform_steps/step5_rails_resource_routes.rb +36 -0
  22. data/lib/k_domain/domain_model/transform_steps/step6_rails_structure_models.rb +90 -0
  23. data/lib/k_domain/domain_model/transform_steps/step7_rails_structure_controllers.rb +111 -0
  24. data/lib/k_domain/domain_model/transform_steps/step8_domain_columns.rb +99 -0
  25. data/lib/k_domain/rails_code_extractor/_.rb +5 -0
  26. data/lib/k_domain/rails_code_extractor/extract_controller.rb +61 -0
  27. data/lib/k_domain/rails_code_extractor/extract_model.rb +56 -6
  28. data/lib/k_domain/rails_code_extractor/{load_shim.rb → shim_loader.rb} +3 -5
  29. data/lib/k_domain/raw_db_schema/load.rb +1 -1
  30. data/lib/k_domain/raw_db_schema/transform.rb +28 -3
  31. data/lib/k_domain/schemas/_.rb +6 -3
  32. data/lib/k_domain/schemas/database.rb +86 -0
  33. data/lib/k_domain/schemas/domain/erd_file.rb +78 -77
  34. data/lib/k_domain/schemas/domain.rb +149 -0
  35. data/lib/k_domain/schemas/domain_model.rb +6 -5
  36. data/lib/k_domain/schemas/{domain/_.rb → domain_types.rb} +1 -8
  37. data/lib/k_domain/schemas/rails_resource.rb +43 -6
  38. data/lib/k_domain/schemas/rails_structure.rb +182 -0
  39. data/lib/k_domain/version.rb +1 -1
  40. data/lib/k_domain.rb +4 -2
  41. data/templates/custom/action_controller.rb +36 -0
  42. data/templates/custom/controller_interceptors.rb +78 -0
  43. data/templates/custom/model_interceptors.rb +71 -0
  44. data/templates/load_schema.rb +7 -0
  45. data/templates/rails/action_controller.rb +301 -0
  46. data/templates/{active_record_shims.rb → rails/active_record.rb} +42 -49
  47. data/templates/ruby_code_extractor/attach_class_info.rb +13 -0
  48. data/templates/ruby_code_extractor/behaviour_accessors.rb +39 -0
  49. data/templates/sample_config.rb +47 -0
  50. data/templates/simple/controller_interceptors.rb +2 -0
  51. metadata +33 -22
  52. data/lib/k_domain/domain_model/transform_steps/step2_attach_models.rb +0 -62
  53. data/lib/k_domain/domain_model/transform_steps/step3_attach_columns.rb +0 -137
  54. data/lib/k_domain/domain_model/transform_steps/step4_attach_erd_files.rb +0 -457
  55. data/lib/k_domain/domain_model/transform_steps/step9_rails_structure_models.rb +0 -33
  56. data/lib/k_domain/schemas/database/_.rb +0 -7
  57. data/lib/k_domain/schemas/database/foreign_key.rb +0 -14
  58. data/lib/k_domain/schemas/database/index.rb +0 -14
  59. data/lib/k_domain/schemas/database/schema.rb +0 -31
  60. data/lib/k_domain/schemas/database/table.rb +0 -32
  61. data/lib/k_domain/schemas/domain/domain.rb +0 -11
  62. data/lib/k_domain/schemas/domain/models/column.rb +0 -49
  63. data/lib/k_domain/schemas/domain/models/model.rb +0 -111
  64. data/templates/fake_module_shims.rb +0 -42
@@ -0,0 +1,182 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Domain class holds a dictionary entry
4
+ module KDomain
5
+ module Schemas
6
+ class RailsStructure < Dry::Struct
7
+ class DefaultScope < Dry::Struct
8
+ attribute :block? , Types::Strict::String
9
+ end
10
+
11
+ class NameOptsType < Dry::Struct
12
+ attribute :name? , Types::Strict::String | Types::Strict::Bool
13
+ attribute :opts? , Types::Strict::Hash
14
+ attribute :block? , Types::Strict::String.optional.default(nil)
15
+ end
16
+
17
+ class OptsType < Dry::Struct
18
+ attribute :opts? , Types::Strict::Hash
19
+ end
20
+
21
+ # Model Behaviours
22
+ class Scope < KDomain::Schemas::RailsStructure::NameOptsType; end
23
+
24
+ class BelongsTo < KDomain::Schemas::RailsStructure::NameOptsType; end
25
+
26
+ class HasOne < KDomain::Schemas::RailsStructure::NameOptsType; end
27
+
28
+ class HasMany < KDomain::Schemas::RailsStructure::NameOptsType; end
29
+
30
+ class HasAndBelongsToMany < KDomain::Schemas::RailsStructure::NameOptsType; end
31
+
32
+ class Validate < Dry::Struct
33
+ attribute :names? , Types::Array.of(Types::Strict::String)
34
+ attribute :opts? , Types::Strict::Hash
35
+ attribute :block? , Types::Strict::String.optional.default(nil)
36
+ end
37
+
38
+ class Validates < KDomain::Schemas::RailsStructure::NameOptsType
39
+ end
40
+
41
+ class ModelBehaviours < Dry::Struct
42
+ attribute :class_name? , Types::Strict::String
43
+ attribute :default_scope? , KDomain::Schemas::RailsStructure::DefaultScope
44
+ attribute :scopes? , Types::Strict::Array.of(KDomain::Schemas::RailsStructure::Scope)
45
+ attribute :belongs_to? , Types::Strict::Array.of(KDomain::Schemas::RailsStructure::BelongsTo)
46
+ attribute :has_one? , Types::Strict::Array.of(KDomain::Schemas::RailsStructure::HasOne)
47
+ attribute :has_many? , Types::Strict::Array.of(KDomain::Schemas::RailsStructure::HasMany)
48
+ attribute :has_and_belongs_to_many? , Types::Strict::Array.of(KDomain::Schemas::RailsStructure::HasAndBelongsToMany)
49
+ attribute :validate? , Types::Strict::Array.of(KDomain::Schemas::RailsStructure::Validate)
50
+ attribute :validates? , Types::Strict::Array.of(KDomain::Schemas::RailsStructure::Validates)
51
+ attribute :attr_accessor? , Types::Array.of(Types::Strict::String)
52
+ attribute :attr_reader? , Types::Array.of(Types::Strict::String)
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
64
+ end
65
+
66
+ class Method < Dry::Struct
67
+ attribute :name , Types::Strict::String
68
+ end
69
+
70
+ class Functions < Dry::Struct
71
+ attribute :class_name? , Types::Strict::String
72
+ attribute :module_name? , Types::Strict::String
73
+ attribute :class_full_name? , Types::Strict::String
74
+ attribute :attr_accessor? , Types::Array.of(Types::Strict::String)
75
+ attribute :attr_reader? , Types::Array.of(Types::Strict::String)
76
+ attribute :attr_writer? , Types::Array.of(Types::Strict::String)
77
+ attribute :klass? , Types::Strict::Array.of(KDomain::Schemas::RailsStructure::Method)
78
+ attribute :instance_public? , Types::Strict::Array.of(KDomain::Schemas::RailsStructure::Method)
79
+ attribute :instance_private? , Types::Strict::Array.of(KDomain::Schemas::RailsStructure::Method)
80
+ end
81
+
82
+ class Model < Dry::Struct
83
+ attribute :model_name , Types::Strict::String
84
+ attribute :table_name , Types::Strict::String
85
+ attribute :file , Types::Strict::String
86
+ attribute :exist , Types::Strict::Bool
87
+ attribute :state , Types::Strict::String
88
+ attribute :code , Types::Strict::String
89
+ attribute :behaviours? , KDomain::Schemas::RailsStructure::ModelBehaviours
90
+ attribute :functions? , KDomain::Schemas::RailsStructure::Functions
91
+ end
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
+
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)
164
+ end
165
+
166
+ attribute :models , Types::Strict::Array.of(KDomain::Schemas::RailsStructure::Model)
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
178
+ end
179
+ end
180
+ end
181
+
182
+ # attribute :domain , KDomain::DomainModel::Domain
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module KDomain
4
- VERSION = '0.0.16'
4
+ VERSION = '0.0.26'
5
5
  end
data/lib/k_domain.rb CHANGED
@@ -5,14 +5,14 @@ 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/load_shim'
15
- # require 'k_domain/rails_code_extractor/extract_model'
15
+ require 'k_domain/rails_code_extractor/_'
16
16
 
17
17
  # # This is useful if you want to initialize structures via Hash
18
18
  # class SymbolizeStruct < Dry::Struct
@@ -20,6 +20,8 @@ require 'k_domain/rails_code_extractor/load_shim'
20
20
  # end
21
21
 
22
22
  module KDomain
23
+ extend KDomain::Config
24
+
23
25
  # raise KDomain::Error, 'Sample message'
24
26
  class Error < StandardError; end
25
27
 
@@ -0,0 +1,36 @@
1
+ module ActionController
2
+ class Base
3
+ def self.require(require)
4
+ add(:require, require)
5
+ end
6
+ # def self.rescue_from(type)#, &block)
7
+ # # block_source = nil
8
+ # # block_source = lambda_source(block, 'default_scope') if block_given?
9
+
10
+ # add(:rescue_from, {
11
+ # type: type#,
12
+ # # block: block_source
13
+ # })
14
+ # end
15
+ # def self.helper_method(*names)
16
+ # add(:helper_method, {
17
+ # names: names
18
+ # })
19
+ # end
20
+ # def self.helper(name)
21
+ # add(:helper, {
22
+ # name: name
23
+ # })
24
+ # end
25
+ # def self.http_basic_authenticate_with(**opts)
26
+ # add(:http_basic_authenticate_with, {
27
+ # opts: opts
28
+ # })
29
+ # end
30
+ # def self.protect_from_forgery(**opts)
31
+ # add(:protect_from_forgery, {
32
+ # opts: opts
33
+ # })
34
+ # end
35
+ end
36
+ end
@@ -0,0 +1,78 @@
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 RegionConfig
14
+ def self.require_value(*_p, **_o, &block); end
15
+ end
16
+
17
+ class ApplicationController < ActionController::Base
18
+ end
19
+
20
+ module Admin
21
+ class BaseController < ActionController::Base
22
+ end
23
+ end
24
+
25
+ module Api
26
+ module V1
27
+ class BaseController < ActionController::Base
28
+ end
29
+ end
30
+ end
31
+
32
+ module Enterprises
33
+ class BaseController < ActionController::Base
34
+ end
35
+ end
36
+
37
+ module Portal
38
+ class BaseController < ApplicationController
39
+ end
40
+ end
41
+
42
+ module ActiveRecord
43
+ class RecordNotFound
44
+ end
45
+ end
46
+
47
+ module Aws
48
+ class Credentials
49
+ def initialize(*_p, **_o, &block); end
50
+ end
51
+ module S3
52
+ class Client
53
+ def initialize(*_p, **_o, &block); end
54
+ end
55
+ end
56
+ end
57
+
58
+ module Devise
59
+ class SessionsController < ActionController::Base
60
+ end
61
+ class Mapping
62
+ def self.find_scope!(*_p, **_o); end
63
+ end
64
+ end
65
+
66
+ module Respondable; end
67
+ module ContactUpdateable; end
68
+ module SalesRepUpdateable; end
69
+ module MIME; end
70
+ module MaterialIconsHelper; end
71
+ module LocationUpdateable; end
72
+ module WantedByUpdateable; end
73
+ module FollowUpUpdateable; end
74
+ module EstimateArchiveUpdateable; end
75
+ module ContextContactUpdateable; end
76
+ module ProofDateUpdateable; end
77
+ module PoUpdateable; end
78
+ module SalesRepUpdateable; end
@@ -0,0 +1,71 @@
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; end
45
+ module Excludable; end
46
+ module JsonbStore; end
47
+
48
+ module ActionView
49
+ module Helpers
50
+ module NumberHelper
51
+ end
52
+ end
53
+ end
54
+
55
+ module RailsUpgrade
56
+ def rails4?
57
+ true
58
+ end
59
+
60
+ def rails5?
61
+ true
62
+ end
63
+
64
+ def rails6?
65
+ true
66
+ end
67
+
68
+ def belongs_to_required
69
+ {}
70
+ end
71
+ 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})"