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
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 98e1d3eb1435f17ad91084519399234f0adc41e399d1350071147f0e58f694c6
4
- data.tar.gz: 2797a698e87169816a6b612239b1c22b8d2fd0db2fd6df2fc8e078fbf8828e69
3
+ metadata.gz: 86f877b2fd5644c7ebd211c662cb4cd1ff63213dcc3cc588d3485f698a2bc7b9
4
+ data.tar.gz: 9999ee5fa153fa7c1833cd21a0a5a145cbee4a97cd11284c1bb4440157ae6d0a
5
5
  SHA512:
6
- metadata.gz: 1e6cd0d3fa8354f83b5910dc961212acd0ae149b0b90c31338bf992b4f64500ae4fb05f63c605bf439d818bed8f6f4806939994c0cf8ee6fbd0c0a51d232b02f
7
- data.tar.gz: 28d42c273b6fdae5db9b32e4cfcd4c1826e42f929efbc9713941b16bc4240cff22eed7e3260aec195beff43ae3ec20bf136bb6526988eccbd5f475c18ec2566a
6
+ metadata.gz: 013e1f7524e395b9766831786cd1f4052eb6000fd35105c58bfb51869f9d1b93151f3fbc3e8fe349f59dd6819daf7d27e22a05ae5f95fba6826bf61af06eb235
7
+ data.tar.gz: c56d291ba618e70863e334bca9c1e817da700d6d0769e92ac5fb7d267b1f02068f6d4275e423264147066389d45dca831d3b3878eef45662d0f4ef8457d99e20
data/.builders/boot.rb ADDED
@@ -0,0 +1,40 @@
1
+ # Boot Sequence
2
+
3
+ include KLog::Logging
4
+
5
+ CONFIG_KEY = :k_domain
6
+
7
+ log.kv 'working folder', Dir.pwd
8
+
9
+ Handlebars::Helpers.configure do |config|
10
+ config_file = File.join(Gem.loaded_specs['handlebars-helpers'].full_gem_path, '.handlebars_helpers.json')
11
+ config.helper_config_file = config_file
12
+
13
+ string_config_file = File.join(Gem.loaded_specs['handlebars-helpers'].full_gem_path, '.handlebars_string_formatters.json')
14
+ config.string_formatter_config_file = string_config_file
15
+ end
16
+
17
+ def builder
18
+ @builder ||= KBuilder::BaseBuilder.init(KConfig.configuration(CONFIG_KEY))
19
+ end
20
+
21
+ KConfig.configure(CONFIG_KEY) do |config|
22
+ global_template = File.expand_path('~/dev/kgems/k_templates/templates')
23
+ config.target_folders.add(:app, File.expand_path('../', Dir.pwd))
24
+ config.target_folders.add(:lib_config, :app, 'lib/k_domain/config')
25
+ config.template_folders.add(:global_template, global_template)
26
+ config.template_folders.add(:app_template, File.expand_path('.templates', Dir.pwd))
27
+ end
28
+
29
+ KConfig.configuration(CONFIG_KEY).debug
30
+
31
+ area = KManager.add_area(CONFIG_KEY)
32
+ resource_manager = area.resource_manager
33
+ resource_manager.add_resource('https://raw.githubusercontent.com/klueless-io/k_playground/main/ruby/components/configuration/.builders/configuration_director.rb', content_type: :ruby)
34
+ resource_manager
35
+ .fileset
36
+ .glob('*.rb', exclude: ['boot.rb'])
37
+ .glob('generators/**/*.rb')
38
+ resource_manager.add_resources
39
+
40
+ KManager.boot
@@ -0,0 +1,22 @@
1
+ KManager.action do
2
+ def on_action
3
+ puts '-' * 70
4
+ builder.cd(:lib_config)
5
+ director = ConfigurationDirector
6
+ .init(builder, on_exist: :compare)
7
+ .style(:single)
8
+ .name('Domain Configuration')
9
+ .main_namespace('KDomain', 'Config')
10
+ .add_config_key(:default_main_key, "nil")
11
+ .add_config_key(:default_traits, "%i[trait1 trait2 trait3]")
12
+ .add_config_key(:fallback_keys, "%i[]")
13
+ .add_config_key(:entities, "[]")
14
+ # .logit
15
+
16
+ # dom = director.dom
17
+ # data = director.data
18
+
19
+ director.add_config
20
+ # director.add_configuration
21
+ end
22
+ end
data/.builders/run.rb ADDED
@@ -0,0 +1,16 @@
1
+ # Run
2
+
3
+ KManager.action do
4
+ def on_action
5
+ end
6
+ end
7
+
8
+ KManager.opts.app_name = 'KDomain Generator'
9
+ KManager.opts.sleep = 5
10
+ KManager.opts.reboot_on_kill = 0
11
+ KManager.opts.reboot_sleep = 4
12
+ KManager.opts.exception_style = :short
13
+ KManager.opts.show.time_taken = true
14
+ KManager.opts.show.finished = true
15
+ KManager.opts.show.finished_message = 'FINISHED :)'
16
+
data/.gitignore CHANGED
@@ -23,6 +23,7 @@ k_domain.yml
23
23
  /doc/
24
24
  /pkg/
25
25
  /spec/reports/
26
+ /spec/example_domain/advanced/
26
27
  /tmp/
27
28
  !/tmp/.keep
28
29
  *.bundle
data/.rubocop.yml CHANGED
@@ -6,8 +6,7 @@ AllCops:
6
6
  NewCops: enable
7
7
  Exclude:
8
8
  - "_/**/*"
9
- - "spec/sample_input/**/*"
10
- - "spec/sample_output/**/*"
9
+ - "spec/example_domain/**/*"
11
10
  - "templates/**/*"
12
11
  - "lib/k_domain/schemas/domain/old/**/*"
13
12
  - "spec/k_domain/ruby_loader/**/*"
data/Guardfile CHANGED
@@ -19,6 +19,7 @@ group :green_pass_then_cop, halt_on_fail: true do
19
19
  # Ruby files
20
20
  ruby = dsl.ruby
21
21
  dsl.watch_spec_files_for(ruby.lib_files)
22
+ watch(%r{^lib/k_domain/domain_model/transform_steps/(.+).rb}) { 'spec/k_domain/domain_model/transform_spec.rb' }
22
23
  watch(%r{^lib/k_domain/**/(.+)\.rb$}) { |m| "spec/unit/#{m[1]}_spec.rb" }
23
24
  watch(%r{^lib/k_domain/commands/(.+)\.rb$}) { |m| "spec/unit/commands/#{m[1]}_spec.rb" }
24
25
  end
data/README.md CHANGED
@@ -1,3 +1,18 @@
1
+ # JSON Schema
2
+
3
+ The following schemas were created using the following processes.
4
+
5
+ ```
6
+ quicktype -o json-schema/database.json -t database -l schema spec/sample_output/printspeak/schema.json
7
+ quicktype -o json-schema/database.rb -t database -l ruby json-schema/database-altered.json
8
+ spec/sample_output/printspeak/schema.json
9
+ json-schema/database-altered.json
10
+ ```
11
+
12
+ remove statistics
13
+ remove (or move rails structure)
14
+ drop erd_location
15
+
1
16
  # K Domain
2
17
 
3
18
  > K Domain builds complex domain schemas by combining the database schema with a rich entity relationship DSLs
data/STORIES.md CHANGED
@@ -16,25 +16,54 @@ As a Developer, I can customize domain configuration, so that I can have opinion
16
16
 
17
17
  - Handle traits
18
18
 
19
+ ### Tasks next on list
20
+
21
+ BUGs in domain_model load
22
+
23
+ - spec/k_domain/domain_model/load_spec.rb:135
24
+ - FIXED: module_name should be empty
25
+ - FIXED: name mismatch (attr_accessor, attr_reader, attr_writer) in behaviours vs in (attr_accessors, attr_readers, attr_writers) functions
26
+ - functions - (attr_accessors, attr_readers, attr_writers) are all empty
27
+
28
+ External ruby process - ShimLoading and ExtractModel
29
+
30
+ - You need a clear memory foot print for shim loading and model extraction, best to run these from inside a new ruby process
31
+
32
+ Log Warning to Investigate Issues
33
+
34
+ - FIXED: All the logged warnings in k_domain need to turn up in on the investigate issues register
35
+ - Investigate needs a debug flag that when turned on, will write the issues to the console
36
+
37
+ Print progress dot
38
+
39
+ - Make this configurable
40
+ - Decide what steps this should run for
41
+ - Show step label via configuration
42
+
43
+ ## Stories and tasks
44
+
45
+ ### Stories - completed
46
+
19
47
  As a Developer, I can read native rails model data, so that I can leverage existing rails applications for ERD modeling
20
48
 
49
+ - Proof of concept
21
50
  - Use Meta Programming and re-implement ActiveRecord::Base
22
51
 
23
- ### Tasks next on list
52
+ ### Tasks - completed
24
53
 
25
54
  Refactor / Simply
26
55
 
27
- - Replace complex objects an with structs for ancillary data structures such as investigate
56
+ - Replace complex objects with structs for ancillary data structures such as investigate
57
+
58
+ Steps to support write methods on base class
59
+
60
+ - Simplify lib/k_domain/domain_model/transform.rb
28
61
 
29
62
  User acceptance testing
30
63
 
31
64
  - Provide sample printers for each data structure to visually check data is loading
32
65
  - Point raw_db_schema loader towards a complex ERD and check how it performs
33
66
 
34
- ## Stories and tasks
35
-
36
- ### Tasks - completed
37
-
38
67
  Setup RubyGems and RubyDoc
39
68
 
40
69
  - Build and deploy gem to [rubygems.org](https://rubygems.org/gems/k_domain)
@@ -0,0 +1,4 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative './config'
4
+ require_relative './configuration'
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Usage: include KDomain::Config::
4
+
5
+ module KDomain
6
+ module Config
7
+ def configuration
8
+ @configuration ||= KDomain::Config::Configuration.new
9
+ end
10
+
11
+ def reset
12
+ @configuration = KDomain::Config::Configuration.new
13
+ end
14
+
15
+ def configure
16
+ yield(configuration)
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,76 @@
1
+ # frozen_string_literal: true
2
+
3
+ module KDomain
4
+ module Config
5
+ # Configuration object for Domain Configuration
6
+ class Configuration
7
+ include KLog::Logging
8
+
9
+ ConfigModel = Struct.new(:name, :main_key, :traits)
10
+
11
+ attr_accessor :default_main_key
12
+ attr_accessor :default_traits
13
+ attr_accessor :fallback_keys
14
+ attr_accessor :models
15
+
16
+ def initialize
17
+ @default_main_key = nil
18
+ @default_traits = %i[trait1 trait2 trait3]
19
+ @fallback_keys = %i[]
20
+ @models = []
21
+ end
22
+
23
+ def model(name, main_key: nil, traits: nil)
24
+ @models << new_config_model(
25
+ name,
26
+ main_key: main_key || default_main_key,
27
+ traits: traits || default_traits
28
+ )
29
+ end
30
+
31
+ def find_model(table_name)
32
+ @find_model ||= Hash.new do |h, key|
33
+ h[key] = begin
34
+ entity = models.find { |e| e.name == key }
35
+ entity ||= new_config_model(key)
36
+ entity
37
+ end
38
+ end
39
+
40
+ @find_model[table_name]
41
+ end
42
+
43
+ def fallback_key(columns)
44
+ column_names = columns.each_with_object({}) do |column, hash|
45
+ hash[column.name.to_sym] = column.name.to_sym
46
+ end
47
+
48
+ fallback_keys.find { |key| column_names.key?(key) }
49
+ end
50
+
51
+ def debug(heading: 'Domain configuration')
52
+ log.structure(to_h, title: heading) # , line_width: 150, formatter: formatter)
53
+ ''
54
+ end
55
+
56
+ def to_h
57
+ {
58
+ default_main_key: default_main_key,
59
+ default_traits: default_traits,
60
+ fallback_keys: fallback_keys,
61
+ models: models.map(&:to_h)
62
+ }
63
+ end
64
+
65
+ private
66
+
67
+ def new_config_model(name, main_key: nil, traits: nil)
68
+ ConfigModel.new(
69
+ name,
70
+ main_key || default_main_key,
71
+ traits || default_traits
72
+ )
73
+ end
74
+ end
75
+ end
76
+ end
@@ -23,6 +23,8 @@ module KDomain
23
23
  @raw_data = KUtil.data.json_parse(json, as: :hash_symbolized)
24
24
 
25
25
  @data = KDomain::Schemas::DomainModel.new(@raw_data)
26
+
27
+ enrichment
26
28
  end
27
29
 
28
30
  def to_h
@@ -30,6 +32,45 @@ module KDomain
30
32
 
31
33
  @raw_data
32
34
  end
35
+
36
+ private
37
+
38
+ def enrichment
39
+ attach_rails_model_to_domain_model
40
+ end
41
+
42
+ def attach_rails_model_to_domain_model
43
+ @data.domain.models.each do |domain_model|
44
+ domain_model.rails_model = @data.rails_structure.find_model(domain_model.name)
45
+
46
+ if domain_model.rails_model
47
+ attach_column_relations(domain_model)
48
+ else
49
+ log.error("Rails Model not found for #{domain_model.name}") unless domain_model.rails_model
50
+ end
51
+ end
52
+ end
53
+
54
+ def attach_column_relations(domain_model)
55
+ domain_model.columns.each do |column|
56
+ column.relationships = []
57
+ add_column_relations(domain_model.rails_model, column, :belongs_to)
58
+ add_column_relations(domain_model.rails_model, column, :has_one)
59
+ add_column_relations(domain_model.rails_model, column, :has_many)
60
+ add_column_relations(domain_model.rails_model, column, :has_and_belongs_to_many)
61
+ end
62
+ end
63
+
64
+ def add_column_relations(rails_model, column, relation_type)
65
+ relations = rails_model.behaviours.send(relation_type)
66
+
67
+ return if relations.nil?
68
+
69
+ relations = relations.map { |relation| { relation_type: relation_type }.merge(relation.to_h) }
70
+ relations.select { |relation| column[:name] == relation.dig(:opts, :foreign_key) }.each do |relation|
71
+ column.relationships << KDomain::Schemas::Domain::Model::Relationship.new(relation)
72
+ end
73
+ end
33
74
  end
34
75
  end
35
76
  end
@@ -11,25 +11,34 @@ module KDomain
11
11
  attr_reader :db_schema
12
12
  attr_reader :target_step_file
13
13
  attr_reader :target_file
14
- attr_reader :erd_path
14
+ attr_reader :model_path
15
+ attr_reader :controller_path
16
+ attr_reader :route_path
17
+ attr_reader :shim_loader
15
18
 
16
- def initialize(db_schema: , target_file: , target_step_file: , erd_path:)
19
+ # rubocop:disable Metrics/ParameterLists
20
+ def initialize(db_schema: , target_file: , target_step_file: , model_path:, route_path:, controller_path:, shim_loader: nil)
17
21
  @db_schema = db_schema
18
22
  @target_step_file = target_step_file
19
23
  @target_file = target_file
20
- @erd_path = erd_path
24
+ @model_path = model_path
25
+ @controller_path = controller_path
26
+ @route_path = route_path
27
+ @shim_loader = shim_loader
21
28
  end
29
+ # rubocop:enable Metrics/ParameterLists
22
30
 
23
31
  # rubocop:disable Metrics/AbcSize,Metrics/CyclomaticComplexity,Metrics/PerceivedComplexity
24
32
  def call
25
33
  valid = true
26
- valid &&= step1
27
- valid &&= step2
28
- valid &&= step3
29
- valid &&= step4
30
- valid &&= step5
31
- valid &&= step8
32
- valid &&= step9
34
+ valid &&= Step1DbSchema.run(domain_data, db_schema: db_schema, step_file: step_file('01-db-schema'))
35
+ valid &&= Step2DomainModels.run(domain_data, model_path: model_path, step_file: step_file('02-domain-model'))
36
+ valid &&= Step4RailsResourceModels.run(domain_data, model_path: model_path, step_file: step_file('04-rails-resource-models'))
37
+ valid &&= Step5RailsResourceRoutes.run(domain_data, route_path: route_path, controller_path: controller_path, step_file: step_file('05-rails-resource-routes'))
38
+ valid &&= Step6RailsStructureModels.run(domain_data, model_path: model_path, step_file: step_file('06-rails-structure-models'), shim_loader: shim_loader)
39
+ valid &&= Step7RailsStructureControllers.run(domain_data, controller_path: controller_path, step_file: step_file('07-rails-structure-controllers'), shim_loader: shim_loader)
40
+ valid &&= Step8DomainColumns.run(domain_data, step_file: step_file('08-domain-columns'))
41
+ valid &&= Step20Dictionary.run(domain_data, step_file: step_file('20-dictionary'))
33
42
 
34
43
  raise 'DomainModal transform failed' unless valid
35
44
 
@@ -39,49 +48,13 @@ module KDomain
39
48
  end
40
49
  # rubocop:enable Metrics/AbcSize,Metrics/CyclomaticComplexity,Metrics/PerceivedComplexity
41
50
 
42
- def step1
43
- Step1AttachDbSchema.run(domain_data, db_schema: db_schema)
44
- write(step: '1-attach-db-schema')
51
+ def step_file(step_name)
52
+ format(target_step_file, step: step_name)
45
53
  end
46
54
 
47
- def step2
48
- Step2AttachModels.run(domain_data, erd_path: erd_path)
49
- write(step: '2-attach-model')
50
- end
51
-
52
- def step3
53
- Step3AttachColumns.run(domain_data)
54
- write(step: '3-attach-columns')
55
- end
56
-
57
- def step4
58
- Step4AttachErdFiles.run(domain_data, erd_path: erd_path)
59
- write(step: '4-attach-erd-files')
60
- end
61
-
62
- def step5
63
- Step5AttachDictionary.run(domain_data, erd_path: erd_path)
64
- write(step: '5-attach-dictionary')
65
- end
66
-
67
- def step8
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')
75
- end
76
-
77
- def write(step: nil)
78
- file = if step.nil?
79
- target_file
80
- else
81
- format(target_step_file, step: step)
82
- end
83
- FileUtils.mkdir_p(File.dirname(file))
84
- File.write(file, JSON.pretty_generate(domain_data))
55
+ def write
56
+ FileUtils.mkdir_p(File.dirname(target_file))
57
+ File.write(target_file, JSON.pretty_generate(domain_data))
85
58
  end
86
59
 
87
60
  # rubocop:disable Metrics/MethodLength
@@ -89,12 +62,11 @@ module KDomain
89
62
  # The initial domain model structure is created here, but populated during the workflows.
90
63
  @domain_data ||= {
91
64
  domain: {
92
- models: [],
93
- erd_files: []
65
+ models: []
94
66
  },
95
67
  rails_resource: {
96
68
  models: [],
97
- controllers: []
69
+ routes: []
98
70
  },
99
71
  rails_structure: {
100
72
  models: [],
@@ -107,6 +79,7 @@ module KDomain
107
79
  tables: [],
108
80
  indexes: [],
109
81
  foreign_keys: [],
82
+ views: [],
110
83
  meta: {}
111
84
  },
112
85
  investigate: {
@@ -114,7 +87,6 @@ module KDomain
114
87
  }
115
88
  }
116
89
  end
117
-
118
90
  # rubocop:enable Metrics/MethodLength
119
91
  end
120
92
  end
@@ -2,10 +2,11 @@
2
2
 
3
3
  # The require order is important due to dependencies
4
4
  require_relative './step'
5
- require_relative './step1_attach_db_schema'
6
- require_relative './step2_attach_models'
7
- require_relative './step3_attach_columns'
8
- require_relative './step4_attach_erd_files'
9
- require_relative './step5_attach_dictionary'
10
- require_relative './step8_rails_resource_models'
11
- require_relative './step9_rails_structure_models'
5
+ require_relative './step1_db_schema'
6
+ require_relative './step2_domain_models'
7
+ require_relative './step4_rails_resource_models'
8
+ require_relative './step5_rails_resource_routes'
9
+ require_relative './step6_rails_structure_models'
10
+ require_relative './step7_rails_structure_controllers'
11
+ require_relative './step8_domain_columns'
12
+ require_relative './step20_dictionary'
@@ -24,7 +24,8 @@ module KDomain
24
24
  def self.run(domain_data, **opts)
25
25
  step = new(domain_data, **opts)
26
26
  step.call
27
- step
27
+ step.write(opts[:step_file])
28
+ step.valid?
28
29
  end
29
30
 
30
31
  def guard(message)
@@ -32,6 +33,15 @@ module KDomain
32
33
  @valid = false
33
34
  end
34
35
 
36
+ def warning(message)
37
+ log.warn message
38
+ end
39
+
40
+ def write(file)
41
+ FileUtils.mkdir_p(File.dirname(file))
42
+ File.write(file, JSON.pretty_generate(domain_data))
43
+ end
44
+
35
45
  # Domain Model Accessor/Helpers
36
46
  def domain
37
47
  guard('domain is missing') if domain_data[:domain].nil?
@@ -58,6 +68,14 @@ module KDomain
58
68
  rails_resource[:models] = value
59
69
  end
60
70
 
71
+ def rails_resource_routes
72
+ rails_resource[:routes]
73
+ end
74
+
75
+ def rails_resource_routes=(value)
76
+ rails_resource[:routes] = value
77
+ end
78
+
61
79
  def rails_resource_controllers
62
80
  rails_resource[:controllers]
63
81
  end
@@ -73,6 +91,10 @@ module KDomain
73
91
  rails_structure[:models]
74
92
  end
75
93
 
94
+ def find_rails_structure_models(model_name)
95
+ rails_structure_models.find { |model| model[:model_name] == model_name }
96
+ end
97
+
76
98
  def rails_structure_models=(value)
77
99
  rails_structure[:models] = value
78
100
  end
@@ -81,6 +103,10 @@ module KDomain
81
103
  rails_structure[:controllers]
82
104
  end
83
105
 
106
+ def rails_structure_controllers=(value)
107
+ rails_structure[:controllers] = value
108
+ end
109
+
84
110
  # Database Accessor/Helpers
85
111
  def database=(value)
86
112
  domain_data[:database] = value
@@ -2,12 +2,13 @@
2
2
 
3
3
  module KDomain
4
4
  module DomainModel
5
- class Step1AttachDbSchema < KDomain::DomainModel::Step
5
+ class Step1DbSchema < KDomain::DomainModel::Step
6
6
  # Map database schema to domain model
7
7
  def call
8
8
  raise 'Schema not supplied' if opts[:db_schema].nil?
9
9
 
10
10
  self.database = opts[:db_schema].clone
11
+ database[:tables] = database[:tables] # .take(10) # .slice(156, 1)
11
12
 
12
13
  guard('tables are missing') if database[:tables].nil?
13
14
  guard('indexes are missing') if database[:indexes].nil?
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # Attach data dictionary
4
- class Step5AttachDictionary < KDomain::DomainModel::Step
3
+ # data dictionary
4
+ class Step20Dictionary < KDomain::DomainModel::Step
5
5
  attr_reader :dictionary
6
6
 
7
7
  def call
@@ -27,8 +27,11 @@ 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
- # ADD to investigate
31
- # log.warn("#{model_name} has a type mismatch for column name: #{column_name}")
30
+ investigate(step: :step5_dictionary,
31
+ location: :process,
32
+ key: "#{model_name},#{column_name},#{column_type}",
33
+ message: "#{model_name} has a type mismatch for column name: #{column_name}")
34
+
32
35
  entry[:types] << column_type
33
36
  entry[:type_count] = entry[:type_count] + 1
34
37
  end