k_domain 0.0.15 → 0.0.16

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a50df0535cc32830a2035c2d2ddd328454efcef8aa97199485ae4db1dc7d64e7
4
- data.tar.gz: 34824c4725142b76154a256d6466e7c83e8fc684178f6cb589552ea508d49dfa
3
+ metadata.gz: 98e1d3eb1435f17ad91084519399234f0adc41e399d1350071147f0e58f694c6
4
+ data.tar.gz: 2797a698e87169816a6b612239b1c22b8d2fd0db2fd6df2fc8e078fbf8828e69
5
5
  SHA512:
6
- metadata.gz: 404ae56ada4ee46644d0c562b97dc86e9ce64164e25d1f66119399c4a053e41c183ff5c28184e5de493c76218bfb7f71ff548df02f9b374cb5d57b38c4ceaf3c
7
- data.tar.gz: 27c472902e4ca2ea1dfb4803489cf5719356d02a2e64bfcee27ac0179bec5d42bb8c684cbf7196e77dd26a737f8c427bf4aa6809a3a7b930d19acaf269ab9247
6
+ metadata.gz: 1e6cd0d3fa8354f83b5910dc961212acd0ae149b0b90c31338bf992b4f64500ae4fb05f63c605bf439d818bed8f6f4806939994c0cf8ee6fbd0c0a51d232b02f
7
+ data.tar.gz: 28d42c273b6fdae5db9b32e4cfcd4c1826e42f929efbc9713941b16bc4240cff22eed7e3260aec195beff43ae3ec20bf136bb6526988eccbd5f475c18ec2566a
data/.rubocop.yml CHANGED
@@ -8,7 +8,9 @@ AllCops:
8
8
  - "_/**/*"
9
9
  - "spec/sample_input/**/*"
10
10
  - "spec/sample_output/**/*"
11
- - "lib/k_domain/raw_db_schema/template.rb"
11
+ - "templates/**/*"
12
+ - "lib/k_domain/schemas/domain/old/**/*"
13
+ - "spec/k_domain/ruby_loader/**/*"
12
14
 
13
15
  Metrics/PerceivedComplexity:
14
16
  Exclude:
data/Gemfile CHANGED
@@ -28,8 +28,8 @@ end
28
28
  if ENV['KLUE_LOCAL_GEMS']&.to_s&.downcase == 'true'
29
29
  group :development, :test do
30
30
  puts 'Using Local GEMs'
31
- gem 'peeky' , path: '../peeky'
32
31
  gem 'k_log' , path: '../k_log'
33
32
  gem 'k_util' , path: '../k_util'
33
+ gem 'peeky' , path: '../peeky'
34
34
  end
35
35
  end
data/k_domain.gemspec CHANGED
@@ -33,7 +33,7 @@ Gem::Specification.new do |spec|
33
33
  f.match(%r{^(test|spec|features)/})
34
34
  end
35
35
  end
36
-
36
+
37
37
  spec.bindir = 'exe'
38
38
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
39
39
  spec.require_paths = ['lib']
@@ -20,6 +20,7 @@ module KDomain
20
20
  @erd_path = erd_path
21
21
  end
22
22
 
23
+ # rubocop:disable Metrics/AbcSize,Metrics/CyclomaticComplexity,Metrics/PerceivedComplexity
23
24
  def call
24
25
  valid = true
25
26
  valid &&= step1
@@ -27,7 +28,8 @@ module KDomain
27
28
  valid &&= step3
28
29
  valid &&= step4
29
30
  valid &&= step5
30
- valid &&= step8 # NOT SURE WHERE THIS BELONGS
31
+ valid &&= step8
32
+ valid &&= step9
31
33
 
32
34
  raise 'DomainModal transform failed' unless valid
33
35
 
@@ -35,6 +37,7 @@ module KDomain
35
37
 
36
38
  nil
37
39
  end
40
+ # rubocop:enable Metrics/AbcSize,Metrics/CyclomaticComplexity,Metrics/PerceivedComplexity
38
41
 
39
42
  def step1
40
43
  Step1AttachDbSchema.run(domain_data, db_schema: db_schema)
@@ -62,8 +65,13 @@ module KDomain
62
65
  end
63
66
 
64
67
  def step8
65
- Step8LocateRailsModels.run(domain_data, erd_path: erd_path)
66
- write(step: '8-rails-files-models')
68
+ Step8RailsResourceModels.run(domain_data, erd_path: erd_path)
69
+ write(step: '8-rails-resource-models')
70
+ end
71
+
72
+ def step9
73
+ Step9RailsStructureModels.run(domain_data, erd_path: erd_path)
74
+ write(step: '8-rails-structure-models')
67
75
  end
68
76
 
69
77
  def write(step: nil)
@@ -76,20 +84,21 @@ module KDomain
76
84
  File.write(file, JSON.pretty_generate(domain_data))
77
85
  end
78
86
 
87
+ # rubocop:disable Metrics/MethodLength
79
88
  def domain_data
80
89
  # The initial domain model structure is created here, but populated during the workflows.
81
90
  @domain_data ||= {
82
91
  domain: {
83
92
  models: [],
84
- erd_files: [],
93
+ erd_files: []
85
94
  },
86
- rails: {
95
+ rails_resource: {
87
96
  models: [],
88
- controllers: [],
97
+ controllers: []
89
98
  },
90
- rails_resource: {
99
+ rails_structure: {
91
100
  models: [],
92
- controllers: [],
101
+ controllers: []
93
102
  },
94
103
  dictionary: {
95
104
  items: []
@@ -105,6 +114,8 @@ module KDomain
105
114
  }
106
115
  }
107
116
  end
117
+
118
+ # rubocop:enable Metrics/MethodLength
108
119
  end
109
120
  end
110
121
  end
@@ -7,4 +7,5 @@ require_relative './step2_attach_models'
7
7
  require_relative './step3_attach_columns'
8
8
  require_relative './step4_attach_erd_files'
9
9
  require_relative './step5_attach_dictionary'
10
- require_relative './step8_locate_rails_models'
10
+ require_relative './step8_rails_resource_models'
11
+ require_relative './step9_rails_structure_models'
@@ -43,7 +43,7 @@ module KDomain
43
43
  domain[:models]
44
44
  end
45
45
 
46
- # Rails File Accessor/Helpers
46
+ # Rails Resource File Accessor/Helpers
47
47
  def rails_resource
48
48
  guard('rails_resource is missing') if domain_data[:rails_resource].nil?
49
49
 
@@ -62,6 +62,25 @@ module KDomain
62
62
  rails_resource[:controllers]
63
63
  end
64
64
 
65
+ # Rails Structure File Accessor/Helpers
66
+ def rails_structure
67
+ guard('rails_structure is missing') if domain_data[:rails_structure].nil?
68
+
69
+ domain_data[:rails_structure]
70
+ end
71
+
72
+ def rails_structure_models
73
+ rails_structure[:models]
74
+ end
75
+
76
+ def rails_structure_models=(value)
77
+ rails_structure[:models] = value
78
+ end
79
+
80
+ def rails_structure_controllers
81
+ rails_structure[:controllers]
82
+ end
83
+
65
84
  # Database Accessor/Helpers
66
85
  def database=(value)
67
86
  domain_data[:database] = value
@@ -24,7 +24,8 @@ class Step4AttachErdFiles < KDomain::DomainModel::Step
24
24
  end
25
25
 
26
26
  def load_dsl(model)
27
- print '.'
27
+ # this should be a configuration
28
+ # print '.'
28
29
 
29
30
  reset_dsl
30
31
 
@@ -27,7 +27,8 @@ class Step5AttachDictionary < KDomain::DomainModel::Step
27
27
  entry[:model_count] = entry[:model_count] + 1
28
28
 
29
29
  unless entry[:types].include?(column_type)
30
- log.warn("#{model_name} has a type mismatch for column name: #{column_name}")
30
+ # ADD to investigate
31
+ # log.warn("#{model_name} has a type mismatch for column name: #{column_name}")
31
32
  entry[:types] << column_type
32
33
  entry[:type_count] = entry[:type_count] + 1
33
34
  end
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  # Locate rails model files
4
- class Step8LocateRailsModels < KDomain::DomainModel::Step
4
+ class Step8RailsResourceModels < KDomain::DomainModel::Step
5
5
  attr_accessor :ruby_code
6
6
 
7
7
  def call
@@ -0,0 +1,33 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Locate rails model files
4
+ class Step9RailsStructureModels < KDomain::DomainModel::Step
5
+ attr_accessor :ruby_code
6
+
7
+ def call
8
+ raise 'ERD path not supplied' if opts[:erd_path].nil?
9
+
10
+ self.rails_structure_models = rails_resource_models.map do |resource|
11
+ process_resource(OpenStruct.new(resource))
12
+ end
13
+ end
14
+
15
+ private
16
+
17
+ def process_resource(resource)
18
+ erd_path = opts[:erd_path]
19
+ puts erd_path
20
+ @model = {
21
+ model_name: resource.model_name,
22
+ table_name: resource.table_name,
23
+ file: resource.file,
24
+ exist: resource.exist,
25
+ state: resource.state,
26
+ code: resource.exist ? File.read(resource.file) : '',
27
+ behaviours: {},
28
+ functions: {}
29
+ }
30
+
31
+ @model
32
+ end
33
+ end
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Takes a Rails Model and extracts DSL behaviours and custom functions (instance, class and private methods)
4
+ module KDomain
5
+ module RailsCodeExtractor
6
+ class ExtractModel
7
+ include KLog::Logging
8
+
9
+ attr_reader :source_file
10
+ attr_reader :data
11
+
12
+ def initialize(source_file)
13
+ @source_file = source_file
14
+ end
15
+
16
+ def call
17
+ log.kv 'source_file', source_file
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,32 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Code extraction requires shims to be loaded before extraction
4
+ #
5
+ # This shims server two purposes
6
+ #
7
+ # 1. Inject data capture methods calls that intercept DSL macros so that data can be extracted
8
+ # 2. Inject fake module/classes that would otherwise break code loading with various exceptions
9
+ module KDomain
10
+ module RailsCodeExtractor
11
+ class LoadShim
12
+ include KLog::Logging
13
+
14
+ attr_reader :shim_files
15
+
16
+ attr_reader :dsl_shim_file
17
+ attr_reader :fake_module_file
18
+
19
+ def initialize
20
+ @shim_files = []
21
+ end
22
+
23
+ def call
24
+ log.kv 'preload', preload
25
+ end
26
+
27
+ def register(name, file)
28
+ @shim_files << { name: name, file: file, exist: File.exist?(file) }
29
+ end
30
+ end
31
+ end
32
+ end
@@ -33,9 +33,9 @@ module KDomain
33
33
  lines = content.lines.map { |line| " #{line}" }.join
34
34
 
35
35
  @schema_loader = File
36
- .read(template_file)
37
- .gsub('{{source_file}}', source_file)
38
- .gsub('{{rails_schema}}', lines)
36
+ .read(template_file)
37
+ .gsub('{{source_file}}', source_file)
38
+ .gsub('{{rails_schema}}', lines)
39
39
  end
40
40
 
41
41
  # rename to target_ruby
@@ -68,13 +68,13 @@ module KDomain
68
68
  return
69
69
  end
70
70
 
71
- eval(schema_loader)#, __FILE__, __LINE__)
71
+ eval(schema_loader) # , __FILE__, __LINE__)
72
72
 
73
73
  loader = LoadSchema.new
74
74
  loader.load_schema
75
- return loader.schema
76
- rescue => ex
77
- log.exception(ex)
75
+ loader.schema
76
+ rescue StandardError => e
77
+ log.exception(e)
78
78
  end
79
79
  # rubocop:enable Security/Eval
80
80
  end
@@ -15,7 +15,7 @@ module KDomain
15
15
  attribute :key , Types::Strict::String
16
16
  attribute :keys , Types::Strict::Array
17
17
  end
18
-
18
+
19
19
  class Meta < Dry::Struct
20
20
  attribute :rails , Types::Strict::Integer
21
21
  attribute :db_info , KDomain::Database::Schema::DbInfo
@@ -19,7 +19,7 @@ module KDomain
19
19
  attribute :null? , Types::Strict::Bool.optional.default(nil)
20
20
  attribute :limit? , Types::Strict::Integer.optional.default(nil)
21
21
  end
22
-
22
+
23
23
  attribute :name , Types::Strict::String
24
24
  attribute :primary_key , Types::Strict::String.optional.default(nil)
25
25
  attribute :primary_key_type , Types::Strict::String.optional.default(nil)
@@ -3,6 +3,7 @@
3
3
  # Domain class holds a list of the entities
4
4
  module KDomain
5
5
  module DomainModel
6
+ # rubocop:disable Metrics/BlockLength
6
7
  class ErdFile < Dry::Struct
7
8
  attribute :name , Types::Strict::String
8
9
  attribute :name_plural , Types::Strict::String
@@ -76,5 +77,6 @@ module KDomain
76
77
  end
77
78
  end
78
79
  end
80
+ # rubocop:enable Metrics/BlockLength
79
81
  end
80
82
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module KDomain
4
- VERSION = '0.0.15'
4
+ VERSION = '0.0.16'
5
5
  end
data/lib/k_domain.rb CHANGED
@@ -11,6 +11,8 @@ require 'k_domain/raw_db_schema/load'
11
11
  require 'k_domain/domain_model/transform'
12
12
  require 'k_domain/domain_model/transform_steps/_'
13
13
  require 'k_domain/domain_model/load'
14
+ require 'k_domain/rails_code_extractor/load_shim'
15
+ # require 'k_domain/rails_code_extractor/extract_model'
14
16
 
15
17
  # # This is useful if you want to initialize structures via Hash
16
18
  # class SymbolizeStruct < Dry::Struct
@@ -25,6 +27,7 @@ module KDomain
25
27
  def self.root
26
28
  File.expand_path('..', File.dirname(__FILE__))
27
29
  end
30
+
28
31
  def self.resource(resource_path)
29
32
  File.join(root, resource_path)
30
33
  end
@@ -0,0 +1,355 @@
1
+ module ActiveRecord
2
+ def self.all_loaded_classes
3
+ @all_loaded_classes ||= []
4
+ end
5
+
6
+ def self.last_loaded_class
7
+ @last_loaded_class ||= nil
8
+ end
9
+
10
+ class Base
11
+ def self.singleton_class
12
+ Class.new do
13
+ def send(*_p, **_o); end
14
+ end.new
15
+ end
16
+
17
+ def self.class_info
18
+ return @class_info if defined? @class_info
19
+
20
+ ActiveRecord.last_loaded_class = name
21
+
22
+ @class_info = {
23
+ class_name: name
24
+ }
25
+
26
+ ActiveRecord.all_loaded_classes << class_info
27
+
28
+ @class_info
29
+ end
30
+
31
+ def self.set(key, value)
32
+ class_info[key] = class_info[key] || {}
33
+ class_info[key] = value
34
+ end
35
+
36
+ def self.add(key, value)
37
+ class_info[key] = class_info[key] || []
38
+ if value.is_a?(Array)
39
+ class_info[key] = class_info[key] + value
40
+ else
41
+ class_info[key] << value
42
+ end
43
+ end
44
+
45
+ def self.custom_set(key, value = {})
46
+ class_info[:custom] = {} unless class_info[:custom]
47
+ class_info[:custom][key] = class_info[:custom][key] || {}
48
+ class_info[:custom][key] = value
49
+ end
50
+
51
+ def self.custom_add(key, value)
52
+ class_info[:custom] = {} unless class_info[:custom]
53
+ class_info[:custom][key] = class_info[:custom][key] || []
54
+ if value.is_a?(Array)
55
+ class_info[:custom][key] = class_info[:custom][key] + value
56
+ else
57
+ class_info[:custom][key] << value
58
+ end
59
+ end
60
+
61
+ # examples:
62
+ # enum status: { active: 0, archived: 1 }
63
+ # enum status: [:active, :archived]
64
+ # enum status: [:active, :archived], _suffix: true
65
+ # enum comments_status: [:active, :inactive], _prefix: :comments
66
+ def self.enum(**opts)
67
+ add(:enum, opts)
68
+ end
69
+
70
+ def self.attr_accessor(*names)
71
+ add(:attr_accessor, names)
72
+ end
73
+
74
+ def self.attr_reader(*names)
75
+ add(:attr_reader, names)
76
+ end
77
+
78
+ def self.attr_writer(*names)
79
+ add(:attr_writer, names)
80
+ end
81
+
82
+ def self.lambda_source(a_lambda, prefix = nil)
83
+ return nil unless a_lambda
84
+
85
+ puts 'NOT A LAMBDA' unless a_lambda.is_a?(Proc)
86
+
87
+ result = a_lambda&.source&.strip
88
+ result = result&.delete_prefix(prefix) if prefix
89
+ result&.strip
90
+ end
91
+
92
+ # examples
93
+ # default_scope where(:published => true) # NOT supported
94
+ # default_scope { where(:published_at => Time.now - 1.week) }
95
+ # default_scope -> { order(:external_updated_at) }
96
+ # default_scope -> { where(:published => true) }, all_queries: true
97
+ def self.default_scope(**opts, &block)
98
+ block_source = nil
99
+ block_source = lambda_source(block, 'default_scope') if block_given?
100
+
101
+ set(:default_scope, opts.merge(block: block_source))
102
+ end
103
+
104
+ # examples
105
+ # scope :red, where(:color => 'red') # NOT SUPPORTED
106
+ # scope :dry_clean_only, joins(:washing_instructions).where('washing_instructions.dry_clean_only = ?', true) # NOT SUPPORTED
107
+ #
108
+ def self.scope(name, on_the_lamb = nil, **opts)
109
+ lamb_source = lambda_source(on_the_lamb, "scope :#{name},")
110
+
111
+ add(:scopes, {
112
+ name: name,
113
+ opts: opts,
114
+ block: lamb_source
115
+ })
116
+ end
117
+
118
+ def self.belongs_to(name, on_the_lamb = nil, **opts)
119
+ lamb_source = lambda_source(on_the_lamb, "belongs_to :#{name},")
120
+
121
+ add(:belongs_to, {
122
+ name: name,
123
+ opts: opts,
124
+ block: lamb_source
125
+ })
126
+ end
127
+
128
+ def self.has_many(name, on_the_lamb = nil, **opts)
129
+ lamb_source = lambda_source(on_the_lamb, "has_many :#{name},")
130
+
131
+ add(:has_many, {
132
+ name: name,
133
+ opts: opts,
134
+ block: lamb_source
135
+ })
136
+ end
137
+
138
+ def self.has_one(name, on_the_lamb = nil, **opts)
139
+ lamb_source = lambda_source(on_the_lamb, "has_one :#{name},")
140
+
141
+ add(:has_one, {
142
+ name: name,
143
+ opts: opts,
144
+ block: lamb_source
145
+ })
146
+ end
147
+
148
+ def self.has_and_belongs_to_many(name, on_the_lamb = nil, **opts)
149
+ lamb_source = lambda_source(on_the_lamb, "has_and_belongs_to_many :#{name},")
150
+
151
+ add(:has_and_belongs_to_many, {
152
+ name: name,
153
+ opts: opts,
154
+ block: lamb_source
155
+ })
156
+ end
157
+
158
+ def self.validate(*names, **opts, &block)
159
+ block_source = nil
160
+ block_source = lambda_source(block, 'validate') if block_given?
161
+
162
+ set(:default_scope, opts.merge(block: block_source))
163
+
164
+ add(:validate, {
165
+ names: names,
166
+ opts: opts,
167
+ block: block_source
168
+ })
169
+ end
170
+
171
+ def self.validates(name, **opts)
172
+ add(:validates, {
173
+ name: name,
174
+ opts: opts
175
+ })
176
+ end
177
+
178
+ def self.alias_attribute(left, right)
179
+ add(:alias_attribute, {
180
+ left: left,
181
+ right: right
182
+ })
183
+ end
184
+
185
+ def self.before_create(name)
186
+ add(:before_create, {
187
+ name: name
188
+ })
189
+ end
190
+
191
+ def self.before_save(name)
192
+ add(:before_save, {
193
+ name: name
194
+ })
195
+ end
196
+
197
+ def self.before_destroy(name)
198
+ add(:before_destroy, {
199
+ name: name
200
+ })
201
+ end
202
+
203
+ def self.before_validation(name = nil, &block)
204
+ block_source = nil
205
+ block_source = lambda_source(block, 'before_validation') if block_given?
206
+
207
+ add(:before_validation, {
208
+ name: name,
209
+ block: block_source
210
+ })
211
+ end
212
+
213
+ def self.after_create(name)
214
+ add(:after_create, {
215
+ name: name
216
+ })
217
+ end
218
+
219
+ def self.after_save(name)
220
+ add(:after_save, {
221
+ name: name
222
+ })
223
+ end
224
+
225
+ def self.after_destroy(name = nil, &block)
226
+ block_source = nil
227
+ block_source = lambda_source(block, 'after_destroy') if block_given?
228
+
229
+ add(:after_destroy, {
230
+ name: name,
231
+ block: block_source
232
+ })
233
+ end
234
+
235
+ def self.after_commit(name)
236
+ add(:after_commit, {
237
+ name: name
238
+ })
239
+ end
240
+
241
+ def self.accepts_nested_attributes_for(name, **opts)
242
+ add(:accepts_nested_attributes_for, {
243
+ name: name,
244
+ opts: opts
245
+ })
246
+ end
247
+
248
+ def self.has_secure_token(name)
249
+ add(:has_secure_token, {
250
+ name: name
251
+ })
252
+ end
253
+
254
+ # CAN THESE BE AUTOMATED LIKE INCLUDE MODULES
255
+ def self.establish_connection(connection)
256
+ class_info[:establish_connection] = connection
257
+ end
258
+
259
+ def self.store_accessor(*names)
260
+ class_info[:store_accessor] = *names
261
+ end
262
+
263
+ def self.table_name=(table_name)
264
+ class_info[:table_name] = table_name
265
+ end
266
+
267
+ def self.primary_key=(primary_key)
268
+ class_info[:primary_key] = primary_key
269
+ end
270
+
271
+ def self.require(require)
272
+ add(:require, require)
273
+ end
274
+
275
+ def self.devise(*names)
276
+ add(:devise, names)
277
+ end
278
+
279
+ def self.pg_search_scope(name, **opts)
280
+ custom_set(:pg_search_scope, {
281
+ name: name,
282
+ opts: opts
283
+ })
284
+ end
285
+
286
+ def self.acts_as_readable(**opts)
287
+ custom_set(:acts_as_readable, {
288
+ opts: opts
289
+ })
290
+ end
291
+
292
+ def self.acts_as_reader
293
+ custom_set(:acts_as_reader, {})
294
+ end
295
+
296
+ def self.acts_as_commentable
297
+ custom_set(:acts_as_commentable, {})
298
+ end
299
+
300
+ def self.acts_as_list(**opts)
301
+ custom_set(:acts_as_list, {
302
+ opts: opts
303
+ })
304
+ end
305
+
306
+ def self.has_paper_trail
307
+ custom_set(:has_paper_trail)
308
+ end
309
+
310
+ def self.validates_uniqueness_of(name, **opts)
311
+ custom_set(:validates_uniqueness_of, {
312
+ name: name,
313
+ opts: opts
314
+ })
315
+ end
316
+
317
+ def self.validates_presence_of(name, **opts)
318
+ custom_set(:validates_presence_of, {
319
+ name: name,
320
+ opts: opts
321
+ })
322
+ end
323
+
324
+ def self.validates_length_of(name, **opts)
325
+ custom_set(:validates_length_of, {
326
+ name: name,
327
+ opts: opts
328
+ })
329
+ end
330
+
331
+ def self.attr_encrypted(name, **opts)
332
+ custom_set(:attr_encrypted, {
333
+ name: name,
334
+ opts: opts
335
+ })
336
+ end
337
+
338
+ def self.validates_confirmation_of(name, **opts)
339
+ custom_set(:validates_confirmation_of, {
340
+ name: name,
341
+ opts: opts
342
+ })
343
+ end
344
+
345
+ def self.with_options(opts, &block)
346
+ block_source = nil
347
+ block_source = lambda_source(block) if block_given?
348
+
349
+ custom_add(:with_options, {
350
+ opts: opts,
351
+ block: block_source
352
+ })
353
+ end
354
+ end
355
+ end
@@ -0,0 +1,42 @@
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
+ module ActionView
20
+ module Helpers
21
+ module NumberHelper
22
+ end
23
+ end
24
+ end
25
+
26
+ module RailsUpgrade
27
+ def rails4?
28
+ true
29
+ end
30
+
31
+ def rails5?
32
+ true
33
+ end
34
+
35
+ def rails6?
36
+ true
37
+ end
38
+
39
+ def belongs_to_required
40
+ {}
41
+ end
42
+ 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.15
4
+ version: 0.0.16
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-10-02 00:00:00.000000000 Z
11
+ date: 2021-10-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -104,7 +104,10 @@ files:
104
104
  - lib/k_domain/domain_model/transform_steps/step3_attach_columns.rb
105
105
  - lib/k_domain/domain_model/transform_steps/step4_attach_erd_files.rb
106
106
  - lib/k_domain/domain_model/transform_steps/step5_attach_dictionary.rb
107
- - lib/k_domain/domain_model/transform_steps/step8_locate_rails_models.rb
107
+ - lib/k_domain/domain_model/transform_steps/step8_rails_resource_models.rb
108
+ - lib/k_domain/domain_model/transform_steps/step9_rails_structure_models.rb
109
+ - lib/k_domain/rails_code_extractor/extract_model.rb
110
+ - lib/k_domain/rails_code_extractor/load_shim.rb
108
111
  - lib/k_domain/raw_db_schema/load.rb
109
112
  - lib/k_domain/raw_db_schema/transform.rb
110
113
  - lib/k_domain/schemas/_.rb
@@ -139,6 +142,8 @@ files:
139
142
  - lib/k_domain/schemas/investigate.rb
140
143
  - lib/k_domain/schemas/rails_resource.rb
141
144
  - lib/k_domain/version.rb
145
+ - templates/active_record_shims.rb
146
+ - templates/fake_module_shims.rb
142
147
  - templates/load_schema.rb
143
148
  homepage: http://appydave.com/gems/k-domain
144
149
  licenses: