k_domain 0.0.16 → 0.0.26

Sign up to get free protection for your applications and to get access to all the features.
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})"