wallaby-core 0.2.1 → 0.2.2

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 (58) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +1 -1
  3. data/app/controllers/wallaby/resources_controller.rb +10 -1
  4. data/config/locales/wallaby_class.en.yml +2 -2
  5. data/lib/adaptors/wallaby/custom/default_provider.rb +1 -1
  6. data/lib/adaptors/wallaby/custom/model_decorator.rb +8 -7
  7. data/lib/adaptors/wallaby/custom/model_finder.rb +3 -2
  8. data/lib/adaptors/wallaby/custom/model_pagination_provider.rb +1 -1
  9. data/lib/adaptors/wallaby/custom/model_service_provider.rb +1 -40
  10. data/lib/authorizers/wallaby/cancancan_authorization_provider.rb +29 -24
  11. data/lib/authorizers/wallaby/default_authorization_provider.rb +6 -13
  12. data/lib/authorizers/wallaby/model_authorizer.rb +43 -67
  13. data/lib/authorizers/wallaby/pundit_authorization_provider.rb +21 -30
  14. data/lib/concerns/wallaby/application_concern.rb +1 -2
  15. data/lib/concerns/wallaby/authentication_concern.rb +74 -5
  16. data/lib/concerns/wallaby/authorizable.rb +8 -8
  17. data/lib/concerns/wallaby/baseable.rb +91 -10
  18. data/lib/concerns/wallaby/decoratable.rb +3 -3
  19. data/lib/concerns/wallaby/engineable.rb +1 -1
  20. data/lib/concerns/wallaby/fieldable.rb +4 -4
  21. data/lib/concerns/wallaby/paginatable.rb +3 -3
  22. data/lib/concerns/wallaby/resourcable.rb +0 -35
  23. data/lib/concerns/wallaby/resources_concern.rb +3 -2
  24. data/lib/concerns/wallaby/servicable.rb +4 -4
  25. data/lib/decorators/wallaby/resource_decorator.rb +53 -80
  26. data/lib/errors/wallaby/class_not_found.rb +6 -0
  27. data/lib/errors/wallaby/model_not_found.rb +2 -0
  28. data/lib/helpers/wallaby/resources_helper.rb +3 -0
  29. data/lib/helpers/wallaby/secure_helper.rb +3 -3
  30. data/lib/interfaces/wallaby/mode.rb +3 -3
  31. data/lib/interfaces/wallaby/model_authorization_provider.rb +15 -13
  32. data/lib/interfaces/wallaby/model_decorator.rb +15 -3
  33. data/lib/paginators/wallaby/model_paginator.rb +14 -45
  34. data/lib/servicers/wallaby/model_servicer.rb +31 -62
  35. data/lib/services/wallaby/map/mode_mapper.rb +14 -14
  36. data/lib/services/wallaby/map/model_class_collector.rb +1 -1
  37. data/lib/services/wallaby/map/model_class_mapper.rb +7 -26
  38. data/lib/services/wallaby/type_renderer.rb +0 -10
  39. data/lib/utils/wallaby/model_utils.rb +4 -3
  40. data/lib/utils/wallaby/utils.rb +9 -8
  41. data/lib/wallaby/class_array.rb +75 -0
  42. data/lib/wallaby/class_hash.rb +94 -0
  43. data/lib/wallaby/classifier.rb +29 -0
  44. data/lib/wallaby/configuration.rb +31 -2
  45. data/lib/wallaby/configuration/mapping.rb +33 -21
  46. data/lib/wallaby/configuration/metadata.rb +1 -1
  47. data/lib/wallaby/configuration/models.rb +5 -9
  48. data/lib/wallaby/configuration/security.rb +6 -3
  49. data/lib/wallaby/configuration/sorting.rb +1 -1
  50. data/lib/wallaby/core.rb +13 -7
  51. data/lib/wallaby/core/version.rb +1 -1
  52. data/lib/wallaby/engine.rb +9 -20
  53. data/lib/wallaby/logger.rb +35 -0
  54. data/lib/wallaby/map.rb +20 -17
  55. data/lib/wallaby/preloader.rb +77 -0
  56. metadata +8 -4
  57. data/lib/utils/wallaby/logger.rb +0 -21
  58. data/lib/utils/wallaby/preload_utils.rb +0 -44
@@ -3,7 +3,7 @@
3
3
  module Wallaby
4
4
  class Configuration
5
5
  # Sorting global configuration
6
- # @since 5.2.0
6
+ # @since wallaby-5.2.0
7
7
  class Sorting
8
8
  # @!attribute [w] strategy
9
9
  attr_writer :strategy
data/lib/wallaby/core.rb CHANGED
@@ -7,10 +7,15 @@ require 'wallaby/view'
7
7
 
8
8
  require 'wallaby/core/version'
9
9
  require 'wallaby/constants'
10
+ require 'wallaby/logger'
11
+ require 'wallaby/preloader'
10
12
  require 'wallaby/engine'
11
13
 
12
- require 'support/action_dispatch/routing/mapper'
13
-
14
+ # Global class attributes that holds the most important configuration/information
15
+ # NOTE: DO NOT store any Class in both configuration and map
16
+ require 'wallaby/classifier'
17
+ require 'wallaby/class_array'
18
+ require 'wallaby/class_hash'
14
19
  require 'wallaby/configuration'
15
20
  require 'wallaby/configuration/features'
16
21
  require 'wallaby/configuration/mapping'
@@ -21,6 +26,8 @@ require 'wallaby/configuration/security'
21
26
  require 'wallaby/configuration/sorting'
22
27
  require 'wallaby/map'
23
28
 
29
+ require 'support/action_dispatch/routing/mapper'
30
+
24
31
  require 'routes/wallaby/resources_router'
25
32
  require 'tree/wallaby/node'
26
33
  require 'parsers/wallaby/parser'
@@ -28,11 +35,9 @@ require 'parsers/wallaby/parser'
28
35
  require 'utils/wallaby/field_utils'
29
36
  require 'utils/wallaby/filter_utils'
30
37
  require 'utils/wallaby/locale'
31
- require 'utils/wallaby/logger'
32
38
  require 'utils/wallaby/model_utils'
33
39
  require 'utils/wallaby/module_utils'
34
40
  require 'utils/wallaby/params_utils'
35
- require 'utils/wallaby/preload_utils'
36
41
  require 'utils/wallaby/test_utils'
37
42
  require 'utils/wallaby/utils'
38
43
 
@@ -51,7 +56,6 @@ require 'concerns/wallaby/prefixable'
51
56
  require 'concerns/wallaby/resourcable'
52
57
  require 'concerns/wallaby/servicable'
53
58
  require 'concerns/wallaby/shared_helpers'
54
- # require 'concerns/wallaby/themeable'
55
59
 
56
60
  require 'interfaces/wallaby/mode'
57
61
  require 'interfaces/wallaby/model_decorator'
@@ -61,6 +65,8 @@ require 'interfaces/wallaby/model_pagination_provider'
61
65
  require 'interfaces/wallaby/model_authorization_provider'
62
66
 
63
67
  require 'errors/wallaby/general_error'
68
+
69
+ require 'errors/wallaby/class_not_found'
64
70
  require 'errors/wallaby/invalid_error'
65
71
  require 'errors/wallaby/not_implemented'
66
72
  require 'errors/wallaby/not_found'
@@ -101,9 +107,9 @@ require 'helpers/wallaby/links_helper'
101
107
  require 'helpers/wallaby/styling_helper'
102
108
 
103
109
  require 'helpers/wallaby/base_helper'
104
- require 'helpers/wallaby/resources_helper'
105
- require 'helpers/wallaby/secure_helper'
106
110
  require 'helpers/wallaby/application_helper'
111
+ require 'helpers/wallaby/secure_helper'
112
+ require 'helpers/wallaby/resources_helper'
107
113
 
108
114
  require 'responders/wallaby/resources_responder'
109
115
  require 'responders/wallaby/json_api_responder'
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Wallaby
4
4
  module Core
5
- VERSION = '0.2.1' # :nodoc:
5
+ VERSION = '0.2.2' # :nodoc:
6
6
  end
7
7
  end
@@ -3,40 +3,29 @@
3
3
  module Wallaby
4
4
  # Wallaby engine
5
5
  class Engine < ::Rails::Engine
6
- initializer 'wallaby.autoload_paths', before: :set_load_path do |_|
7
- # NOTE: this needs to be run before `set_load_path`
8
- # so that files under `app/views` can be eager loaded
9
- # and therefore, Wallaby's renderer can function properly
10
- [Rails.configuration].each do |conf|
11
- next if conf.paths['app/views'].eager_load?
12
-
13
- conf.paths.add 'app/views', eager_load: true
14
- end
15
- end
16
-
17
6
  initializer 'wallaby.development.reload' do |_|
18
7
  # NOTE: Rails reload! will hit here
19
8
  # @see http://rmosolgo.github.io/blog/2017/04/12/watching-files-during-rails-development/
20
9
  config.to_prepare do
21
10
  if Rails.env.development? || Rails.configuration.eager_load
22
- Logger.debug ' [WALLABY] Reloading...'
23
- ::Wallaby::Map.clear
24
- ::Wallaby::PreloadUtils.require_all
11
+ Logger.debug 'Reloading after Rails\' reload...', sourcing: false
12
+ Map.clear
13
+ Preloader.require_all
25
14
  end
26
15
  end
27
16
  end
28
17
 
29
18
  config.before_eager_load do
30
- # NOTE: We need to ensure that the core models are loaded before anything else
31
- Logger.debug ' [WALLABY] Preload all model files.'
32
- ::Wallaby::PreloadUtils.require_one 'app/models'
19
+ # NOTE: The models must be loaded before everything else
20
+ Logger.debug 'Preload all `app/models` files.', sourcing: false
21
+ Preloader.require_models
33
22
  end
34
23
 
35
- # Preload the rest files
36
24
  config.after_initialize do
25
+ # Load the rest files
37
26
  unless Rails.env.development? || Rails.configuration.eager_load
38
- Logger.debug ' [WALLABY] Preload files after initialize.'
39
- ::Wallaby::PreloadUtils.require_all
27
+ Logger.debug 'Preload all other eager load files after initialize.', sourcing: false
28
+ Preloader.require_all
40
29
  end
41
30
  end
42
31
  end
@@ -0,0 +1,35 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Wallaby
4
+ # Custom logger
5
+ module Logger
6
+ class << self
7
+ %i(unknown fatal error warn info debug deprecated).each do |method_id|
8
+ define_method method_id do |message, replacements = {}|
9
+ sourcing = replacements.delete :sourcing # sourcing can be set to false
10
+ heading = replacements.delete(:heading) || 'WALLABY '
11
+ new_message, from = normalize message, sourcing != false && Array(caller[sourcing || 0]) || nil
12
+ Rails.logger.public_send(
13
+ method_id == :deprecated ? :warn : method_id,
14
+ "#{heading}#{method_id.to_s.upcase}: #{format new_message, replacements}#{from}"
15
+ )
16
+ nil
17
+ end
18
+ end
19
+
20
+ protected
21
+
22
+ # @param message [Object]
23
+ def normalize(message, sources)
24
+ case message
25
+ when String
26
+ [message, sources && "\nfrom #{sources.join(" \n")}"]
27
+ when StandardError
28
+ [message.message, sources && "\n#{message.backtrace.join("\n")}"]
29
+ else
30
+ [message.inspect, sources && "\nfrom #{sources.join(" \n")}"]
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
data/lib/wallaby/map.rb CHANGED
@@ -1,26 +1,29 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Wallaby
4
- # Global storage to hold all the information that Wallaby needs to look up.
4
+ # All the lookups that Wallaby needs.
5
5
  class Map
6
6
  class << self
7
- # To store modes
7
+ include Classifier
8
+
9
+ # @!attribute [w] modes
8
10
  attr_writer :modes
9
11
 
10
- # @return [Array<Class>] descendants of Mode
12
+ # @!attribute [r] modes
13
+ # @return [Array<String>] all {Wallaby::Mode}s
11
14
  def modes
12
- @modes ||= Mode.descendants
15
+ @modes ||= ClassArray.new Mode.descendants
13
16
  end
14
17
 
15
- # @return [Hash] { model => mode }
18
+ # @return [Wallaby::ClassHash] { Model Class => {Wallaby::Mode} }
16
19
  def mode_map
17
- @mode_map ||= ModeMapper.new(modes).map.freeze
20
+ @mode_map ||= ModeMapper.execute(modes).freeze
18
21
  end
19
22
 
20
23
  # TODO: remove this method
21
24
  # @return [Array] [ model classes ]
22
25
  def model_classes
23
- @model_classes ||= ModelClassCollector.new(configuration, mode_map.keys).collect.freeze
26
+ ModelClassCollector.new(configuration, mode_map.keys).collect
24
27
  end
25
28
 
26
29
  # { model => resources name }
@@ -30,7 +33,7 @@ module Wallaby
30
33
  # @param value [String, nil] resources name
31
34
  # @return [String] resources name
32
35
  def resources_name_map(model_class, value = nil)
33
- @resources_name_map ||= {}
36
+ @resources_name_map ||= ClassHash.new
34
37
  @resources_name_map[model_class] ||= value || ModelUtils.to_resources_name(model_class)
35
38
  end
36
39
 
@@ -40,7 +43,7 @@ module Wallaby
40
43
  # @param resources_name [String]
41
44
  # @return [Class]
42
45
  def model_class_map(resources_name, value = nil)
43
- @model_class_map ||= {}
46
+ @model_class_map ||= ClassHash.new
44
47
  @model_class_map[resources_name] ||= value || ModelUtils.to_model_class(resources_name)
45
48
  end
46
49
  end
@@ -61,7 +64,7 @@ module Wallaby
61
64
  # @return [Class] resource decorator class, default to `mapping.resource_decorator`
62
65
  def resource_decorator_map(model_class, application_decorator = nil)
63
66
  application_decorator ||= mapping.resource_decorator
64
- map_of :@decorator_map, model_class, application_decorator
67
+ map_of :@resource_decorator_map, model_class, application_decorator
65
68
  end
66
69
 
67
70
  # { model => model decorator }
@@ -70,8 +73,8 @@ module Wallaby
70
73
  # @return [Wallaby::ModelDecorator] model decorator instance
71
74
  def model_decorator_map(model_class, application_decorator = nil)
72
75
  application_decorator ||= mapping.resource_decorator
73
- @model_decorator_map ||= {}
74
- @model_decorator_map[application_decorator] ||= {}
76
+ @model_decorator_map ||= ClassHash.new
77
+ @model_decorator_map[application_decorator] ||= ClassHash.new
75
78
  @model_decorator_map[application_decorator][model_class] ||=
76
79
  mode_map[model_class].try(:model_decorator).try :new, model_class
77
80
  end
@@ -109,7 +112,7 @@ module Wallaby
109
112
  # @param model_class [Class]
110
113
  # @return [Class] model service provider instance
111
114
  def service_provider_map(model_class)
112
- @service_provider_map ||= {}
115
+ @service_provider_map ||= ClassHash.new
113
116
  @service_provider_map[model_class] ||= mode_map[model_class].try :model_service_provider
114
117
  end
115
118
 
@@ -117,7 +120,7 @@ module Wallaby
117
120
  # @param model_class [Class]
118
121
  # @return [Class] model pagination provider class
119
122
  def pagination_provider_map(model_class)
120
- @pagination_provider_map ||= {}
123
+ @pagination_provider_map ||= ClassHash.new
121
124
  @pagination_provider_map[model_class] ||= mode_map[model_class].try :model_pagination_provider
122
125
  end
123
126
 
@@ -125,7 +128,7 @@ module Wallaby
125
128
  # @param model_class [Class]
126
129
  # @return [Class] model authorizer provider class
127
130
  def authorizer_provider_map(model_class)
128
- @authorizer_provider_map ||= {}
131
+ @authorizer_provider_map ||= ClassHash.new
129
132
  @authorizer_provider_map[model_class] ||= mode_map[model_class].try :model_authorization_providers
130
133
  end
131
134
  end
@@ -157,10 +160,10 @@ module Wallaby
157
160
  return unless model_class
158
161
 
159
162
  unless mode_map[model_class]
160
- Logger.warn Locale.t('map.missing_mode_for_model_class', model: model_class.name), sourcing: 2
163
+ Logger.warn Locale.t('map.missing_mode_for_model_class', model: model_class.name), sourcing: 2..5
161
164
  return
162
165
  end
163
- instance_variable_set(variable_name, instance_variable_get(variable_name) || {})
166
+ instance_variable_set(variable_name, instance_variable_get(variable_name) || ClassHash.new)
164
167
  map = instance_variable_get variable_name
165
168
  map[application_class] ||= ModelClassMapper.map application_class.descendants
166
169
  map[application_class][model_class] ||= application_class
@@ -0,0 +1,77 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Wallaby
4
+ # Preload files for eager load paths.
5
+ #
6
+ # As Wallaby is built upon the {Wallaby::Map} which will not be completed
7
+ # until all models and decorators/controllers/servicers/authorizers/paginators
8
+ # are loaded. Therefore, when Rails app is initialized,
9
+ # all files under eager load paths (mostly `app/*` folders),
10
+ # especially the files under `app/models`, need to be loaded before everything else.
11
+ class Preloader
12
+ include ActiveModel::Model
13
+
14
+ # Require all files
15
+ # @see #all_file_paths
16
+ def self.require_all
17
+ new.all_file_paths.each(&method(:require_dependency))
18
+ end
19
+
20
+ # Require models under {Wallaby::Configuration#model_paths}
21
+ # @see #model_file_paths
22
+ def self.require_models
23
+ new.model_file_paths.each(&method(:require_dependency))
24
+ end
25
+
26
+ # @return [Array<String>] all files under **Rails.configuration.eager_load_paths**
27
+ def all_file_paths
28
+ sort all_eager_load_file_paths
29
+ end
30
+
31
+ # @return [Array<String>] model files under {Wallaby::Configuration#model_paths}
32
+ def model_file_paths
33
+ sort(all_eager_load_file_paths).select(&method(:indexed))
34
+ end
35
+
36
+ # @!attribute [w] eager_load_paths
37
+ attr_writer :eager_load_paths
38
+
39
+ # @!attribute [r] eager_load_paths
40
+ # @return [Array<String, Pathname>]
41
+ def eager_load_paths # :nodoc:
42
+ @eager_load_paths ||= Rails.configuration.eager_load_paths
43
+ end
44
+
45
+ # @!attribute [w] model_paths
46
+ attr_writer :model_paths
47
+
48
+ # @!attribute [r] model_paths
49
+ # @return [Array<String>]
50
+ def model_paths # :nodoc:
51
+ @model_paths ||= Wallaby.configuration.model_paths
52
+ end
53
+
54
+ private
55
+
56
+ def all_eager_load_file_paths # :nodoc:
57
+ Dir.glob(eager_load_paths.map { |load_path| "#{load_path}/**/*.rb" })
58
+ end
59
+
60
+ # All files need to be sorted in the following orders:
61
+ # 1. {Wallaby::Configuration#model_paths} order
62
+ # 2. Alphabet order
63
+ def sort(file_paths)
64
+ file_paths.sort { |p1, p2| conditions_for(p1) <=> conditions_for(p2) }
65
+ end
66
+
67
+ # @see #sort
68
+ def conditions_for(path)
69
+ [indexed(path) || model_paths.length, path]
70
+ end
71
+
72
+ # Check if the path is in the {Wallaby::Configuration#model_paths}
73
+ def indexed(path)
74
+ model_paths.index(&path.method(:include?))
75
+ end
76
+ end
77
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: wallaby-core
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.2.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tian Chen
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-03-22 00:00:00.000000000 Z
11
+ date: 2020-04-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activemodel
@@ -147,6 +147,7 @@ files:
147
147
  - lib/concerns/wallaby/servicable.rb
148
148
  - lib/concerns/wallaby/shared_helpers.rb
149
149
  - lib/decorators/wallaby/resource_decorator.rb
150
+ - lib/errors/wallaby/class_not_found.rb
150
151
  - lib/errors/wallaby/forbidden.rb
151
152
  - lib/errors/wallaby/general_error.rb
152
153
  - lib/errors/wallaby/invalid_error.rb
@@ -195,13 +196,14 @@ files:
195
196
  - lib/utils/wallaby/field_utils.rb
196
197
  - lib/utils/wallaby/filter_utils.rb
197
198
  - lib/utils/wallaby/locale.rb
198
- - lib/utils/wallaby/logger.rb
199
199
  - lib/utils/wallaby/model_utils.rb
200
200
  - lib/utils/wallaby/module_utils.rb
201
201
  - lib/utils/wallaby/params_utils.rb
202
- - lib/utils/wallaby/preload_utils.rb
203
202
  - lib/utils/wallaby/test_utils.rb
204
203
  - lib/utils/wallaby/utils.rb
204
+ - lib/wallaby/class_array.rb
205
+ - lib/wallaby/class_hash.rb
206
+ - lib/wallaby/classifier.rb
205
207
  - lib/wallaby/configuration.rb
206
208
  - lib/wallaby/configuration/features.rb
207
209
  - lib/wallaby/configuration/mapping.rb
@@ -214,7 +216,9 @@ files:
214
216
  - lib/wallaby/core.rb
215
217
  - lib/wallaby/core/version.rb
216
218
  - lib/wallaby/engine.rb
219
+ - lib/wallaby/logger.rb
217
220
  - lib/wallaby/map.rb
221
+ - lib/wallaby/preloader.rb
218
222
  homepage: https://github.com/wallaby-rails/wallaby-core
219
223
  licenses:
220
224
  - MIT
@@ -1,21 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Wallaby
4
- # Custom logger
5
- module Logger
6
- class << self
7
- %w(unknown fatal error warn info debug).each do |method_id|
8
- define_method method_id do |message, replacements = {}|
9
- message = message.inspect unless message.is_a? String
10
- sourcing = replacements.delete :sourcing # sourcing can be set to false
11
-
12
- from = "\nfrom #{caller[sourcing || 0]}" unless sourcing == false
13
- Rails.logger.public_send(
14
- method_id, "#{method_id.upcase}: #{format message, replacements}#{from}"
15
- )
16
- nil
17
- end
18
- end
19
- end
20
- end
21
- end
@@ -1,44 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Wallaby
4
- # Preload utils
5
- module PreloadUtils
6
- class << self
7
- # Preload all files under app folder
8
- def require_all
9
- eager_load_paths.map(&method(:require_one))
10
- end
11
-
12
- # Require files under a load path
13
- # @param load_path [String, Pathname]
14
- # @see https://api.rubyonrails.org/classes/Rails/Engine.html#method-i-eager_load-21 Rails::Engine#eager_load!
15
- def require_one(load_path)
16
- Dir.glob("#{load_path}/**/*.rb").sort.each(&method(:load_class_for))
17
- end
18
-
19
- protected
20
-
21
- # @return [Array<String, Pathname>] a list of sorted eager load paths which lists `app/models`
22
- # at highest precedence
23
- def eager_load_paths
24
- Rails.configuration.eager_load_paths.sort_by do |path|
25
- - path.to_s.index(%r{/models$}).to_i
26
- end
27
- end
28
-
29
- # `constantize` is used to make Rails to handle all sort of load errors
30
- #
31
- # NOTE: don't try to use `ActiveSupport::Dependencies::Loadable.require_dependency`.
32
- # As `require_dependency` does not take care all errors raised when class/module is loaded.
33
- # @param file_path [Pathname, String]
34
- def load_class_for(file_path)
35
- module_name = file_path[%r{app/[^/]+/(.+)\.rb}, 1].gsub('/concerns/', '/')
36
- class_name = module_name.camelize
37
- class_name.constantize unless Module.const_defined? class_name
38
- rescue NameError, LoadError => e
39
- Rails.logger.debug " [WALLABY] Preload warning: #{e.message} from #{file_path}"
40
- Rails.logger.debug e.backtrace.slice(0, 5)
41
- end
42
- end
43
- end
44
- end