rack-rescue 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (34) hide show
  1. data/Users/dneighman/Projects/rack-rescue/Gemfile +15 -0
  2. data/Users/dneighman/Projects/rack-rescue/Gemfile.lock +93 -0
  3. data/Users/dneighman/Projects/rack-rescue/LICENSE +20 -0
  4. data/Users/dneighman/Projects/rack-rescue/README.textile +80 -0
  5. data/Users/dneighman/Projects/rack-rescue/Rakefile +26 -0
  6. data/Users/dneighman/Projects/rack-rescue/TODO.textile +7 -0
  7. data/Users/dneighman/Projects/rack-rescue/lib/rack-rescue.rb +1 -0
  8. data/Users/dneighman/Projects/rack-rescue/lib/rack/rescue.rb +93 -0
  9. data/Users/dneighman/Projects/rack-rescue/lib/rack/rescue/default_exceptions.rb +16 -0
  10. data/Users/dneighman/Projects/rack-rescue/lib/rack/rescue/exceptions.rb +107 -0
  11. data/Users/dneighman/Projects/rack-rescue/lib/rack/rescue/handler.rb +124 -0
  12. data/Users/dneighman/Projects/rack-rescue/lib/rack/rescue/responder.rb +21 -0
  13. data/Users/dneighman/Projects/rack-rescue/lib/rack/rescue/templates/rack_rescue_templates/error.development.html.erb +19 -0
  14. data/Users/dneighman/Projects/rack-rescue/lib/rack/rescue/templates/rack_rescue_templates/error.html.erb +15 -0
  15. data/Users/dneighman/Projects/rack-rescue/lib/rack/rescue/templates/rack_rescue_templates/error.text.erb +14 -0
  16. data/Users/dneighman/Projects/rack-rescue/lib/rack/rescue/templates/rack_rescue_templates/not_found.text.erb +4 -0
  17. data/Users/dneighman/Projects/rack-rescue/rack-rescue.gemspec +26 -0
  18. data/Users/dneighman/Projects/rack-rescue/spec/rack-rescue_spec.rb +151 -0
  19. data/Users/dneighman/Projects/rack-rescue/spec/rack/rescue/exceptions_spec.rb +85 -0
  20. data/Users/dneighman/Projects/rack-rescue/spec/rack/rescue/fixtures/alternate_errors/alternate_exceptions.foo_env.html.erb +1 -0
  21. data/Users/dneighman/Projects/rack-rescue/spec/rack/rescue/fixtures/alternate_errors/alternate_exceptions.html.erb +1 -0
  22. data/Users/dneighman/Projects/rack-rescue/spec/rack/rescue/fixtures/alternate_errors/custom_exception.text.erb +1 -0
  23. data/Users/dneighman/Projects/rack-rescue/spec/rack/rescue/fixtures/alternate_errors/error.xml.erb +5 -0
  24. data/Users/dneighman/Projects/rack-rescue/spec/rack/rescue/fixtures/alternate_errors/inherit_from_error_backtrace.text.erb +4 -0
  25. data/Users/dneighman/Projects/rack-rescue/spec/rack/rescue/fixtures/alternate_errors/inherit_from_error_header.text.erb +4 -0
  26. data/Users/dneighman/Projects/rack-rescue/spec/rack/rescue/fixtures/alternate_errors/inherit_from_error_message.text.erb +4 -0
  27. data/Users/dneighman/Projects/rack-rescue/spec/rack/rescue/fixtures/alternate_errors/not_found.text.erb +7 -0
  28. data/Users/dneighman/Projects/rack-rescue/spec/rack/rescue/fixtures/alternate_errors/not_found.xml.erb +3 -0
  29. data/Users/dneighman/Projects/rack-rescue/spec/rack/rescue/fixtures/layouts/custom_error_layout.xml.erb +4 -0
  30. data/Users/dneighman/Projects/rack-rescue/spec/rack/rescue/fixtures/layouts/error.html.erb +7 -0
  31. data/Users/dneighman/Projects/rack-rescue/spec/rack/rescue/handler_spec.rb +112 -0
  32. data/Users/dneighman/Projects/rack-rescue/spec/spec.opts +2 -0
  33. data/Users/dneighman/Projects/rack-rescue/spec/spec_helper.rb +22 -0
  34. metadata +213 -0
@@ -0,0 +1,5 @@
1
+ <errors>
2
+ <header>XML Error Template</header>
3
+ <error><%= error.class %></error>
4
+ </errors>
5
+
@@ -0,0 +1,4 @@
1
+ <% inherits_from :error %>
2
+ <% content_block :error_backtrace do %>
3
+ Overwritten Error Backtrace
4
+ <% end %>
@@ -0,0 +1,4 @@
1
+ <% inherits_from :error %>
2
+ <% content_block :error_header do %>
3
+ Overwritten Error Header
4
+ <% end %>
@@ -0,0 +1,4 @@
1
+ <% inherits_from :error %>
2
+ <% content_block :error_message do %>
3
+ Overwritten Error Message
4
+ <% end %>
@@ -0,0 +1,7 @@
1
+ <% content_block :error_header do %>
2
+ Error: <%= error.class %>
3
+ <% end %>
4
+
5
+ <% content_block :error_message do %>
6
+ Message: <%= error.message %>
7
+ <% end %>
@@ -0,0 +1,4 @@
1
+ <errors>
2
+ <template>Custom Error Layout</template>
3
+ <error><%= yield %></error>
4
+ </errors>
@@ -0,0 +1,7 @@
1
+ <!Doctype>
2
+ <html>
3
+ <body class='error'>
4
+ <h1>Error Layout</h1>
5
+ yield
6
+ </body>
7
+ </html>
@@ -0,0 +1,112 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '../../../spec_helper')
2
+
3
+ describe Rack::Rescue::Handler do
4
+ subject { Rack::Rescue::Handler }
5
+
6
+ before(:all) do
7
+ root = File.join(File.expand_path(::File.dirname(__FILE__)), "fixtures")
8
+ subject.roots << root
9
+ subject.push_paths(:error_templates, "alternate_errors", "**/*")
10
+ end
11
+
12
+ it "should have a default format of :text" do
13
+ subject.default_format.should == :text
14
+ end
15
+
16
+ it "should allow me to set a default format" do
17
+ df = subject.default_format
18
+ subject.default_format = :html
19
+ subject.default_format.should == :html
20
+ subject.default_format = df
21
+ end
22
+
23
+ it "should return true when asked if a template is present and it is" do
24
+ subject.template?(:not_found, :format => :text).should be_true
25
+ end
26
+
27
+ it "should return false when asked if a template is present and it's not" do
28
+ subject.template?(:never_was_here).should be_false
29
+ end
30
+
31
+ it "should fetch a given template" do
32
+ subject.template(:not_found).should be_a_kind_of(Pancake::Mixins::Render::Template)
33
+ end
34
+
35
+ it "should set the template format via the format option" do
36
+ subject.template(:not_found, :format => :xml).should_not be_nil
37
+ end
38
+
39
+ describe "render_error" do
40
+ class RackRescueCustom1 < StandardError; end
41
+ class RackRescueCustom2 < StandardError; end
42
+ class RackRescueCustom3 < StandardError; end
43
+
44
+ before do
45
+ @handler = Rack::Rescue::Handler.new(RackRescueCustom1, :template => "custom_exception", :status => 412)
46
+ begin
47
+ raise RackRescueCustom1, "Custom Error Message"
48
+ rescue => e
49
+ @exception = e
50
+ end
51
+ end
52
+
53
+ it "should render the template that the exception is associated with" do
54
+ result = @handler.render_error(@exception)
55
+ result.should include("Custom Exception Template")
56
+ end
57
+
58
+ it "should fallback to the normal error template if the specified template cannot be found" do
59
+ @handler.default_template = "not_a_real_template"
60
+ result = @handler.render_error(@exception)
61
+ result.should include("Error")
62
+ end
63
+
64
+ it "should allow me to inherit from error and overwrite the error_header" do
65
+ @handler.default_template = "inherit_from_error_header"
66
+ result = @handler.render_error(@exception)
67
+ result.should include("Overwritten Error Header")
68
+ end
69
+
70
+ it "should allow me to inherit from error and overwrite the error_message" do
71
+ @handler.default_template = "inherit_from_error_message"
72
+ result = @handler.render_error(@exception)
73
+ result.should include("Overwritten Error Message")
74
+ end
75
+
76
+ it "should allow me to inherit from error and overwrite the error_backtrace" do
77
+ @handler.default_template = "inherit_from_error_backtrace"
78
+ result = @handler.render_error(@exception)
79
+ result.should include("Overwritten Error Backtrace")
80
+ end
81
+
82
+ it "should allow me to overwrite the default format for the handler" do
83
+ handler = Rack::Rescue::Handler.new(RackRescueCustom1, :template => "custom_exception", :status => 412, :format => :html)
84
+ result = handler.render_error(@exception)
85
+ result.should include("<h1>412 Error")
86
+ end
87
+
88
+ it "should render the exception using the foo_env error template" do
89
+ begin
90
+ orig_env = ENV['RACK_ENV']
91
+ ENV['RACK_ENV'] = "foo_env"
92
+ handler = Rack::Rescue::Handler.new(RackRescueCustom1, :template => "alternate_exceptions", :format => :html)
93
+ result = handler.render_error(@exception, :format => :html)
94
+ result.should include("In alternate_exceptions.foo_env.html.erb")
95
+ ensure
96
+ ENV['RACK_ENV'] = orig_env
97
+ end
98
+ end
99
+
100
+ it "should render the exception using the standard error template" do
101
+ begin
102
+ orig_env = ENV['RACK_ENV']
103
+ ENV['RACK_ENV'] = nil
104
+ handler = Rack::Rescue::Handler.new(RackRescueCustom1, :template => "alternate_exceptions", :format => :html)
105
+ result = handler.render_error(@exception)
106
+ result.should include("In alternate_exceptions.html.erb")
107
+ ensure
108
+ ENV['RACK_ENV'] = orig_env
109
+ end
110
+ end
111
+ end
112
+ end
@@ -0,0 +1,2 @@
1
+ --color
2
+ --backtrace
@@ -0,0 +1,22 @@
1
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
2
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
3
+ require 'rack-rescue'
4
+ require 'spec'
5
+ require 'spec/autorun'
6
+ require 'wrapt'
7
+
8
+ Spec::Runner.configure do |config|
9
+
10
+ end
11
+
12
+ class MyNotFoundException < StandardError; end
13
+
14
+ SUCCESS_APP = lambda{|e| Rack::Response.new("ok").finish }
15
+
16
+ FAIL_APP = lambda do |e|
17
+ if $fail_with
18
+ raise $fail_with
19
+ else
20
+ raise RuntimeError
21
+ end
22
+ end
metadata ADDED
@@ -0,0 +1,213 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rack-rescue
3
+ version: !ruby/object:Gem::Version
4
+ hash: 27
5
+ prerelease: false
6
+ segments:
7
+ - 0
8
+ - 1
9
+ - 0
10
+ version: 0.1.0
11
+ platform: ruby
12
+ authors:
13
+ - Daniel Neighman
14
+ autorequire: rack/rescue
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2010-05-30 00:00:00 +10:00
19
+ default_executable:
20
+ dependencies:
21
+ - !ruby/object:Gem::Dependency
22
+ version_requirements: &id001 !ruby/object:Gem::Requirement
23
+ none: false
24
+ requirements:
25
+ - - ">="
26
+ - !ruby/object:Gem::Version
27
+ hash: 15
28
+ segments:
29
+ - 0
30
+ - 2
31
+ version: "0.2"
32
+ name: pancake
33
+ requirement: *id001
34
+ prerelease: false
35
+ type: :runtime
36
+ - !ruby/object:Gem::Dependency
37
+ version_requirements: &id002 !ruby/object:Gem::Requirement
38
+ none: false
39
+ requirements:
40
+ - - ">="
41
+ - !ruby/object:Gem::Version
42
+ hash: 15
43
+ segments:
44
+ - 0
45
+ - 2
46
+ version: "0.2"
47
+ name: any_view
48
+ requirement: *id002
49
+ prerelease: false
50
+ type: :runtime
51
+ - !ruby/object:Gem::Dependency
52
+ version_requirements: &id003 !ruby/object:Gem::Requirement
53
+ none: false
54
+ requirements:
55
+ - - ">="
56
+ - !ruby/object:Gem::Version
57
+ hash: 3
58
+ segments:
59
+ - 0
60
+ version: "0"
61
+ name: rake
62
+ requirement: *id003
63
+ prerelease: false
64
+ type: :runtime
65
+ - !ruby/object:Gem::Dependency
66
+ version_requirements: &id004 !ruby/object:Gem::Requirement
67
+ none: false
68
+ requirements:
69
+ - - ">="
70
+ - !ruby/object:Gem::Version
71
+ hash: 3
72
+ segments:
73
+ - 0
74
+ version: "0"
75
+ name: hashie
76
+ requirement: *id004
77
+ prerelease: false
78
+ type: :runtime
79
+ - !ruby/object:Gem::Dependency
80
+ version_requirements: &id005 !ruby/object:Gem::Requirement
81
+ none: false
82
+ requirements:
83
+ - - ">="
84
+ - !ruby/object:Gem::Version
85
+ hash: 3
86
+ segments:
87
+ - 0
88
+ version: "0"
89
+ name: dirge
90
+ requirement: *id005
91
+ prerelease: false
92
+ type: :runtime
93
+ - !ruby/object:Gem::Dependency
94
+ version_requirements: &id006 !ruby/object:Gem::Requirement
95
+ none: false
96
+ requirements:
97
+ - - ">="
98
+ - !ruby/object:Gem::Version
99
+ hash: 3
100
+ segments:
101
+ - 0
102
+ version: "0"
103
+ name: rack
104
+ requirement: *id006
105
+ prerelease: false
106
+ type: :runtime
107
+ - !ruby/object:Gem::Dependency
108
+ version_requirements: &id007 !ruby/object:Gem::Requirement
109
+ none: false
110
+ requirements:
111
+ - - ">="
112
+ - !ruby/object:Gem::Version
113
+ hash: 3
114
+ segments:
115
+ - 0
116
+ version: "0"
117
+ name: extlib
118
+ requirement: *id007
119
+ prerelease: false
120
+ type: :runtime
121
+ - !ruby/object:Gem::Dependency
122
+ version_requirements: &id008 !ruby/object:Gem::Requirement
123
+ none: false
124
+ requirements:
125
+ - - ">="
126
+ - !ruby/object:Gem::Version
127
+ hash: 31
128
+ segments:
129
+ - 0
130
+ - 10
131
+ version: "0.10"
132
+ name: tilt
133
+ requirement: *id008
134
+ prerelease: false
135
+ type: :runtime
136
+ description: Rescue Handler for Rack
137
+ email: has.sox@gmail.com
138
+ executables: []
139
+
140
+ extensions: []
141
+
142
+ extra_rdoc_files: []
143
+
144
+ files:
145
+ - /Users/dneighman/Projects/rack-rescue/Gemfile
146
+ - /Users/dneighman/Projects/rack-rescue/Gemfile.lock
147
+ - /Users/dneighman/Projects/rack-rescue/lib/rack/rescue/default_exceptions.rb
148
+ - /Users/dneighman/Projects/rack-rescue/lib/rack/rescue/exceptions.rb
149
+ - /Users/dneighman/Projects/rack-rescue/lib/rack/rescue/handler.rb
150
+ - /Users/dneighman/Projects/rack-rescue/lib/rack/rescue/responder.rb
151
+ - /Users/dneighman/Projects/rack-rescue/lib/rack/rescue/templates/rack_rescue_templates/error.development.html.erb
152
+ - /Users/dneighman/Projects/rack-rescue/lib/rack/rescue/templates/rack_rescue_templates/error.html.erb
153
+ - /Users/dneighman/Projects/rack-rescue/lib/rack/rescue/templates/rack_rescue_templates/error.text.erb
154
+ - /Users/dneighman/Projects/rack-rescue/lib/rack/rescue/templates/rack_rescue_templates/not_found.text.erb
155
+ - /Users/dneighman/Projects/rack-rescue/lib/rack/rescue.rb
156
+ - /Users/dneighman/Projects/rack-rescue/lib/rack-rescue.rb
157
+ - /Users/dneighman/Projects/rack-rescue/LICENSE
158
+ - /Users/dneighman/Projects/rack-rescue/rack-rescue.gemspec
159
+ - /Users/dneighman/Projects/rack-rescue/Rakefile
160
+ - /Users/dneighman/Projects/rack-rescue/README.textile
161
+ - /Users/dneighman/Projects/rack-rescue/spec/rack/rescue/exceptions_spec.rb
162
+ - /Users/dneighman/Projects/rack-rescue/spec/rack/rescue/fixtures/alternate_errors/alternate_exceptions.foo_env.html.erb
163
+ - /Users/dneighman/Projects/rack-rescue/spec/rack/rescue/fixtures/alternate_errors/alternate_exceptions.html.erb
164
+ - /Users/dneighman/Projects/rack-rescue/spec/rack/rescue/fixtures/alternate_errors/custom_exception.text.erb
165
+ - /Users/dneighman/Projects/rack-rescue/spec/rack/rescue/fixtures/alternate_errors/error.xml.erb
166
+ - /Users/dneighman/Projects/rack-rescue/spec/rack/rescue/fixtures/alternate_errors/inherit_from_error_backtrace.text.erb
167
+ - /Users/dneighman/Projects/rack-rescue/spec/rack/rescue/fixtures/alternate_errors/inherit_from_error_header.text.erb
168
+ - /Users/dneighman/Projects/rack-rescue/spec/rack/rescue/fixtures/alternate_errors/inherit_from_error_message.text.erb
169
+ - /Users/dneighman/Projects/rack-rescue/spec/rack/rescue/fixtures/alternate_errors/not_found.text.erb
170
+ - /Users/dneighman/Projects/rack-rescue/spec/rack/rescue/fixtures/alternate_errors/not_found.xml.erb
171
+ - /Users/dneighman/Projects/rack-rescue/spec/rack/rescue/fixtures/layouts/custom_error_layout.xml.erb
172
+ - /Users/dneighman/Projects/rack-rescue/spec/rack/rescue/fixtures/layouts/error.html.erb
173
+ - /Users/dneighman/Projects/rack-rescue/spec/rack/rescue/handler_spec.rb
174
+ - /Users/dneighman/Projects/rack-rescue/spec/rack-rescue_spec.rb
175
+ - /Users/dneighman/Projects/rack-rescue/spec/spec.opts
176
+ - /Users/dneighman/Projects/rack-rescue/spec/spec_helper.rb
177
+ - /Users/dneighman/Projects/rack-rescue/TODO.textile
178
+ has_rdoc: true
179
+ homepage: http://github.com/hassox/rack-rescue
180
+ licenses: []
181
+
182
+ post_install_message:
183
+ rdoc_options:
184
+ - --charset=UTF-8
185
+ require_paths:
186
+ - lib
187
+ required_ruby_version: !ruby/object:Gem::Requirement
188
+ none: false
189
+ requirements:
190
+ - - ">="
191
+ - !ruby/object:Gem::Version
192
+ hash: 3
193
+ segments:
194
+ - 0
195
+ version: "0"
196
+ required_rubygems_version: !ruby/object:Gem::Requirement
197
+ none: false
198
+ requirements:
199
+ - - ">="
200
+ - !ruby/object:Gem::Version
201
+ hash: 3
202
+ segments:
203
+ - 0
204
+ version: "0"
205
+ requirements: []
206
+
207
+ rubyforge_project:
208
+ rubygems_version: 1.3.7
209
+ signing_key:
210
+ specification_version: 3
211
+ summary: Rescue Handler for Rack
212
+ test_files: []
213
+