rack-rescue 0.1.0

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 (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
+