wallaby-core 0.1.0
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 +7 -0
- data/LICENSE +21 -0
- data/README.md +31 -0
- data/app/controllers/wallaby/application_controller.rb +84 -0
- data/app/controllers/wallaby/resources_controller.rb +381 -0
- data/app/controllers/wallaby/secure_controller.rb +81 -0
- data/app/security/ability.rb +13 -0
- data/config/locales/wallaby.en.yml +140 -0
- data/config/locales/wallaby_class.en.yml +30 -0
- data/config/routes.rb +39 -0
- data/lib/adaptors/wallaby/custom.rb +7 -0
- data/lib/adaptors/wallaby/custom/default_provider.rb +9 -0
- data/lib/adaptors/wallaby/custom/model_decorator.rb +71 -0
- data/lib/adaptors/wallaby/custom/model_finder.rb +13 -0
- data/lib/adaptors/wallaby/custom/model_pagination_provider.rb +14 -0
- data/lib/adaptors/wallaby/custom/model_service_provider.rb +48 -0
- data/lib/authorizers/wallaby/cancancan_authorization_provider.rb +72 -0
- data/lib/authorizers/wallaby/default_authorization_provider.rb +58 -0
- data/lib/authorizers/wallaby/model_authorizer.rb +100 -0
- data/lib/authorizers/wallaby/pundit_authorization_provider.rb +89 -0
- data/lib/concerns/wallaby/authorizable.rb +103 -0
- data/lib/concerns/wallaby/baseable.rb +36 -0
- data/lib/concerns/wallaby/decoratable.rb +101 -0
- data/lib/concerns/wallaby/defaultable.rb +38 -0
- data/lib/concerns/wallaby/engineable.rb +61 -0
- data/lib/concerns/wallaby/fieldable.rb +78 -0
- data/lib/concerns/wallaby/paginatable.rb +72 -0
- data/lib/concerns/wallaby/rails_overridden_methods.rb +42 -0
- data/lib/concerns/wallaby/resourcable.rb +149 -0
- data/lib/concerns/wallaby/servicable.rb +68 -0
- data/lib/concerns/wallaby/shared_helpers.rb +22 -0
- data/lib/concerns/wallaby/themeable.rb +40 -0
- data/lib/decorators/wallaby/resource_decorator.rb +189 -0
- data/lib/errors/wallaby/cell_handling.rb +6 -0
- data/lib/errors/wallaby/forbidden.rb +6 -0
- data/lib/errors/wallaby/general_error.rb +6 -0
- data/lib/errors/wallaby/invalid_error.rb +6 -0
- data/lib/errors/wallaby/model_not_found.rb +11 -0
- data/lib/errors/wallaby/not_authenticated.rb +6 -0
- data/lib/errors/wallaby/not_found.rb +6 -0
- data/lib/errors/wallaby/not_implemented.rb +6 -0
- data/lib/errors/wallaby/resource_not_found.rb +11 -0
- data/lib/errors/wallaby/unprocessable_entity.rb +6 -0
- data/lib/forms/wallaby/form_builder.rb +60 -0
- data/lib/helpers/wallaby/application_helper.rb +79 -0
- data/lib/helpers/wallaby/base_helper.rb +65 -0
- data/lib/helpers/wallaby/configuration_helper.rb +18 -0
- data/lib/helpers/wallaby/form_helper.rb +62 -0
- data/lib/helpers/wallaby/index_helper.rb +84 -0
- data/lib/helpers/wallaby/links_helper.rb +213 -0
- data/lib/helpers/wallaby/resources_helper.rb +52 -0
- data/lib/helpers/wallaby/secure_helper.rb +54 -0
- data/lib/helpers/wallaby/styling_helper.rb +82 -0
- data/lib/interfaces/wallaby/mode.rb +72 -0
- data/lib/interfaces/wallaby/model_authorization_provider.rb +99 -0
- data/lib/interfaces/wallaby/model_decorator.rb +168 -0
- data/lib/interfaces/wallaby/model_finder.rb +12 -0
- data/lib/interfaces/wallaby/model_pagination_provider.rb +107 -0
- data/lib/interfaces/wallaby/model_service_provider.rb +84 -0
- data/lib/paginators/wallaby/model_paginator.rb +115 -0
- data/lib/paginators/wallaby/resource_paginator.rb +12 -0
- data/lib/parsers/wallaby/parser.rb +34 -0
- data/lib/renderers/wallaby/cell.rb +137 -0
- data/lib/renderers/wallaby/cell_resolver.rb +89 -0
- data/lib/renderers/wallaby/custom_lookup_context.rb +64 -0
- data/lib/renderers/wallaby/custom_partial_renderer.rb +33 -0
- data/lib/renderers/wallaby/custom_renderer.rb +16 -0
- data/lib/responders/wallaby/json_api_responder.rb +101 -0
- data/lib/responders/wallaby/resources_responder.rb +28 -0
- data/lib/routes/wallaby/resources_router.rb +72 -0
- data/lib/servicers/wallaby/model_servicer.rb +154 -0
- data/lib/services/wallaby/engine_name_finder.rb +22 -0
- data/lib/services/wallaby/engine_url_for.rb +46 -0
- data/lib/services/wallaby/link_options_normalizer.rb +19 -0
- data/lib/services/wallaby/map/mode_mapper.rb +27 -0
- data/lib/services/wallaby/map/model_class_collector.rb +49 -0
- data/lib/services/wallaby/map/model_class_mapper.rb +38 -0
- data/lib/services/wallaby/prefixes_builder.rb +66 -0
- data/lib/services/wallaby/sorting/hash_builder.rb +19 -0
- data/lib/services/wallaby/sorting/link_builder.rb +69 -0
- data/lib/services/wallaby/sorting/next_builder.rb +63 -0
- data/lib/services/wallaby/sorting/single_builder.rb +20 -0
- data/lib/services/wallaby/type_renderer.rb +50 -0
- data/lib/support/action_dispatch/routing/mapper.rb +75 -0
- data/lib/tree/wallaby/node.rb +25 -0
- data/lib/utils/wallaby/cell_utils.rb +34 -0
- data/lib/utils/wallaby/field_utils.rb +43 -0
- data/lib/utils/wallaby/filter_utils.rb +20 -0
- data/lib/utils/wallaby/model_utils.rb +51 -0
- data/lib/utils/wallaby/module_utils.rb +46 -0
- data/lib/utils/wallaby/params_utils.rb +14 -0
- data/lib/utils/wallaby/preload_utils.rb +44 -0
- data/lib/utils/wallaby/test_utils.rb +34 -0
- data/lib/utils/wallaby/utils.rb +27 -0
- data/lib/wallaby/configuration.rb +103 -0
- data/lib/wallaby/configuration/features.rb +24 -0
- data/lib/wallaby/configuration/mapping.rb +140 -0
- data/lib/wallaby/configuration/metadata.rb +23 -0
- data/lib/wallaby/configuration/models.rb +46 -0
- data/lib/wallaby/configuration/pagination.rb +30 -0
- data/lib/wallaby/configuration/security.rb +98 -0
- data/lib/wallaby/configuration/sorting.rb +28 -0
- data/lib/wallaby/constants.rb +45 -0
- data/lib/wallaby/core.rb +117 -0
- data/lib/wallaby/core/version.rb +7 -0
- data/lib/wallaby/engine.rb +43 -0
- data/lib/wallaby/map.rb +170 -0
- metadata +222 -0
checksums.yaml
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
---
|
|
2
|
+
SHA256:
|
|
3
|
+
metadata.gz: 54c8cdfb2441a930457233aa18eb94b203afba08731c9eff8574d3308bb979df
|
|
4
|
+
data.tar.gz: e738dbb089e23a0148e112b250a9aead31d40cc8147e4403c911038e5d1c7c08
|
|
5
|
+
SHA512:
|
|
6
|
+
metadata.gz: 0453d5a5de52cf2b6888a01e97658ee40155796156e7d09595f9249917baf036bce45a53d7c7ae180c9a184bd89e98c76df7fd960f49b4542d814f4bd8a725a3
|
|
7
|
+
data.tar.gz: ffe831732748530de95c35e7ed4ff91e9d9c9710b483c80e99048186636d36d24b3e432811c713b7e04c452bf91a190768970d827a3c402fdc6b91b4c374fd78
|
data/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
The MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2010-2019 Google LLC. http://angular.io/license
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in
|
|
13
|
+
all copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
21
|
+
THE SOFTWARE.
|
data/README.md
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# Wallaby::Core
|
|
2
|
+
|
|
3
|
+
This gem contains the core interface that Wallaby is built upon.
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
Add this line to your application's Gemfile:
|
|
8
|
+
|
|
9
|
+
```ruby
|
|
10
|
+
gem 'wallaby-core'
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
And then execute:
|
|
14
|
+
|
|
15
|
+
```shell
|
|
16
|
+
$ bundle
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
Or install it yourself as:
|
|
20
|
+
|
|
21
|
+
```shell
|
|
22
|
+
$ gem install wallaby-core
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
## Contributing
|
|
26
|
+
|
|
27
|
+
Bug reports and pull requests are welcome on GitHub at https://github.com/wallaby-rails/wallaby-core.
|
|
28
|
+
|
|
29
|
+
## License
|
|
30
|
+
|
|
31
|
+
This project is [MIT Licensed](LICENSE)
|
|
@@ -0,0 +1,84 @@
|
|
|
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
|
|
@@ -0,0 +1,381 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Wallaby
|
|
4
|
+
# Resources controller, superclass for all customization controllers.
|
|
5
|
+
# It contains CRUD template action methods (`index`/`new`/`create`/`edit`/`update`/`destroy`)
|
|
6
|
+
# that allow subclasses to override.
|
|
7
|
+
class ResourcesController < ::Wallaby::SecureController
|
|
8
|
+
extend Authorizable::ClassMethods
|
|
9
|
+
extend Baseable::ClassMethods
|
|
10
|
+
extend Decoratable::ClassMethods
|
|
11
|
+
extend Paginatable::ClassMethods
|
|
12
|
+
extend Resourcable::ClassMethods
|
|
13
|
+
extend Servicable::ClassMethods
|
|
14
|
+
extend Themeable::ClassMethods
|
|
15
|
+
include Authorizable
|
|
16
|
+
include Decoratable
|
|
17
|
+
include Defaultable
|
|
18
|
+
include Paginatable
|
|
19
|
+
include RailsOverriddenMethods
|
|
20
|
+
include Resourcable
|
|
21
|
+
include Servicable
|
|
22
|
+
include Themeable
|
|
23
|
+
|
|
24
|
+
self.responder = ResourcesResponder
|
|
25
|
+
respond_to :html
|
|
26
|
+
respond_to :json
|
|
27
|
+
respond_to :csv, only: :index
|
|
28
|
+
helper ResourcesHelper
|
|
29
|
+
before_action :authenticate_user!
|
|
30
|
+
|
|
31
|
+
# @note This is a template method that can be overridden by subclasses.
|
|
32
|
+
# This is an action for landing page display. It does nothing more than rendering `home` template.
|
|
33
|
+
#
|
|
34
|
+
# It can be replaced completely in subclasses as below:
|
|
35
|
+
#
|
|
36
|
+
# ```
|
|
37
|
+
# def home
|
|
38
|
+
# generate_dashboard_report
|
|
39
|
+
# end
|
|
40
|
+
# ```
|
|
41
|
+
def home
|
|
42
|
+
# do nothing
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
# @note This is a template method that can be overridden by subclasses.
|
|
46
|
+
# This is a resourceful action to list records that user can access.
|
|
47
|
+
#
|
|
48
|
+
# It can be customized as below in subclasses:
|
|
49
|
+
#
|
|
50
|
+
# `WARN: Please keep in mind that Wallaby User Interface requires **index**
|
|
51
|
+
# action to respond to **csv** and **json** format as well.`
|
|
52
|
+
#
|
|
53
|
+
# ```
|
|
54
|
+
# def index
|
|
55
|
+
# # do something before the origin action
|
|
56
|
+
# options = {} # NOTE: see `options` parameter for more details
|
|
57
|
+
# index!(options) do |format| # NOTE: this is better than using `super`
|
|
58
|
+
# # NOTE: this block is for `respond_with` which works similar to `respond_to`
|
|
59
|
+
# # customize response behaviour, or do something before the request is rendered
|
|
60
|
+
# end
|
|
61
|
+
# end
|
|
62
|
+
# ```
|
|
63
|
+
#
|
|
64
|
+
# Otherwise, it can be replaced completely in subclasses:
|
|
65
|
+
#
|
|
66
|
+
# `WARN: Please keep in mind that Wallaby User Interface requires **index**
|
|
67
|
+
# action to respond to **csv** and **json** format as well.`
|
|
68
|
+
#
|
|
69
|
+
# ```
|
|
70
|
+
# def index
|
|
71
|
+
# # NOTE: `@collection` will be used by the view, please ensure it is assigned, for example:
|
|
72
|
+
# @collection = Product.all
|
|
73
|
+
# respond_with @collection
|
|
74
|
+
# end
|
|
75
|
+
# ```
|
|
76
|
+
# @param options [Hash] (since 5.2.0) options for
|
|
77
|
+
# {https://www.rubydoc.info/gems/responders/ActionController/RespondWith#respond_with-instance_method
|
|
78
|
+
# respond_with}
|
|
79
|
+
# @yield [format] block for
|
|
80
|
+
# {https://www.rubydoc.info/gems/responders/ActionController/RespondWith#respond_with-instance_method
|
|
81
|
+
# respond_with}
|
|
82
|
+
# to customize response behaviour.
|
|
83
|
+
# @raise [Wallaby::Forbidden] if user has no access
|
|
84
|
+
def index(options = {}, &block)
|
|
85
|
+
current_authorizer.authorize :index, current_model_class
|
|
86
|
+
respond_with collection, options, &block
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
alias index! index
|
|
90
|
+
|
|
91
|
+
# @note This is a template method that can be overridden by subclasses.
|
|
92
|
+
# This is a resourceful action to show the form to create record that user is allowed to.
|
|
93
|
+
#
|
|
94
|
+
# It can be customized as below in subclasses:
|
|
95
|
+
#
|
|
96
|
+
# ```
|
|
97
|
+
# def new
|
|
98
|
+
# # do something before the origin action
|
|
99
|
+
# options = {} # NOTE: see `options` parameter for more details
|
|
100
|
+
# new!(options) do |format| # NOTE: this is better than using `super`
|
|
101
|
+
# # NOTE: this block is for `respond_with` which works similar to `respond_to`
|
|
102
|
+
# # customize response behaviour, or do something before the request is rendered
|
|
103
|
+
# end
|
|
104
|
+
# end
|
|
105
|
+
# ```
|
|
106
|
+
#
|
|
107
|
+
# Otherwise, it can be replaced completely in subclasses:
|
|
108
|
+
#
|
|
109
|
+
# ```
|
|
110
|
+
# def new
|
|
111
|
+
# # NOTE: `@resource` will be used by the view, please ensure it is assigned, for example:
|
|
112
|
+
# @resource = Product.new new_arrival: true
|
|
113
|
+
# end
|
|
114
|
+
# ```
|
|
115
|
+
# @param options [Hash] (since 5.2.0) options for
|
|
116
|
+
# {https://www.rubydoc.info/gems/responders/ActionController/RespondWith#respond_with-instance_method
|
|
117
|
+
# respond_with}
|
|
118
|
+
# @yield [format] block for
|
|
119
|
+
# {https://www.rubydoc.info/gems/responders/ActionController/RespondWith#respond_with-instance_method
|
|
120
|
+
# respond_with}
|
|
121
|
+
# to customize response behaviour.
|
|
122
|
+
# @raise [Wallaby::Forbidden] if user has no access
|
|
123
|
+
def new(options = {}, &block)
|
|
124
|
+
current_authorizer.authorize :new, resource
|
|
125
|
+
respond_with resource, options, &block
|
|
126
|
+
end
|
|
127
|
+
|
|
128
|
+
alias new! new
|
|
129
|
+
|
|
130
|
+
# @note This is a template method that can be overridden by subclasses.
|
|
131
|
+
# This is a resourceful action to create a record that user is allowed to.
|
|
132
|
+
#
|
|
133
|
+
# If record is created successfully, user will be navigated to the record show page.
|
|
134
|
+
# Otherwise, the form will be shown again with error messages.
|
|
135
|
+
#
|
|
136
|
+
# It can be customized as below in subclasses:
|
|
137
|
+
#
|
|
138
|
+
# ```
|
|
139
|
+
# def create
|
|
140
|
+
# # do something before the origin action
|
|
141
|
+
# options = {} # NOTE: see `options` parameter for more details
|
|
142
|
+
# create!(options) do |format| # NOTE: this is better than using `super`
|
|
143
|
+
# # NOTE: this block is for `respond_with` which works similar to `respond_to`
|
|
144
|
+
# # customize response behaviour, or do something before the request is rendered
|
|
145
|
+
# end
|
|
146
|
+
# end
|
|
147
|
+
# ```
|
|
148
|
+
#
|
|
149
|
+
# Otherwise, it can be replaced completely in subclasses:
|
|
150
|
+
#
|
|
151
|
+
# ```
|
|
152
|
+
# def create
|
|
153
|
+
# # NOTE: `@resource` will be used by the view, please ensure it is assigned, for example:
|
|
154
|
+
# @resource = Product.new resource_params.merge(new_arrival: true)
|
|
155
|
+
# if @resource.save
|
|
156
|
+
# redirect_to helper.index_path(current_model_class)
|
|
157
|
+
# else
|
|
158
|
+
# render :new
|
|
159
|
+
# end
|
|
160
|
+
# end
|
|
161
|
+
# ```
|
|
162
|
+
# @param options [Hash] (since 5.2.0) options for
|
|
163
|
+
# {https://www.rubydoc.info/gems/responders/ActionController/RespondWith#respond_with-instance_method
|
|
164
|
+
# respond_with}. In addition, options `:params` is supported, see below
|
|
165
|
+
# @option options [ActionController::Parameters, Hash] :params
|
|
166
|
+
# permitted parameters for servicer to create the record. _(defaults to: {#resource_params})_
|
|
167
|
+
# @yield [format] block for
|
|
168
|
+
# {https://www.rubydoc.info/gems/responders/ActionController/RespondWith#respond_with-instance_method
|
|
169
|
+
# respond_with}
|
|
170
|
+
# to customize response behaviour.
|
|
171
|
+
# @raise [Wallaby::Forbidden] if user has no access
|
|
172
|
+
def create(options = {}, &block)
|
|
173
|
+
set_defaults_for :create, options
|
|
174
|
+
current_authorizer.authorize :create, resource
|
|
175
|
+
current_servicer.create resource, options.delete(:params)
|
|
176
|
+
respond_with resource, options, &block
|
|
177
|
+
end
|
|
178
|
+
|
|
179
|
+
alias create! create
|
|
180
|
+
|
|
181
|
+
# @note This is a template method that can be overridden by subclasses.
|
|
182
|
+
# This is a resourceful action to display the record details that user is allowed to.
|
|
183
|
+
#
|
|
184
|
+
# It can be customized as below in subclasses:
|
|
185
|
+
#
|
|
186
|
+
# ```
|
|
187
|
+
# def show
|
|
188
|
+
# # do something before the origin action
|
|
189
|
+
# options = {} # NOTE: see `options` parameter for more details
|
|
190
|
+
# show!(options) do |format| # NOTE: this is better than using `super`
|
|
191
|
+
# # NOTE: this block is for `respond_with` which works similar to `respond_to`
|
|
192
|
+
# # customize response behaviour, or do something before the request is rendered
|
|
193
|
+
# end
|
|
194
|
+
# end
|
|
195
|
+
# ```
|
|
196
|
+
#
|
|
197
|
+
# Otherwise, it can be replaced completely in subclasses:
|
|
198
|
+
#
|
|
199
|
+
# ```
|
|
200
|
+
# def show
|
|
201
|
+
# # NOTE: `@resource` will be used by the view, please ensure it is assigned, for example:
|
|
202
|
+
# @resource = Product.find_by_slug params[:id]
|
|
203
|
+
# end
|
|
204
|
+
# ```
|
|
205
|
+
# @param options [Hash] (since 5.2.0) options for
|
|
206
|
+
# {https://www.rubydoc.info/gems/responders/ActionController/RespondWith#respond_with-instance_method
|
|
207
|
+
# respond_with}
|
|
208
|
+
# @yield [format] block for
|
|
209
|
+
# {https://www.rubydoc.info/gems/responders/ActionController/RespondWith#respond_with-instance_method
|
|
210
|
+
# respond_with}
|
|
211
|
+
# to customize response behaviour.
|
|
212
|
+
# @raise [Wallaby::Forbidden] if user has no access
|
|
213
|
+
def show(options = {}, &block)
|
|
214
|
+
current_authorizer.authorize :show, resource
|
|
215
|
+
respond_with resource, options, &block
|
|
216
|
+
end
|
|
217
|
+
|
|
218
|
+
alias show! show
|
|
219
|
+
|
|
220
|
+
# @note This is a template method that can be overridden by subclasses.
|
|
221
|
+
# This is a resourceful action to show the form to edit record that user is allowed to.
|
|
222
|
+
#
|
|
223
|
+
# It can be customized as below in subclasses:
|
|
224
|
+
#
|
|
225
|
+
# ```
|
|
226
|
+
# def edit
|
|
227
|
+
# # do something before the origin action
|
|
228
|
+
# options = {} # NOTE: see `options` parameter for more details
|
|
229
|
+
# edit!(options) do |format| # NOTE: this is better than using `super`
|
|
230
|
+
# # NOTE: this block is for `respond_with` which works similar to `respond_to`
|
|
231
|
+
# # customize response behaviour, or do something before the request is rendered
|
|
232
|
+
# end
|
|
233
|
+
# end
|
|
234
|
+
# ```
|
|
235
|
+
#
|
|
236
|
+
# Otherwise, it can be replaced completely in subclasses:
|
|
237
|
+
#
|
|
238
|
+
# ```
|
|
239
|
+
# def edit
|
|
240
|
+
# # NOTE: `@resource` will be used by the view, please ensure it is assigned, for example:
|
|
241
|
+
# @resource = Product.find_by_slug params[:id]
|
|
242
|
+
# end
|
|
243
|
+
# ```
|
|
244
|
+
# @param options [Hash] (since 5.2.0) options for
|
|
245
|
+
# {https://www.rubydoc.info/gems/responders/ActionController/RespondWith#respond_with-instance_method
|
|
246
|
+
# respond_with}
|
|
247
|
+
# @yield [format] block for
|
|
248
|
+
# {https://www.rubydoc.info/gems/responders/ActionController/RespondWith#respond_with-instance_method
|
|
249
|
+
# respond_with}
|
|
250
|
+
# to customize response behaviour.
|
|
251
|
+
# @raise [Wallaby::Forbidden] if user has no access
|
|
252
|
+
def edit(options = {}, &block)
|
|
253
|
+
current_authorizer.authorize :edit, resource
|
|
254
|
+
respond_with resource, options, &block
|
|
255
|
+
end
|
|
256
|
+
|
|
257
|
+
alias edit! edit
|
|
258
|
+
|
|
259
|
+
# @note This is a template method that can be overridden by subclasses.
|
|
260
|
+
# This is a resourceful action to update the record that user is allowed to.
|
|
261
|
+
#
|
|
262
|
+
# If record is updated successfully, user will be navigated to the record show page.
|
|
263
|
+
# Otherwise, the form will be shown again with error messages.
|
|
264
|
+
#
|
|
265
|
+
# It can be customized as below in subclasses:
|
|
266
|
+
#
|
|
267
|
+
# ```
|
|
268
|
+
# def update
|
|
269
|
+
# # do something before the origin action
|
|
270
|
+
# options = {} # NOTE: see `options` parameter for more details
|
|
271
|
+
# update!(options) do |format| # NOTE: this is better than using `super`
|
|
272
|
+
# # NOTE: this block is for `respond_with` which works similar to `respond_to`
|
|
273
|
+
# # customize response behaviour, or do something before the request is rendered
|
|
274
|
+
# end
|
|
275
|
+
# end
|
|
276
|
+
# ```
|
|
277
|
+
#
|
|
278
|
+
# Otherwise, it can be replaced completely in subclasses:
|
|
279
|
+
#
|
|
280
|
+
# ```
|
|
281
|
+
# def update
|
|
282
|
+
# # NOTE: `@resource` will be used by the view, please ensure it is assigned, for example:
|
|
283
|
+
# @resource = Product.find_by_slug params[:id]
|
|
284
|
+
# @resource.assign_attributes resource_params.merge(new_arrival: true)
|
|
285
|
+
# if @resource.save
|
|
286
|
+
# redirect_to helper.index_path(current_model_class)
|
|
287
|
+
# else
|
|
288
|
+
# render :new
|
|
289
|
+
# end
|
|
290
|
+
# end
|
|
291
|
+
# ```
|
|
292
|
+
# @param options [Hash] (since 5.2.0) options for
|
|
293
|
+
# {https://www.rubydoc.info/gems/responders/ActionController/RespondWith#respond_with-instance_method
|
|
294
|
+
# respond_with}. In addition, options `:params` is supported, see below
|
|
295
|
+
# @option options [ActionController::Parameters, Hash] :params
|
|
296
|
+
# permitted parameters for servicer to update the record. _(defaults to: {#resource_params})_
|
|
297
|
+
# @yield [format] block for
|
|
298
|
+
# {https://www.rubydoc.info/gems/responders/ActionController/RespondWith#respond_with-instance_method
|
|
299
|
+
# respond_with}
|
|
300
|
+
# to customize response behaviour.
|
|
301
|
+
# @raise [Wallaby::Forbidden] if user has no access
|
|
302
|
+
def update(options = {}, &block)
|
|
303
|
+
set_defaults_for :update, options
|
|
304
|
+
current_authorizer.authorize :update, resource
|
|
305
|
+
current_servicer.update resource, options.delete(:params)
|
|
306
|
+
respond_with resource, options, &block
|
|
307
|
+
end
|
|
308
|
+
|
|
309
|
+
alias update! update
|
|
310
|
+
|
|
311
|
+
# @note This is a template method that can be overridden by subclasses.
|
|
312
|
+
# This is a resourceful action to delete the record that user is allowed to.
|
|
313
|
+
#
|
|
314
|
+
# It can be customized as below in subclasses:
|
|
315
|
+
#
|
|
316
|
+
# ```
|
|
317
|
+
# def destroy
|
|
318
|
+
# # do something before the origin action
|
|
319
|
+
# options = {} # NOTE: see `options` parameter for more details
|
|
320
|
+
# destroy!(options) do |format| # NOTE: this is better than using `super`
|
|
321
|
+
# # NOTE: this block is for `respond_with` which works similar to `respond_to`
|
|
322
|
+
# # customize response behaviour, or do something before the request is rendered
|
|
323
|
+
# end
|
|
324
|
+
# end
|
|
325
|
+
# ```
|
|
326
|
+
#
|
|
327
|
+
# Otherwise, it can be replaced completely in subclasses:
|
|
328
|
+
#
|
|
329
|
+
# ```
|
|
330
|
+
# def destroy
|
|
331
|
+
# # NOTE: `@resource` will be used by the view, please ensure it is assigned, for example:
|
|
332
|
+
# @resource = Product.find_by_slug params[:id]
|
|
333
|
+
# @resource.destroy
|
|
334
|
+
# redirect_to helper.index_path(current_model_class)
|
|
335
|
+
# end
|
|
336
|
+
# ```
|
|
337
|
+
# @param options [Hash] (since 5.2.0) options for
|
|
338
|
+
# {https://www.rubydoc.info/gems/responders/ActionController/RespondWith#respond_with-instance_method
|
|
339
|
+
# respond_with}. In addition, options `:params` is supported, see below
|
|
340
|
+
# @option options [ActionController::Parameters, Hash] :params
|
|
341
|
+
# permitted parameters for servicer to destroy the record. _(defaults to: {#resource_params})_
|
|
342
|
+
# @yield [format] block for
|
|
343
|
+
# {https://www.rubydoc.info/gems/responders/ActionController/RespondWith#respond_with-instance_method
|
|
344
|
+
# respond_with}
|
|
345
|
+
# to customize response behaviour.
|
|
346
|
+
# @raise [Wallaby::Forbidden] if user has no access
|
|
347
|
+
def destroy(options = {}, &block)
|
|
348
|
+
set_defaults_for :destroy, options
|
|
349
|
+
current_authorizer.authorize :destroy, resource
|
|
350
|
+
current_servicer.destroy resource, options.delete(:params)
|
|
351
|
+
respond_with resource, options, &block
|
|
352
|
+
end
|
|
353
|
+
|
|
354
|
+
alias destroy! destroy
|
|
355
|
+
|
|
356
|
+
# @note This is a template method that can be overridden by subclasses.
|
|
357
|
+
# To whitelist the params for {#create} and {#update} actions.
|
|
358
|
+
#
|
|
359
|
+
# If Wallaby cannot generate the correct strong parameters, it can be replaced, for example:
|
|
360
|
+
#
|
|
361
|
+
# ```
|
|
362
|
+
# def resource_params
|
|
363
|
+
# params.fetch(:product, {}).permit(:name, :sku)
|
|
364
|
+
# end
|
|
365
|
+
# ```
|
|
366
|
+
# @return [ActionController::Parameters] whitelisted params
|
|
367
|
+
def resource_params
|
|
368
|
+
@resource_params ||= current_servicer.permit params, action_name
|
|
369
|
+
end
|
|
370
|
+
|
|
371
|
+
# @!method collection(options = {}, &block)
|
|
372
|
+
# (see Wallaby::Resourcable#collection)
|
|
373
|
+
# @see Wallaby::Resourcable#collection
|
|
374
|
+
alias collection! collection
|
|
375
|
+
|
|
376
|
+
# @!method resource(options = {}, &block)
|
|
377
|
+
# (see Wallaby::Resourcable#resource)
|
|
378
|
+
# @see Wallaby::Resourcable#resource
|
|
379
|
+
alias resource! resource
|
|
380
|
+
end
|
|
381
|
+
end
|