toadhopper 0.9.5 → 0.9.7
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 +0 -6
- data/Rakefile +2 -2
- data/lib/notice.erb +50 -0
- data/lib/toadhopper.rb +17 -15
- data/test/helper.rb +2 -2
- data/test/test_filters.rb +16 -5
- metadata +5 -24
- data/lib/notice.haml +0 -34
data/Gemfile
CHANGED
@@ -1,10 +1,5 @@
|
|
1
1
|
source :gemcutter
|
2
2
|
|
3
|
-
group :runtime do
|
4
|
-
gem 'haml', '~> 2.2.0'
|
5
|
-
gem 'nokogiri'
|
6
|
-
end
|
7
|
-
|
8
3
|
group :development do
|
9
4
|
gem 'yard'
|
10
5
|
gem 'jeweler'
|
@@ -12,7 +7,6 @@ end
|
|
12
7
|
|
13
8
|
group :test do
|
14
9
|
gem 'rake'
|
15
|
-
gem 'nokogiri'
|
16
10
|
gem 'test-unit', :require => 'test/unit'
|
17
11
|
gem 'ruby-debug'
|
18
12
|
end
|
data/Rakefile
CHANGED
data/lib/notice.erb
ADDED
@@ -0,0 +1,50 @@
|
|
1
|
+
<?xml version="1.0" encoding="utf-8" ?>
|
2
|
+
<notice version="2.0.18">
|
3
|
+
<api-key><%=h api_key %></api-key>
|
4
|
+
<notifier>
|
5
|
+
<name><%=h notifier_name %></name>
|
6
|
+
<version><%=h notifier_version %></version>
|
7
|
+
<url><%=h notifier_url %></url>
|
8
|
+
</notifier>
|
9
|
+
<error>
|
10
|
+
<class><%=h error.class.name %></class>
|
11
|
+
<message><%=h "#{error.class.name}: #{error.message}" %></message>
|
12
|
+
<backtrace>
|
13
|
+
<%- backtrace.each do |line| -%>
|
14
|
+
<line file="<%=h line.file %>" method="<%=h line.method %>" number="<%=h line.number %>" />
|
15
|
+
<%- end -%>
|
16
|
+
</backtrace>
|
17
|
+
</error>
|
18
|
+
<request>
|
19
|
+
<url><%=h url %></url>
|
20
|
+
<component><%=h component %></component>
|
21
|
+
<%- if action =~ /\S/ -%>
|
22
|
+
<action><%=h action %></action>
|
23
|
+
<%- end -%>
|
24
|
+
<%- if params && params.any? -%>
|
25
|
+
<params>
|
26
|
+
<%- params.each do |key, value| -%>
|
27
|
+
<var key="<%=h key %>"><%=h value %></var>
|
28
|
+
<%- end -%>
|
29
|
+
</params>
|
30
|
+
<%- end -%>
|
31
|
+
<%- if session && session.any? -%>
|
32
|
+
<session>
|
33
|
+
<%- session.each do |key, value| -%>
|
34
|
+
<var key="<%=h key %>"><%=h value %></var>
|
35
|
+
<%- end -%>
|
36
|
+
</session>
|
37
|
+
<%- end -%>
|
38
|
+
<%- if environment && environment.any? -%>
|
39
|
+
<cgi-data>
|
40
|
+
<%- environment.each do |key,value| -%>
|
41
|
+
<var key="<%=h key %>"><%=h value %></var>
|
42
|
+
<%- end -%>
|
43
|
+
</cgi-data>
|
44
|
+
<%- end -%>
|
45
|
+
</request>
|
46
|
+
<server-environment>
|
47
|
+
<project-root><%=h project_root %></project-root>
|
48
|
+
<environment-name><%=h framework_env %></environment-name>
|
49
|
+
</server-environment>
|
50
|
+
</notice>
|
data/lib/toadhopper.rb
CHANGED
@@ -1,11 +1,10 @@
|
|
1
1
|
require 'net/http'
|
2
|
-
require '
|
3
|
-
require '
|
4
|
-
require 'nokogiri'
|
2
|
+
require 'erb'
|
3
|
+
require 'ostruct'
|
5
4
|
|
6
5
|
# Posts errors to the Hoptoad API
|
7
6
|
class ToadHopper
|
8
|
-
VERSION = "0.9.
|
7
|
+
VERSION = "0.9.7"
|
9
8
|
|
10
9
|
# Hoptoad API response
|
11
10
|
class Response < Struct.new(:status, :body, :errors); end
|
@@ -34,7 +33,7 @@ class ToadHopper
|
|
34
33
|
# @option options [String] url The url for the request, required to post but not useful in a console environment
|
35
34
|
# @option options [String] component Normally this is your Controller name in an MVC framework
|
36
35
|
# @option options [String] action Normally the action for your request in an MVC framework
|
37
|
-
# @option options [
|
36
|
+
# @option options [Hash] params A hash of the request's parameters
|
38
37
|
# @option options [String] notifier_name Say you're a different notifier than ToadHopper
|
39
38
|
# @option options [String] notifier_version Specify the version of your custom notifier
|
40
39
|
# @option options [String] notifier_url Specify the project URL of your custom notifier
|
@@ -69,7 +68,7 @@ class ToadHopper
|
|
69
68
|
{'Content-type' => 'text/xml', 'Accept' => 'text/xml, application/xml'}.merge(headers)
|
70
69
|
Response.new response.code.to_i,
|
71
70
|
response.body,
|
72
|
-
|
71
|
+
response.body.scan(%r{<error>(.+)<\/error>}).flatten
|
73
72
|
rescue TimeoutError => e
|
74
73
|
Response.new(500, '', ['Timeout error'])
|
75
74
|
end
|
@@ -78,19 +77,22 @@ class ToadHopper
|
|
78
77
|
|
79
78
|
# @private
|
80
79
|
def document_for(exception, options={})
|
81
|
-
|
80
|
+
data = filtered_data(exception, options)
|
81
|
+
scope = OpenStruct.new(data).extend(ERB::Util)
|
82
|
+
ERB.new(notice_template, nil, '-').result(scope.send(:binding))
|
82
83
|
end
|
83
84
|
|
84
|
-
def filtered_data(
|
85
|
+
def filtered_data(error, options)
|
85
86
|
defaults = {
|
86
|
-
:error =>
|
87
|
+
:error => error,
|
87
88
|
:api_key => api_key,
|
88
89
|
:environment => ENV.to_hash,
|
89
|
-
:backtrace =>
|
90
|
+
:backtrace => error.backtrace.map {|l| backtrace_line(l)},
|
90
91
|
:url => 'http://localhost/',
|
91
92
|
:component => 'http://localhost/',
|
92
93
|
:action => nil,
|
93
94
|
:request => nil,
|
95
|
+
:params => nil,
|
94
96
|
:notifier_version => VERSION,
|
95
97
|
:notifier_url => 'http://github.com/toolmantim/toadhopper',
|
96
98
|
:session => {},
|
@@ -98,11 +100,11 @@ class ToadHopper
|
|
98
100
|
:project_root => Dir.pwd
|
99
101
|
}.merge(options)
|
100
102
|
|
101
|
-
#
|
102
|
-
[:
|
103
|
+
# Backwards compatibility
|
104
|
+
defaults[:params] ||= defaults[:request].params if defaults[:request]
|
103
105
|
|
104
|
-
# Filter params
|
105
|
-
|
106
|
+
# Filter params, session and environment
|
107
|
+
[:params, :session, :environment].each{|n| defaults[n] = clean(defaults[n]) if defaults[n] }
|
106
108
|
|
107
109
|
defaults
|
108
110
|
end
|
@@ -114,7 +116,7 @@ class ToadHopper
|
|
114
116
|
|
115
117
|
# @private
|
116
118
|
def notice_template
|
117
|
-
File.read(::File.join(::File.dirname(__FILE__), 'notice.
|
119
|
+
File.read(::File.join(::File.dirname(__FILE__), 'notice.erb'))
|
118
120
|
end
|
119
121
|
|
120
122
|
# @private
|
data/test/helper.rb
CHANGED
data/test/test_filters.rb
CHANGED
@@ -26,12 +26,23 @@ class ToadHopper::TestFilters < Test::Unit::TestCase
|
|
26
26
|
end
|
27
27
|
|
28
28
|
class ToadHopper::TestCleanedOptions < Test::Unit::TestCase
|
29
|
+
def setup
|
30
|
+
@request = Struct.new(:params).new
|
31
|
+
@request.params = {:password => "foo"}
|
32
|
+
def @request.params=(*); raise NoMethodError, "requests don't have #params=, you fool"; end
|
33
|
+
@error = begin; raise "Kaboom!"; rescue => e; e end
|
34
|
+
toadhopper.filters = "password"
|
35
|
+
end
|
36
|
+
|
37
|
+
def test_filtering_params_with_backwards_compatibility
|
38
|
+
filtered_data = toadhopper.filtered_data(@error, :request => @request)[:params]
|
39
|
+
|
40
|
+
assert_equal({:password => "[FILTERED]"}, filtered_data)
|
41
|
+
end
|
42
|
+
|
29
43
|
def test_filtering_params
|
30
|
-
|
31
|
-
request.params = {:password => "foo"}
|
32
|
-
error = begin; raise "Kaboom!"; rescue => e; e end
|
44
|
+
filtered_data = toadhopper.filtered_data(@error, :params => @request.params)[:params]
|
33
45
|
|
34
|
-
|
35
|
-
assert_equal({:password => "[FILTERED]"}, toadhopper.filtered_data(error, :request => request)[:request].params)
|
46
|
+
assert_equal({:password => "[FILTERED]"}, filtered_data)
|
36
47
|
end
|
37
48
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: toadhopper
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.9.
|
4
|
+
version: 0.9.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tim Lucas
|
@@ -12,29 +12,10 @@ autorequire:
|
|
12
12
|
bindir: bin
|
13
13
|
cert_chain: []
|
14
14
|
|
15
|
-
date: 2010-02-
|
15
|
+
date: 2010-02-23 00:00:00 +11:00
|
16
16
|
default_executable:
|
17
|
-
dependencies:
|
18
|
-
|
19
|
-
name: haml
|
20
|
-
type: :runtime
|
21
|
-
version_requirement:
|
22
|
-
version_requirements: !ruby/object:Gem::Requirement
|
23
|
-
requirements:
|
24
|
-
- - ~>
|
25
|
-
- !ruby/object:Gem::Version
|
26
|
-
version: 2.2.0
|
27
|
-
version:
|
28
|
-
- !ruby/object:Gem::Dependency
|
29
|
-
name: nokogiri
|
30
|
-
type: :runtime
|
31
|
-
version_requirement:
|
32
|
-
version_requirements: !ruby/object:Gem::Requirement
|
33
|
-
requirements:
|
34
|
-
- - ">="
|
35
|
-
- !ruby/object:Gem::Version
|
36
|
-
version: "0"
|
37
|
-
version:
|
17
|
+
dependencies: []
|
18
|
+
|
38
19
|
description:
|
39
20
|
email: t.lucas@toolmantim.com
|
40
21
|
executables: []
|
@@ -51,7 +32,7 @@ files:
|
|
51
32
|
- LICENSE
|
52
33
|
- README.md
|
53
34
|
- Rakefile
|
54
|
-
- lib/notice.
|
35
|
+
- lib/notice.erb
|
55
36
|
- lib/toadhopper.rb
|
56
37
|
- test/helper.rb
|
57
38
|
- test/test_filters.rb
|
data/lib/notice.haml
DELETED
@@ -1,34 +0,0 @@
|
|
1
|
-
!!!XML
|
2
|
-
%notice{:version => '2.0.18'}
|
3
|
-
%api-key= api_key
|
4
|
-
%notifier
|
5
|
-
%name= notifier_name
|
6
|
-
%version= notifier_version
|
7
|
-
%url= notifier_url
|
8
|
-
%error
|
9
|
-
%class= error.class.name
|
10
|
-
%message= "#{error.class.name}: #{error.message}"
|
11
|
-
%backtrace
|
12
|
-
- backtrace.each do |line|
|
13
|
-
%line{:method => line.method, :file => line.file, :number => line.number}/
|
14
|
-
%request
|
15
|
-
%url= url
|
16
|
-
%component= component
|
17
|
-
- if action && !action.blank?
|
18
|
-
%action= action
|
19
|
-
- if request && request.params.any?
|
20
|
-
%params
|
21
|
-
- request.params.each do |key,value|
|
22
|
-
%var{:key => key}= value
|
23
|
-
- if session && session.any?
|
24
|
-
%session
|
25
|
-
- session.each do |key,value|
|
26
|
-
%var{:key => key}= value
|
27
|
-
- if environment && environment.any?
|
28
|
-
%cgi-data
|
29
|
-
- environment.each do |key,value|
|
30
|
-
%var{:key => key}= value
|
31
|
-
|
32
|
-
%server-environment
|
33
|
-
%project-root= project_root
|
34
|
-
%environment-name= framework_env
|