force_format 0.0.1 → 0.0.2

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 8ee457c3ed5a5a3e98ea89a9c52460069ba8fee0
4
- data.tar.gz: d8dfc05478b54c95741cb9df84fc2787ba9fee11
3
+ metadata.gz: a1866205dca78a0b08e5ac3f71874418eff03487
4
+ data.tar.gz: d7e6868ffd9742d3e3719e4fd6d20b762eee4dd3
5
5
  SHA512:
6
- metadata.gz: 59c829db48c25d9495634809a61d3f21fd6c1f5b815c3e152287564ed0f7448dd5925e402d356e6c38825f0e6ffe4c20d715e3ee151620362bbd1282e7fc7a01
7
- data.tar.gz: e75df2b5a815be82273d32d7e39c71738f1f866b74e24c4c757e70234290ce9a675987f3082a72d709363b699d6ec42e695ae7fa96acdda16488d61ed3edf9b5
6
+ metadata.gz: 7d977a2e03662310507ca4cae5b9313e76cdb6647b066f37e2f1356cfb4a9e9d606b93517cb99b9055f1855f82659b022f13a3b8727440e366a405f80a547e00
7
+ data.tar.gz: 1c5156e06744368cd0a386eca1bc370023ffed67cd7ba8db0218fea225f4c9d9323b0c27214a07b75681e0b060078c6ea49145b3be0378c32a0f0a328e08bf7b
data/.ruby-gemset ADDED
@@ -0,0 +1 @@
1
+ force-format
data/.ruby-version ADDED
@@ -0,0 +1 @@
1
+ ruby-2.0.0-p247
data/README.md CHANGED
@@ -1,9 +1,16 @@
1
1
  # force_format
2
2
 
3
- Define the formats your Rails application should respond to.
4
- Normally a Rails3 application tries to respond to all kinds of formats (e.g. html, xml, json, ...).
5
- Unfortunately this will raise Errors if the template for the given format can not be found.
6
- This is where ```force_format``` joins the game...
3
+ Define the formats your Rails application should respond to within your controllers.
4
+ Normally a Rails3 application tries to respond to all kinds of formats (e.g. html, xml, json, ...).
5
+ Unfortunately this will raise errors if the template for the given format can not be found.
6
+ This is where ```force_format``` joins the game.
7
+
8
+
9
+ ## Requirements
10
+
11
+ ```rails (3.2.x)```
12
+
13
+ (This gem is tested with Rails 3.2.x only, but other versions may work too.)
7
14
 
8
15
  ## Installation
9
16
 
@@ -21,41 +28,44 @@ Or install it yourself as:
21
28
 
22
29
  ## Usage
23
30
 
24
- Include the ```force_format_filter``` method in your controllers.
25
- The important param is the ```:for => [:my, :formats]```
26
- In addition it accepts ```:only => ...```, ```:except => ...```, ```:if => ...```
27
- and ```:unless => ...``` parameters like the Rails filters.
31
+ Include the ```force_format_filter``` method in your controllers.
32
+ The important param is the ```:for => [:my, :formats]```.
33
+ With that given array of fomat types you can define the formats the
34
+ action should respond to (and hopefully find a template).
35
+ In addition it accepts ```:only => ...```, ```:except => ...```, ```:if => ...```
36
+ and ```:unless => ...``` parameters like the Rails filters.
37
+
38
+
28
39
 
29
- ```
30
40
  class PagesController < ApplicationController
31
41
  force_format_filter :for => [:html, :js], :only => :index
32
-
42
+
33
43
  def index
34
44
  end
35
45
  end
36
-
37
- ```
38
-
39
- By default ```force_format``` raises an ```ActionController::RoutingError```
40
- if a requested format is not specified via ```:for => []```. It should be easy to
46
+
47
+
48
+ By default ```force_format``` raises an ```ActionController::RoutingError```
49
+ if a requested format is not specified via ```:for => []```. It should be easy to
41
50
  rescue from this exception, for example in your ```application_controller.rb```:
42
51
 
43
- ```
52
+
44
53
  class ApplicationController < ActionController::Base
45
54
 
46
55
  rescue_from ActionController::RoutingError, :with => :render_error
47
-
56
+
48
57
  def render_error
49
58
  # handle it
50
59
  end
51
60
  end
52
-
53
- ```
61
+
54
62
 
55
63
 
56
64
  ## TODO
57
- 1. more tests
58
- 2. ability to skip before filters
65
+ 1. More tests
66
+ 2. Ability to skip before filters
67
+ 3. More robust params checking
68
+ 4. Custom exception
59
69
 
60
70
 
61
71
  ## Contributing
data/force_format.gemspec CHANGED
@@ -8,7 +8,7 @@ Gem::Specification.new do |spec|
8
8
  spec.version = ForceFormat::VERSION
9
9
  spec.authors = ["Marcus Geißler\n"]
10
10
  spec.email = ["marcus3006@gmail.com"]
11
- spec.description = %q{Define the formats your Rails application should respond to}
11
+ spec.description = %q{Define the formats your Rails application should respond to in your controllers}
12
12
  spec.summary = %q{Forcing the format Rails controllers should respond to}
13
13
  spec.homepage = "https://github.com/marcusg/force_format"
14
14
  spec.license = "MIT"
@@ -19,10 +19,10 @@ Gem::Specification.new do |spec|
19
19
  spec.require_paths = ["lib"]
20
20
 
21
21
  spec.add_development_dependency "bundler", "~> 1.3"
22
- spec.add_development_dependency "rake"
23
- spec.add_development_dependency 'rspec-rails'
24
- spec.add_development_dependency 'shoulda-matchers'
22
+ spec.add_development_dependency "rake", '~> 10.1'
23
+ spec.add_development_dependency 'rspec-rails', '~> 2.0'
24
+ spec.add_development_dependency 'shoulda-matchers', '~> 2.4'
25
25
  spec.add_development_dependency "sqlite3"
26
26
 
27
- spec.add_dependency "rails", "~> 3.2.14"
27
+ spec.add_dependency "rails", "~> 3.2"
28
28
  end
@@ -15,6 +15,7 @@ module ControllerAccess
15
15
  raise UnsupportedFormatsError.new("There is no support for #{unsupported} format") if unsupported.any?
16
16
 
17
17
  self.send(:before_filter, opts.slice(:only, :except, :if, :unless)) do |controller|
18
+ return if controller.instance_variable_get("@_skip_force_format_filter") == true
18
19
  format = controller.request.format
19
20
  unless forced_formats.include?(format.try(:to_sym))
20
21
  raise ActionController::RoutingError, "Format '#{format}' not supported for #{request.path.inspect}"
@@ -22,6 +23,12 @@ module ControllerAccess
22
23
  end
23
24
  end
24
25
 
26
+ def skip_force_format_filter(opts={})
27
+ self.send(:prepend_before_filter, opts.slice(:only, :except, :if, :unless)) do |controller|
28
+ controller.instance_variable_set("@_skip_force_format_filter", true)
29
+ end
30
+ end
31
+
25
32
  private
26
33
 
27
34
  def extract_options(opts)
@@ -1,3 +1,3 @@
1
1
  module ForceFormat
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
data/spec/base_spec.rb CHANGED
@@ -138,4 +138,137 @@ describe PagesController, :type => :controller do
138
138
  end
139
139
 
140
140
 
141
+ context "force_format_filter is used with skip_format_filter specified for all actions" do
142
+
143
+ controller do
144
+ send "force_format_filter"
145
+ send "skip_force_format_filter"
146
+
147
+ def index
148
+ end
149
+ end
150
+
151
+ it "should respond with 200 for html" do
152
+ get "index"
153
+ response.code.should eq("200")
154
+ end
155
+
156
+ it "should respond with 200 for html" do
157
+ get "index", :format => :html
158
+ response.code.should eq("200")
159
+ end
160
+
161
+ it "should respond with MissingTemplate for js" do
162
+ expect { get "index", :format => :js }.to raise_error(ActionView::MissingTemplate)
163
+ end
164
+
165
+ it "should respond with MissingTemplate for xml" do
166
+ expect { get "index", :format => :xml }.to raise_error(ActionView::MissingTemplate)
167
+ end
168
+
169
+ it "should respond with MissingTemplate for json" do
170
+ expect { get "index", :format => :json }.to raise_error(ActionView::MissingTemplate)
171
+ end
172
+
173
+ end
174
+
175
+
176
+
177
+ context "force_format_filter is used with skip_format_filter specified for all actions" do
178
+
179
+ controller do
180
+ send "skip_force_format_filter"
181
+
182
+ def index
183
+ end
184
+ end
185
+
186
+ it "should respond with 200 for html" do
187
+ get "index"
188
+ response.code.should eq("200")
189
+ end
190
+
191
+ it "should respond with 200 for html" do
192
+ get "index", :format => :html
193
+ response.code.should eq("200")
194
+ end
195
+
196
+ it "should respond with MissingTemplate for js" do
197
+ expect { get "index", :format => :js }.to raise_error(ActionView::MissingTemplate)
198
+ end
199
+
200
+ it "should respond with MissingTemplate for xml" do
201
+ expect { get "index", :format => :xml }.to raise_error(ActionView::MissingTemplate)
202
+ end
203
+
204
+ it "should respond with MissingTemplate for json" do
205
+ expect { get "index", :format => :json }.to raise_error(ActionView::MissingTemplate)
206
+ end
207
+
208
+ end
209
+
210
+
211
+
212
+ context "force_format_filter is used with no format specified for all actions" do
213
+
214
+ controller do
215
+ send "force_format_filter", :only => :index
216
+ send "skip_force_format_filter", :only => :skipped
217
+
218
+ def new
219
+ render "with_html"
220
+ end
221
+
222
+ def index
223
+ render "with_html"
224
+ end
225
+ end
226
+
227
+ it "should respond with 200 for html" do
228
+ get "index"
229
+ response.code.should eq("200")
230
+ end
231
+
232
+ it "should respond with 200 for html" do
233
+ get "index", :format => :html
234
+ response.code.should eq("200")
235
+ end
236
+
237
+ it "should respond with RoutingError for js" do
238
+ expect { get "index", :format => :js }.to raise_error(ActionController::RoutingError)
239
+ end
240
+
241
+ it "should respond with RoutingError for xml" do
242
+ expect { get "index", :format => :xml }.to raise_error(ActionController::RoutingError)
243
+ end
244
+
245
+ it "should respond with RoutingError for json" do
246
+ expect { get "index", :format => :json }.to raise_error(ActionController::RoutingError)
247
+ end
248
+
249
+
250
+ it "should respond with 200 for html" do
251
+ get "new"
252
+ response.code.should eq("200")
253
+ end
254
+
255
+ it "should respond with 200 for html" do
256
+ get "new", :format => :html
257
+ response.code.should eq("200")
258
+ end
259
+
260
+ it "should respond with MissingTemplate for js" do
261
+ expect { get "new", :format => :js }.to raise_error(ActionView::MissingTemplate)
262
+ end
263
+
264
+ it "should respond with MissingTemplate for xml" do
265
+ expect { get "new", :format => :xml }.to raise_error(ActionView::MissingTemplate)
266
+ end
267
+
268
+ it "should respond with MissingTemplate for json" do
269
+ expect { get "new", :format => :json }.to raise_error(ActionView::MissingTemplate)
270
+ end
271
+
272
+ end
273
+
141
274
  end
@@ -1,3 +1,4 @@
1
1
  Dummy::Application.routes.draw do
2
2
  get "pages/index"
3
+ get "pages/new"
3
4
  end
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.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - |
@@ -29,44 +29,44 @@ dependencies:
29
29
  name: rake
30
30
  requirement: !ruby/object:Gem::Requirement
31
31
  requirements:
32
- - - '>='
32
+ - - ~>
33
33
  - !ruby/object:Gem::Version
34
- version: '0'
34
+ version: '10.1'
35
35
  type: :development
36
36
  prerelease: false
37
37
  version_requirements: !ruby/object:Gem::Requirement
38
38
  requirements:
39
- - - '>='
39
+ - - ~>
40
40
  - !ruby/object:Gem::Version
41
- version: '0'
41
+ version: '10.1'
42
42
  - !ruby/object:Gem::Dependency
43
43
  name: rspec-rails
44
44
  requirement: !ruby/object:Gem::Requirement
45
45
  requirements:
46
- - - '>='
46
+ - - ~>
47
47
  - !ruby/object:Gem::Version
48
- version: '0'
48
+ version: '2.0'
49
49
  type: :development
50
50
  prerelease: false
51
51
  version_requirements: !ruby/object:Gem::Requirement
52
52
  requirements:
53
- - - '>='
53
+ - - ~>
54
54
  - !ruby/object:Gem::Version
55
- version: '0'
55
+ version: '2.0'
56
56
  - !ruby/object:Gem::Dependency
57
57
  name: shoulda-matchers
58
58
  requirement: !ruby/object:Gem::Requirement
59
59
  requirements:
60
- - - '>='
60
+ - - ~>
61
61
  - !ruby/object:Gem::Version
62
- version: '0'
62
+ version: '2.4'
63
63
  type: :development
64
64
  prerelease: false
65
65
  version_requirements: !ruby/object:Gem::Requirement
66
66
  requirements:
67
- - - '>='
67
+ - - ~>
68
68
  - !ruby/object:Gem::Version
69
- version: '0'
69
+ version: '2.4'
70
70
  - !ruby/object:Gem::Dependency
71
71
  name: sqlite3
72
72
  requirement: !ruby/object:Gem::Requirement
@@ -87,15 +87,15 @@ dependencies:
87
87
  requirements:
88
88
  - - ~>
89
89
  - !ruby/object:Gem::Version
90
- version: 3.2.14
90
+ version: '3.2'
91
91
  type: :runtime
92
92
  prerelease: false
93
93
  version_requirements: !ruby/object:Gem::Requirement
94
94
  requirements:
95
95
  - - ~>
96
96
  - !ruby/object:Gem::Version
97
- version: 3.2.14
98
- description: Define the formats your Rails application should respond to
97
+ version: '3.2'
98
+ description: Define the formats your Rails application should respond to in your controllers
99
99
  email:
100
100
  - marcus3006@gmail.com
101
101
  executables: []
@@ -103,7 +103,8 @@ extensions: []
103
103
  extra_rdoc_files: []
104
104
  files:
105
105
  - .gitignore
106
- - .rvmrc
106
+ - .ruby-gemset
107
+ - .ruby-version
107
108
  - Gemfile
108
109
  - LICENSE
109
110
  - README.md
data/.rvmrc DELETED
@@ -1 +0,0 @@
1
- rvm use ruby-2.0.0-p247@force-format --create