k_domain 0.0.23 → 0.0.28

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 (45) 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 +1 -0
  7. data/.rubocop.yml +8 -3
  8. data/Gemfile +2 -2
  9. data/k_domain.gemspec +1 -1
  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/build_rich_models.rb +83 -0
  14. data/lib/k_domain/domain_model/load.rb +44 -1
  15. data/lib/k_domain/domain_model/transform.rb +13 -11
  16. data/lib/k_domain/domain_model/transform_steps/step1_db_schema.rb +1 -1
  17. data/lib/k_domain/domain_model/transform_steps/step2_domain_models.rb +1 -1
  18. data/lib/k_domain/domain_model/transform_steps/step6_rails_structure_models.rb +1 -0
  19. data/lib/k_domain/domain_model/transform_steps/step7_rails_structure_controllers.rb +8 -3
  20. data/lib/k_domain/domain_model/transform_steps/step8_domain_columns.rb +51 -56
  21. data/lib/k_domain/queries/_.rb +4 -0
  22. data/lib/k_domain/queries/base_query.rb +13 -0
  23. data/lib/k_domain/queries/domain_model_query.rb +88 -0
  24. data/lib/k_domain/rails_code_extractor/extract_controller.rb +2 -0
  25. data/lib/k_domain/rails_code_extractor/extract_model.rb +2 -0
  26. data/lib/k_domain/rails_code_extractor/shim_loader.rb +4 -2
  27. data/lib/k_domain/raw_db_schema/transform.rb +26 -2
  28. data/lib/k_domain/schemas/_.rb +3 -1
  29. data/lib/k_domain/schemas/domain/erd_file.rb +78 -77
  30. data/lib/k_domain/schemas/domain.rb +79 -38
  31. data/lib/k_domain/schemas/{domain/_.rb → domain_types.rb} +1 -8
  32. data/lib/k_domain/schemas/{domain_model.rb → main_dataset.rb} +2 -2
  33. data/lib/k_domain/schemas/rails_structure.rb +10 -0
  34. data/lib/k_domain/version.rb +1 -1
  35. data/lib/k_domain.rb +6 -1
  36. data/templates/custom/action_controller.rb +0 -29
  37. data/templates/custom/controller_interceptors.rb +9 -7
  38. data/templates/custom/model_interceptors.rb +48 -3
  39. data/templates/rails/active_record.rb +2 -0
  40. data/templates/sample_config.rb +47 -0
  41. metadata +17 -10
  42. data/.builders/config/_.rb +0 -3
  43. data/.builders/setup.rb +0 -30
  44. data/templates/old_printspeek_schema copy.rb +0 -231
  45. data/templates/old_printspeek_schema.rb +0 -233
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: cbbddfe9857696b7a3a02fc370c51205d584fd08aaad5f8b8605dccebab02bc1
4
- data.tar.gz: c37fee293561e73b3ed4b4e31f9def8c13848217ee9c4d14efdcfc67a46d42ea
3
+ metadata.gz: 2206bc03f809354e7cacb541a081491e1ce06c8eb82eb655cd81fdc7d16a69e7
4
+ data.tar.gz: 9e5f99803fee97745f11e870b79039510e0b0c733d43191c1cf5557d8e138b65
5
5
  SHA512:
6
- metadata.gz: 12d58c761198fe6fa8336871ab5a3475c0a1caf358c09af2005e8bab3192c82b864663b867b3f2a39d8ba7c20e58258a8981ddd6339dbdb4edec73e37bca4652
7
- data.tar.gz: 0bfd25819a3425f2932ba751d9e4413b41ae2c617416751855ced16a7fc74f68eff64d87a92138c73b85b0df175f38b8b299f5912f67f8a78970926ff83a4df8
6
+ metadata.gz: 2576e2e9f17587883e1edea8b8b32cbab53530574657511870de4bb679cb0b32822970937efab04ee7ca15a689ec8b3ffaf7856872e96e9696a8775ce00aaf8d
7
+ data.tar.gz: ecd8d2f12229d9cf422515be37091ee8e13b893712f7ba15e236a515319b31b301fb468ab75e6034233cd028bb0cc0c98e0216d9c12bbae60b4a66f20584e8db
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
+
@@ -25,7 +25,9 @@ jobs:
25
25
  run: |
26
26
  gem install bundler -v 2.2.5
27
27
  bundle install
28
- - name: Run tests
29
- run: bundle exec rspec
30
28
  - name: Run rubocop
31
- run: bundle exec rubocop
29
+ run: |
30
+ bundle exec rubocop -v
31
+ bundle exec rubocop
32
+ - name: Run tests
33
+ run: bundle exec rspec --tag ~skip_on_gha
data/.gitignore CHANGED
@@ -31,6 +31,7 @@ k_domain.yml
31
31
  *.o
32
32
  *.a
33
33
  mkmf.log
34
+ .vscode
34
35
 
35
36
  # Ruby Version
36
37
  .ruby-version
data/.rubocop.yml CHANGED
@@ -1,6 +1,6 @@
1
1
  # require: rubocop-rake
2
2
  AllCops:
3
- TargetRubyVersion: 2.5
3
+ TargetRubyVersion: 2.7
4
4
  DisplayCopNames: true
5
5
  ExtraDetails: true
6
6
  NewCops: enable
@@ -10,6 +10,7 @@ AllCops:
10
10
  - "templates/**/*"
11
11
  - "lib/k_domain/schemas/domain/old/**/*"
12
12
  - "spec/k_domain/ruby_loader/**/*"
13
+ - "hooks/**/*"
13
14
 
14
15
  Metrics/PerceivedComplexity:
15
16
  Exclude:
@@ -68,8 +69,6 @@ Metrics/MethodLength:
68
69
 
69
70
  Layout/LineLength:
70
71
  Max: 200
71
- # Ignores annotate output
72
- IgnoredPatterns: ['\A# \*\*']
73
72
  IgnoreCopDirectives: true
74
73
  Exclude:
75
74
  - "lib/k_domain/domain_model/transform_steps/*.rb"
@@ -116,6 +115,12 @@ Style/FormatStringToken:
116
115
  Style/Documentation:
117
116
  Enabled: false
118
117
 
118
+ Style/OpenStructUse:
119
+ Enabled: false
120
+
119
121
  Layout/SpaceBeforeComma:
120
122
  Enabled: false
123
+
124
+ Gemspec/RequireMFA:
125
+ Enabled: false
121
126
  # My Preferences - End
data/Gemfile CHANGED
@@ -16,7 +16,7 @@ group :development, :test do
16
16
  gem 'guard-bundler'
17
17
  gem 'guard-rspec'
18
18
  gem 'guard-rubocop'
19
- gem 'rake', '~> 12.0'
19
+ gem 'rake'
20
20
  gem 'rake-compiler', require: false
21
21
  gem 'rspec', '~> 3.0'
22
22
  gem 'rubocop'
@@ -25,7 +25,7 @@ group :development, :test do
25
25
  end
26
26
 
27
27
  # If local dependency
28
- if ENV['KLUE_LOCAL_GEMS']&.to_s&.downcase == 'true'
28
+ if ENV.fetch('KLUE_LOCAL_GEMS', 'false').downcase == 'true'
29
29
  group :development, :test do
30
30
  puts 'Using Local GEMs'
31
31
  gem 'k_log' , path: '../k_log'
data/k_domain.gemspec CHANGED
@@ -3,7 +3,7 @@
3
3
  require_relative 'lib/k_domain/version'
4
4
 
5
5
  Gem::Specification.new do |spec|
6
- spec.required_ruby_version = '>= 2.5'
6
+ spec.required_ruby_version = '>= 2.7'
7
7
  spec.name = 'k_domain'
8
8
  spec.version = KDomain::VERSION
9
9
  spec.authors = ['David Cruwys']
@@ -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
@@ -0,0 +1,83 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Loads the db schema object and works through a series of enrichment steps to
4
+ # that builds the domain modal
5
+
6
+ module KDomain
7
+ module DomainModel
8
+ class BuildRichModels
9
+ include KLog::Logging
10
+
11
+ attr_reader :db_schema
12
+ attr_reader :target_folder
13
+ attr_reader :query
14
+
15
+ def initialize(domain_model:, target_folder:)
16
+ @domain_model = domain_model
17
+ @target_folder = target_folder
18
+ @query = KDomain::Queries::DomainModelQuery.new(domain_model)
19
+ end
20
+
21
+ def call
22
+ FileUtils.mkdir_p(target_folder)
23
+
24
+ export_domain_models(query.all) # .take(3))
25
+ end
26
+
27
+ def export_domain_models(models)
28
+ puts 'export domain models'
29
+ models.each do |model|
30
+ # write a single dot to the console in the color red
31
+ print "\e[31m.\e[0m"
32
+
33
+ json = JSON.pretty_generate(build_rich_model(model))
34
+ target_file = File.join(target_folder, "#{model.name}.json")
35
+ File.write(target_file, json)
36
+ end
37
+ end
38
+
39
+ def build_rich_model(model)
40
+ {
41
+ name: model.name,
42
+ name_plural: model.name_plural,
43
+ table_name: model.table_name,
44
+ type: model.type,
45
+ pk: model.pk.to_h,
46
+ file: model.file,
47
+ exist: model.ruby?,
48
+ create_update_timestamp: model.create_update_timestamp?,
49
+ main_key: model.main_key,
50
+ traits: model.traits,
51
+ column_names: {
52
+ all: model.columns.map(&:name),
53
+ data: model.columns_data.map(&:name),
54
+ primary: model.columns_primary.map(&:name),
55
+ foreign_key: model.columns_foreign_key.map(&:name),
56
+ foreign_type: model.columns_foreign_type.map(&:name),
57
+ timestamp: model.columns_timestamp.map(&:name),
58
+ deleted_at: model.columns_deleted_at.map(&:name),
59
+ virtual: model.columns_virtual.map(&:name),
60
+ data_foreign: model.columns_data_foreign.map(&:name),
61
+ data_primary: model.columns_data_primary.map(&:name),
62
+ data_virtual: model.columns_data_virtual.map(&:name),
63
+ data_foreign_virtual: model.columns_data_foreign_virtual.map(&:name)
64
+ },
65
+ columns: {
66
+ all: model.columns.map(&:to_h),
67
+ data: model.columns_data.map(&:to_h),
68
+ primary: model.columns_primary.map(&:to_h),
69
+ foreign_key: model.columns_foreign_key.map(&:to_h),
70
+ foreign_type: model.columns_foreign_type.map(&:to_h),
71
+ timestamp: model.columns_timestamp.map(&:to_h),
72
+ deleted_at: model.columns_deleted_at.map(&:to_h),
73
+ virtual: model.columns_virtual.map(&:to_h),
74
+ data_foreign: model.columns_data_foreign.map(&:to_h),
75
+ data_primary: model.columns_data_primary.map(&:to_h),
76
+ data_virtual: model.columns_data_virtual.map(&:to_h),
77
+ data_foreign_virtual: model.columns_data_foreign_virtual.map(&:to_h)
78
+ }
79
+ }
80
+ end
81
+ end
82
+ end
83
+ end
@@ -22,7 +22,11 @@ module KDomain
22
22
  json = File.read(source_file)
23
23
  @raw_data = KUtil.data.json_parse(json, as: :hash_symbolized)
24
24
 
25
- @data = KDomain::Schemas::DomainModel.new(@raw_data)
25
+ # This line is slow on big datasets
26
+ @data = KDomain::Schemas::MainDataset.new(@raw_data)
27
+
28
+ # This line is also slow on big datasets
29
+ enrichment
26
30
  end
27
31
 
28
32
  def to_h
@@ -30,6 +34,45 @@ module KDomain
30
34
 
31
35
  @raw_data
32
36
  end
37
+
38
+ private
39
+
40
+ def enrichment
41
+ attach_rails_model_to_domain_model
42
+ end
43
+
44
+ def attach_rails_model_to_domain_model
45
+ @data.domain.models.each do |domain_model|
46
+ domain_model.rails_model = @data.rails_structure.find_model(domain_model.name)
47
+
48
+ if domain_model.rails_model
49
+ attach_column_relations(domain_model)
50
+ else
51
+ log.error("Rails Model not found for #{domain_model.name}") unless domain_model.rails_model
52
+ end
53
+ end
54
+ end
55
+
56
+ def attach_column_relations(domain_model)
57
+ domain_model.columns.each do |column|
58
+ column.relationships = []
59
+ add_column_relations(domain_model.rails_model, column, :belongs_to)
60
+ add_column_relations(domain_model.rails_model, column, :has_one)
61
+ add_column_relations(domain_model.rails_model, column, :has_many)
62
+ add_column_relations(domain_model.rails_model, column, :has_and_belongs_to_many)
63
+ end
64
+ end
65
+
66
+ def add_column_relations(rails_model, column, relation_type)
67
+ relations = rails_model.behaviours.send(relation_type)
68
+
69
+ return if relations.nil?
70
+
71
+ relations = relations.map { |relation| { relation_type: relation_type }.merge(relation.to_h) }
72
+ relations.select { |relation| column[:name] == relation.dig(:opts, :foreign_key) }.each do |relation|
73
+ column.relationships << KDomain::Schemas::Domain::Model::Relationship.new(relation)
74
+ end
75
+ end
33
76
  end
34
77
  end
35
78
  end
@@ -14,17 +14,19 @@ module KDomain
14
14
  attr_reader :model_path
15
15
  attr_reader :controller_path
16
16
  attr_reader :route_path
17
- attr_reader :shim_loader
17
+ attr_reader :model_shim_loader
18
+ attr_reader :controller_shim_loader
18
19
 
19
20
  # rubocop:disable Metrics/ParameterLists
20
- def initialize(db_schema: , target_file: , target_step_file: , model_path:, route_path:, controller_path:, shim_loader: nil)
21
- @db_schema = db_schema
22
- @target_step_file = target_step_file
23
- @target_file = target_file
24
- @model_path = model_path
25
- @controller_path = controller_path
26
- @route_path = route_path
27
- @shim_loader = shim_loader
21
+ def initialize(db_schema: , target_file: , target_step_file: , model_path:, route_path:, controller_path:, model_shim_loader: nil, controller_shim_loader: nil)
22
+ @db_schema = db_schema
23
+ @target_step_file = target_step_file
24
+ @target_file = target_file
25
+ @model_path = model_path
26
+ @controller_path = controller_path
27
+ @route_path = route_path
28
+ @model_shim_loader = model_shim_loader
29
+ @controller_shim_loader = controller_shim_loader
28
30
  end
29
31
  # rubocop:enable Metrics/ParameterLists
30
32
 
@@ -35,8 +37,8 @@ module KDomain
35
37
  valid &&= Step2DomainModels.run(domain_data, model_path: model_path, step_file: step_file('02-domain-model'))
36
38
  valid &&= Step4RailsResourceModels.run(domain_data, model_path: model_path, step_file: step_file('04-rails-resource-models'))
37
39
  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 &&= Step6RailsStructureModels.run(domain_data, model_path: model_path, step_file: step_file('06-rails-structure-models'), shim_loader: model_shim_loader)
41
+ valid &&= Step7RailsStructureControllers.run(domain_data, controller_path: controller_path, step_file: step_file('07-rails-structure-controllers'), shim_loader: controller_shim_loader)
40
42
  valid &&= Step8DomainColumns.run(domain_data, step_file: step_file('08-domain-columns'))
41
43
  valid &&= Step20Dictionary.run(domain_data, step_file: step_file('20-dictionary'))
42
44
 
@@ -8,7 +8,7 @@ module KDomain
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] # .slice(156, 1)
11
+ database[:tables] = database[:tables] # .take(10) # .slice(156, 1)
12
12
 
13
13
  guard('tables are missing') if database[:tables].nil?
14
14
  guard('indexes are missing') if database[:indexes].nil?
@@ -18,7 +18,7 @@ class Step2DomainModels < KDomain::DomainModel::Step
18
18
  name_plural: table_name, # need to check if this is correct as I know it is wrong for account_history_datum
19
19
  table_name: table_name,
20
20
  pk: primary_key(table),
21
- file: nil
21
+ file: nil # will be set in step8_domain_columns
22
22
  }
23
23
 
24
24
  attach_columns(model)
@@ -37,6 +37,7 @@ class Step6RailsStructureModels < KDomain::DomainModel::Step
37
37
 
38
38
  def attach_behavior_and_functions
39
39
  rails_structure_models.select { |model| model[:exist] }.each do |model|
40
+ # puts "model: #{model[:model_name]}"
40
41
  model[:behaviours] = extract_behavior(model[:file])
41
42
  klass_name = model[:behaviours][:class_name]
42
43
  model[:functions] = extract_functions(klass_name)
@@ -58,7 +58,10 @@ class Step7RailsStructureControllers < KDomain::DomainModel::Step
58
58
  end
59
59
 
60
60
  def attach_behavior_and_functions
61
+ rails_structure_controllers.sort_by! { |controller| controller[:full_file] }
62
+
61
63
  rails_structure_controllers.select { |controller| controller[:exist] }.each do |controller|
64
+ # puts "controller: #{controller[:full_file]}"
62
65
  unless File.exist?(controller[:full_file])
63
66
  log.error 'Controller apparently exists but no file found, this means that you need re-run rake routes'
64
67
  puts controller[:full_file]
@@ -66,7 +69,7 @@ class Step7RailsStructureControllers < KDomain::DomainModel::Step
66
69
  end
67
70
  controller[:behaviours] = extract_behavior(controller[:full_file])
68
71
  klass_name = controller[:behaviours][:class_name]
69
- controller[:functions] = extract_functions(klass_name)
72
+ controller[:functions] = extract_functions(klass_name, controller[:full_file])
70
73
  end
71
74
  end
72
75
 
@@ -97,13 +100,15 @@ class Step7RailsStructureControllers < KDomain::DomainModel::Step
97
100
  shim_loader
98
101
  end
99
102
 
100
- def extract_functions(klass_name)
103
+ def extract_functions(klass_name, controller_file)
101
104
  klass = Module.const_get(klass_name.classify)
102
105
 
103
106
  class_info = Peeky.api.build_class_info(klass.new)
104
107
 
105
108
  class_info.to_h
106
109
  rescue StandardError => e
107
- log.exception(e)
110
+ log.kv 'controller_file', controller_file
111
+ log.exception(e, style: :short)
112
+ {}
108
113
  end
109
114
  end