egregious 0.2.2 → 0.2.3
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.
- data/Gemfile +6 -0
- data/README +10 -6
- data/egregious.gemspec +7 -3
- data/lib/egregious.rb +18 -1
- data/lib/egregious/extensions/mongoid.rb +26 -0
- data/lib/egregious/version.rb +1 -1
- data/spec/egregious_spec.rb +17 -0
- data/spec/exceptions_spec.rb +45 -0
- data/spec/spec_helper.rb +1 -0
- metadata +49 -16
data/Gemfile
CHANGED
data/README
CHANGED
@@ -1,15 +1,18 @@
|
|
1
1
|
Update Log:
|
2
|
+
Version 0.2.3 released to https://rubygems.org/gems/egregious on 7.23.2013
|
3
|
+
Merged pull requests:
|
4
|
+
Mongoid integration (#6)
|
5
|
+
Bug Fix: Bad Rails test
|
6
|
+
Updated rails and rack dependencies
|
2
7
|
Version 0.2.2 released to https://rubygems.org/gems/egregious on 2.15.2013
|
3
8
|
Merged pull requests:
|
4
9
|
Compatibility with Rails::API (#5)
|
5
|
-
Thank you dwbutler! Keep those pull requests coming.
|
6
10
|
|
7
11
|
Version 0.2.1 released to https://rubygems.org/gems/egregious on 9.21.2012
|
8
12
|
Merged pull requests:
|
9
13
|
Bug Fix: should translate status code Symbol to right HTTP STATUS CODE - avinasha
|
10
14
|
Fixes teapot bug with rails 3.2.8. - kbrown
|
11
15
|
Note: version 0.2.0 does not work with rails 3.2.8 you should update to 0.2.1
|
12
|
-
Thank you avinasha and kbrown along with all the other forks! Keep those pull requests coming.
|
13
16
|
|
14
17
|
If you would like to contribute take a look at the issues feature list, fork and issue a pull request!
|
15
18
|
|
@@ -29,8 +32,8 @@ provide the caller context information.
|
|
29
32
|
|
30
33
|
What egregious can do:
|
31
34
|
|
32
|
-
* Defines default exception handling for most common ruby, rails, warden and
|
33
|
-
(warden and
|
35
|
+
* Defines default exception handling for most common ruby, rails, warden, cancan and mongoid exceptions.
|
36
|
+
(warden, cancan and mongoid are optional)
|
34
37
|
* Catches defined exceptions using a rescue_with returning the status code defined for each exception
|
35
38
|
and well structured json, xml
|
36
39
|
* For html production requests attempts to load the html error pages for the mapped status code,
|
@@ -42,7 +45,8 @@ provide the caller context information.
|
|
42
45
|
|
43
46
|
|
44
47
|
REQUIRES:
|
45
|
-
|
48
|
+
rails ~> 3.1.12
|
49
|
+
rack >= 1.3.6
|
46
50
|
|
47
51
|
USAGE:
|
48
52
|
1) Add to your Gemfile:
|
@@ -99,4 +103,4 @@ def build_html_file_path(status)
|
|
99
103
|
end
|
100
104
|
|
101
105
|
KNOWN ISSUES:
|
102
|
-
* If you use CanCan or Devise you must have Egregious after CanCan/Devise in your Gemfile, if not it will not handle those errors correctly.
|
106
|
+
* If you use Mongoid, CanCan or Devise you must have Egregious after CanCan/Devise in your Gemfile, if not it will not handle those errors correctly.
|
data/egregious.gemspec
CHANGED
@@ -18,15 +18,19 @@ Gem::Specification.new do |s|
|
|
18
18
|
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
19
19
|
s.require_paths = ["lib"]
|
20
20
|
|
21
|
+
|
22
|
+
s.add_runtime_dependency "rails", '~> 3.1.12'
|
23
|
+
s.add_runtime_dependency "rack", '>= 1.3.6'
|
24
|
+
s.add_runtime_dependency "htmlentities"
|
25
|
+
|
21
26
|
# specify any dependencies here; for example:
|
22
27
|
s.add_development_dependency "rspec"
|
23
28
|
s.add_development_dependency "json"
|
24
29
|
s.add_development_dependency "hpricot"
|
25
30
|
s.add_development_dependency "warden"
|
26
31
|
s.add_development_dependency "cancan"
|
32
|
+
s.add_development_dependency "mongoid"
|
33
|
+
s.add_development_dependency "bson_ext"
|
27
34
|
|
28
|
-
s.add_runtime_dependency "rails", '>= 3.0.1'
|
29
|
-
s.add_runtime_dependency "rack"
|
30
|
-
s.add_runtime_dependency "htmlentities"
|
31
35
|
|
32
36
|
end
|
data/lib/egregious.rb
CHANGED
@@ -75,6 +75,23 @@ module Egregious
|
|
75
75
|
ActiveRecord::UnknownAttributeError=>status_code(:bad_request)
|
76
76
|
})
|
77
77
|
end
|
78
|
+
|
79
|
+
if defined?(Mongoid)
|
80
|
+
require 'egregious/extensions/mongoid'
|
81
|
+
|
82
|
+
exception_codes.merge!({
|
83
|
+
Mongoid::Errors::InvalidFind=>status_code(:bad_request),
|
84
|
+
Mongoid::Errors::DocumentNotFound=>status_code(:not_found),
|
85
|
+
Mongoid::Errors::Validations=>status_code(:unprocessable_entity)
|
86
|
+
})
|
87
|
+
|
88
|
+
if Mongoid::VERSION > '3'
|
89
|
+
exception_codes.merge!({
|
90
|
+
Mongoid::Errors::ReadonlyAttribute=>status_code(:forbidden),
|
91
|
+
Mongoid::Errors::UnknownAttribute=>status_code(:bad_request)
|
92
|
+
})
|
93
|
+
end
|
94
|
+
end
|
78
95
|
|
79
96
|
if defined?(Warden)
|
80
97
|
exception_codes.merge!({
|
@@ -92,7 +109,7 @@ module Egregious
|
|
92
109
|
end
|
93
110
|
|
94
111
|
@@exception_codes = self._load_exception_codes
|
95
|
-
@@root = defined?(
|
112
|
+
@@root = defined?(Rails) ? Rails.root : nil
|
96
113
|
|
97
114
|
# exposes the root of the app
|
98
115
|
def self.root
|
@@ -0,0 +1,26 @@
|
|
1
|
+
if defined?(Mongoid)
|
2
|
+
# Customize the error information Egregious returns for MongoidErrors
|
3
|
+
module Mongoid
|
4
|
+
module Errors
|
5
|
+
class MongoidError
|
6
|
+
def to_xml
|
7
|
+
"<errors><error>#{HTMLEntities.new.encode(@problem || to_s)}</error><type>#{self.exception_type}</type></errors>"
|
8
|
+
end
|
9
|
+
|
10
|
+
def to_json
|
11
|
+
"{\"error\":#{ActiveSupport::JSON.encode(@problem || to_s)}, \"type\":\"#{self.exception_type}\"}"
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
class Validations
|
16
|
+
def to_xml
|
17
|
+
"<errors><error>#{HTMLEntities.new.encode(self.document.errors.full_messages.join(', ').gsub(/\r/, ' ').gsub(/\n/, ' ').squeeze(' '))}</error><type>#{self.exception_type}</type></errors>"
|
18
|
+
end
|
19
|
+
|
20
|
+
def to_json
|
21
|
+
"{\"error\":#{ActiveSupport::JSON.encode(self.document.errors.full_messages.join(', ').gsub(/\r/, ' ').gsub(/\n/, ' ').squeeze(' '))}, \"type\":\"#{self.exception_type}\"}"
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
data/lib/egregious/version.rb
CHANGED
data/spec/egregious_spec.rb
CHANGED
@@ -10,6 +10,8 @@ describe Egregious do
|
|
10
10
|
describe 'status_code' do
|
11
11
|
it "should translate Symbol to right HTTP STATUS CODE" do
|
12
12
|
status_code(:bad_request).should == 400
|
13
|
+
status_code(:unauthorized).should == 401
|
14
|
+
status_code(:unprocessable_entity).should == 422
|
13
15
|
end
|
14
16
|
end
|
15
17
|
|
@@ -96,6 +98,21 @@ describe Egregious do
|
|
96
98
|
exception_codes[CanCan::AuthorizationNotPerformed].should == Egregious.status_code(:unauthorized)
|
97
99
|
end
|
98
100
|
end
|
101
|
+
|
102
|
+
if defined?(Mongoid)
|
103
|
+
it "should return expected errors for Mongoid" do
|
104
|
+
exception_codes[Mongoid::Errors::InvalidFind].should == Egregious.status_code(:bad_request)
|
105
|
+
exception_codes[Mongoid::Errors::DocumentNotFound].should == Egregious.status_code(:not_found)
|
106
|
+
exception_codes[Mongoid::Errors::Validations].should == Egregious.status_code(:unprocessable_entity)
|
107
|
+
end
|
108
|
+
|
109
|
+
if Mongoid::VERSION > '3'
|
110
|
+
it "should return expected errors for Mongoid 3+" do
|
111
|
+
exception_codes[Mongoid::Errors::ReadonlyAttribute].should == Egregious.status_code(:forbidden)
|
112
|
+
exception_codes[Mongoid::Errors::UnknownAttribute].should == Egregious.status_code(:bad_request)
|
113
|
+
end
|
114
|
+
end
|
115
|
+
end
|
99
116
|
end
|
100
117
|
|
101
118
|
describe "status_code_for_exception" do
|
data/spec/exceptions_spec.rb
CHANGED
@@ -40,4 +40,49 @@ describe Exception do
|
|
40
40
|
end
|
41
41
|
X::Y::Z.new.exception_type.should == 'Z'
|
42
42
|
end
|
43
|
+
end
|
44
|
+
|
45
|
+
if defined?(Mongoid)
|
46
|
+
class TestModel
|
47
|
+
include Mongoid::Document
|
48
|
+
|
49
|
+
field :foo
|
50
|
+
validates_presence_of :foo
|
51
|
+
end
|
52
|
+
|
53
|
+
|
54
|
+
describe Mongoid::Errors::MongoidError do
|
55
|
+
let(:exception) { Mongoid::Errors::InvalidFind.new }
|
56
|
+
let(:error_message) { "Calling Document.find with nil is invalid." }
|
57
|
+
|
58
|
+
it "should output json with a short problem description" do
|
59
|
+
result = JSON.parse(exception.to_json)
|
60
|
+
result['error'].should =~ /#{error_message}/
|
61
|
+
end
|
62
|
+
|
63
|
+
it "should output xml with a short problem description" do
|
64
|
+
doc = Hpricot.XML(exception.to_xml)
|
65
|
+
(doc/:errors).each do |error|
|
66
|
+
HTMLEntities.new.decode((error/:error).inner_html).should =~ /#{error_message}/
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
describe Mongoid::Errors::Validations do
|
72
|
+
let(:model) { TestModel.create }
|
73
|
+
let(:exception) { Mongoid::Errors::Validations.new(model) }
|
74
|
+
let(:error_message) { model.errors.full_messages.first }
|
75
|
+
|
76
|
+
it "should output json with a short summary" do
|
77
|
+
result = JSON.parse(exception.to_json)
|
78
|
+
result['error'].should == error_message
|
79
|
+
end
|
80
|
+
|
81
|
+
it "should output xml with a short problem description" do
|
82
|
+
doc = Hpricot.XML(exception.to_xml)
|
83
|
+
(doc/:errors).each do |error|
|
84
|
+
HTMLEntities.new.decode((error/:error).inner_html).should == error_message
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
43
88
|
end
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: egregious
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.3
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,17 +9,49 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-
|
12
|
+
date: 2013-07-23 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
|
-
name:
|
15
|
+
name: rails
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ~>
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: 3.1.12
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ~>
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: 3.1.12
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: rack
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - ! '>='
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: 1.3.6
|
38
|
+
type: :runtime
|
39
|
+
prerelease: false
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: 1.3.6
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: htmlentities
|
16
48
|
requirement: !ruby/object:Gem::Requirement
|
17
49
|
none: false
|
18
50
|
requirements:
|
19
51
|
- - ! '>='
|
20
52
|
- !ruby/object:Gem::Version
|
21
53
|
version: '0'
|
22
|
-
type: :
|
54
|
+
type: :runtime
|
23
55
|
prerelease: false
|
24
56
|
version_requirements: !ruby/object:Gem::Requirement
|
25
57
|
none: false
|
@@ -28,7 +60,7 @@ dependencies:
|
|
28
60
|
- !ruby/object:Gem::Version
|
29
61
|
version: '0'
|
30
62
|
- !ruby/object:Gem::Dependency
|
31
|
-
name:
|
63
|
+
name: rspec
|
32
64
|
requirement: !ruby/object:Gem::Requirement
|
33
65
|
none: false
|
34
66
|
requirements:
|
@@ -44,7 +76,7 @@ dependencies:
|
|
44
76
|
- !ruby/object:Gem::Version
|
45
77
|
version: '0'
|
46
78
|
- !ruby/object:Gem::Dependency
|
47
|
-
name:
|
79
|
+
name: json
|
48
80
|
requirement: !ruby/object:Gem::Requirement
|
49
81
|
none: false
|
50
82
|
requirements:
|
@@ -60,7 +92,7 @@ dependencies:
|
|
60
92
|
- !ruby/object:Gem::Version
|
61
93
|
version: '0'
|
62
94
|
- !ruby/object:Gem::Dependency
|
63
|
-
name:
|
95
|
+
name: hpricot
|
64
96
|
requirement: !ruby/object:Gem::Requirement
|
65
97
|
none: false
|
66
98
|
requirements:
|
@@ -76,7 +108,7 @@ dependencies:
|
|
76
108
|
- !ruby/object:Gem::Version
|
77
109
|
version: '0'
|
78
110
|
- !ruby/object:Gem::Dependency
|
79
|
-
name:
|
111
|
+
name: warden
|
80
112
|
requirement: !ruby/object:Gem::Requirement
|
81
113
|
none: false
|
82
114
|
requirements:
|
@@ -92,30 +124,30 @@ dependencies:
|
|
92
124
|
- !ruby/object:Gem::Version
|
93
125
|
version: '0'
|
94
126
|
- !ruby/object:Gem::Dependency
|
95
|
-
name:
|
127
|
+
name: cancan
|
96
128
|
requirement: !ruby/object:Gem::Requirement
|
97
129
|
none: false
|
98
130
|
requirements:
|
99
131
|
- - ! '>='
|
100
132
|
- !ruby/object:Gem::Version
|
101
|
-
version:
|
102
|
-
type: :
|
133
|
+
version: '0'
|
134
|
+
type: :development
|
103
135
|
prerelease: false
|
104
136
|
version_requirements: !ruby/object:Gem::Requirement
|
105
137
|
none: false
|
106
138
|
requirements:
|
107
139
|
- - ! '>='
|
108
140
|
- !ruby/object:Gem::Version
|
109
|
-
version:
|
141
|
+
version: '0'
|
110
142
|
- !ruby/object:Gem::Dependency
|
111
|
-
name:
|
143
|
+
name: mongoid
|
112
144
|
requirement: !ruby/object:Gem::Requirement
|
113
145
|
none: false
|
114
146
|
requirements:
|
115
147
|
- - ! '>='
|
116
148
|
- !ruby/object:Gem::Version
|
117
149
|
version: '0'
|
118
|
-
type: :
|
150
|
+
type: :development
|
119
151
|
prerelease: false
|
120
152
|
version_requirements: !ruby/object:Gem::Requirement
|
121
153
|
none: false
|
@@ -124,14 +156,14 @@ dependencies:
|
|
124
156
|
- !ruby/object:Gem::Version
|
125
157
|
version: '0'
|
126
158
|
- !ruby/object:Gem::Dependency
|
127
|
-
name:
|
159
|
+
name: bson_ext
|
128
160
|
requirement: !ruby/object:Gem::Requirement
|
129
161
|
none: false
|
130
162
|
requirements:
|
131
163
|
- - ! '>='
|
132
164
|
- !ruby/object:Gem::Version
|
133
165
|
version: '0'
|
134
|
-
type: :
|
166
|
+
type: :development
|
135
167
|
prerelease: false
|
136
168
|
version_requirements: !ruby/object:Gem::Requirement
|
137
169
|
none: false
|
@@ -154,6 +186,7 @@ files:
|
|
154
186
|
- egregious.gemspec
|
155
187
|
- lib/egregious.rb
|
156
188
|
- lib/egregious/extensions/exception.rb
|
189
|
+
- lib/egregious/extensions/mongoid.rb
|
157
190
|
- lib/egregious/version.rb
|
158
191
|
- spec/egregious_spec.rb
|
159
192
|
- spec/exceptions_spec.rb
|