force_format 0.0.3 → 0.0.4
Sign up to get free protection for your applications and to get access to all the features.
- 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
|