linkify_errors 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,4 @@
1
+ *.gem
2
+ .bundle
3
+ Gemfile.lock
4
+ pkg/*
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in linkify_errors.gemspec
4
+ gemspec
@@ -0,0 +1,2 @@
1
+ require 'bundler'
2
+ Bundler::GemHelper.install_tasks
@@ -0,0 +1,44 @@
1
+ require 'rubygems'
2
+ require 'action_dispatch/middleware/show_exceptions'
3
+
4
+ module ActionDispatch
5
+ class ShowExceptions
6
+ def rescue_action_locally(request, exception)
7
+ template = ActionView::Base.new([File.join(File.dirname(__FILE__), 'templates')],
8
+ :request => request,
9
+ :exception => exception,
10
+ :application_trace => application_trace(exception),
11
+ :framework_trace => framework_trace(exception),
12
+ :full_trace => full_trace(exception)
13
+ )
14
+ file = "rescues/#{@@rescue_templates[exception.class.name]}.erb"
15
+ body = template.render(:file => file, :layout => 'rescues/layout.erb')
16
+ render(status_code(exception), body)
17
+ end
18
+ end
19
+ end
20
+
21
+ module LinkifyErrors
22
+ PROTOCOL = "editfile"
23
+
24
+ def self.linkify(str)
25
+ file, line, desc = str.split(':')
26
+
27
+ if file[0..0] == "/"
28
+ # we already have an absolute path. We're good!
29
+ elsif file =~ /(.*) \((.*)\) (.*)/
30
+ # This is a part-of-rails gem, e.g. "actionpack (3.1.0.beta1) lib/action_controller/....."
31
+ gemspecs = Gem.source_index.find_name($1)
32
+ version_in_use = gemspecs.find {|gemspec| gemspec.version.to_s == $2 }
33
+ base_path = version_in_use.rg_full_gem_path
34
+ file = "#{base_path}/#{$3}"
35
+ else
36
+ # This is an app-local file, and just needs to be joined to Rails.root
37
+ file = Rails.root + file
38
+ end
39
+
40
+ url = "#{PROTOCOL}://#{line}@#{file}"
41
+
42
+ "<a href='#{url}'>#{str}</a>".html_safe
43
+ end
44
+ end
@@ -0,0 +1,3 @@
1
+ module LinkifyErrors
2
+ VERSION = "0.0.1"
3
+ end
@@ -0,0 +1,31 @@
1
+ <% unless @exception.blamed_files.blank? %>
2
+ <% if (hide = @exception.blamed_files.length > 8) %>
3
+ <a href="#" onclick="document.getElementById('blame_trace').style.display='block'; return false;">Show blamed files</a>
4
+ <% end %>
5
+ <pre id="blame_trace" <%='style="display:none"' if hide %>><code><%=h @exception.describe_blame %></code></pre>
6
+ <% end %>
7
+
8
+ <%
9
+ clean_params = @request.filtered_parameters.clone
10
+ clean_params.delete("action")
11
+ clean_params.delete("controller")
12
+
13
+ request_dump = clean_params.empty? ? 'None' : clean_params.inspect.gsub(',', ",\n")
14
+
15
+ def debug_hash(hash)
16
+ hash.sort_by { |k, v| k.to_s }.map { |k, v| "#{k}: #{v.inspect rescue $!.message}" }.join("\n")
17
+ end unless self.class.method_defined?(:debug_hash)
18
+ %>
19
+
20
+ <h2 style="margin-top: 30px">Request</h2>
21
+ <p><b>Parameters</b>: <pre><%=h request_dump %></pre></p>
22
+
23
+ <p><a href="#" onclick="document.getElementById('session_dump').style.display='block'; return false;">Show session dump</a></p>
24
+ <div id="session_dump" style="display:none"><pre><%= debug_hash @request.session %></pre></div>
25
+
26
+ <p><a href="#" onclick="document.getElementById('env_dump').style.display='block'; return false;">Show env dump</a></p>
27
+ <div id="env_dump" style="display:none"><pre><%= debug_hash @request.env.slice(*@request.class::ENV_METHODS) %></pre></div>
28
+
29
+
30
+ <h2 style="margin-top: 30px">Response</h2>
31
+ <p><b>Headers</b>: <pre><%=h defined?(@response) ? @response.headers.inspect.gsub(',', ",\n") : 'None' %></pre></p>
@@ -0,0 +1,26 @@
1
+ <%
2
+ traces = [
3
+ ["Application Trace", @application_trace],
4
+ ["Framework Trace", @framework_trace],
5
+ ["Full Trace", @full_trace]
6
+ ]
7
+ names = traces.collect {|name, trace| name}
8
+ %>
9
+
10
+ <p><code>Rails.root: <%= defined?(Rails) && Rails.respond_to?(:root) ? Rails.root : "unset" %></code></p>
11
+
12
+ <div id="traces">
13
+ <% names.each do |name| %>
14
+ <%
15
+ show = "document.getElementById('#{name.gsub(/\s/, '-')}').style.display='block';"
16
+ hide = (names - [name]).collect {|hide_name| "document.getElementById('#{hide_name.gsub(/\s/, '-')}').style.display='none';"}
17
+ %>
18
+ <a href="#" onclick="<%= hide.join %><%= show %>; return false;"><%= name %></a> <%= '|' unless names.last == name %>
19
+ <% end %>
20
+
21
+ <% traces.each do |name, trace| %>
22
+ <div id="<%= name.gsub(/\s/, '-') %>" style="display: <%= (name == "Application Trace") ? 'block' : 'none' %>;">
23
+ <pre><code><%= trace.map{|t|LinkifyErrors.linkify(t).html_safe}.join("<br/>").html_safe %></code></pre>
24
+ </div>
25
+ <% end %>
26
+ </div>
@@ -0,0 +1,10 @@
1
+ <h1>
2
+ <%=h @exception.class.to_s %>
3
+ <% if @request.parameters['controller'] %>
4
+ in <%=h @request.parameters['controller'].camelize %>Controller<% if @request.parameters['action'] %>#<%=h @request.parameters['action'] %><% end %>
5
+ <% end %>
6
+ </h1>
7
+ <pre><%=h @exception.message %></pre>
8
+
9
+ <%= render :template => "rescues/_trace" %>
10
+ <%= render :template => "rescues/_request_and_response" %>
@@ -0,0 +1,31 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="utf-8" />
5
+ <title>Action Controller: Exception caught</title>
6
+ <style>
7
+ body { background-color: #fff; color: #333; }
8
+
9
+ body, p, ol, ul, td {
10
+ font-family: helvetica, verdana, arial, sans-serif;
11
+ font-size: 13px;
12
+ line-height: 18px;
13
+ }
14
+
15
+ pre {
16
+ background-color: #eee;
17
+ padding: 10px;
18
+ font-size: 11px;
19
+ }
20
+
21
+ a { color: #000; }
22
+ a:visited { color: #666; }
23
+ a:hover { color: #fff; background-color:#000; }
24
+ </style>
25
+ </head>
26
+ <body>
27
+
28
+ <%= yield %>
29
+
30
+ </body>
31
+ </html>
@@ -0,0 +1,2 @@
1
+ <h1>Template is missing</h1>
2
+ <p><%=h @exception.message %></p>
@@ -0,0 +1,10 @@
1
+ <h1>Routing Error</h1>
2
+ <p><pre><%=h @exception.message %></pre></p>
3
+ <% unless @exception.failures.empty? %><p>
4
+ <h2>Failure reasons:</h2>
5
+ <ol>
6
+ <% @exception.failures.each do |route, reason| %>
7
+ <li><code><%=h route.inspect.gsub('\\', '') %></code> failed because <%=h reason.downcase %></li>
8
+ <% end %>
9
+ </ol>
10
+ </p><% end %>
@@ -0,0 +1,17 @@
1
+ <h1>
2
+ <%=h @exception.original_exception.class.to_s %> in
3
+ <%=h @request.parameters["controller"].capitalize if @request.parameters["controller"]%>#<%=h @request.parameters["action"] %>
4
+ </h1>
5
+
6
+ <p>
7
+ Showing <i><%=h @exception.file_name %></i> where line <b>#<%=h @exception.line_number %></b> raised:
8
+ <pre><code><%=h @exception.message %></code></pre>
9
+ </p>
10
+
11
+ <p>Extracted source (around line <b>#<%=h @exception.line_number %></b>):
12
+ <pre><code><%=h @exception.source_extract %></code></pre></p>
13
+
14
+ <p><%=h @exception.sub_template_message %></p>
15
+
16
+ <%= render :template => "rescues/_trace" %>
17
+ <%= render :template => "rescues/_request_and_response" %>
@@ -0,0 +1,2 @@
1
+ <h1>Unknown action</h1>
2
+ <p><%=h @exception.message %></p>
@@ -0,0 +1,21 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "linkify_errors/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "linkify_errors"
7
+ s.version = LinkifyErrors::VERSION
8
+ s.platform = Gem::Platform::RUBY
9
+ s.authors = ["Burke Libbey"]
10
+ s.email = ["burke@burkelibbey.org"]
11
+ s.homepage = ""
12
+ s.summary = %q{does things.}
13
+ s.description = %q{does things and stuff.}
14
+
15
+ s.add_dependency 'actionpack'
16
+
17
+ s.files = `git ls-files`.split("\n")
18
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
19
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
20
+ s.require_paths = ["lib"]
21
+ end
metadata ADDED
@@ -0,0 +1,80 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: linkify_errors
3
+ version: !ruby/object:Gem::Version
4
+ prerelease:
5
+ version: 0.0.1
6
+ platform: ruby
7
+ authors:
8
+ - Burke Libbey
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+
13
+ date: 2011-05-18 00:00:00 -05:00
14
+ default_executable:
15
+ dependencies:
16
+ - !ruby/object:Gem::Dependency
17
+ name: actionpack
18
+ prerelease: false
19
+ requirement: &id001 !ruby/object:Gem::Requirement
20
+ none: false
21
+ requirements:
22
+ - - ">="
23
+ - !ruby/object:Gem::Version
24
+ version: "0"
25
+ type: :runtime
26
+ version_requirements: *id001
27
+ description: does things and stuff.
28
+ email:
29
+ - burke@burkelibbey.org
30
+ executables: []
31
+
32
+ extensions: []
33
+
34
+ extra_rdoc_files: []
35
+
36
+ files:
37
+ - .gitignore
38
+ - Gemfile
39
+ - Rakefile
40
+ - lib/linkify_errors.rb
41
+ - lib/linkify_errors/version.rb
42
+ - lib/templates/rescues/_request_and_response.erb
43
+ - lib/templates/rescues/_trace.erb
44
+ - lib/templates/rescues/diagnostics.erb
45
+ - lib/templates/rescues/layout.erb
46
+ - lib/templates/rescues/missing_template.erb
47
+ - lib/templates/rescues/routing_error.erb
48
+ - lib/templates/rescues/template_error.erb
49
+ - lib/templates/rescues/unknown_action.erb
50
+ - linkify_errors.gemspec
51
+ has_rdoc: true
52
+ homepage: ""
53
+ licenses: []
54
+
55
+ post_install_message:
56
+ rdoc_options: []
57
+
58
+ require_paths:
59
+ - lib
60
+ required_ruby_version: !ruby/object:Gem::Requirement
61
+ none: false
62
+ requirements:
63
+ - - ">="
64
+ - !ruby/object:Gem::Version
65
+ version: "0"
66
+ required_rubygems_version: !ruby/object:Gem::Requirement
67
+ none: false
68
+ requirements:
69
+ - - ">="
70
+ - !ruby/object:Gem::Version
71
+ version: "0"
72
+ requirements: []
73
+
74
+ rubyforge_project:
75
+ rubygems_version: 1.6.2
76
+ signing_key:
77
+ specification_version: 3
78
+ summary: does things.
79
+ test_files: []
80
+