responders 2.1.2 → 2.2.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 +4 -4
- data/CHANGELOG.md +7 -0
- data/README.md +25 -2
- data/lib/action_controller/respond_with.rb +24 -7
- data/lib/responders/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7ba43cee72d6a197eff78818683a01dfe43814d3
|
4
|
+
data.tar.gz: 37ceb10a23ee46f1ec142176eee690c33a98b73d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e198e8715fefd1e87c21d7a52ed255ad51445bdfe2eb83e0e8a5eb8845eae8d3b1e665217ce1ac6f836156abd1d56cff5a2082f48cfb6f44e3cabe875117125f
|
7
|
+
data.tar.gz: c59cbdaf34207e264e7551bdd700f2d9afe200fa29c2a31672d79debce0979853c76ee8ce0500347f5ee8fb19ebf8b86fc270a45add262d06b4d9c43c7c7ae17
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,10 @@
|
|
1
|
+
## 2.2.0
|
2
|
+
|
3
|
+
* Added the `verify_request_format!` method, that can be used as a `before_action`
|
4
|
+
callback to prevent your actions from being invoked when the controller does
|
5
|
+
not respond to the request mime type, preventing the execution of complex
|
6
|
+
queries or creating/deleting records from your app.
|
7
|
+
|
1
8
|
## 2.1.2
|
2
9
|
|
3
10
|
* Fix rendering when using `ActionController::API`. (by @eLod)
|
data/README.md
CHANGED
@@ -17,7 +17,7 @@ Update your bundle and run the install generator:
|
|
17
17
|
$ bundle install
|
18
18
|
$ rails g responders:install
|
19
19
|
|
20
|
-
If you are including this gem to support backwards compatibilty for responders in previous releases of Rails, you only need to include the gem and bundle.
|
20
|
+
If you are including this gem to support backwards compatibilty for responders in previous releases of Rails, you only need to include the gem and bundle.
|
21
21
|
|
22
22
|
$ bundle install
|
23
23
|
|
@@ -188,7 +188,7 @@ to use `respond_with` instead of default `respond_to` blocks. From 2.1, you need
|
|
188
188
|
|
189
189
|
config.app_generators.scaffold_controller :responders_controller
|
190
190
|
|
191
|
-
|
191
|
+
## Failure handling
|
192
192
|
|
193
193
|
Responders don't use `valid?` to check for errors in models to figure out if
|
194
194
|
the request was successfull or not, and relies on your controllers to call
|
@@ -216,6 +216,29 @@ def create
|
|
216
216
|
end
|
217
217
|
```
|
218
218
|
|
219
|
+
## Verifying request formats
|
220
|
+
|
221
|
+
`respond_with` will raise an `ActionController::UnknownFormat` if the request
|
222
|
+
mime type was not configured through the class level `respond_to`, but the
|
223
|
+
action will still be executed and any side effects (like creating a new record)
|
224
|
+
will still occur. To raise the `UnknownFormat` exception before your action
|
225
|
+
is invoked you can set the `verify_request_format!` method as a `before_action`
|
226
|
+
on your controller.
|
227
|
+
|
228
|
+
```ruby
|
229
|
+
class WidgetsController < ApplicationController
|
230
|
+
respond_to :json
|
231
|
+
before_action :verify_request_format!
|
232
|
+
|
233
|
+
# POST /widgets.html won't reach the `create` action.
|
234
|
+
def create
|
235
|
+
widget = Widget.create(widget_params)
|
236
|
+
respond_with widget
|
237
|
+
end
|
238
|
+
end
|
239
|
+
|
240
|
+
```
|
241
|
+
|
219
242
|
## Examples
|
220
243
|
|
221
244
|
Want more examples ? Check out this blog posts:
|
@@ -40,14 +40,14 @@ module ActionController #:nodoc:
|
|
40
40
|
only_actions = Array(options.delete(:only)).map(&:to_s)
|
41
41
|
except_actions = Array(options.delete(:except)).map(&:to_s)
|
42
42
|
|
43
|
-
|
43
|
+
hash = mimes_for_respond_to.dup
|
44
44
|
mimes.each do |mime|
|
45
45
|
mime = mime.to_sym
|
46
|
-
|
47
|
-
|
48
|
-
|
46
|
+
hash[mime] = {}
|
47
|
+
hash[mime][:only] = only_actions unless only_actions.empty?
|
48
|
+
hash[mime][:except] = except_actions unless except_actions.empty?
|
49
49
|
end
|
50
|
-
self.mimes_for_respond_to =
|
50
|
+
self.mimes_for_respond_to = hash.freeze
|
51
51
|
end
|
52
52
|
|
53
53
|
# Clear all mime types in <tt>respond_to</tt>.
|
@@ -193,7 +193,7 @@ module ActionController #:nodoc:
|
|
193
193
|
"formats your controller responds to in the class level."
|
194
194
|
end
|
195
195
|
|
196
|
-
mimes = collect_mimes_from_class_level
|
196
|
+
mimes = collect_mimes_from_class_level
|
197
197
|
collector = ActionController::MimeResponds::Collector.new(mimes, request.variant)
|
198
198
|
block.call(collector) if block_given?
|
199
199
|
|
@@ -208,7 +208,24 @@ module ActionController #:nodoc:
|
|
208
208
|
end
|
209
209
|
end
|
210
210
|
|
211
|
-
|
211
|
+
protected
|
212
|
+
|
213
|
+
# Before action callback that can be used to prevent requests that do not
|
214
|
+
# match the mime types defined through <tt>respond_to</tt> from being executed.
|
215
|
+
#
|
216
|
+
# class PeopleController < ApplicationController
|
217
|
+
# respond_to :html, :xml, :json
|
218
|
+
#
|
219
|
+
# before_action :verify_request_format!
|
220
|
+
# end
|
221
|
+
def verify_request_format!
|
222
|
+
mimes = collect_mimes_from_class_level
|
223
|
+
collector = ActionController::MimeResponds::Collector.new(mimes, request.variant)
|
224
|
+
|
225
|
+
unless collector.negotiate_format(request)
|
226
|
+
raise ActionController::UnknownFormat
|
227
|
+
end
|
228
|
+
end
|
212
229
|
|
213
230
|
# Collect mimes declared in the class method respond_to valid for the
|
214
231
|
# current action.
|
data/lib/responders/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: responders
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- José Valim
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-04-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: railties
|