toadhopper 0.9 → 0.9.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. data/Gemfile +1 -0
  2. data/lib/toadhopper.rb +35 -34
  3. metadata +12 -2
data/Gemfile CHANGED
@@ -1,5 +1,6 @@
1
1
  only :release do
2
2
  gem 'haml', '~> 2.0'
3
+ gem 'nokogiri'
3
4
  end
4
5
 
5
6
  only :development do
data/lib/toadhopper.rb CHANGED
@@ -5,8 +5,8 @@ require 'nokogiri'
5
5
 
6
6
  # Posts errors to the Hoptoad API
7
7
  class ToadHopper
8
- VERSION = "0.9"
9
-
8
+ VERSION = "0.9.1"
9
+
10
10
  # Hoptoad API response
11
11
  class Response < Struct.new(:status, :body, :errors); end
12
12
 
@@ -27,44 +27,46 @@ class ToadHopper
27
27
  end
28
28
 
29
29
  # Posts an exception to hoptoad.
30
- # Toadhopper.new('apikey').post!(error, {:action => 'show', :controller => 'Users'})
31
- # The Following Keys are available as parameters to the document_options
32
- # url The url for the request, required to post but not useful in a console environment
33
- # component Normally this is your Controller name in an MVC framework
34
- # action Normally the action for your request in an MVC framework
35
- # request An object that response to #params and returns a hash
36
- # notifier_name Say you're a different notifier than ToadHopper
37
- # notifier_version Specify the version of your custom notifier
38
- # notifier_url Specify the project URL of your custom notifier
39
- # session A hash of the user session in a web request
40
- # framework_env The framework environment your app is running under
41
- # backtrace Normally not needed, parsed automatically from the provided exception parameter
42
- # environment You MUST scrub your environment if you plan to use this, please do not use it though. :)
43
- # project_root The root directory of your app
44
30
  #
45
- # @return Toadhopper::Response
46
- def post!(error, document_options={}, header_options={})
47
- post_document(document_for(error, document_options), header_options)
31
+ # @param [Exception] error the error to post
32
+ #
33
+ # @param [Hash] options
34
+ # @option options [String] url The url for the request, required to post but not useful in a console environment
35
+ # @option options [String] component Normally this is your Controller name in an MVC framework
36
+ # @option options [String] action Normally the action for your request in an MVC framework
37
+ # @option options [#params] request An object that response to #params and returns a hash
38
+ # @option options [String] notifier_name Say you're a different notifier than ToadHopper
39
+ # @option options [String] notifier_version Specify the version of your custom notifier
40
+ # @option options [String] notifier_url Specify the project URL of your custom notifier
41
+ # @option options [Hash] session A hash of the user session in a web request
42
+ # @option options [String] framework_env The framework environment your app is running under
43
+ # @option options [Array] backtrace Normally not needed, parsed automatically from the provided exception parameter
44
+ # @option options [Hash] environment You MUST scrub your environment if you plan to use this, please do not use it though. :)
45
+ # @option options [String] project_root The root directory of your app
46
+ #
47
+ # @param [Hash] http_headers extra HTTP headers to be sent in the post to the API
48
+ #
49
+ # @example
50
+ # Toadhopper.new('apikey').post! error,
51
+ # {:action => 'show', :controller => 'Users'},
52
+ # {'X-Hoptoad-Client-Name' => 'My Awesome Notifier'}
53
+ #
54
+ # @return [Response]
55
+ def post!(error, options={}, http_headers={})
56
+ options[:notifier_name] ||= 'ToadHopper'
57
+ post_document(document_for(error, options), {'X-Hoptoad-Client-Name' => options[:notifier_name]})
48
58
  end
49
59
 
50
- # Posts a v2 document error to Hoptoad
51
- # header_options can be passed in to indicate you're posting from a separate client
52
- # Toadhopper.new('API KEY').post_document(doc, 'X-Hoptoad-Client-Name' => 'MyCustomLib')
53
- #
54
60
  # @private
55
- def post_document(document, header_options={})
61
+ def post_document(document, headers={})
56
62
  uri = URI.parse("http://hoptoadapp.com:80/notifier_api/v2/notices")
57
-
58
63
  Net::HTTP.start(uri.host, uri.port) do |http|
59
- headers = {
60
- 'Content-type' => 'text/xml',
61
- 'Accept' => 'text/xml, application/xml',
62
- 'X-Hoptoad-Client-Name' => 'Toadhopper',
63
- }.merge(header_options)
64
64
  http.read_timeout = 5 # seconds
65
65
  http.open_timeout = 2 # seconds
66
66
  begin
67
- response = http.post(uri.path, document, headers)
67
+ response = http.post uri.path,
68
+ document,
69
+ {'Content-type' => 'text/xml', 'Accept' => 'text/xml, application/xml'}.merge(headers)
68
70
  Response.new response.code.to_i,
69
71
  response.body,
70
72
  Nokogiri::XML.parse(response.body).xpath('//errors/error').map {|e| e.content}
@@ -76,7 +78,7 @@ class ToadHopper
76
78
 
77
79
  # @private
78
80
  def document_for(exception, options={})
79
- locals = {
81
+ defaults = {
80
82
  :error => exception,
81
83
  :api_key => api_key,
82
84
  :environment => clean(ENV.to_hash),
@@ -85,7 +87,6 @@ class ToadHopper
85
87
  :component => 'http://localhost/',
86
88
  :action => nil,
87
89
  :request => nil,
88
- :notifier_name => 'ToadHopper',
89
90
  :notifier_version => VERSION,
90
91
  :notifier_url => 'http://github.com/toolmantim/toadhopper',
91
92
  :session => {},
@@ -93,7 +94,7 @@ class ToadHopper
93
94
  :project_root => Dir.pwd
94
95
  }.merge(options)
95
96
 
96
- Haml::Engine.new(notice_template).render(Object.new, locals)
97
+ Haml::Engine.new(notice_template).render(Object.new, defaults)
97
98
  end
98
99
 
99
100
  # @private
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.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tim Lucas
@@ -11,7 +11,7 @@ autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
13
 
14
- date: 2009-12-15 00:00:00 +11:00
14
+ date: 2009-12-15 00:00:00 -08:00
15
15
  default_executable:
16
16
  dependencies:
17
17
  - !ruby/object:Gem::Dependency
@@ -24,6 +24,16 @@ dependencies:
24
24
  - !ruby/object:Gem::Version
25
25
  version: "2.0"
26
26
  version:
27
+ - !ruby/object:Gem::Dependency
28
+ name: nokogiri
29
+ type: :runtime
30
+ version_requirement:
31
+ version_requirements: !ruby/object:Gem::Requirement
32
+ requirements:
33
+ - - ">="
34
+ - !ruby/object:Gem::Version
35
+ version: "0"
36
+ version:
27
37
  description:
28
38
  email: t.lucas@toolmantim.com
29
39
  executables: []