force_format 0.0.6 → 0.0.7

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.
Files changed (115) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +2 -0
  3. data/.travis.yml +31 -0
  4. data/Appraisals +7 -0
  5. data/Gemfile +0 -3
  6. data/README.md +69 -24
  7. data/Rakefile +4 -0
  8. data/force_format.gemspec +2 -1
  9. data/gemfiles/3.2.gemfile +8 -0
  10. data/gemfiles/3.2.gemfile.lock +128 -0
  11. data/gemfiles/4.0.gemfile +8 -0
  12. data/gemfiles/4.0.gemfile.lock +123 -0
  13. data/lib/force_format/{controller_access.rb → controller.rb} +4 -3
  14. data/lib/force_format/errors.rb +4 -1
  15. data/lib/force_format/railtie.rb +4 -4
  16. data/lib/force_format/version.rb +1 -1
  17. data/lib/force_format/{view_patch.rb → view.rb} +1 -1
  18. data/spec/array_options_spec.rb +109 -0
  19. data/spec/{dummy → dummy3.2}/README.rdoc +0 -0
  20. data/spec/{dummy → dummy3.2}/Rakefile +0 -0
  21. data/spec/{dummy → dummy3.2}/app/assets/javascripts/application.js +0 -0
  22. data/spec/{dummy → dummy3.2}/app/assets/stylesheets/application.css +0 -0
  23. data/spec/{dummy → dummy3.2}/app/controllers/application_controller.rb +0 -0
  24. data/spec/{dummy → dummy3.2}/app/controllers/pages_controller.rb +0 -0
  25. data/spec/{dummy → dummy3.2}/app/helpers/application_helper.rb +0 -0
  26. data/spec/{dummy → dummy3.2}/app/mailers/.gitkeep +0 -0
  27. data/spec/{dummy → dummy3.2}/app/models/.gitkeep +0 -0
  28. data/spec/{dummy → dummy3.2}/app/views/layouts/application.html.erb +0 -0
  29. data/spec/{dummy → dummy3.2}/app/views/pages/index.html.erb +0 -0
  30. data/spec/{dummy → dummy3.2}/app/views/pages/with_html.html.erb +0 -0
  31. data/spec/{dummy → dummy3.2}/app/views/pages/with_html_js.html.erb +0 -0
  32. data/spec/{dummy → dummy3.2}/app/views/pages/with_html_js.js.erb +0 -0
  33. data/spec/{dummy → dummy3.2}/app/views/pages/with_js.js.erb +0 -0
  34. data/spec/{dummy → dummy3.2}/app/views/pages/with_json.json.erb +0 -0
  35. data/spec/{dummy → dummy3.2}/app/views/pages/with_xml.xml.erb +0 -0
  36. data/spec/{dummy → dummy3.2}/config/application.rb +0 -0
  37. data/spec/{dummy → dummy3.2}/config/boot.rb +0 -0
  38. data/spec/{dummy → dummy3.2}/config/database.yml +0 -0
  39. data/spec/{dummy → dummy3.2}/config/environment.rb +0 -0
  40. data/spec/{dummy → dummy3.2}/config/environments/development.rb +0 -0
  41. data/spec/{dummy → dummy3.2}/config/environments/production.rb +0 -0
  42. data/spec/{dummy → dummy3.2}/config/environments/test.rb +0 -0
  43. data/spec/{dummy → dummy3.2}/config/initializers/backtrace_silencers.rb +0 -0
  44. data/spec/{dummy → dummy3.2}/config/initializers/inflections.rb +0 -0
  45. data/spec/{dummy → dummy3.2}/config/initializers/mime_types.rb +0 -0
  46. data/spec/{dummy → dummy3.2}/config/initializers/secret_token.rb +0 -0
  47. data/spec/{dummy → dummy3.2}/config/initializers/session_store.rb +0 -0
  48. data/spec/{dummy → dummy3.2}/config/initializers/wrap_parameters.rb +0 -0
  49. data/spec/{dummy → dummy3.2}/config/locales/en.yml +0 -0
  50. data/spec/{dummy → dummy3.2}/config/routes.rb +0 -0
  51. data/spec/{dummy → dummy3.2}/config.ru +0 -0
  52. data/spec/{dummy/lib/assets/.gitkeep → dummy3.2/db/test.sqlite3} +0 -0
  53. data/spec/{dummy/log → dummy3.2/lib/assets}/.gitkeep +0 -0
  54. data/spec/{dummy/public/favicon.ico → dummy3.2/log/.gitkeep} +0 -0
  55. data/spec/{dummy → dummy3.2}/public/404.html +0 -0
  56. data/spec/{dummy → dummy3.2}/public/422.html +0 -0
  57. data/spec/{dummy → dummy3.2}/public/500.html +0 -0
  58. data/spec/dummy3.2/public/favicon.ico +0 -0
  59. data/spec/{dummy → dummy3.2}/script/rails +0 -0
  60. data/spec/dummy4.0/README.rdoc +28 -0
  61. data/spec/dummy4.0/Rakefile +6 -0
  62. data/spec/dummy4.0/app/assets/images/.keep +0 -0
  63. data/spec/dummy4.0/app/assets/javascripts/application.js +13 -0
  64. data/spec/dummy4.0/app/assets/stylesheets/application.css +13 -0
  65. data/spec/dummy4.0/app/controllers/application_controller.rb +5 -0
  66. data/spec/dummy4.0/app/controllers/concerns/.keep +0 -0
  67. data/spec/dummy4.0/app/controllers/pages_controller.rb +4 -0
  68. data/spec/dummy4.0/app/helpers/application_helper.rb +2 -0
  69. data/spec/dummy4.0/app/mailers/.keep +0 -0
  70. data/spec/dummy4.0/app/models/.keep +0 -0
  71. data/spec/dummy4.0/app/models/concerns/.keep +0 -0
  72. data/spec/dummy4.0/app/views/layouts/application.html.erb +14 -0
  73. data/spec/dummy4.0/app/views/pages/index.html.erb +0 -0
  74. data/spec/dummy4.0/app/views/pages/with_html.html.erb +0 -0
  75. data/spec/dummy4.0/app/views/pages/with_html_js.html.erb +0 -0
  76. data/spec/dummy4.0/app/views/pages/with_html_js.js.erb +0 -0
  77. data/spec/dummy4.0/app/views/pages/with_js.js.erb +0 -0
  78. data/spec/dummy4.0/app/views/pages/with_json.json.erb +0 -0
  79. data/spec/dummy4.0/app/views/pages/with_xml.xml.erb +0 -0
  80. data/spec/dummy4.0/bin/bundle +3 -0
  81. data/spec/dummy4.0/bin/rails +4 -0
  82. data/spec/dummy4.0/bin/rake +4 -0
  83. data/spec/dummy4.0/config/application.rb +28 -0
  84. data/spec/dummy4.0/config/boot.rb +5 -0
  85. data/spec/dummy4.0/config/database.yml +25 -0
  86. data/spec/dummy4.0/config/environment.rb +5 -0
  87. data/spec/dummy4.0/config/environments/development.rb +29 -0
  88. data/spec/dummy4.0/config/environments/production.rb +80 -0
  89. data/spec/dummy4.0/config/environments/test.rb +36 -0
  90. data/spec/dummy4.0/config/initializers/backtrace_silencers.rb +7 -0
  91. data/spec/dummy4.0/config/initializers/filter_parameter_logging.rb +4 -0
  92. data/spec/dummy4.0/config/initializers/inflections.rb +16 -0
  93. data/spec/dummy4.0/config/initializers/mime_types.rb +5 -0
  94. data/spec/dummy4.0/config/initializers/secret_token.rb +12 -0
  95. data/spec/dummy4.0/config/initializers/session_store.rb +3 -0
  96. data/spec/dummy4.0/config/initializers/wrap_parameters.rb +14 -0
  97. data/spec/dummy4.0/config/locales/en.yml +23 -0
  98. data/spec/dummy4.0/config/routes.rb +4 -0
  99. data/spec/dummy4.0/config.ru +4 -0
  100. data/spec/dummy4.0/db/test.sqlite3 +0 -0
  101. data/spec/dummy4.0/lib/assets/.keep +0 -0
  102. data/spec/dummy4.0/log/.keep +0 -0
  103. data/spec/dummy4.0/public/404.html +58 -0
  104. data/spec/dummy4.0/public/422.html +58 -0
  105. data/spec/dummy4.0/public/500.html +57 -0
  106. data/spec/dummy4.0/public/favicon.ico +0 -0
  107. data/spec/exception_spec.rb +36 -0
  108. data/spec/hash_options_spec.rb +105 -0
  109. data/spec/rails_behaviour_spec.rb +35 -0
  110. data/spec/skip_filter_spec.rb +99 -0
  111. data/spec/spec_helper.rb +3 -1
  112. data/spec/wildcard_spec.rb +41 -0
  113. data/spec/without_options_spec.rb +73 -0
  114. metadata +216 -88
  115. data/spec/base_spec.rb +0 -429
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 00ac779bcc013cd1f365392fc62a32e2f4f46e44
4
- data.tar.gz: fa92721556b7cdf1ab10e2e0939ab5bbb16afd4d
3
+ metadata.gz: 4345cd2da6375d312b3c78e8d675dce5334cd1c2
4
+ data.tar.gz: 541fd591fa06f058a59417c6abad05e05b6684da
5
5
  SHA512:
6
- metadata.gz: 6c61b3540f0d4e658ec60c82327d0de69f7f03238fe5cd3efcb478abd59d13aeacc9812a6aa04e53eba27323c72c6d7c08738a969cd21744a4249c57fddffee8
7
- data.tar.gz: 6acfad6780cb668e7ffd489ae62317a1efa9ee6acc350928323dc8ce2719fce90a3b6e91926eb2ef6297bea4fa631b530ef915a02f091754f0fa74e3042e849e
6
+ metadata.gz: d13f190eb6b6ece7829c9af976a64dac687fba1e4c3b2cf43bf85d595064d8f668ddb5c0be256f65fa3e4b490098530133f7cccede82258ca21c1dbc0cfa29e7
7
+ data.tar.gz: 1e3c7372ae4bcdc618f9d5f03a1ec3ae8695198442ccb6cb8d2605a757940318d0128ed170548df9f6d52f190b1e1c43cc2b99480de507afaebf0df9a2d2d5e4
data/.gitignore CHANGED
@@ -21,3 +21,5 @@ test/version_tmp
21
21
  tmp/spec/dummy/db/test.sqlite3
22
22
  /spec/dummy/log/test.log
23
23
  /spec/dummy/db/test.sqlite3
24
+ /spec/dummy3.2/log/test.log
25
+ /spec/dummy4.0/log/test.log
data/.travis.yml ADDED
@@ -0,0 +1,31 @@
1
+ language: ruby
2
+
3
+ script: "bundle exec rake spec"
4
+ bundler_args: ''
5
+
6
+ rvm:
7
+ - 1.9.3
8
+ - 2.0.0
9
+
10
+ env:
11
+ - RAILS_VERSION=3.2
12
+ - RAILS_VERSION=4.0
13
+
14
+ gemfile:
15
+ - gemfiles/3.2.gemfile
16
+ - gemfiles/4.0.gemfile
17
+
18
+ matrix:
19
+ exclude:
20
+ - rvm: 2.0.0
21
+ gemfile: gemfiles/4.0.gemfile
22
+ env: RAILS_VERSION=3.2
23
+ - rvm: 1.9.3
24
+ gemfile: gemfiles/4.0.gemfile
25
+ env: RAILS_VERSION=3.2
26
+ - rvm: 2.0.0
27
+ gemfile: gemfiles/3.2.gemfile
28
+ env: RAILS_VERSION=4.0
29
+ - rvm: 1.9.3
30
+ gemfile: gemfiles/3.2.gemfile
31
+ env: RAILS_VERSION=4.0
data/Appraisals ADDED
@@ -0,0 +1,7 @@
1
+ appraise "3.2" do
2
+ gem "rails", "~> 3.2.14"
3
+ end
4
+
5
+ appraise "4.0" do
6
+ gem "rails", "~> 4.0.0"
7
+ end
data/Gemfile CHANGED
@@ -5,9 +5,6 @@ source "https://rubygems.org"
5
5
  # development dependencies will be added by default to the :development group.
6
6
  gemspec
7
7
 
8
- # jquery-rails is used by the dummy application
9
- gem "jquery-rails"
10
-
11
8
  # Declare any dependencies that are still in development here instead of in
12
9
  # your gemspec. These might include edge Rails or gems from your path or
13
10
  # Git. Remember to move these dependencies to your gemspec before releasing
data/README.md CHANGED
@@ -1,16 +1,38 @@
1
1
  # force_format
2
2
 
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.
3
+ [![Gem Version](https://badge.fury.io/rb/force_format.png)](http://badge.fury.io/rb/force_format)
4
+ [![Build Status](https://travis-ci.org/marcusg/force_format.png?branch=master)](https://travis-ci.org/marcusg/force_format)
5
+ [![Code Climate](https://codeclimate.com/github/marcusg/force_format.png)](https://codeclimate.com/github/marcusg/force_format)
6
+ [![Dependency Status](https://gemnasium.com/marcusg/force_format.png)](https://gemnasium.com/marcusg/force_format)
7
7
 
8
+ Define the formats your Rails application should respond to within your controllers.
8
9
 
9
- ## Requirements
10
+ ## Background
11
+
12
+ Normally a Rails3 application tries to respond to all kinds of formats (e.g. html, xml, json, ...)
13
+ defined via ```respond_to``` inside the controller. Given the following setup for a controller responding
14
+ to html and javascript requests.
15
+
16
+ class PagesController < ApplicationController
17
+
18
+ def index
19
+ respond_to do |format|
20
+ format.html
21
+ format.js
22
+ end
23
+ end
24
+ end
10
25
 
11
- ```rails (3.2.x)```
26
+ All other requests will return a white page with status code 406 (Not Acceptable). FOr some this seems to be a correct behaviour but it may be important for some webapps to render out a error page giving a good description of the error - like 404 pages. In other words: if the action can't handle the requested format render out an error page with an supported format like html.
12
27
 
13
- (This gem is tested with Rails 3.2.x only, but other versions may work too.)
28
+ This is where ```force_format``` joins the game. The gem adds some accessible methods for your controllers based on before_filters. With that you can define the allowed formats for each controller action. If the requested mime-type does not
29
+ match one of the specified formats, ```force_format``` will raise a custom exception wich you can handle on you own (e.g. print out some useful sentences for your users).
30
+
31
+ Besides this, if you theoretical don't need the ```respond_to``` because you use templates which are rendered by default, you can omit the ```respond_to``` block when using ```force_format```.
32
+
33
+ ## Requirements
34
+
35
+ ```rails >= 3.2```
14
36
 
15
37
  ## Installation
16
38
 
@@ -31,8 +53,8 @@ Or install it yourself as:
31
53
  #### Basics
32
54
 
33
55
  Include the ```force_format_filter``` method in your controllers.
34
- The important param is the ```:for => [:my, :formats]```.
35
- With that given array of fomat types you can define the formats the
56
+ The important param is the ```:for => [:my, :formats]```.
57
+ With that given array of fomat types you can define the formats the
36
58
  action should respond to (and hopefully find a template).
37
59
  In addition it accepts ```:only => ...```, ```:except => ...```, ```:if => ...```
38
60
  and ```:unless => ...``` parameters like the Rails filters.
@@ -45,15 +67,25 @@ and ```:unless => ...``` parameters like the Rails filters.
45
67
  def index
46
68
  end
47
69
  end
48
-
49
- If you want to skip the filter in inherited controllers, use the ```skip_force_format_filter``` method.
70
+
71
+
72
+ #### Supported format types
73
+ For the moment the following (MIME-)types are available.
74
+
75
+ ForceFormat::Controller::FORCE_FORMAT_TYPES
76
+ => [:html, :js, :json, :pdf, :csv, :zip, :xml]
77
+
78
+
79
+ #### Skip the filter
80
+
81
+ If you want to skip the filter in inherited controllers, use the ```skip_force_format_filter``` method.
50
82
  It accepts the same parameters the ```force_format_filter``` methods except ```:for => ...```.
51
83
 
52
84
  #### And more options...
53
85
 
54
- Maybe you want to define the formats more granular, for example different per action.
55
- To accomplish this, pass an hash with action names and required formats. Add a *:default* key with formats
56
- for actions that are not specified directly.
86
+ Maybe you want to define the formats more granular, for example different per action.
87
+ To accomplish this, pass an hash with action names and required formats. Add a *:default* key with formats
88
+ for actions that are not specified directly.
57
89
 
58
90
 
59
91
  class PagesController < ApplicationController
@@ -62,40 +94,53 @@ for actions that are not specified directly.
62
94
  def index
63
95
  # should respond with js
64
96
  end
65
-
97
+
66
98
  def new
67
99
  # should respond with json or html
68
100
  end
69
101
 
70
102
  end
71
-
72
103
 
73
- #### Exceptions
74
104
 
75
- By default ```force_format``` raises an ```ActionController::RoutingError```
76
- if a requested format matches none of the attributes specified via ```:for => ...```.
105
+ #### Handling exceptions
106
+
107
+ By default ```force_format``` raises an ```ForceFormat::Errors::UnknownFormat```
108
+ if a requested format matches none of the attributes specified via ```:for => ...```.
77
109
  It should be easy to rescue from this exception, for example in your ```application_controller.rb```:
78
110
 
79
-
111
+
80
112
  class ApplicationController < ActionController::Base
81
113
 
82
- rescue_from ActionController::RoutingError, :with => :render_error
114
+ rescue_from ForceFormat::Errors::UnknownFormat, :with => :render_error
83
115
 
84
116
  def render_error
85
117
  # handle it
86
118
  end
87
119
  end
88
-
89
120
 
90
- You can pass an custom exception lambda to the ```force_format_filter``` method for a better error handling.
121
+ #### Use custom exception
122
+
123
+ You can pass an custom exception lambda to the ```force_format_filter``` method for a better error handling.
91
124
 
92
125
  class PagesController < ApplicationController
93
126
  force_format_filter :for => :html, :exception => lambda { |msg| raise(MyApp::AwesomeException.new(msg)) }
94
127
  end
95
128
 
96
- NOTE: Call the method ```force_format_filter``` only once per controller!
129
+
130
+ #### Widcard accept header
131
+
132
+ If an user agent sets the accept header wildcard like ```*/*``` ```force_format_filter``` would fallback
133
+ and set the ```request.format``` to *:html*. This is important for access via ```curl``` and I think for the
134
+ google bot too. If you don't want this behaviour of wildcard rewriting you can set the ```:skip_wildcard``` option.
135
+
136
+ class PagesController < ApplicationController
137
+ force_format_filter :for => :html, :skip_wildcard => true
138
+ end
139
+
140
+ NOTE: Call the method ```force_format_filter``` only once per controller!
97
141
  If you call it multiple times, the last one would be used.
98
142
 
143
+
99
144
  ## TODO
100
145
  1. More tests
101
146
  2. More robust params checking
data/Rakefile CHANGED
@@ -1,6 +1,8 @@
1
1
  #!/usr/bin/env rake
2
2
  begin
3
3
  require 'bundler/setup'
4
+ require 'appraisal'
5
+ require 'rspec/core/rake_task'
4
6
  rescue LoadError
5
7
  puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
6
8
  end
@@ -21,3 +23,5 @@ RDoc::Task.new(:rdoc) do |rdoc|
21
23
  end
22
24
 
23
25
  Bundler::GemHelper.install_tasks
26
+ task :default => :spec
27
+ RSpec::Core::RakeTask.new(:spec)
data/force_format.gemspec CHANGED
@@ -24,6 +24,7 @@ Gem::Specification.new do |spec|
24
24
  spec.add_development_dependency 'shoulda-matchers', '~> 2.4'
25
25
  spec.add_development_dependency "sqlite3"
26
26
  spec.add_development_dependency "pry"
27
+ spec.add_development_dependency "appraisal", "~> 0.5.2"
27
28
 
28
- spec.add_dependency "rails", "~> 3.2"
29
+ spec.add_dependency "rails", ">= 3.2"
29
30
  end
@@ -0,0 +1,8 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "jquery-rails"
6
+ gem "rails", "~> 3.2.14"
7
+
8
+ gemspec :path=>"../"
@@ -0,0 +1,128 @@
1
+ PATH
2
+ remote: /home/marcus/Work/repos/github/force_format
3
+ specs:
4
+ force_format (0.0.6)
5
+ rails (>= 3.2)
6
+
7
+ GEM
8
+ remote: https://rubygems.org/
9
+ specs:
10
+ actionmailer (3.2.14)
11
+ actionpack (= 3.2.14)
12
+ mail (~> 2.5.4)
13
+ actionpack (3.2.14)
14
+ activemodel (= 3.2.14)
15
+ activesupport (= 3.2.14)
16
+ builder (~> 3.0.0)
17
+ erubis (~> 2.7.0)
18
+ journey (~> 1.0.4)
19
+ rack (~> 1.4.5)
20
+ rack-cache (~> 1.2)
21
+ rack-test (~> 0.6.1)
22
+ sprockets (~> 2.2.1)
23
+ activemodel (3.2.14)
24
+ activesupport (= 3.2.14)
25
+ builder (~> 3.0.0)
26
+ activerecord (3.2.14)
27
+ activemodel (= 3.2.14)
28
+ activesupport (= 3.2.14)
29
+ arel (~> 3.0.2)
30
+ tzinfo (~> 0.3.29)
31
+ activeresource (3.2.14)
32
+ activemodel (= 3.2.14)
33
+ activesupport (= 3.2.14)
34
+ activesupport (3.2.14)
35
+ i18n (~> 0.6, >= 0.6.4)
36
+ multi_json (~> 1.0)
37
+ appraisal (0.5.2)
38
+ bundler
39
+ rake
40
+ arel (3.0.2)
41
+ builder (3.0.4)
42
+ coderay (1.0.9)
43
+ diff-lcs (1.2.4)
44
+ erubis (2.7.0)
45
+ hike (1.2.3)
46
+ i18n (0.6.5)
47
+ journey (1.0.4)
48
+ jquery-rails (3.0.4)
49
+ railties (>= 3.0, < 5.0)
50
+ thor (>= 0.14, < 2.0)
51
+ json (1.8.0)
52
+ mail (2.5.4)
53
+ mime-types (~> 1.16)
54
+ treetop (~> 1.4.8)
55
+ method_source (0.8.2)
56
+ mime-types (1.25)
57
+ multi_json (1.8.0)
58
+ polyglot (0.3.3)
59
+ pry (0.9.12.2)
60
+ coderay (~> 1.0.5)
61
+ method_source (~> 0.8)
62
+ slop (~> 3.4)
63
+ rack (1.4.5)
64
+ rack-cache (1.2)
65
+ rack (>= 0.4)
66
+ rack-ssl (1.3.3)
67
+ rack
68
+ rack-test (0.6.2)
69
+ rack (>= 1.0)
70
+ rails (3.2.14)
71
+ actionmailer (= 3.2.14)
72
+ actionpack (= 3.2.14)
73
+ activerecord (= 3.2.14)
74
+ activeresource (= 3.2.14)
75
+ activesupport (= 3.2.14)
76
+ bundler (~> 1.0)
77
+ railties (= 3.2.14)
78
+ railties (3.2.14)
79
+ actionpack (= 3.2.14)
80
+ activesupport (= 3.2.14)
81
+ rack-ssl (~> 1.3.2)
82
+ rake (>= 0.8.7)
83
+ rdoc (~> 3.4)
84
+ thor (>= 0.14.6, < 2.0)
85
+ rake (10.1.0)
86
+ rdoc (3.12.2)
87
+ json (~> 1.4)
88
+ rspec-core (2.14.5)
89
+ rspec-expectations (2.14.3)
90
+ diff-lcs (>= 1.1.3, < 2.0)
91
+ rspec-mocks (2.14.3)
92
+ rspec-rails (2.14.0)
93
+ actionpack (>= 3.0)
94
+ activesupport (>= 3.0)
95
+ railties (>= 3.0)
96
+ rspec-core (~> 2.14.0)
97
+ rspec-expectations (~> 2.14.0)
98
+ rspec-mocks (~> 2.14.0)
99
+ shoulda-matchers (2.4.0)
100
+ activesupport (>= 3.0.0)
101
+ slop (3.4.6)
102
+ sprockets (2.2.2)
103
+ hike (~> 1.2)
104
+ multi_json (~> 1.0)
105
+ rack (~> 1.0)
106
+ tilt (~> 1.1, != 1.3.0)
107
+ sqlite3 (1.3.8)
108
+ thor (0.18.1)
109
+ tilt (1.4.1)
110
+ treetop (1.4.15)
111
+ polyglot
112
+ polyglot (>= 0.3.1)
113
+ tzinfo (0.3.37)
114
+
115
+ PLATFORMS
116
+ ruby
117
+
118
+ DEPENDENCIES
119
+ appraisal (~> 0.5.2)
120
+ bundler (~> 1.3)
121
+ force_format!
122
+ jquery-rails
123
+ pry
124
+ rails (~> 3.2.14)
125
+ rake (~> 10.1)
126
+ rspec-rails (~> 2.0)
127
+ shoulda-matchers (~> 2.4)
128
+ sqlite3
@@ -0,0 +1,8 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "jquery-rails"
6
+ gem "rails", "~> 4.0.0"
7
+
8
+ gemspec :path=>"../"
@@ -0,0 +1,123 @@
1
+ PATH
2
+ remote: /home/marcus/Work/repos/github/force_format
3
+ specs:
4
+ force_format (0.0.6)
5
+ rails (>= 3.2)
6
+
7
+ GEM
8
+ remote: https://rubygems.org/
9
+ specs:
10
+ actionmailer (4.0.0)
11
+ actionpack (= 4.0.0)
12
+ mail (~> 2.5.3)
13
+ actionpack (4.0.0)
14
+ activesupport (= 4.0.0)
15
+ builder (~> 3.1.0)
16
+ erubis (~> 2.7.0)
17
+ rack (~> 1.5.2)
18
+ rack-test (~> 0.6.2)
19
+ activemodel (4.0.0)
20
+ activesupport (= 4.0.0)
21
+ builder (~> 3.1.0)
22
+ activerecord (4.0.0)
23
+ activemodel (= 4.0.0)
24
+ activerecord-deprecated_finders (~> 1.0.2)
25
+ activesupport (= 4.0.0)
26
+ arel (~> 4.0.0)
27
+ activerecord-deprecated_finders (1.0.3)
28
+ activesupport (4.0.0)
29
+ i18n (~> 0.6, >= 0.6.4)
30
+ minitest (~> 4.2)
31
+ multi_json (~> 1.3)
32
+ thread_safe (~> 0.1)
33
+ tzinfo (~> 0.3.37)
34
+ appraisal (0.5.2)
35
+ bundler
36
+ rake
37
+ arel (4.0.0)
38
+ atomic (1.1.14)
39
+ builder (3.1.4)
40
+ coderay (1.0.9)
41
+ diff-lcs (1.2.4)
42
+ erubis (2.7.0)
43
+ hike (1.2.3)
44
+ i18n (0.6.5)
45
+ jquery-rails (3.0.4)
46
+ railties (>= 3.0, < 5.0)
47
+ thor (>= 0.14, < 2.0)
48
+ mail (2.5.4)
49
+ mime-types (~> 1.16)
50
+ treetop (~> 1.4.8)
51
+ method_source (0.8.2)
52
+ mime-types (1.25)
53
+ minitest (4.7.5)
54
+ multi_json (1.8.0)
55
+ polyglot (0.3.3)
56
+ pry (0.9.12.2)
57
+ coderay (~> 1.0.5)
58
+ method_source (~> 0.8)
59
+ slop (~> 3.4)
60
+ rack (1.5.2)
61
+ rack-test (0.6.2)
62
+ rack (>= 1.0)
63
+ rails (4.0.0)
64
+ actionmailer (= 4.0.0)
65
+ actionpack (= 4.0.0)
66
+ activerecord (= 4.0.0)
67
+ activesupport (= 4.0.0)
68
+ bundler (>= 1.3.0, < 2.0)
69
+ railties (= 4.0.0)
70
+ sprockets-rails (~> 2.0.0)
71
+ railties (4.0.0)
72
+ actionpack (= 4.0.0)
73
+ activesupport (= 4.0.0)
74
+ rake (>= 0.8.7)
75
+ thor (>= 0.18.1, < 2.0)
76
+ rake (10.1.0)
77
+ rspec-core (2.14.5)
78
+ rspec-expectations (2.14.3)
79
+ diff-lcs (>= 1.1.3, < 2.0)
80
+ rspec-mocks (2.14.3)
81
+ rspec-rails (2.14.0)
82
+ actionpack (>= 3.0)
83
+ activesupport (>= 3.0)
84
+ railties (>= 3.0)
85
+ rspec-core (~> 2.14.0)
86
+ rspec-expectations (~> 2.14.0)
87
+ rspec-mocks (~> 2.14.0)
88
+ shoulda-matchers (2.4.0)
89
+ activesupport (>= 3.0.0)
90
+ slop (3.4.6)
91
+ sprockets (2.10.0)
92
+ hike (~> 1.2)
93
+ multi_json (~> 1.0)
94
+ rack (~> 1.0)
95
+ tilt (~> 1.1, != 1.3.0)
96
+ sprockets-rails (2.0.0)
97
+ actionpack (>= 3.0)
98
+ activesupport (>= 3.0)
99
+ sprockets (~> 2.8)
100
+ sqlite3 (1.3.8)
101
+ thor (0.18.1)
102
+ thread_safe (0.1.3)
103
+ atomic
104
+ tilt (1.4.1)
105
+ treetop (1.4.15)
106
+ polyglot
107
+ polyglot (>= 0.3.1)
108
+ tzinfo (0.3.37)
109
+
110
+ PLATFORMS
111
+ ruby
112
+
113
+ DEPENDENCIES
114
+ appraisal (~> 0.5.2)
115
+ bundler (~> 1.3)
116
+ force_format!
117
+ jquery-rails
118
+ pry
119
+ rails (~> 4.0.0)
120
+ rake (~> 10.1)
121
+ rspec-rails (~> 2.0)
122
+ shoulda-matchers (~> 2.4)
123
+ sqlite3
@@ -1,13 +1,14 @@
1
1
  require_relative "errors"
2
2
 
3
3
  module ForceFormat
4
- module ControllerAccess
4
+ module Controller
5
5
  extend ActiveSupport::Concern
6
6
  FORCE_FORMAT_TYPES = [:html, :js, :json, :pdf, :csv, :zip, :xml]
7
7
  FORCE_FORMAT_DEFAULT_TYPES = [:html]
8
- FORCE_FORMAT_EXCEPTION = lambda { |o| raise(ActionController::RoutingError, o) }
8
+ FORCE_FORMAT_EXCEPTION = lambda { |o| raise(UnknownFormat.new(o)) }
9
9
  FORCE_FORMAT_WILDCARD = "*/*"
10
10
 
11
+
11
12
  module ClassMethods
12
13
  include ForceFormat::Errors
13
14
 
@@ -29,7 +30,7 @@ module ForceFormat
29
30
  force_formats = force_format_extract_formats
30
31
  return unless force_formats
31
32
  unsupported = force_formats - FORCE_FORMAT_TYPES
32
- raise UnsupportedFormatsError.new("There is no support for #{unsupported} format") if unsupported.any?
33
+ raise UnsupportedFormat.new("There is no support for #{unsupported} format") if unsupported.any?
33
34
 
34
35
  if request.format.to_s == FORCE_FORMAT_WILDCARD and not force_format_skip_wildcard_rewrite?
35
36
  request.format = :html
@@ -1,6 +1,9 @@
1
1
  module ForceFormat
2
2
  module Errors
3
- class UnsupportedFormatsError < StandardError
3
+ class UnsupportedFormat < StandardError
4
+ end
5
+
6
+ class UnknownFormat < StandardError
4
7
  end
5
8
  end
6
9
  end
@@ -1,5 +1,5 @@
1
- require_relative "controller_access"
2
- require_relative "view_patch"
1
+ require_relative "controller"
2
+ require_relative "view"
3
3
 
4
4
  module ForceFormat
5
5
 
@@ -7,13 +7,13 @@ module ForceFormat
7
7
 
8
8
  initializer "force_format.controller" do
9
9
  ActiveSupport.on_load :action_controller do
10
- include ControllerAccess
10
+ include Controller
11
11
  end
12
12
  end
13
13
 
14
14
  initializer "force_format.view" do
15
15
  ActiveSupport.on_load :action_view do
16
- include ViewPatch
16
+ include View
17
17
  end
18
18
  end
19
19
 
@@ -1,3 +1,3 @@
1
1
  module ForceFormat
2
- VERSION = "0.0.6"
2
+ VERSION = "0.0.7"
3
3
  end
@@ -1,5 +1,5 @@
1
1
  module ForceFormat
2
- module ViewPatch
2
+ module View
3
3
  class ActionView::LookupContext
4
4
  def formats=(values)
5
5
  if values