force_format 0.0.3 → 0.0.4
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 +23 -3
- data/lib/force_format/controller_access.rb +13 -1
- data/lib/force_format/version.rb +1 -1
- data/spec/base_spec.rb +70 -0
- data/spec/dummy/app/views/pages/with_js.js.erb +0 -0
- data/spec/dummy/app/views/pages/with_json.json.erb +0 -0
- data/spec/dummy/app/views/pages/with_xml.xml.erb +0 -0
- metadata +7 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 28bd300a1fa894d648a065a26018ecf8ac37c3d3
|
4
|
+
data.tar.gz: 8eefca9fc7f88b18668829c9e7dcf02ee89c55a5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 62449330b602903831c8abec45e214ecce5314cec8c5104fdee9e7c90159809aab31ebc1c63c092a36313ee5a1ef4b95fdd9b9b77bd113fd84d27251aaef89e9
|
7
|
+
data.tar.gz: 40aaacd7294b881fbce2125039df48e131b5d28ec3d80acfafdd26bdd88a49241ac9378a95d263aafe317887bb684068814a90b4d1346e3ae40b7a24f9d9548a
|
data/README.md
CHANGED
@@ -43,11 +43,32 @@ and ```:unless => ...``` parameters like the Rails filters.
|
|
43
43
|
def index
|
44
44
|
end
|
45
45
|
end
|
46
|
+
|
47
|
+
If you want to skip the filter in inherited controllers, use the ```skip_force_format_filter``` method.
|
48
|
+
It accepts the same parameters the ```force_format_filter``` methods except ```:for => ...```.
|
46
49
|
|
50
|
+
Maybe you want to define the formats more granular, for example different per action.
|
51
|
+
To accomplish this, pass an hash with action names and required formats. Add a *:default* key with formats
|
52
|
+
for actions that are not specified directly.
|
53
|
+
|
54
|
+
|
55
|
+
class PagesController < ApplicationController
|
56
|
+
force_format_filter :for => {:index => :js, :default => [:json, :html]}
|
57
|
+
|
58
|
+
def index
|
59
|
+
# should respond with js
|
60
|
+
end
|
61
|
+
|
62
|
+
def new
|
63
|
+
# should respond with json or html
|
64
|
+
end
|
65
|
+
|
66
|
+
end
|
67
|
+
|
47
68
|
|
48
69
|
By default ```force_format``` raises an ```ActionController::RoutingError```
|
49
|
-
if a requested format
|
50
|
-
rescue from this exception, for example in your ```application_controller.rb```:
|
70
|
+
if a requested format matches none of the attributes specified via ```:for => ...```.
|
71
|
+
It should be easy to rescue from this exception, for example in your ```application_controller.rb```:
|
51
72
|
|
52
73
|
|
53
74
|
class ApplicationController < ActionController::Base
|
@@ -63,7 +84,6 @@ rescue from this exception, for example in your ```application_controller.rb```:
|
|
63
84
|
|
64
85
|
## TODO
|
65
86
|
1. More tests
|
66
|
-
2. Ability to skip before filters
|
67
87
|
3. More robust params checking
|
68
88
|
4. Custom exception
|
69
89
|
|
@@ -22,6 +22,7 @@ module ControllerAccess
|
|
22
22
|
|
23
23
|
def force_format_filter_method
|
24
24
|
force_formats = force_format_extract_options_from_filter_chain
|
25
|
+
return unless force_formats
|
25
26
|
unsupported = force_formats - FORCE_FORMAT_TYPES
|
26
27
|
raise UnsupportedFormatsError.new("There is no support for #{unsupported} format") if unsupported.any?
|
27
28
|
format = request.format
|
@@ -33,7 +34,18 @@ module ControllerAccess
|
|
33
34
|
def force_format_extract_options_from_filter_chain
|
34
35
|
filter = self._process_action_callbacks.find { |f| f.filter == :force_format_filter_method }
|
35
36
|
force_formats = filter.options[:for]
|
36
|
-
|
37
|
+
|
38
|
+
if force_formats.is_a? (Array || Symbol)
|
39
|
+
[*force_formats]
|
40
|
+
elsif force_formats.is_a? Hash
|
41
|
+
if force_formats[self.action_name.to_sym]
|
42
|
+
[*force_formats[self.action_name.to_sym]]
|
43
|
+
else
|
44
|
+
force_formats[:default] ? [*force_formats[:default]] : nil
|
45
|
+
end
|
46
|
+
else
|
47
|
+
FORCE_FORMAT_DEFAULT_TYPES
|
48
|
+
end
|
37
49
|
end
|
38
50
|
|
39
51
|
end
|
data/lib/force_format/version.rb
CHANGED
data/spec/base_spec.rb
CHANGED
@@ -271,4 +271,74 @@ describe PagesController, :type => :controller do
|
|
271
271
|
|
272
272
|
end
|
273
273
|
|
274
|
+
|
275
|
+
context "force_format_filter is used with format specified more than once" do
|
276
|
+
|
277
|
+
controller do
|
278
|
+
send "force_format_filter", :for => {:index => [:js], :new => :json}
|
279
|
+
|
280
|
+
def index
|
281
|
+
render "with_js"
|
282
|
+
end
|
283
|
+
|
284
|
+
def new
|
285
|
+
render "with_json"
|
286
|
+
end
|
287
|
+
end
|
288
|
+
|
289
|
+
it "should respond with 200 for js" do
|
290
|
+
get "index", :format => :js
|
291
|
+
response.code.should eq("200")
|
292
|
+
end
|
293
|
+
|
294
|
+
it "should respond with 200 for json" do
|
295
|
+
get "new", :format => :json
|
296
|
+
response.code.should eq("200")
|
297
|
+
end
|
298
|
+
|
299
|
+
it "should respond with RoutingError for html" do
|
300
|
+
expect { get "index", :format => :html }.to raise_error(ActionController::RoutingError)
|
301
|
+
end
|
302
|
+
|
303
|
+
it "should respond with RoutingError for html" do
|
304
|
+
expect { get "new", :format => :html }.to raise_error(ActionController::RoutingError)
|
305
|
+
end
|
306
|
+
|
307
|
+
end
|
308
|
+
|
309
|
+
context "force_format_filter is used with format specified more than once but used default" do
|
310
|
+
|
311
|
+
controller do
|
312
|
+
send "force_format_filter", :for => {:index => :js, :default => [:json]}
|
313
|
+
|
314
|
+
def index
|
315
|
+
render "with_js"
|
316
|
+
end
|
317
|
+
|
318
|
+
def new
|
319
|
+
render "with_json"
|
320
|
+
end
|
321
|
+
end
|
322
|
+
|
323
|
+
it "should respond with 200 for js" do
|
324
|
+
get "index", :format => :js
|
325
|
+
response.code.should eq("200")
|
326
|
+
end
|
327
|
+
|
328
|
+
it "should respond with 200 for json" do
|
329
|
+
get "new", :format => :json
|
330
|
+
response.code.should eq("200")
|
331
|
+
end
|
332
|
+
|
333
|
+
it "should respond with RoutingError for html" do
|
334
|
+
expect { get "index", :format => :html }.to raise_error(ActionController::RoutingError)
|
335
|
+
end
|
336
|
+
|
337
|
+
it "should respond with RoutingError for html" do
|
338
|
+
expect { get "new", :format => :html }.to raise_error(ActionController::RoutingError)
|
339
|
+
end
|
340
|
+
|
341
|
+
end
|
342
|
+
|
343
|
+
|
274
344
|
end
|
File without changes
|
File without changes
|
File without changes
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: force_format
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- |
|
@@ -146,6 +146,9 @@ files:
|
|
146
146
|
- spec/dummy/app/views/pages/with_html.html.erb
|
147
147
|
- spec/dummy/app/views/pages/with_html_js.html.erb
|
148
148
|
- spec/dummy/app/views/pages/with_html_js.js.erb
|
149
|
+
- spec/dummy/app/views/pages/with_js.js.erb
|
150
|
+
- spec/dummy/app/views/pages/with_json.json.erb
|
151
|
+
- spec/dummy/app/views/pages/with_xml.xml.erb
|
149
152
|
- spec/dummy/config.ru
|
150
153
|
- spec/dummy/config/application.rb
|
151
154
|
- spec/dummy/config/boot.rb
|
@@ -210,6 +213,9 @@ test_files:
|
|
210
213
|
- spec/dummy/app/views/pages/with_html.html.erb
|
211
214
|
- spec/dummy/app/views/pages/with_html_js.html.erb
|
212
215
|
- spec/dummy/app/views/pages/with_html_js.js.erb
|
216
|
+
- spec/dummy/app/views/pages/with_js.js.erb
|
217
|
+
- spec/dummy/app/views/pages/with_json.json.erb
|
218
|
+
- spec/dummy/app/views/pages/with_xml.xml.erb
|
213
219
|
- spec/dummy/config.ru
|
214
220
|
- spec/dummy/config/application.rb
|
215
221
|
- spec/dummy/config/boot.rb
|