wallaby-core 0.1.2 → 0.2.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +60 -13
- data/app/controllers/wallaby/resources_controller.rb +15 -374
- data/app/security/ability.rb +1 -1
- data/config/locales/wallaby.en.yml +92 -128
- data/config/locales/wallaby_class.en.yml +2 -23
- data/lib/adaptors/wallaby/custom/default_provider.rb +1 -1
- data/lib/adaptors/wallaby/custom/model_decorator.rb +8 -7
- data/lib/adaptors/wallaby/custom/model_finder.rb +3 -2
- data/lib/adaptors/wallaby/custom/model_pagination_provider.rb +1 -1
- data/lib/adaptors/wallaby/custom/model_service_provider.rb +1 -40
- data/lib/authorizers/wallaby/cancancan_authorization_provider.rb +30 -24
- data/lib/authorizers/wallaby/default_authorization_provider.rb +6 -13
- data/lib/authorizers/wallaby/model_authorizer.rb +43 -67
- data/lib/authorizers/wallaby/pundit_authorization_provider.rb +21 -30
- data/lib/concerns/wallaby/application_concern.rb +110 -0
- data/lib/concerns/wallaby/authentication_concern.rb +162 -0
- data/lib/concerns/wallaby/authorizable.rb +8 -14
- data/lib/concerns/wallaby/baseable.rb +91 -10
- data/lib/concerns/wallaby/decoratable.rb +3 -3
- data/lib/concerns/wallaby/engineable.rb +1 -1
- data/lib/concerns/wallaby/fieldable.rb +4 -4
- data/lib/concerns/wallaby/paginatable.rb +3 -3
- data/lib/concerns/wallaby/prefixable.rb +21 -0
- data/lib/concerns/wallaby/resourcable.rb +4 -35
- data/lib/concerns/wallaby/resources_concern.rb +434 -0
- data/lib/concerns/wallaby/servicable.rb +4 -10
- data/lib/decorators/wallaby/resource_decorator.rb +53 -80
- data/lib/errors/wallaby/{cell_handling.rb → class_not_found.rb} +1 -1
- data/lib/errors/wallaby/model_not_found.rb +3 -1
- data/lib/errors/wallaby/resource_not_found.rb +1 -1
- data/lib/helpers/wallaby/application_helper.rb +6 -9
- data/lib/helpers/wallaby/form_helper.rb +2 -9
- data/lib/helpers/wallaby/index_helper.rb +2 -14
- data/lib/helpers/wallaby/links_helper.rb +5 -5
- data/lib/helpers/wallaby/resources_helper.rb +3 -7
- data/lib/helpers/wallaby/secure_helper.rb +3 -3
- data/lib/helpers/wallaby/styling_helper.rb +17 -3
- data/lib/interfaces/wallaby/mode.rb +5 -5
- data/lib/interfaces/wallaby/model_authorization_provider.rb +15 -13
- data/lib/interfaces/wallaby/model_decorator.rb +15 -3
- data/lib/paginators/wallaby/model_paginator.rb +14 -45
- data/lib/parsers/wallaby/parser.rb +49 -14
- data/lib/routes/wallaby/resources_router.rb +1 -1
- data/lib/servicers/wallaby/model_servicer.rb +32 -62
- data/lib/services/wallaby/map/mode_mapper.rb +14 -14
- data/lib/services/wallaby/map/model_class_collector.rb +2 -2
- data/lib/services/wallaby/map/model_class_mapper.rb +7 -26
- data/lib/services/wallaby/prefixes_builder.rb +15 -49
- data/lib/services/wallaby/type_renderer.rb +3 -13
- data/lib/utils/wallaby/locale.rb +53 -0
- data/lib/utils/wallaby/model_utils.rb +4 -3
- data/lib/utils/wallaby/module_utils.rb +1 -1
- data/lib/utils/wallaby/utils.rb +10 -15
- data/lib/wallaby/class_array.rb +75 -0
- data/lib/wallaby/class_hash.rb +94 -0
- data/lib/wallaby/classifier.rb +29 -0
- data/lib/wallaby/configuration/mapping.rb +33 -27
- data/lib/wallaby/configuration/metadata.rb +1 -1
- data/lib/wallaby/configuration/models.rb +5 -9
- data/lib/wallaby/configuration/security.rb +6 -3
- data/lib/wallaby/configuration/sorting.rb +1 -1
- data/lib/wallaby/configuration.rb +31 -2
- data/lib/wallaby/constants.rb +10 -8
- data/lib/wallaby/core/version.rb +1 -1
- data/lib/wallaby/core.rb +21 -16
- data/lib/wallaby/engine.rb +9 -20
- data/lib/wallaby/logger.rb +35 -0
- data/lib/wallaby/map.rb +20 -17
- data/lib/wallaby/preloader.rb +77 -0
- metadata +48 -22
- data/app/controllers/wallaby/application_controller.rb +0 -84
- data/app/controllers/wallaby/secure_controller.rb +0 -81
- data/lib/concerns/wallaby/rails_overridden_methods.rb +0 -42
- data/lib/concerns/wallaby/themeable.rb +0 -40
- data/lib/paginators/wallaby/resource_paginator.rb +0 -12
- data/lib/renderers/wallaby/cell.rb +0 -137
- data/lib/renderers/wallaby/cell_resolver.rb +0 -89
- data/lib/renderers/wallaby/custom_lookup_context.rb +0 -64
- data/lib/renderers/wallaby/custom_partial_renderer.rb +0 -33
- data/lib/renderers/wallaby/custom_renderer.rb +0 -16
- data/lib/utils/wallaby/cell_utils.rb +0 -34
- data/lib/utils/wallaby/preload_utils.rb +0 -44
@@ -1,137 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Wallaby
|
4
|
-
# In order to improve the rendering performance, cell is designed as simple partial component.
|
5
|
-
# @since 5.2.0
|
6
|
-
class Cell
|
7
|
-
# @!attribute [r] context
|
8
|
-
# @return [Object] view context
|
9
|
-
attr_reader :context
|
10
|
-
|
11
|
-
# @!attribute [r] local_assigns
|
12
|
-
# @return [Hash] a list of local_assigns containing {#object}, {#field_name}, {#value}, {#metadata} and {#form}
|
13
|
-
attr_reader :local_assigns
|
14
|
-
|
15
|
-
# @!attribute [r] buffer
|
16
|
-
# @return [String] output string buffer
|
17
|
-
attr_reader :buffer
|
18
|
-
|
19
|
-
delegate(*ERB::Util.singleton_methods, to: ERB::Util)
|
20
|
-
|
21
|
-
# @param context [ActionView::Context] view context
|
22
|
-
# @param local_assigns [Hash] local variables
|
23
|
-
def initialize(context, local_assigns)
|
24
|
-
@context = context
|
25
|
-
@local_assigns = local_assigns
|
26
|
-
end
|
27
|
-
|
28
|
-
# @!attribute [r] object
|
29
|
-
# @return [Object] object
|
30
|
-
def object
|
31
|
-
local_assigns[:object]
|
32
|
-
end
|
33
|
-
|
34
|
-
# @!attribute [w] object
|
35
|
-
def object=(object)
|
36
|
-
local_assigns[:object] = object
|
37
|
-
end
|
38
|
-
|
39
|
-
# @!attribute [r] field_name
|
40
|
-
# @return [String] field name
|
41
|
-
def field_name
|
42
|
-
local_assigns[:field_name]
|
43
|
-
end
|
44
|
-
|
45
|
-
# @!attribute [w] field_name
|
46
|
-
def field_name=(field_name)
|
47
|
-
local_assigns[:field_name] = field_name
|
48
|
-
end
|
49
|
-
|
50
|
-
# @!attribute [r] value
|
51
|
-
# @return [String] value
|
52
|
-
def value
|
53
|
-
local_assigns[:value]
|
54
|
-
end
|
55
|
-
|
56
|
-
# @!attribute [w] value
|
57
|
-
def value=(value)
|
58
|
-
local_assigns[:value] = value
|
59
|
-
end
|
60
|
-
|
61
|
-
# @!attribute [r] metadata
|
62
|
-
# @return [String] metadata
|
63
|
-
def metadata
|
64
|
-
local_assigns[:metadata]
|
65
|
-
end
|
66
|
-
|
67
|
-
# @!attribute [w] metadata
|
68
|
-
def metadata=(metadata)
|
69
|
-
local_assigns[:metadata] = metadata
|
70
|
-
end
|
71
|
-
|
72
|
-
# @!attribute [r] form
|
73
|
-
# @return [ActionView::Helpers::FormBuilder] form object
|
74
|
-
def form
|
75
|
-
local_assigns[:form]
|
76
|
-
end
|
77
|
-
|
78
|
-
# @!attribute [w] form
|
79
|
-
def form=(form)
|
80
|
-
local_assigns[:form] = form
|
81
|
-
end
|
82
|
-
|
83
|
-
# @note this is a template method that can be overridden by subclasses
|
84
|
-
# Produce output for this cell component.
|
85
|
-
#
|
86
|
-
# Please note that the output doesn't include the buffer produced by {#concat}.
|
87
|
-
# Therefore, use {#render_complete} method instead when the cell is rendered.
|
88
|
-
def render; end
|
89
|
-
|
90
|
-
# This method produces the complete rendered string including the buffer produced by {#concat}.
|
91
|
-
# @return [String] output of the cell
|
92
|
-
def render_complete(&block)
|
93
|
-
@buffer = EMPTY_STRING.dup # reset buffer before rendering
|
94
|
-
last_part = render(&block)
|
95
|
-
@buffer << last_part.to_s
|
96
|
-
end
|
97
|
-
|
98
|
-
# Append string to output buffer
|
99
|
-
# @param string [String] string to concat
|
100
|
-
def concat(string)
|
101
|
-
(@buffer ||= EMPTY_STRING.dup) << string
|
102
|
-
end
|
103
|
-
|
104
|
-
# @overload at(name)
|
105
|
-
# Get view instance variable value
|
106
|
-
# @example To get view instance variable value
|
107
|
-
# at('name') # => get value of `@name` from the view
|
108
|
-
# @param name [String, Symbol] view instance variable name without `@`
|
109
|
-
# @overload at(name, value)
|
110
|
-
# Set view instance variable value
|
111
|
-
# @example To set view instance variable value
|
112
|
-
# at('name', value) # => set value of `@name` in the view
|
113
|
-
# @param name [String, Symbol] view instance variable name without `@`
|
114
|
-
# @param value [object] value
|
115
|
-
# @return [object] view instance variable value
|
116
|
-
def at(*args)
|
117
|
-
raise ArgumentError unless args.length.in? [1, 2]
|
118
|
-
return context.instance_variable_get :"@#{args.first}" if args.length == 1
|
119
|
-
|
120
|
-
context.instance_variable_set :"@#{args.first}", args.last
|
121
|
-
end
|
122
|
-
|
123
|
-
private
|
124
|
-
|
125
|
-
# Delegate missing method to {#context}
|
126
|
-
def method_missing(method_id, *args, &block)
|
127
|
-
return super unless context.respond_to? method_id
|
128
|
-
|
129
|
-
context.public_send method_id, *args, &block
|
130
|
-
end
|
131
|
-
|
132
|
-
# Delegate missing method check to {#context}
|
133
|
-
def respond_to_missing?(method_id, _include_private)
|
134
|
-
context.respond_to?(method_id) || super
|
135
|
-
end
|
136
|
-
end
|
137
|
-
end
|
@@ -1,89 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Wallaby
|
4
|
-
# Resolver to provide support for cell and partial
|
5
|
-
# @since 5.2.0
|
6
|
-
class CellResolver < ActionView::OptimizedFileSystemResolver
|
7
|
-
# for Rails 5.2 and below
|
8
|
-
begin
|
9
|
-
# @note this method is only applicable to Rails 5.2 and below
|
10
|
-
# A cell query looks like:
|
11
|
-
#
|
12
|
-
# ```
|
13
|
-
# app/views/wallaby/resources/index/integer{_en,}{_html,}.rb
|
14
|
-
# ```
|
15
|
-
#
|
16
|
-
# Wallaby adds it to the front of the whole query as below:
|
17
|
-
#
|
18
|
-
# ```
|
19
|
-
# {app/views/wallaby/resources/index/integer{_en,}{_html,}.rb,
|
20
|
-
# app/views/wallaby/resources/index/_integer{.en,}{.html,}{.erb,}}
|
21
|
-
# ```
|
22
|
-
# @param path [String]
|
23
|
-
# @param details [Hash]
|
24
|
-
# see {https://api.rubyonrails.org/classes/ActionView/LookupContext/ViewPaths.html#method-i-detail_args_for
|
25
|
-
# Detials from ViewPaths}
|
26
|
-
# @return [String] a path query
|
27
|
-
def build_query(path, details)
|
28
|
-
# NOTE: super is impacted by {#escape_entry}
|
29
|
-
origin = super
|
30
|
-
file_name = origin[%r{(?<=/\{,_\})[^/\{]+}]
|
31
|
-
return origin unless file_name
|
32
|
-
|
33
|
-
base_dir = origin.gsub(%r{/[^/]*$}, '')
|
34
|
-
locales = convert details[:locale]
|
35
|
-
formats = convert details[:formats]
|
36
|
-
cell = "#{base_dir}/#{file_name}{#{locales}}{#{formats}}.rb"
|
37
|
-
"{#{cell},#{origin}}"
|
38
|
-
end
|
39
|
-
end
|
40
|
-
|
41
|
-
# for Rails 6 and above
|
42
|
-
begin
|
43
|
-
# @note this method is only applicable to Rails 6 and above
|
44
|
-
# This is to extend the origin functionality to enable to return cell file.
|
45
|
-
# at highest precedence.
|
46
|
-
# @param path [String]
|
47
|
-
# @param details [Hash]
|
48
|
-
# @return [ActionView::Template] found template
|
49
|
-
def find_template_paths_from_details(path, details)
|
50
|
-
details[:handlers].unshift(:rb) if details[:handlers].try(:first) != :rb
|
51
|
-
super
|
52
|
-
end
|
53
|
-
|
54
|
-
# @note this method is only applicable to Rails 6 and above
|
55
|
-
# This is to extend the origin functionality to enable to query cell files.
|
56
|
-
# @param path [String]
|
57
|
-
# @param details [Hash]
|
58
|
-
# @return [Regexp]
|
59
|
-
def build_regex(path, details)
|
60
|
-
origin = super.source
|
61
|
-
Regexp.new(
|
62
|
-
origin
|
63
|
-
.gsub(%r{/\{,_\}([^/]+)\z}, '/_?\\1')
|
64
|
-
.gsub('\\.', '[_\\.]')
|
65
|
-
.gsub('raw|', 'rb|raw|')
|
66
|
-
)
|
67
|
-
end
|
68
|
-
end
|
69
|
-
|
70
|
-
# This is to extend the origin funcationality to enable the query
|
71
|
-
# to look for cell files
|
72
|
-
# @example extend the query
|
73
|
-
# escape_entry('integer') # => '/{,_}integer'
|
74
|
-
# @param entry [String]
|
75
|
-
# @return [String] an escaped and extended query
|
76
|
-
def escape_entry(entry)
|
77
|
-
super.gsub(%r{/_([^/]+)\z}, '/{,_}\1')
|
78
|
-
end
|
79
|
-
|
80
|
-
private
|
81
|
-
|
82
|
-
# @example concat a list of values into a string
|
83
|
-
# convert(['html', 'csv']) # => '_html,_cvs,'
|
84
|
-
# @param values [Array<String>]
|
85
|
-
def convert(values)
|
86
|
-
(values.map { |v| "_#{v}" } << '').join ','
|
87
|
-
end
|
88
|
-
end
|
89
|
-
end
|
@@ -1,64 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Wallaby
|
4
|
-
# A custom lookup context that uses {Wallaby::CellResolver} to find cell/partial
|
5
|
-
class CustomLookupContext < ::ActionView::LookupContext
|
6
|
-
def self.normalize(lookup, details: nil, prefixes: nil)
|
7
|
-
return lookup if lookup.is_a? self
|
8
|
-
|
9
|
-
CustomLookupContext.new(
|
10
|
-
lookup.view_paths,
|
11
|
-
details || lookup.instance_variable_get('@details'),
|
12
|
-
prefixes || lookup.prefixes
|
13
|
-
)
|
14
|
-
end
|
15
|
-
|
16
|
-
# @note for Rails 6 and above
|
17
|
-
# It overrides the origin method to convert paths to {Wallaby::CellResolver}
|
18
|
-
# @param paths [Array]
|
19
|
-
# @return [ActionView::PathSet]
|
20
|
-
def build_view_paths(paths)
|
21
|
-
ActionView::PathSet.new Array(paths).map(&method(:convert))
|
22
|
-
end
|
23
|
-
|
24
|
-
# @note for Rails 5.2 and below
|
25
|
-
# It overrides the origin method to convert paths to {Wallaby::CellResolver}
|
26
|
-
# @param paths [Array]
|
27
|
-
# @return [ActionView::PathSet]
|
28
|
-
def view_paths=(paths)
|
29
|
-
@view_paths = build_view_paths paths
|
30
|
-
end
|
31
|
-
|
32
|
-
# It overrides the oirgin method to call the origin `find_template` and cache the result during a request.
|
33
|
-
# @param name [String]
|
34
|
-
# @param prefixes [Array<String>]
|
35
|
-
# @param partial [Boolean]
|
36
|
-
# @param keys [Array<String>] keys of local variables
|
37
|
-
# @param options [Hash]
|
38
|
-
def find_template(name, prefixes = [], partial = false, keys = [], options = {})
|
39
|
-
prefixes = [] if partial && name.include?(SLASH) # reset the prefixes if `/` is detected
|
40
|
-
key = [name, prefixes, partial, keys, options].map(&:inspect).join(SLASH)
|
41
|
-
cached_lookup[key] ||= super
|
42
|
-
end
|
43
|
-
|
44
|
-
protected
|
45
|
-
|
46
|
-
# @!attribute [r] cached_lookup
|
47
|
-
# Cached lookup result
|
48
|
-
def cached_lookup
|
49
|
-
@cached_lookup ||= {}
|
50
|
-
end
|
51
|
-
|
52
|
-
# Convert path to {Wallaby::CellResolver}
|
53
|
-
# @param path [Object]
|
54
|
-
# @return [Wallaby::CellResolver]
|
55
|
-
def convert(path)
|
56
|
-
case path
|
57
|
-
when ActionView::OptimizedFileSystemResolver, Pathname, String
|
58
|
-
CellResolver.new path.to_s
|
59
|
-
else
|
60
|
-
path
|
61
|
-
end
|
62
|
-
end
|
63
|
-
end
|
64
|
-
end
|
@@ -1,33 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Wallaby
|
4
|
-
# Custom partial renderer to provide support for cell rendering
|
5
|
-
class CustomPartialRenderer < ::ActionView::PartialRenderer
|
6
|
-
# When a type partial is found, it works as usual.
|
7
|
-
#
|
8
|
-
# But when a cell is found, there is an exception {Wallaby::CellHandling} raised. This error will be captured,
|
9
|
-
# and the cell will be rendered.
|
10
|
-
# @param context [ActionView::Context]
|
11
|
-
# @param options [Hash]
|
12
|
-
# @param block [Proc]
|
13
|
-
# @return [String] HTML output
|
14
|
-
def render(context, options, block)
|
15
|
-
super.try do |rendered|
|
16
|
-
ModuleUtils.try_to(rendered, :body) || # Rails 6 and above
|
17
|
-
rendered # Rails 5.2 and below
|
18
|
-
end
|
19
|
-
rescue CellHandling => e
|
20
|
-
CellUtils.render context, e.message, options[:locals], &block
|
21
|
-
end
|
22
|
-
|
23
|
-
# Override origin method to stop rendering when a cell is found.
|
24
|
-
# @return [ActionView::Template] partial template
|
25
|
-
# @raise [Wallaby:::CellHandling] when a cell is found
|
26
|
-
def find_partial(*)
|
27
|
-
super.tap do |partial|
|
28
|
-
cell = CellUtils.find_cell(partial.identifier, partial.inspect)
|
29
|
-
raise CellHandling, cell if cell
|
30
|
-
end
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|
@@ -1,16 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Wallaby
|
4
|
-
# Custom view renderer to provide support for cell rendering
|
5
|
-
class CustomRenderer < ::ActionView::Renderer
|
6
|
-
def initialize(lookup_context)
|
7
|
-
super CustomLookupContext.normalize(lookup_context)
|
8
|
-
end
|
9
|
-
|
10
|
-
# @return [String] HTML output
|
11
|
-
# @see Wallaby::CustomPartialRenderer
|
12
|
-
def render_partial(context, options, &block) #:nodoc:
|
13
|
-
CustomPartialRenderer.new(lookup_context).render(context, options, block)
|
14
|
-
end
|
15
|
-
end
|
16
|
-
end
|
@@ -1,34 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Wallaby
|
4
|
-
# Cell utils
|
5
|
-
module CellUtils
|
6
|
-
class << self
|
7
|
-
# Render a cell and produce output
|
8
|
-
# @param context [ActionView::Context]
|
9
|
-
# @param file_name [String]
|
10
|
-
# @param locals [Hash]
|
11
|
-
# @return [String] output
|
12
|
-
def render(context, file_name, locals = {}, &block)
|
13
|
-
snake_class = file_name[%r{(?<=app/views/).+(?=\.rb)}]
|
14
|
-
cell_class = snake_class.camelize.constantize
|
15
|
-
Rails.logger.info " Rendered [cell] #{file_name}"
|
16
|
-
cell_class.new(context, locals).render_complete(&block)
|
17
|
-
end
|
18
|
-
|
19
|
-
# Check if a partial is a cell or not
|
20
|
-
# @param partial_path [String]
|
21
|
-
# @return [true] if partial is a `rb` file
|
22
|
-
# @return [false] otherwise
|
23
|
-
def find_cell(*partials)
|
24
|
-
partials.find { |partial| partial.end_with? '.rb' }
|
25
|
-
end
|
26
|
-
|
27
|
-
# @param action_name [String, Symbol]
|
28
|
-
# @return [String, Symbol] action prefix
|
29
|
-
def to_action_prefix(action_name)
|
30
|
-
FORM_ACTIONS[action_name] || action_name
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|
34
|
-
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.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
|