request_exception_handler 0.3 → 0.4

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -1,18 +1,16 @@
1
- RequestExceptionHandler
2
- =======================
1
+ # RequestExceptionHandler
3
2
 
4
- Rails is not capable of calling Your exception handlers when an error occurs
3
+ Rails is not capable of calling your exception handlers when an error occurs
5
4
  during the parsing of request parameters (e.g. in case of invalid XML body).
6
5
 
7
- This will hopefully change someday, but until then I have created this biutiful
6
+ This will hopefully change someday, but until then I have created this biutiful
8
7
  monkey-patch for request parameter parsing to allow more flexibility when
9
8
  an invalid request body is received.
10
9
 
11
- Code has been tested on 2.3, 2.2.3 and 2.1 as well as on Rails 3.0 / 3.1.
10
+ Tested on 3.0, 3.1 and 3.2 it should still work on Rails 2.3 and 2.2.3 as well.
12
11
 
13
12
 
14
- Install
15
- =======
13
+ ## Install
16
14
 
17
15
  gem 'request_exception_handler'
18
16
 
@@ -20,15 +18,14 @@ or as a plain-old rails plugin :
20
18
 
21
19
  script/plugin install git://github.com/kares/request_exception_handler.git
22
20
 
23
- Example
24
- =======
21
+ ## Example
25
22
 
26
- The code hooks into parameter parsing and allows a request to be constructed
27
- even if the params can not be parsed from the submitted raw content. A before
28
- filter is installed that checks for a request exception and re-raises it thus
29
- it seems to Rails that the exception comes from the application code and is
30
- processed as all other "business" exceptions.
31
- You might skip this filter and install Your own to handle such cases (it's good
23
+ The code hooks into parameter parsing and allows a request to be constructed
24
+ even if the params can not be parsed from the submitted raw content. A before
25
+ filter is installed that checks for a request exception and re-raises it thus
26
+ it seems to Rails that the exception comes from the application code and is
27
+ processed as all other "business" exceptions.
28
+ you might skip this filter and install your own to handle such cases (it's good
32
29
  to make sure the filter gets to the beginning of the chain) :
33
30
 
34
31
  class MyController < ApplicationController
@@ -51,7 +48,7 @@ to make sure the filter gets to the beginning of the chain) :
51
48
  end
52
49
 
53
50
  Another option of how to modify the returned 500 status is to use exception
54
- handlers the same way You're (hopefully) using them for Your own exceptions :
51
+ handlers the same way you're (hopefully) using them for your own exceptions :
55
52
 
56
53
  class ApplicationController < ActionController::Base
57
54
 
@@ -61,9 +58,14 @@ handlers the same way You're (hopefully) using them for Your own exceptions :
61
58
 
62
59
  end
63
60
 
64
- If You're not using REXML as a parsing backend the exception might vary, e.g.
61
+ If you're not using REXML as a parsing backend the exception might vary, e.g.
65
62
  for Nokogiri the rescue block would look something like :
66
63
 
67
64
  rescue_from 'Nokogiri::XML::SyntaxError' do |exception|
68
65
  render :text => exception.to_s, :status => 422
69
66
  end
67
+
68
+ ## Copyright
69
+
70
+ Copyright (c) 2009-2012 [Karol Bucek](https://github.com/kares).
71
+ See LICENSE (http://www.apache.org/licenses/LICENSE-2.0) for details.
data/Rakefile CHANGED
@@ -1,10 +1,9 @@
1
- require 'rake'
2
- require 'rake/testtask'
3
- require 'rake/rdoctask'
1
+ #!/usr/bin/env rake
4
2
 
5
3
  desc 'Default: run unit tests.'
6
4
  task :default => :test
7
5
 
6
+ require 'rake/testtask'
8
7
  desc 'Test the request_exception_handler plugin.'
9
8
  Rake::TestTask.new(:test) do |t|
10
9
  t.libs << 'lib'
@@ -12,11 +11,9 @@ Rake::TestTask.new(:test) do |t|
12
11
  t.verbose = true
13
12
  end
14
13
 
15
- desc 'Generate documentation for the request_exception_handler plugin.'
16
- Rake::RDocTask.new(:rdoc) do |rdoc|
17
- rdoc.rdoc_dir = 'rdoc'
18
- rdoc.title = 'RequestExceptionHandler'
19
- rdoc.options << '--line-numbers' << '--inline-source'
20
- rdoc.rdoc_files.include('README')
21
- rdoc.rdoc_files.include('lib/**/*.rb')
22
- end
14
+ begin
15
+ require 'bundler/gem_helper'
16
+ Bundler::GemHelper.class_eval { def version_tag; "#{version}"; end }
17
+ require 'bundler/gem_tasks'
18
+ rescue LoadError
19
+ end
@@ -1,8 +1,11 @@
1
-
1
+ # The mixin that provides the +request_exception+
2
+ # by default included into +ActionController::Base+
2
3
  module RequestExceptionHandler
3
4
 
5
+ THREAD_LOCAL_NAME = :_request_exception
6
+
4
7
  @@parse_request_parameters_exception_handler = lambda do |request, exception|
5
- Thread.current[:request_exception] = exception
8
+ Thread.current[THREAD_LOCAL_NAME] = exception
6
9
  request_body = request.respond_to?(:body) ? request.body : request.raw_post
7
10
 
8
11
  logger = RequestExceptionHandler.logger
@@ -25,12 +28,19 @@ module RequestExceptionHandler
25
28
  { "body" => request_body, "content_type" => content_type, "content_length" => request.content_length }
26
29
  end
27
30
 
28
- mattr_accessor :parse_request_parameters_exception_handler
31
+ begin
32
+ mattr_accessor :parse_request_parameters_exception_handler
33
+ rescue NoMethodError => e
34
+ require('active_support/core_ext/module/attribute_accessors') && retry
35
+ raise e
36
+ end
29
37
 
38
+ # Resets the current +request_exception+ (to nil).
30
39
  def self.reset_request_exception
31
- Thread.current[:request_exception] = nil
40
+ Thread.current[THREAD_LOCAL_NAME] = nil
32
41
  end
33
42
 
43
+ # Retrieves the Rails logger.
34
44
  def self.logger
35
45
  defined?(Rails.logger) ? Rails.logger :
36
46
  defined?(RAILS_DEFAULT_LOGGER) ? RAILS_DEFAULT_LOGGER :
@@ -41,14 +51,16 @@ module RequestExceptionHandler
41
51
  base.prepend_before_filter :check_request_exception
42
52
  end
43
53
 
54
+ # Checks and raises a +request_exception+ (gets prepended as a before filter).
44
55
  def check_request_exception
45
56
  e = request_exception
46
57
  raise e if e && e.is_a?(Exception)
47
58
  end
48
59
 
60
+ # Retrieves and keeps track of the current request exception if any.
49
61
  def request_exception
50
62
  return @_request_exception if defined? @_request_exception
51
- @_request_exception = Thread.current[:request_exception]
63
+ @_request_exception = Thread.current[THREAD_LOCAL_NAME]
52
64
  RequestExceptionHandler.reset_request_exception
53
65
  @_request_exception
54
66
  end
data/test/test_helper.rb CHANGED
@@ -1,4 +1,5 @@
1
1
  require 'rubygems'
2
+ gem 'test-unit' rescue nil
2
3
  require 'test/unit'
3
4
 
4
5
  # enable testing with different version of rails via argv :
@@ -15,15 +16,15 @@ version =
15
16
  if version
16
17
  RAILS_VERSION = version
17
18
  gem 'activesupport', "= #{RAILS_VERSION}"
18
- gem 'activerecord', "= #{RAILS_VERSION}"
19
+ #gem 'activerecord', "= #{RAILS_VERSION}"
19
20
  gem 'actionpack', "= #{RAILS_VERSION}"
20
- gem 'actionmailer', "= #{RAILS_VERSION}"
21
+ #gem 'actionmailer', "= #{RAILS_VERSION}"
21
22
  gem 'rails', "= #{RAILS_VERSION}"
22
23
  else
23
24
  gem 'activesupport'
24
- gem 'activerecord'
25
+ #gem 'activerecord'
25
26
  gem 'actionpack'
26
- gem 'actionmailer'
27
+ #gem 'actionmailer'
27
28
  gem 'rails'
28
29
  end
29
30
 
metadata CHANGED
@@ -1,54 +1,66 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: request_exception_handler
3
3
  version: !ruby/object:Gem::Version
4
- hash: 13
5
4
  prerelease:
6
- segments:
7
- - 0
8
- - 3
9
- version: "0.3"
5
+ version: "0.4"
10
6
  platform: ruby
11
7
  authors:
12
- - Karol Bucek
8
+ - Karol Bucek
13
9
  autorequire:
14
10
  bindir: bin
15
11
  cert_chain: []
16
12
 
17
- date: 2011-08-31 00:00:00 +02:00
18
- default_executable:
13
+ date: 2012-11-15 00:00:00 Z
19
14
  dependencies:
20
- - !ruby/object:Gem::Dependency
21
- name: actionpack
22
- prerelease: false
23
- requirement: &id001 !ruby/object:Gem::Requirement
24
- none: false
25
- requirements:
26
- - - ">="
27
- - !ruby/object:Gem::Version
28
- hash: 1
29
- segments:
30
- - 2
31
- - 1
32
- version: "2.1"
33
- type: :runtime
34
- version_requirements: *id001
15
+ - !ruby/object:Gem::Dependency
16
+ name: actionpack
17
+ version_requirements: &id001 !ruby/object:Gem::Requirement
18
+ none: false
19
+ requirements:
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: "2.1"
23
+ requirement: *id001
24
+ prerelease: false
25
+ type: :runtime
26
+ - !ruby/object:Gem::Dependency
27
+ name: rake
28
+ version_requirements: &id002 !ruby/object:Gem::Requirement
29
+ none: false
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: "0"
34
+ requirement: *id002
35
+ prerelease: false
36
+ type: :development
37
+ - !ruby/object:Gem::Dependency
38
+ name: test-unit
39
+ version_requirements: &id003 !ruby/object:Gem::Requirement
40
+ none: false
41
+ requirements:
42
+ - - ">="
43
+ - !ruby/object:Gem::Version
44
+ version: "2.4"
45
+ requirement: *id003
46
+ prerelease: false
47
+ type: :development
35
48
  description: a rails hook that allows one to handle request parameter parsing exceptions (invalid XML, JSON) with a rescue block
36
49
  email:
37
- - self@kares.org
50
+ - self@kares.org
38
51
  executables: []
39
52
 
40
53
  extensions: []
41
54
 
42
55
  extra_rdoc_files:
43
- - README.md
56
+ - README.md
44
57
  files:
45
- - lib/request_exception_handler.rb
46
- - LICENSE
47
- - README.md
48
- - Rakefile
49
- - test/request_exception_handler_test.rb
50
- - test/test_helper.rb
51
- has_rdoc: true
58
+ - lib/request_exception_handler.rb
59
+ - LICENSE
60
+ - README.md
61
+ - Rakefile
62
+ - test/test_helper.rb
63
+ - test/request_exception_handler_test.rb
52
64
  homepage: http://github.com/kares/request_exception_handler
53
65
  licenses: []
54
66
 
@@ -56,32 +68,32 @@ post_install_message:
56
68
  rdoc_options: []
57
69
 
58
70
  require_paths:
59
- - lib
71
+ - lib
60
72
  required_ruby_version: !ruby/object:Gem::Requirement
61
73
  none: false
62
74
  requirements:
63
- - - ">="
64
- - !ruby/object:Gem::Version
65
- hash: 3
66
- segments:
67
- - 0
68
- version: "0"
75
+ - - ">="
76
+ - !ruby/object:Gem::Version
77
+ hash: 2
78
+ segments:
79
+ - 0
80
+ version: "0"
69
81
  required_rubygems_version: !ruby/object:Gem::Requirement
70
82
  none: false
71
83
  requirements:
72
- - - ">="
73
- - !ruby/object:Gem::Version
74
- hash: 3
75
- segments:
76
- - 0
77
- version: "0"
84
+ - - ">="
85
+ - !ruby/object:Gem::Version
86
+ hash: 2
87
+ segments:
88
+ - 0
89
+ version: "0"
78
90
  requirements: []
79
91
 
80
92
  rubyforge_project: "[none]"
81
- rubygems_version: 1.6.1
93
+ rubygems_version: 1.8.24
82
94
  signing_key:
83
95
  specification_version: 3
84
- summary: handler for all the request (parsing) related exceptions
96
+ summary: handler for all request (parsing) related exceptions
85
97
  test_files:
86
- - test/request_exception_handler_test.rb
87
- - test/test_helper.rb
98
+ - test/test_helper.rb
99
+ - test/request_exception_handler_test.rb