wallaby-core 0.1.2 → 0.2.3
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.
- 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
data/lib/wallaby/map.rb
CHANGED
@@ -1,26 +1,29 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
module Wallaby
|
4
|
-
#
|
4
|
+
# All the lookups that Wallaby needs.
|
5
5
|
class Map
|
6
6
|
class << self
|
7
|
-
|
7
|
+
include Classifier
|
8
|
+
|
9
|
+
# @!attribute [w] modes
|
8
10
|
attr_writer :modes
|
9
11
|
|
10
|
-
#
|
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 [
|
18
|
+
# @return [Wallaby::ClassHash] { Model Class => {Wallaby::Mode} }
|
16
19
|
def mode_map
|
17
|
-
@mode_map ||= ModeMapper.
|
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
|
-
|
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 :@
|
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
|
-
|
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,31 +1,31 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: wallaby-core
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.3
|
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: 2022-02-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
-
name:
|
14
|
+
name: activemodel
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
17
|
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version:
|
19
|
+
version: 4.2.0
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version:
|
26
|
+
version: 4.2.0
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
|
-
name:
|
28
|
+
name: railties
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - ">="
|
@@ -38,6 +38,20 @@ dependencies:
|
|
38
38
|
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: 4.2.0
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: parslet
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
41
55
|
- !ruby/object:Gem::Dependency
|
42
56
|
name: responders
|
43
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -52,6 +66,20 @@ dependencies:
|
|
52
66
|
- - ">="
|
53
67
|
- !ruby/object:Gem::Version
|
54
68
|
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: wallaby-view
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: 0.1.2
|
76
|
+
type: :runtime
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: 0.1.2
|
55
83
|
- !ruby/object:Gem::Dependency
|
56
84
|
name: rspec-rails
|
57
85
|
requirement: !ruby/object:Gem::Requirement
|
@@ -89,9 +117,7 @@ extra_rdoc_files: []
|
|
89
117
|
files:
|
90
118
|
- LICENSE
|
91
119
|
- README.md
|
92
|
-
- app/controllers/wallaby/application_controller.rb
|
93
120
|
- app/controllers/wallaby/resources_controller.rb
|
94
|
-
- app/controllers/wallaby/secure_controller.rb
|
95
121
|
- app/security/ability.rb
|
96
122
|
- config/locales/wallaby.en.yml
|
97
123
|
- config/locales/wallaby_class.en.yml
|
@@ -106,6 +132,8 @@ files:
|
|
106
132
|
- lib/authorizers/wallaby/default_authorization_provider.rb
|
107
133
|
- lib/authorizers/wallaby/model_authorizer.rb
|
108
134
|
- lib/authorizers/wallaby/pundit_authorization_provider.rb
|
135
|
+
- lib/concerns/wallaby/application_concern.rb
|
136
|
+
- lib/concerns/wallaby/authentication_concern.rb
|
109
137
|
- lib/concerns/wallaby/authorizable.rb
|
110
138
|
- lib/concerns/wallaby/baseable.rb
|
111
139
|
- lib/concerns/wallaby/decoratable.rb
|
@@ -113,13 +141,13 @@ files:
|
|
113
141
|
- lib/concerns/wallaby/engineable.rb
|
114
142
|
- lib/concerns/wallaby/fieldable.rb
|
115
143
|
- lib/concerns/wallaby/paginatable.rb
|
116
|
-
- lib/concerns/wallaby/
|
144
|
+
- lib/concerns/wallaby/prefixable.rb
|
117
145
|
- lib/concerns/wallaby/resourcable.rb
|
146
|
+
- lib/concerns/wallaby/resources_concern.rb
|
118
147
|
- lib/concerns/wallaby/servicable.rb
|
119
148
|
- lib/concerns/wallaby/shared_helpers.rb
|
120
|
-
- lib/concerns/wallaby/themeable.rb
|
121
149
|
- lib/decorators/wallaby/resource_decorator.rb
|
122
|
-
- lib/errors/wallaby/
|
150
|
+
- lib/errors/wallaby/class_not_found.rb
|
123
151
|
- lib/errors/wallaby/forbidden.rb
|
124
152
|
- lib/errors/wallaby/general_error.rb
|
125
153
|
- lib/errors/wallaby/invalid_error.rb
|
@@ -146,13 +174,7 @@ files:
|
|
146
174
|
- lib/interfaces/wallaby/model_pagination_provider.rb
|
147
175
|
- lib/interfaces/wallaby/model_service_provider.rb
|
148
176
|
- lib/paginators/wallaby/model_paginator.rb
|
149
|
-
- lib/paginators/wallaby/resource_paginator.rb
|
150
177
|
- lib/parsers/wallaby/parser.rb
|
151
|
-
- lib/renderers/wallaby/cell.rb
|
152
|
-
- lib/renderers/wallaby/cell_resolver.rb
|
153
|
-
- lib/renderers/wallaby/custom_lookup_context.rb
|
154
|
-
- lib/renderers/wallaby/custom_partial_renderer.rb
|
155
|
-
- lib/renderers/wallaby/custom_renderer.rb
|
156
178
|
- lib/responders/wallaby/json_api_responder.rb
|
157
179
|
- lib/responders/wallaby/resources_responder.rb
|
158
180
|
- lib/routes/wallaby/resources_router.rb
|
@@ -171,15 +193,17 @@ files:
|
|
171
193
|
- lib/services/wallaby/type_renderer.rb
|
172
194
|
- lib/support/action_dispatch/routing/mapper.rb
|
173
195
|
- lib/tree/wallaby/node.rb
|
174
|
-
- lib/utils/wallaby/cell_utils.rb
|
175
196
|
- lib/utils/wallaby/field_utils.rb
|
176
197
|
- lib/utils/wallaby/filter_utils.rb
|
198
|
+
- lib/utils/wallaby/locale.rb
|
177
199
|
- lib/utils/wallaby/model_utils.rb
|
178
200
|
- lib/utils/wallaby/module_utils.rb
|
179
201
|
- lib/utils/wallaby/params_utils.rb
|
180
|
-
- lib/utils/wallaby/preload_utils.rb
|
181
202
|
- lib/utils/wallaby/test_utils.rb
|
182
203
|
- lib/utils/wallaby/utils.rb
|
204
|
+
- lib/wallaby/class_array.rb
|
205
|
+
- lib/wallaby/class_hash.rb
|
206
|
+
- lib/wallaby/classifier.rb
|
183
207
|
- lib/wallaby/configuration.rb
|
184
208
|
- lib/wallaby/configuration/features.rb
|
185
209
|
- lib/wallaby/configuration/mapping.rb
|
@@ -192,7 +216,9 @@ files:
|
|
192
216
|
- lib/wallaby/core.rb
|
193
217
|
- lib/wallaby/core/version.rb
|
194
218
|
- lib/wallaby/engine.rb
|
219
|
+
- lib/wallaby/logger.rb
|
195
220
|
- lib/wallaby/map.rb
|
221
|
+
- lib/wallaby/preloader.rb
|
196
222
|
homepage: https://github.com/wallaby-rails/wallaby-core
|
197
223
|
licenses:
|
198
224
|
- MIT
|
@@ -200,7 +226,7 @@ metadata:
|
|
200
226
|
homepage_uri: https://github.com/wallaby-rails/wallaby-core
|
201
227
|
source_code_uri: https://github.com/wallaby-rails/wallaby-core
|
202
228
|
changelog_uri: https://github.com/wallaby-rails/wallaby-core/blob/master/CHANGELOG.md
|
203
|
-
post_install_message:
|
229
|
+
post_install_message:
|
204
230
|
rdoc_options: []
|
205
231
|
require_paths:
|
206
232
|
- lib
|
@@ -216,7 +242,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
216
242
|
version: '0'
|
217
243
|
requirements: []
|
218
244
|
rubygems_version: 3.0.3
|
219
|
-
signing_key:
|
245
|
+
signing_key:
|
220
246
|
specification_version: 4
|
221
247
|
summary: The core of Wallaby
|
222
248
|
test_files: []
|
@@ -1,84 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Wallaby
|
4
|
-
# Like ordinary Rails application, it's the base controller that
|
5
|
-
# other Wallaby controllers inherit from.
|
6
|
-
#
|
7
|
-
# However, the difference is that the controller class that {Wallaby::ApplicationController} inherits from
|
8
|
-
# can be configured via {Wallaby::Configuration#base_controller}
|
9
|
-
#
|
10
|
-
# Here, it provides the most basic functions e.g. error handling for common 4xx HTTP status, helpers method,
|
11
|
-
# and URL handling.
|
12
|
-
class ApplicationController < configuration.base_controller
|
13
|
-
extend Engineable::ClassMethods
|
14
|
-
include Engineable
|
15
|
-
include SharedHelpers
|
16
|
-
helper ApplicationHelper
|
17
|
-
|
18
|
-
rescue_from NotFound, with: :not_found
|
19
|
-
rescue_from ::ActionController::ParameterMissing, with: :bad_request
|
20
|
-
rescue_from ::ActiveRecord::StatementInvalid, with: :unprocessable_entity
|
21
|
-
rescue_from NotImplemented, with: :not_implemented
|
22
|
-
rescue_from UnprocessableEntity, with: :unprocessable_entity
|
23
|
-
|
24
|
-
delegate(*ConfigurationHelper.instance_methods(false), :url_for, to: :helpers)
|
25
|
-
|
26
|
-
# Health check page for e.g. NewRelic
|
27
|
-
def healthy
|
28
|
-
render plain: 'healthy'
|
29
|
-
end
|
30
|
-
|
31
|
-
# Not found page
|
32
|
-
# @param exception [Exception] comes from **rescue_from**
|
33
|
-
def not_found(exception = nil)
|
34
|
-
error_rendering exception, __callee__
|
35
|
-
end
|
36
|
-
|
37
|
-
# Bad request page
|
38
|
-
# @param exception [Exception] comes from **rescue_from**
|
39
|
-
def bad_request(exception = nil)
|
40
|
-
error_rendering exception, __callee__
|
41
|
-
end
|
42
|
-
|
43
|
-
# Unprocessable entity page
|
44
|
-
# @param exception [Exception] comes from **rescue_from**
|
45
|
-
def unprocessable_entity(exception = nil)
|
46
|
-
error_rendering exception, __callee__
|
47
|
-
end
|
48
|
-
|
49
|
-
# Internal server error page
|
50
|
-
# @param exception [Exception] comes from **rescue_from**
|
51
|
-
def internal_server_error(exception = nil)
|
52
|
-
error_rendering exception, __callee__
|
53
|
-
end
|
54
|
-
|
55
|
-
# Not implemented
|
56
|
-
# @param exception [Exception] comes from **rescue_from**
|
57
|
-
def not_implemented(exception = nil)
|
58
|
-
error_rendering exception, __callee__
|
59
|
-
end
|
60
|
-
|
61
|
-
# {https://api.rubyonrails.org/classes/ActionController/Helpers.html#method-i-helpers helpers}
|
62
|
-
# exists since Rails 5.0, need to mimic this to support Rails 4.2.
|
63
|
-
# @see https://api.rubyonrails.org/classes/ActionController/Helpers.html#method-i-helpers
|
64
|
-
# ActionController::Helpers#helpers
|
65
|
-
# @see https://github.com/rails/rails/blob/5-0-stable/actionpack/lib/action_controller/metal/helpers.rb#L118
|
66
|
-
def helpers
|
67
|
-
@helpers ||= defined?(super) ? super : view_context
|
68
|
-
end
|
69
|
-
|
70
|
-
protected
|
71
|
-
|
72
|
-
# Capture exceptions and display the error using error template.
|
73
|
-
# @param exception [Exception]
|
74
|
-
# @param symbol [Symbol] http status symbol
|
75
|
-
def error_rendering(exception, symbol)
|
76
|
-
Rails.logger.error exception
|
77
|
-
|
78
|
-
@exception = exception
|
79
|
-
@symbol = symbol
|
80
|
-
@code = Rack::Utils::SYMBOL_TO_STATUS_CODE[symbol].to_i
|
81
|
-
respond_with @exception, status: @code, template: ERROR_PATH, prefixes: _prefixes
|
82
|
-
end
|
83
|
-
end
|
84
|
-
end
|
@@ -1,81 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Wallaby
|
4
|
-
# This is the controller with only authentication logics.
|
5
|
-
class SecureController < ::Wallaby::ApplicationController
|
6
|
-
helper SecureHelper
|
7
|
-
helper_method :current_user
|
8
|
-
|
9
|
-
rescue_from NotAuthenticated, with: :unauthorized
|
10
|
-
rescue_from Forbidden, with: :forbidden
|
11
|
-
|
12
|
-
# Unauthorized page.
|
13
|
-
# @param exception [Exception] exception comes from `rescue_from`
|
14
|
-
def unauthorized(exception = nil)
|
15
|
-
error_rendering exception, __callee__
|
16
|
-
end
|
17
|
-
|
18
|
-
# Forbidden page.
|
19
|
-
# @param exception [Exception] exception comes from `rescue_from`
|
20
|
-
def forbidden(exception = nil)
|
21
|
-
error_rendering exception, __callee__
|
22
|
-
end
|
23
|
-
|
24
|
-
# @note This is a template method that can be overridden by subclasses
|
25
|
-
# This {current_user} method will try to looking up the actual implementation from the following
|
26
|
-
# places from high precedence to low:
|
27
|
-
#
|
28
|
-
# - {Wallaby::Configuration::Security#current_user}
|
29
|
-
# - `super`
|
30
|
-
# - do nothing
|
31
|
-
#
|
32
|
-
# It can be replaced completely in subclasses:
|
33
|
-
#
|
34
|
-
# ```
|
35
|
-
# def current_user
|
36
|
-
# # NOTE: please ensure `@current_user` is assigned, for instance:
|
37
|
-
# @current_user ||= User.new params.slice(:email)
|
38
|
-
# end
|
39
|
-
# ```
|
40
|
-
# @return [Object] a user object
|
41
|
-
def current_user
|
42
|
-
@current_user ||=
|
43
|
-
if security.current_user? || !defined? super
|
44
|
-
instance_exec(&security.current_user)
|
45
|
-
else
|
46
|
-
super
|
47
|
-
end
|
48
|
-
end
|
49
|
-
|
50
|
-
# @note This is a template method that can be overridden by subclasses
|
51
|
-
# This {authenticate_user!} method will try to looking up the actual implementation from the following
|
52
|
-
# places from high precedence to low:
|
53
|
-
#
|
54
|
-
# - {Wallaby::Configuration::Security#authenticate}
|
55
|
-
# - `super`
|
56
|
-
# - do nothing
|
57
|
-
#
|
58
|
-
# It can be replaced completely in subclasses:
|
59
|
-
#
|
60
|
-
# ```
|
61
|
-
# def authenticate_user!
|
62
|
-
# authenticate_or_request_with_http_basic do |username, password|
|
63
|
-
# username == 'too_simple' && password == 'too_naive'
|
64
|
-
# end
|
65
|
-
# end
|
66
|
-
# ```
|
67
|
-
# @return [true] when user is authenticated successfully
|
68
|
-
# @raise [Wallaby::NotAuthenticated] when user fails to authenticate
|
69
|
-
def authenticate_user!
|
70
|
-
authenticated =
|
71
|
-
if security.authenticate? || !defined? super
|
72
|
-
instance_exec(&security.authenticate)
|
73
|
-
else
|
74
|
-
super
|
75
|
-
end
|
76
|
-
raise NotAuthenticated unless authenticated
|
77
|
-
|
78
|
-
true
|
79
|
-
end
|
80
|
-
end
|
81
|
-
end
|
@@ -1,42 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Wallaby
|
4
|
-
# This is a collection of the helper methods that overrides the rails methods
|
5
|
-
module RailsOverriddenMethods
|
6
|
-
protected
|
7
|
-
|
8
|
-
# Override {https://github.com/rails/rails/blob/master/actionview/lib/action_view/view_paths.rb
|
9
|
-
# ActionView::ViewPaths::ClassMethods#_prefixes} to extend the prefixes for **ActionView::ViewPaths** to look up
|
10
|
-
# in below precedence from high to low:
|
11
|
-
#
|
12
|
-
# - :mounted_path/:resources_name/:action_prefix (e.g. `admin/products/index`)
|
13
|
-
# - :mounted_path/:resources_name (e.g. `admin/products`)
|
14
|
-
# - :controller_path/:action_prefix
|
15
|
-
# - :controller_path
|
16
|
-
# - :parent_controller_path/:action_prefix
|
17
|
-
# - :parent_controller_path
|
18
|
-
# - :more_parent_controller_path/:action_prefix
|
19
|
-
# - :more_parent_controller_path
|
20
|
-
# - :theme_name/:action_prefix
|
21
|
-
# - :theme_name
|
22
|
-
# - wallaby/resources/:action_prefix
|
23
|
-
# - wallaby/resources
|
24
|
-
# @return [Array<String>]
|
25
|
-
def _prefixes
|
26
|
-
@_prefixes ||= PrefixesBuilder.build(
|
27
|
-
origin_prefixes: super,
|
28
|
-
theme_name: current_theme_name,
|
29
|
-
resources_name: current_resources_name,
|
30
|
-
script_name: request.env[SCRIPT_NAME],
|
31
|
-
action_name: params[:action]
|
32
|
-
)
|
33
|
-
end
|
34
|
-
|
35
|
-
# Override to provide support for cell lookup
|
36
|
-
# @return [Wallaby::CustomLookupContext]
|
37
|
-
def lookup_context
|
38
|
-
@_lookup_context ||= # rubocop:disable Naming/MemoizedInstanceVariableName
|
39
|
-
CustomLookupContext.normalize(super, prefixes: _prefixes)
|
40
|
-
end
|
41
|
-
end
|
42
|
-
end
|
@@ -1,40 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Wallaby
|
4
|
-
# Theme related methods
|
5
|
-
module Themeable
|
6
|
-
# Configurable attributes
|
7
|
-
module ClassMethods
|
8
|
-
# @!attribute [w] theme_name
|
9
|
-
def theme_name=(theme_name)
|
10
|
-
layout theme_name
|
11
|
-
@theme_name = theme_name
|
12
|
-
end
|
13
|
-
|
14
|
-
# @!attribute [r] theme_name
|
15
|
-
# The theme name is used to apply a set of frontend (html/css/javascript) implementation.
|
16
|
-
#
|
17
|
-
# When theme name is set to e.g. `custom_theme`, the following changes will be made:
|
18
|
-
#
|
19
|
-
# - layout will be set to the same name `custom_theme`
|
20
|
-
# - it will be added to the partial lookup prefixes right on top of `wallaby/resources` prefix.
|
21
|
-
#
|
22
|
-
# Once theme name is set, all its controller subclasses will inherit the same theme name
|
23
|
-
# @example To set an theme name:
|
24
|
-
# class Admin::ApplicationController < Wallaby::ResourcesController
|
25
|
-
# self.theme_name = 'admin_theme'
|
26
|
-
# end
|
27
|
-
# @return [String, Symbol, nil] theme name
|
28
|
-
# @since 5.2.0
|
29
|
-
def theme_name
|
30
|
-
@theme_name ||= ModuleUtils.try_to superclass, :theme_name
|
31
|
-
end
|
32
|
-
end
|
33
|
-
|
34
|
-
# @return [String, Symbol, nil] theme name
|
35
|
-
# @since 5.2.0
|
36
|
-
def current_theme_name
|
37
|
-
controller_to_get __callee__, :theme_name
|
38
|
-
end
|
39
|
-
end
|
40
|
-
end
|
@@ -1,12 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Wallaby
|
4
|
-
# Resource paginator
|
5
|
-
class ResourcePaginator < ModelPaginator
|
6
|
-
base_class!
|
7
|
-
|
8
|
-
def self.inherited(_sub_class)
|
9
|
-
Utils.deprecate 'deprecation.resource_paginator_inheirtance', caller: caller
|
10
|
-
end
|
11
|
-
end
|
12
|
-
end
|