wallaby-core 0.2.11 → 0.3.0.beta1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/controllers/wallaby/resources_controller.rb +20 -7
- data/app/security/ability.rb +1 -1
- data/config/routes.rb +21 -14
- data/lib/adaptors/wallaby/custom/default_provider.rb +1 -1
- data/lib/adaptors/wallaby/custom/model_decorator.rb +5 -17
- data/lib/adaptors/wallaby/custom/model_finder.rb +3 -3
- data/lib/adaptors/wallaby/custom/model_pagination_provider.rb +1 -1
- data/lib/adaptors/wallaby/custom/model_service_provider.rb +1 -1
- data/lib/authorizers/wallaby/cancancan_authorization_provider.rb +12 -5
- data/lib/authorizers/wallaby/default_authorization_provider.rb +10 -1
- data/lib/authorizers/wallaby/model_authorizer.rb +41 -16
- data/lib/authorizers/wallaby/pundit_authorization_provider.rb +22 -8
- data/lib/concerns/wallaby/application_concern.rb +41 -71
- data/lib/concerns/wallaby/authentication_concern.rb +29 -127
- data/lib/concerns/wallaby/authorizable.rb +14 -57
- data/lib/concerns/wallaby/baseable.rb +24 -57
- data/lib/concerns/wallaby/configurable.rb +416 -0
- data/lib/concerns/wallaby/decoratable.rb +24 -60
- data/lib/concerns/wallaby/engineable.rb +29 -46
- data/lib/concerns/wallaby/fieldable.rb +45 -56
- data/lib/concerns/wallaby/paginatable.rb +20 -51
- data/lib/concerns/wallaby/prefixable.rb +24 -4
- data/lib/concerns/wallaby/resourcable.rb +130 -72
- data/lib/concerns/wallaby/resources_concern.rb +205 -305
- data/lib/concerns/wallaby/servicable.rb +8 -48
- data/lib/concerns/wallaby/urlable.rb +69 -0
- data/lib/decorators/wallaby/resource_decorator.rb +72 -34
- data/lib/errors/wallaby/class_not_found.rb +1 -2
- data/lib/errors/wallaby/forbidden.rb +1 -2
- data/lib/errors/wallaby/general_error.rb +1 -1
- data/lib/errors/wallaby/invalid_error.rb +1 -2
- data/lib/errors/wallaby/method_removed.rb +5 -0
- data/lib/errors/wallaby/model_not_found.rb +1 -2
- data/lib/errors/wallaby/not_authenticated.rb +1 -2
- data/lib/errors/wallaby/not_found.rb +1 -2
- data/lib/errors/wallaby/not_implemented.rb +1 -2
- data/lib/errors/wallaby/resource_not_found.rb +1 -2
- data/lib/errors/wallaby/unprocessable_entity.rb +1 -2
- data/lib/fields/wallaby/all_fields.rb +63 -0
- data/lib/forms/wallaby/form_builder.rb +2 -2
- data/lib/generators/wallaby/engine/application_generator.rb +33 -0
- data/lib/generators/wallaby/engine/authorizer/USAGE +20 -0
- data/lib/generators/wallaby/engine/authorizer/authorizer_generator.rb +19 -0
- data/lib/generators/wallaby/engine/authorizer/templates/authorizer.rb.erb +35 -0
- data/lib/generators/wallaby/engine/controller/USAGE +20 -0
- data/lib/generators/wallaby/engine/controller/controller_generator.rb +23 -0
- data/lib/generators/wallaby/engine/controller/templates/controller.rb.erb +130 -0
- data/lib/generators/wallaby/engine/decorator/USAGE +20 -0
- data/lib/generators/wallaby/engine/decorator/decorator_generator.rb +19 -0
- data/lib/generators/wallaby/engine/decorator/templates/decorator.rb.erb +5 -0
- data/lib/generators/wallaby/engine/install/USAGE +19 -0
- data/lib/generators/wallaby/engine/install/install_generator.rb +91 -0
- data/lib/generators/wallaby/engine/install/templates/application_authorizer.rb.erb +37 -0
- data/lib/generators/wallaby/engine/install/templates/application_controller.rb.erb +173 -0
- data/lib/generators/wallaby/engine/install/templates/application_decorator.rb.erb +7 -0
- data/lib/generators/wallaby/engine/install/templates/application_paginator.rb.erb +27 -0
- data/lib/generators/wallaby/engine/install/templates/application_servicer.rb.erb +47 -0
- data/lib/generators/wallaby/engine/install/templates/initializer.rb.erb +16 -0
- data/lib/generators/wallaby/engine/paginator/USAGE +20 -0
- data/lib/generators/wallaby/engine/paginator/paginator_generator.rb +19 -0
- data/lib/generators/wallaby/engine/paginator/templates/paginator.rb.erb +25 -0
- data/lib/generators/wallaby/engine/servicer/USAGE +20 -0
- data/lib/generators/wallaby/engine/servicer/servicer_generator.rb +19 -0
- data/lib/generators/wallaby/engine/servicer/templates/servicer.rb.erb +45 -0
- data/lib/helpers/wallaby/application_helper.rb +10 -59
- data/lib/helpers/wallaby/base_helper.rb +11 -11
- data/lib/helpers/wallaby/configuration_helper.rb +36 -4
- data/lib/helpers/wallaby/form_helper.rb +1 -1
- data/lib/helpers/wallaby/index_helper.rb +19 -9
- data/lib/helpers/wallaby/links_helper.rb +13 -80
- data/lib/helpers/wallaby/resources_helper.rb +39 -7
- data/lib/helpers/wallaby/secure_helper.rb +20 -19
- data/lib/interfaces/wallaby/mode.rb +8 -8
- data/lib/interfaces/wallaby/model_authorization_provider.rb +23 -22
- data/lib/interfaces/wallaby/model_decorator.rb +36 -48
- data/lib/interfaces/wallaby/model_finder.rb +3 -3
- data/lib/interfaces/wallaby/model_pagination_provider.rb +2 -6
- data/lib/interfaces/wallaby/model_service_provider.rb +4 -4
- data/lib/paginators/wallaby/model_paginator.rb +1 -1
- data/lib/responders/wallaby/json_api_responder.rb +10 -5
- data/lib/responders/wallaby/resources_responder.rb +7 -2
- data/lib/routes/wallaby/engines/base_route.rb +78 -0
- data/lib/routes/wallaby/engines/custom_app_route.rb +92 -0
- data/lib/routes/wallaby/engines/engine_route.rb +77 -0
- data/lib/routes/wallaby/resources_router.rb +100 -45
- data/lib/servicers/wallaby/model_servicer.rb +13 -13
- data/lib/services/wallaby/authorizer_finder.rb +23 -0
- data/lib/services/wallaby/class_finder.rb +42 -0
- data/lib/services/wallaby/controller_finder.rb +29 -0
- data/lib/services/wallaby/decorator_finder.rb +34 -0
- data/lib/services/wallaby/default_models_excluder.rb +45 -0
- data/lib/services/wallaby/engine_name_finder.rb +14 -11
- data/lib/services/wallaby/engine_url_for.rb +82 -37
- data/lib/services/wallaby/fields_regulator.rb +34 -0
- data/lib/services/wallaby/map/mode_mapper.rb +4 -4
- data/lib/services/wallaby/map/model_class_mapper.rb +1 -1
- data/lib/services/wallaby/model_class_filter.rb +29 -0
- data/lib/services/wallaby/paginator_finder.rb +24 -0
- data/lib/services/wallaby/prefixes_builder.rb +49 -8
- data/lib/services/wallaby/servicer_finder.rb +31 -0
- data/lib/services/wallaby/sorting/hash_builder.rb +9 -0
- data/lib/services/wallaby/sorting/link_builder.rb +7 -10
- data/lib/services/wallaby/sorting/next_builder.rb +1 -12
- data/lib/services/wallaby/sorting/single_builder.rb +1 -1
- data/lib/support/action_dispatch/routing/mapper.rb +29 -4
- data/lib/utils/wallaby/field_utils.rb +9 -8
- data/lib/utils/wallaby/inflector.rb +94 -0
- data/lib/utils/wallaby/locale.rb +2 -2
- data/lib/utils/wallaby/module_utils.rb +3 -10
- data/lib/utils/wallaby/utils.rb +21 -14
- data/lib/wallaby/class_array.rb +18 -13
- data/lib/wallaby/class_hash.rb +16 -14
- data/lib/wallaby/classifier.rb +4 -2
- data/lib/wallaby/configuration/features.rb +8 -2
- data/lib/wallaby/configuration/mapping.rb +66 -112
- data/lib/wallaby/configuration/metadata.rb +15 -12
- data/lib/wallaby/configuration/models.rb +27 -25
- data/lib/wallaby/configuration/pagination.rb +15 -19
- data/lib/wallaby/configuration/security.rb +88 -80
- data/lib/wallaby/configuration/sorting.rb +15 -17
- data/lib/wallaby/configuration.rb +58 -23
- data/lib/wallaby/constants.rb +21 -13
- data/lib/wallaby/core/version.rb +1 -1
- data/lib/wallaby/core.rb +34 -10
- data/lib/wallaby/deprecator.rb +81 -0
- data/lib/wallaby/engine.rb +2 -19
- data/lib/wallaby/guesser.rb +45 -0
- data/lib/wallaby/logger.rb +35 -13
- data/lib/wallaby/map.rb +11 -88
- data/lib/wallaby/preloader.rb +9 -31
- metadata +120 -15
- data/config/locales/wallaby_class.en.yml +0 -9
- data/lib/concerns/wallaby/defaultable.rb +0 -38
- data/lib/concerns/wallaby/shared_helpers.rb +0 -22
- data/lib/services/wallaby/map/model_class_collector.rb +0 -49
- data/lib/services/wallaby/type_renderer.rb +0 -40
- data/lib/utils/wallaby/model_utils.rb +0 -52
- data/lib/utils/wallaby/test_utils.rb +0 -34
@@ -0,0 +1,45 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Wallaby
|
4
|
+
# Guess the associated class for give class
|
5
|
+
class Guesser
|
6
|
+
SUFFIX = /(Controller|Decorator|Servicer|Authorizer|Paginator)$/.freeze # :no_doc:
|
7
|
+
|
8
|
+
class << self
|
9
|
+
# Find out the first demodulized class constant for the give class name.
|
10
|
+
# For example, if given class name is **Admin::Order::ItemsController**,
|
11
|
+
# then it will try to constantize the following demodulized class names
|
12
|
+
# and return the first one that is successfully constantized:
|
13
|
+
#
|
14
|
+
# - Admin::Order::Item
|
15
|
+
# - Order::Item
|
16
|
+
# - Item
|
17
|
+
# @param class_name [String]
|
18
|
+
# @param options [Hash]
|
19
|
+
# @return [Class] found associated class
|
20
|
+
# @return [nil] if not found
|
21
|
+
def class_for(class_name, options = {}, &block)
|
22
|
+
suffix = options[:suffix] || EMPTY_STRING
|
23
|
+
replacement = options[:replacement] || SUFFIX
|
24
|
+
denamespace = options.key?(:denamespace) ? options[:denamespace] : true
|
25
|
+
base_name = class_name.gsub(replacement, EMPTY_STRING).singularize << suffix
|
26
|
+
possible_class_from(base_name, denamespace: denamespace, &block)
|
27
|
+
end
|
28
|
+
|
29
|
+
def possible_class_from(class_name, denamespace: false)
|
30
|
+
target = nil
|
31
|
+
parts = denamespace ? class_name.split(COLONS) : [class_name]
|
32
|
+
parts.each_with_index.find do |_, index|
|
33
|
+
klass = Classifier.to_class(parts[index..].join(COLONS))
|
34
|
+
next unless klass
|
35
|
+
# additional checking, the given block should return true to continue
|
36
|
+
next if block_given? && !yield(klass)
|
37
|
+
|
38
|
+
target = klass
|
39
|
+
end
|
40
|
+
|
41
|
+
target
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
data/lib/wallaby/logger.rb
CHANGED
@@ -4,31 +4,53 @@ module Wallaby
|
|
4
4
|
# Custom logger
|
5
5
|
module Logger
|
6
6
|
class << self
|
7
|
-
%i
|
7
|
+
%i[unknown fatal error warn info debug].each do |method_id|
|
8
8
|
define_method method_id do |message, replacements = {}|
|
9
|
-
sourcing = replacements.delete
|
9
|
+
sourcing = replacements.delete(:sourcing) # sourcing can be set to false
|
10
10
|
heading = replacements.delete(:heading) || 'WALLABY '
|
11
|
-
new_message, from = normalize
|
12
|
-
|
13
|
-
|
11
|
+
new_message, from = normalize(
|
12
|
+
message, (sourcing != false && Array.wrap(caller[sourcing || 0])) || nil
|
13
|
+
)
|
14
|
+
Wallaby.configuration.logger.try(
|
15
|
+
method_id,
|
14
16
|
"#{heading}#{method_id.to_s.upcase}: #{format new_message, replacements}#{from}"
|
15
17
|
)
|
16
18
|
nil
|
17
19
|
end
|
18
20
|
end
|
19
21
|
|
22
|
+
# @param key [Symbol,String]
|
23
|
+
# @param message_or_config [String, false]
|
24
|
+
# @param replacements [Hash]
|
25
|
+
# @example to disable a particular hint message:
|
26
|
+
# Wallaby::Logger.hint(:customize_controller, false) if Wallaby::Logger.debug?
|
27
|
+
def hint(key, message_or_config, replacements = {})
|
28
|
+
@hint ||= {}
|
29
|
+
return @hint[key] = false if message_or_config == false
|
30
|
+
return if @hint[key] == false || !message_or_config.is_a?(String)
|
31
|
+
|
32
|
+
new_message = <<~MESSAGE
|
33
|
+
#{message_or_config}
|
34
|
+
This kind of debug message can be disabled in `config/initializers/wallaby.rb`:
|
35
|
+
|
36
|
+
Wallaby::Logger.hint(#{key.inspect}, false) if Wallaby::Logger.debug?
|
37
|
+
MESSAGE
|
38
|
+
debug(new_message, replacements.merge(sourcing: false))
|
39
|
+
end
|
40
|
+
|
20
41
|
protected
|
21
42
|
|
22
|
-
# @param message [Object]
|
43
|
+
# @param message [String,StandardError,Object]
|
44
|
+
# @param sources [Array<String>] array of files
|
23
45
|
def normalize(message, sources)
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
else
|
30
|
-
[message.inspect, sources && "\nfrom #{sources.join(" \n")}"]
|
46
|
+
if message.is_a?(StandardError)
|
47
|
+
return [
|
48
|
+
message.message,
|
49
|
+
sources && "\n#{message.backtrace.join("\n")}"
|
50
|
+
]
|
31
51
|
end
|
52
|
+
|
53
|
+
[message.to_s, sources && "\nfrom #{sources.join(" \n")}"]
|
32
54
|
end
|
33
55
|
end
|
34
56
|
end
|
data/lib/wallaby/map.rb
CHANGED
@@ -10,24 +10,23 @@ module Wallaby
|
|
10
10
|
attr_writer :modes
|
11
11
|
|
12
12
|
# @!attribute [r] modes
|
13
|
-
# @return [Array<String>] all {
|
13
|
+
# @return [Array<String>] all {Mode}s
|
14
14
|
def modes
|
15
15
|
@modes ||= ClassArray.new Mode.descendants
|
16
16
|
end
|
17
17
|
|
18
|
-
# @return [
|
18
|
+
# @return [ClassHash] { Model Class => {Mode} }
|
19
19
|
def mode_map
|
20
20
|
@mode_map ||= begin
|
21
|
-
# NOTE: this is the point where all files should be required
|
22
|
-
Preloader.
|
21
|
+
# NOTE: this is the point where all model files should be required
|
22
|
+
Preloader.require_models
|
23
23
|
ModeMapper.execute(modes).freeze
|
24
24
|
end
|
25
25
|
end
|
26
26
|
|
27
|
-
#
|
28
|
-
# @return [Array] [ model classes ]
|
27
|
+
# @deprecated
|
29
28
|
def model_classes
|
30
|
-
|
29
|
+
Deprecator.alert method(__callee__), from: '0.3.0'
|
31
30
|
end
|
32
31
|
|
33
32
|
# { model => resources name }
|
@@ -38,7 +37,7 @@ module Wallaby
|
|
38
37
|
# @return [String] resources name
|
39
38
|
def resources_name_map(model_class, value = nil)
|
40
39
|
@resources_name_map ||= ClassHash.new
|
41
|
-
@resources_name_map[model_class] ||= value ||
|
40
|
+
@resources_name_map[model_class] ||= value || Inflector.to_resources_name(model_class)
|
42
41
|
end
|
43
42
|
|
44
43
|
# { resources name => model }
|
@@ -48,67 +47,21 @@ module Wallaby
|
|
48
47
|
# @return [Class]
|
49
48
|
def model_class_map(resources_name, value = nil)
|
50
49
|
@model_class_map ||= ClassHash.new
|
51
|
-
@model_class_map[resources_name] ||= value ||
|
50
|
+
@model_class_map[resources_name] ||= value || Classifier.to_class(Inflector.to_model_name(resources_name))
|
52
51
|
end
|
53
52
|
end
|
54
53
|
|
55
54
|
class << self
|
56
|
-
# Look up which controller to use for a given model class
|
57
|
-
# @param model_class [Class]
|
58
|
-
# @param application_controller [Class, nil]
|
59
|
-
# @return [Class] controller class, default to `mapping.resources_controller`
|
60
|
-
def controller_map(model_class, application_controller = nil)
|
61
|
-
application_controller ||= mapping.resources_controller
|
62
|
-
map_of :@controller_map, model_class, application_controller
|
63
|
-
end
|
64
|
-
|
65
|
-
# Look up which resource decorator to use for a given model class
|
66
|
-
# @param model_class [Class]
|
67
|
-
# @param application_decorator [Class, nil]
|
68
|
-
# @return [Class] resource decorator class, default to `mapping.resource_decorator`
|
69
|
-
def resource_decorator_map(model_class, application_decorator = nil)
|
70
|
-
application_decorator ||= mapping.resource_decorator
|
71
|
-
map_of :@resource_decorator_map, model_class, application_decorator
|
72
|
-
end
|
73
|
-
|
74
55
|
# { model => model decorator }
|
75
56
|
# @param model_class [Class]
|
76
|
-
# @param application_decorator [Class
|
77
|
-
# @return [
|
78
|
-
def model_decorator_map(model_class, application_decorator
|
79
|
-
application_decorator ||= mapping.resource_decorator
|
57
|
+
# @param application_decorator [Class]
|
58
|
+
# @return [ModelDecorator] model decorator instance
|
59
|
+
def model_decorator_map(model_class, application_decorator)
|
80
60
|
@model_decorator_map ||= ClassHash.new
|
81
61
|
@model_decorator_map[application_decorator] ||= ClassHash.new
|
82
62
|
@model_decorator_map[application_decorator][model_class] ||=
|
83
63
|
mode_map[model_class].try(:model_decorator).try :new, model_class
|
84
64
|
end
|
85
|
-
|
86
|
-
# Look up which model servicer to use for a given model class
|
87
|
-
# @param model_class [Class]
|
88
|
-
# @param application_servicer [Class, nil]
|
89
|
-
# @return [Class] model servicer class, default to `mapping.model_servicer`
|
90
|
-
def servicer_map(model_class, application_servicer = nil)
|
91
|
-
application_servicer ||= mapping.model_servicer
|
92
|
-
map_of :@servicer_map, model_class, application_servicer
|
93
|
-
end
|
94
|
-
|
95
|
-
# Look up which paginator to use for a given model class
|
96
|
-
# @param model_class [Class]
|
97
|
-
# @param application_paginator [Class, nil]
|
98
|
-
# @return [Class] resource paginator class, default to `mapping.model_paginator`
|
99
|
-
def paginator_map(model_class, application_paginator = nil)
|
100
|
-
application_paginator ||= mapping.model_paginator
|
101
|
-
map_of :@paginator_map, model_class, application_paginator
|
102
|
-
end
|
103
|
-
|
104
|
-
# Look up which authorizer to use for a given model class
|
105
|
-
# @param model_class [Class]
|
106
|
-
# @param application_authorizer [Class, nil]
|
107
|
-
# @return [Class] model authorizer class, default to `mapping.model_authorizer`
|
108
|
-
def authorizer_map(model_class, application_authorizer = nil)
|
109
|
-
application_authorizer ||= mapping.model_authorizer
|
110
|
-
map_of :@authorizer_map, model_class, application_authorizer
|
111
|
-
end
|
112
65
|
end
|
113
66
|
|
114
67
|
class << self
|
@@ -142,36 +95,6 @@ module Wallaby
|
|
142
95
|
def clear
|
143
96
|
instance_variables.each { |name| instance_variable_set name, nil }
|
144
97
|
end
|
145
|
-
|
146
|
-
private
|
147
|
-
|
148
|
-
# shorthand method
|
149
|
-
def configuration
|
150
|
-
::Wallaby.configuration
|
151
|
-
end
|
152
|
-
|
153
|
-
# shorthand method
|
154
|
-
def mapping
|
155
|
-
configuration.mapping
|
156
|
-
end
|
157
|
-
|
158
|
-
# Set up the hash map for given variable name
|
159
|
-
# @param variable_name [Symbol] instance variable name e.g. :@decorator_map
|
160
|
-
# @param model_class [Class]
|
161
|
-
# @param application_class [Class]
|
162
|
-
# @return [Class]
|
163
|
-
def map_of(variable_name, model_class, application_class)
|
164
|
-
return unless model_class
|
165
|
-
|
166
|
-
unless mode_map[model_class]
|
167
|
-
Logger.warn Locale.t('map.missing_mode_for_model_class', model: model_class.name), sourcing: 2..5
|
168
|
-
return
|
169
|
-
end
|
170
|
-
instance_variable_set(variable_name, instance_variable_get(variable_name) || ClassHash.new)
|
171
|
-
map = instance_variable_get variable_name
|
172
|
-
map[application_class] ||= ModelClassMapper.map application_class.descendants
|
173
|
-
map[application_class][model_class] ||= application_class
|
174
|
-
end
|
175
98
|
end
|
176
99
|
end
|
177
100
|
end
|
data/lib/wallaby/preloader.rb
CHANGED
@@ -3,7 +3,7 @@
|
|
3
3
|
module Wallaby
|
4
4
|
# Preload files for eager load paths.
|
5
5
|
#
|
6
|
-
# As Wallaby is built upon the {
|
6
|
+
# As Wallaby is built upon the {Map} which will not be completed
|
7
7
|
# until all models and decorators/controllers/servicers/authorizers/paginators
|
8
8
|
# are loaded. Therefore, when Rails app is initialized,
|
9
9
|
# all files under eager load paths (mostly `app/*` folders),
|
@@ -12,35 +12,16 @@ module Wallaby
|
|
12
12
|
include ActiveModel::Model
|
13
13
|
|
14
14
|
class << self
|
15
|
-
|
16
|
-
@all_required = nil
|
17
|
-
end
|
18
|
-
|
19
|
-
# Require all files
|
20
|
-
# @see #all_file_paths
|
21
|
-
def require_all
|
22
|
-
return if @all_required
|
23
|
-
|
24
|
-
@all_required = true
|
25
|
-
Logger.debug 'Loading all files', sourcing: false
|
26
|
-
new.all_file_paths.each(&method(:require_dependency))
|
27
|
-
end
|
28
|
-
|
29
|
-
# Require models under {Wallaby::Configuration#model_paths}
|
15
|
+
# Require models under {Configuration#model_paths}
|
30
16
|
# @see #model_file_paths
|
31
17
|
def require_models
|
32
|
-
new.model_file_paths.each(
|
18
|
+
new.model_file_paths.each { |path| require_dependency(path) }
|
33
19
|
end
|
34
20
|
end
|
35
21
|
|
36
|
-
# @return [Array<String>]
|
37
|
-
def all_file_paths
|
38
|
-
sort(all_eager_load_file_paths)
|
39
|
-
end
|
40
|
-
|
41
|
-
# @return [Array<String>] model files under {Wallaby::Configuration#model_paths}
|
22
|
+
# @return [Array<String>] model files under {Configuration#model_paths}
|
42
23
|
def model_file_paths
|
43
|
-
sort(all_eager_load_file_paths).select(
|
24
|
+
sort(all_eager_load_file_paths).select { |path| indexed(path) }
|
44
25
|
end
|
45
26
|
|
46
27
|
# @!attribute [w] eager_load_paths
|
@@ -49,10 +30,7 @@ module Wallaby
|
|
49
30
|
# @!attribute [r] eager_load_paths
|
50
31
|
# @return [Array<String, Pathname>]
|
51
32
|
def eager_load_paths # :nodoc:
|
52
|
-
@eager_load_paths ||=
|
53
|
-
Rails.configuration.paths['app'].expanded
|
54
|
-
.concat(Rails.configuration.eager_load_paths)
|
55
|
-
.uniq
|
33
|
+
@eager_load_paths ||= Rails.configuration.eager_load_paths
|
56
34
|
end
|
57
35
|
|
58
36
|
# @!attribute [w] model_paths
|
@@ -71,7 +49,7 @@ module Wallaby
|
|
71
49
|
end
|
72
50
|
|
73
51
|
# All files need to be sorted in the following orders:
|
74
|
-
# 1. {
|
52
|
+
# 1. {Configuration#model_paths} order
|
75
53
|
# 2. Alphabet order
|
76
54
|
def sort(file_paths)
|
77
55
|
file_paths.sort { |p1, p2| conditions_for(p1) <=> conditions_for(p2) }
|
@@ -82,9 +60,9 @@ module Wallaby
|
|
82
60
|
[indexed(path) || model_paths.length, path]
|
83
61
|
end
|
84
62
|
|
85
|
-
# Check if the path is in the {
|
63
|
+
# Check if the path is in the {Configuration#model_paths}
|
86
64
|
def indexed(path)
|
87
|
-
model_paths.index
|
65
|
+
model_paths.index { |p| path.include?(p) }
|
88
66
|
end
|
89
67
|
end
|
90
68
|
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.
|
4
|
+
version: 0.3.0.beta1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tian Chen
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2023-09-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activemodel
|
@@ -17,6 +17,9 @@ dependencies:
|
|
17
17
|
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: 4.2.0
|
20
|
+
- - "<"
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: 7.1.0
|
20
23
|
type: :runtime
|
21
24
|
prerelease: false
|
22
25
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -24,6 +27,9 @@ dependencies:
|
|
24
27
|
- - ">="
|
25
28
|
- !ruby/object:Gem::Version
|
26
29
|
version: 4.2.0
|
30
|
+
- - "<"
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: 7.1.0
|
27
33
|
- !ruby/object:Gem::Dependency
|
28
34
|
name: railties
|
29
35
|
requirement: !ruby/object:Gem::Requirement
|
@@ -31,6 +37,9 @@ dependencies:
|
|
31
37
|
- - ">="
|
32
38
|
- !ruby/object:Gem::Version
|
33
39
|
version: 4.2.0
|
40
|
+
- - "<"
|
41
|
+
- !ruby/object:Gem::Version
|
42
|
+
version: 7.1.0
|
34
43
|
type: :runtime
|
35
44
|
prerelease: false
|
36
45
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -38,6 +47,9 @@ dependencies:
|
|
38
47
|
- - ">="
|
39
48
|
- !ruby/object:Gem::Version
|
40
49
|
version: 4.2.0
|
50
|
+
- - "<"
|
51
|
+
- !ruby/object:Gem::Version
|
52
|
+
version: 7.1.0
|
41
53
|
- !ruby/object:Gem::Dependency
|
42
54
|
name: parslet
|
43
55
|
requirement: !ruby/object:Gem::Requirement
|
@@ -80,6 +92,34 @@ dependencies:
|
|
80
92
|
- - "~>"
|
81
93
|
- !ruby/object:Gem::Version
|
82
94
|
version: 0.1.2
|
95
|
+
- !ruby/object:Gem::Dependency
|
96
|
+
name: github-markup
|
97
|
+
requirement: !ruby/object:Gem::Requirement
|
98
|
+
requirements:
|
99
|
+
- - ">="
|
100
|
+
- !ruby/object:Gem::Version
|
101
|
+
version: '0'
|
102
|
+
type: :development
|
103
|
+
prerelease: false
|
104
|
+
version_requirements: !ruby/object:Gem::Requirement
|
105
|
+
requirements:
|
106
|
+
- - ">="
|
107
|
+
- !ruby/object:Gem::Version
|
108
|
+
version: '0'
|
109
|
+
- !ruby/object:Gem::Dependency
|
110
|
+
name: redcarpet
|
111
|
+
requirement: !ruby/object:Gem::Requirement
|
112
|
+
requirements:
|
113
|
+
- - ">="
|
114
|
+
- !ruby/object:Gem::Version
|
115
|
+
version: '0'
|
116
|
+
type: :development
|
117
|
+
prerelease: false
|
118
|
+
version_requirements: !ruby/object:Gem::Requirement
|
119
|
+
requirements:
|
120
|
+
- - ">="
|
121
|
+
- !ruby/object:Gem::Version
|
122
|
+
version: '0'
|
83
123
|
- !ruby/object:Gem::Dependency
|
84
124
|
name: rspec-rails
|
85
125
|
requirement: !ruby/object:Gem::Requirement
|
@@ -94,6 +134,20 @@ dependencies:
|
|
94
134
|
- - ">="
|
95
135
|
- !ruby/object:Gem::Version
|
96
136
|
version: '0'
|
137
|
+
- !ruby/object:Gem::Dependency
|
138
|
+
name: simplecov
|
139
|
+
requirement: !ruby/object:Gem::Requirement
|
140
|
+
requirements:
|
141
|
+
- - ">="
|
142
|
+
- !ruby/object:Gem::Version
|
143
|
+
version: '0'
|
144
|
+
type: :development
|
145
|
+
prerelease: false
|
146
|
+
version_requirements: !ruby/object:Gem::Requirement
|
147
|
+
requirements:
|
148
|
+
- - ">="
|
149
|
+
- !ruby/object:Gem::Version
|
150
|
+
version: '0'
|
97
151
|
- !ruby/object:Gem::Dependency
|
98
152
|
name: wallaby-cop
|
99
153
|
requirement: !ruby/object:Gem::Requirement
|
@@ -108,6 +162,20 @@ dependencies:
|
|
108
162
|
- - ">="
|
109
163
|
- !ruby/object:Gem::Version
|
110
164
|
version: '0'
|
165
|
+
- !ruby/object:Gem::Dependency
|
166
|
+
name: yard
|
167
|
+
requirement: !ruby/object:Gem::Requirement
|
168
|
+
requirements:
|
169
|
+
- - ">="
|
170
|
+
- !ruby/object:Gem::Version
|
171
|
+
version: '0'
|
172
|
+
type: :development
|
173
|
+
prerelease: false
|
174
|
+
version_requirements: !ruby/object:Gem::Requirement
|
175
|
+
requirements:
|
176
|
+
- - ">="
|
177
|
+
- !ruby/object:Gem::Version
|
178
|
+
version: '0'
|
111
179
|
description: The core of Wallaby
|
112
180
|
email:
|
113
181
|
- me@tian.im
|
@@ -120,7 +188,6 @@ files:
|
|
120
188
|
- app/controllers/wallaby/resources_controller.rb
|
121
189
|
- app/security/ability.rb
|
122
190
|
- config/locales/wallaby.en.yml
|
123
|
-
- config/locales/wallaby_class.en.yml
|
124
191
|
- config/routes.rb
|
125
192
|
- lib/adaptors/wallaby/custom.rb
|
126
193
|
- lib/adaptors/wallaby/custom/default_provider.rb
|
@@ -136,8 +203,8 @@ files:
|
|
136
203
|
- lib/concerns/wallaby/authentication_concern.rb
|
137
204
|
- lib/concerns/wallaby/authorizable.rb
|
138
205
|
- lib/concerns/wallaby/baseable.rb
|
206
|
+
- lib/concerns/wallaby/configurable.rb
|
139
207
|
- lib/concerns/wallaby/decoratable.rb
|
140
|
-
- lib/concerns/wallaby/defaultable.rb
|
141
208
|
- lib/concerns/wallaby/engineable.rb
|
142
209
|
- lib/concerns/wallaby/fieldable.rb
|
143
210
|
- lib/concerns/wallaby/paginatable.rb
|
@@ -145,19 +212,45 @@ files:
|
|
145
212
|
- lib/concerns/wallaby/resourcable.rb
|
146
213
|
- lib/concerns/wallaby/resources_concern.rb
|
147
214
|
- lib/concerns/wallaby/servicable.rb
|
148
|
-
- lib/concerns/wallaby/
|
215
|
+
- lib/concerns/wallaby/urlable.rb
|
149
216
|
- lib/decorators/wallaby/resource_decorator.rb
|
150
217
|
- lib/errors/wallaby/class_not_found.rb
|
151
218
|
- lib/errors/wallaby/forbidden.rb
|
152
219
|
- lib/errors/wallaby/general_error.rb
|
153
220
|
- lib/errors/wallaby/invalid_error.rb
|
221
|
+
- lib/errors/wallaby/method_removed.rb
|
154
222
|
- lib/errors/wallaby/model_not_found.rb
|
155
223
|
- lib/errors/wallaby/not_authenticated.rb
|
156
224
|
- lib/errors/wallaby/not_found.rb
|
157
225
|
- lib/errors/wallaby/not_implemented.rb
|
158
226
|
- lib/errors/wallaby/resource_not_found.rb
|
159
227
|
- lib/errors/wallaby/unprocessable_entity.rb
|
228
|
+
- lib/fields/wallaby/all_fields.rb
|
160
229
|
- lib/forms/wallaby/form_builder.rb
|
230
|
+
- lib/generators/wallaby/engine/application_generator.rb
|
231
|
+
- lib/generators/wallaby/engine/authorizer/USAGE
|
232
|
+
- lib/generators/wallaby/engine/authorizer/authorizer_generator.rb
|
233
|
+
- lib/generators/wallaby/engine/authorizer/templates/authorizer.rb.erb
|
234
|
+
- lib/generators/wallaby/engine/controller/USAGE
|
235
|
+
- lib/generators/wallaby/engine/controller/controller_generator.rb
|
236
|
+
- lib/generators/wallaby/engine/controller/templates/controller.rb.erb
|
237
|
+
- lib/generators/wallaby/engine/decorator/USAGE
|
238
|
+
- lib/generators/wallaby/engine/decorator/decorator_generator.rb
|
239
|
+
- lib/generators/wallaby/engine/decorator/templates/decorator.rb.erb
|
240
|
+
- lib/generators/wallaby/engine/install/USAGE
|
241
|
+
- lib/generators/wallaby/engine/install/install_generator.rb
|
242
|
+
- lib/generators/wallaby/engine/install/templates/application_authorizer.rb.erb
|
243
|
+
- lib/generators/wallaby/engine/install/templates/application_controller.rb.erb
|
244
|
+
- lib/generators/wallaby/engine/install/templates/application_decorator.rb.erb
|
245
|
+
- lib/generators/wallaby/engine/install/templates/application_paginator.rb.erb
|
246
|
+
- lib/generators/wallaby/engine/install/templates/application_servicer.rb.erb
|
247
|
+
- lib/generators/wallaby/engine/install/templates/initializer.rb.erb
|
248
|
+
- lib/generators/wallaby/engine/paginator/USAGE
|
249
|
+
- lib/generators/wallaby/engine/paginator/paginator_generator.rb
|
250
|
+
- lib/generators/wallaby/engine/paginator/templates/paginator.rb.erb
|
251
|
+
- lib/generators/wallaby/engine/servicer/USAGE
|
252
|
+
- lib/generators/wallaby/engine/servicer/servicer_generator.rb
|
253
|
+
- lib/generators/wallaby/engine/servicer/templates/servicer.rb.erb
|
161
254
|
- lib/helpers/wallaby/application_helper.rb
|
162
255
|
- lib/helpers/wallaby/base_helper.rb
|
163
256
|
- lib/helpers/wallaby/configuration_helper.rb
|
@@ -177,29 +270,38 @@ files:
|
|
177
270
|
- lib/parsers/wallaby/parser.rb
|
178
271
|
- lib/responders/wallaby/json_api_responder.rb
|
179
272
|
- lib/responders/wallaby/resources_responder.rb
|
273
|
+
- lib/routes/wallaby/engines/base_route.rb
|
274
|
+
- lib/routes/wallaby/engines/custom_app_route.rb
|
275
|
+
- lib/routes/wallaby/engines/engine_route.rb
|
180
276
|
- lib/routes/wallaby/resources_router.rb
|
181
277
|
- lib/servicers/wallaby/model_servicer.rb
|
278
|
+
- lib/services/wallaby/authorizer_finder.rb
|
279
|
+
- lib/services/wallaby/class_finder.rb
|
280
|
+
- lib/services/wallaby/controller_finder.rb
|
281
|
+
- lib/services/wallaby/decorator_finder.rb
|
282
|
+
- lib/services/wallaby/default_models_excluder.rb
|
182
283
|
- lib/services/wallaby/engine_name_finder.rb
|
183
284
|
- lib/services/wallaby/engine_url_for.rb
|
285
|
+
- lib/services/wallaby/fields_regulator.rb
|
184
286
|
- lib/services/wallaby/link_options_normalizer.rb
|
185
287
|
- lib/services/wallaby/map/mode_mapper.rb
|
186
|
-
- lib/services/wallaby/map/model_class_collector.rb
|
187
288
|
- lib/services/wallaby/map/model_class_mapper.rb
|
289
|
+
- lib/services/wallaby/model_class_filter.rb
|
290
|
+
- lib/services/wallaby/paginator_finder.rb
|
188
291
|
- lib/services/wallaby/prefixes_builder.rb
|
292
|
+
- lib/services/wallaby/servicer_finder.rb
|
189
293
|
- lib/services/wallaby/sorting/hash_builder.rb
|
190
294
|
- lib/services/wallaby/sorting/link_builder.rb
|
191
295
|
- lib/services/wallaby/sorting/next_builder.rb
|
192
296
|
- lib/services/wallaby/sorting/single_builder.rb
|
193
|
-
- lib/services/wallaby/type_renderer.rb
|
194
297
|
- lib/support/action_dispatch/routing/mapper.rb
|
195
298
|
- lib/tree/wallaby/node.rb
|
196
299
|
- lib/utils/wallaby/field_utils.rb
|
197
300
|
- lib/utils/wallaby/filter_utils.rb
|
301
|
+
- lib/utils/wallaby/inflector.rb
|
198
302
|
- lib/utils/wallaby/locale.rb
|
199
|
-
- lib/utils/wallaby/model_utils.rb
|
200
303
|
- lib/utils/wallaby/module_utils.rb
|
201
304
|
- lib/utils/wallaby/params_utils.rb
|
202
|
-
- lib/utils/wallaby/test_utils.rb
|
203
305
|
- lib/utils/wallaby/utils.rb
|
204
306
|
- lib/wallaby/class_array.rb
|
205
307
|
- lib/wallaby/class_hash.rb
|
@@ -215,7 +317,9 @@ files:
|
|
215
317
|
- lib/wallaby/constants.rb
|
216
318
|
- lib/wallaby/core.rb
|
217
319
|
- lib/wallaby/core/version.rb
|
320
|
+
- lib/wallaby/deprecator.rb
|
218
321
|
- lib/wallaby/engine.rb
|
322
|
+
- lib/wallaby/guesser.rb
|
219
323
|
- lib/wallaby/logger.rb
|
220
324
|
- lib/wallaby/map.rb
|
221
325
|
- lib/wallaby/preloader.rb
|
@@ -226,7 +330,8 @@ metadata:
|
|
226
330
|
homepage_uri: https://github.com/wallaby-rails/wallaby-core
|
227
331
|
source_code_uri: https://github.com/wallaby-rails/wallaby-core
|
228
332
|
changelog_uri: https://github.com/wallaby-rails/wallaby-core/blob/master/CHANGELOG.md
|
229
|
-
|
333
|
+
rubygems_mfa_required: 'true'
|
334
|
+
post_install_message:
|
230
335
|
rdoc_options: []
|
231
336
|
require_paths:
|
232
337
|
- lib
|
@@ -237,12 +342,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
237
342
|
version: '0'
|
238
343
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
239
344
|
requirements:
|
240
|
-
- - "
|
345
|
+
- - ">"
|
241
346
|
- !ruby/object:Gem::Version
|
242
|
-
version:
|
347
|
+
version: 1.3.1
|
243
348
|
requirements: []
|
244
|
-
rubygems_version: 3.
|
245
|
-
signing_key:
|
349
|
+
rubygems_version: 3.3.25
|
350
|
+
signing_key:
|
246
351
|
specification_version: 4
|
247
352
|
summary: The core of Wallaby
|
248
353
|
test_files: []
|
@@ -1,9 +0,0 @@
|
|
1
|
-
en:
|
2
|
-
wallaby:
|
3
|
-
map:
|
4
|
-
missing_mode_for_model_class: "Don't know how to handle this model %{model}."
|
5
|
-
model_class_mapper:
|
6
|
-
missing_model_class: "Please define self.model_class for %{model} or set it as global.\n @see Wallaby.configuration.mapping"
|
7
|
-
|
8
|
-
mode:
|
9
|
-
inherit_required: '%{klass} must inherit from %{parent}.'
|
@@ -1,38 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Wallaby
|
4
|
-
# Defaults related methods
|
5
|
-
module Defaultable
|
6
|
-
protected
|
7
|
-
|
8
|
-
# Set default options for create action
|
9
|
-
# @param options [Hash]
|
10
|
-
# @return [Hash] updated options with default values
|
11
|
-
def set_defaults_for(action, options)
|
12
|
-
case action.try(:to_sym)
|
13
|
-
when :create, :update then assign_create_and_update_defaults_with options
|
14
|
-
when :destroy then assign_destroy_defaults_with options
|
15
|
-
end
|
16
|
-
options
|
17
|
-
end
|
18
|
-
|
19
|
-
# @param options [Hash]
|
20
|
-
# @return [Hash] updated options with default values
|
21
|
-
def assign_create_and_update_defaults_with(options)
|
22
|
-
options[:params] ||= resource_params
|
23
|
-
options[:location] ||= -> { helpers.show_path resource, is_resource: params[:resource] }
|
24
|
-
end
|
25
|
-
|
26
|
-
# @param options [Hash]
|
27
|
-
# @return [Hash] updated options with default values
|
28
|
-
def assign_destroy_defaults_with(options)
|
29
|
-
options[:params] ||= params
|
30
|
-
options[:location] ||=
|
31
|
-
if params[:resource]
|
32
|
-
helpers.show_path resource, is_resource: params[:resource]
|
33
|
-
else
|
34
|
-
helpers.index_path current_model_class
|
35
|
-
end
|
36
|
-
end
|
37
|
-
end
|
38
|
-
end
|