hoptoad-api 2.0.1 → 2.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,7 +1,6 @@
1
1
  h1. Hoptoad API
2
2
 
3
3
  An unofficial Ruby library for interacting with the "Hoptoad API":http://hoptoadapp.com/pages/api
4
- "Hoptoad-2 API":http://help.hoptoadapp.com/faqs/api-2/api-overview
5
4
 
6
5
  h2. Usage
7
6
 
@@ -29,3 +28,8 @@ h2. Requirements
29
28
  h2. Acknowledgements
30
29
 
31
30
  * "Hoptoad":http://hoptoadapp.com
31
+
32
+ h2. Contributors
33
+
34
+ Matias Käkelä (SSL Support)
35
+ Jordan Brough (Notices)
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{hoptoad-api}
8
- s.version = "2.0.1"
8
+ s.version = "2.1.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Steve Agalloco"]
12
- s.date = %q{2010-05-17}
12
+ s.date = %q{2010-05-26}
13
13
  s.description = %q{An unofficial gem for interacting with the Hoptoad API}
14
14
  s.email = %q{steve.agalloco@gmail.com}
15
15
  s.extra_rdoc_files = [
@@ -26,7 +26,10 @@ Gem::Specification.new do |s|
26
26
  "lib/hoptoad-api/version.rb",
27
27
  "test/fixtures/errors.xml",
28
28
  "test/fixtures/individual_error.xml",
29
+ "test/fixtures/individual_notice.xml",
30
+ "test/fixtures/notices.xml",
29
31
  "test/fixtures/paginated_errors.xml",
32
+ "test/fixtures/paginated_notices.xml",
30
33
  "test/test_helper.rb",
31
34
  "test/test_hoptoad-api.rb"
32
35
  ]
@@ -4,29 +4,29 @@ require 'httparty'
4
4
  module Hoptoad
5
5
  extend self
6
6
  attr_accessor :secure
7
-
7
+
8
8
  class HoptoadError < StandardError; end
9
-
9
+
10
10
  def account=(account)
11
11
  @account = account
12
12
  end
13
-
13
+
14
14
  def account
15
15
  "#{protocol}://#{@account}.hoptoadapp.com"
16
16
  end
17
-
17
+
18
18
  def auth_token=(token)
19
19
  @auth_token = token
20
20
  end
21
-
21
+
22
22
  def auth_token
23
23
  @auth_token
24
24
  end
25
-
25
+
26
26
  def protocol
27
27
  secure ? "https" : "http"
28
28
  end
29
-
29
+
30
30
  end
31
31
 
32
32
  require 'hoptoad-api/version'
@@ -1,4 +1,4 @@
1
- # Ruby lib for working with the Hoptoad API's XML interface.
1
+ # Ruby lib for working with the Hoptoad API's XML interface.
2
2
  # The first thing you need to set is the account name. This is the same
3
3
  # as the web address for your account.
4
4
  #
@@ -6,10 +6,14 @@
6
6
  #
7
7
  # Then, you should set the authentication token.
8
8
  #
9
- # Hoptoad.token = 'abcdefg'
9
+ # Hoptoad.auth_token = 'abcdefg'
10
10
  #
11
11
  # If no token or authentication info is given, a HoptoadError exception will be raised.
12
12
  #
13
+ # If your account uses ssl then turn it on:
14
+ #
15
+ # Hoptoad.secure = true
16
+ #
13
17
  # For more details, check out the hoptoad docs at http://hoptoadapp.com/pages/api.
14
18
  #
15
19
  # Find errors
@@ -22,25 +26,50 @@
22
26
  #
23
27
  # find individual error by ID
24
28
  # Hoptoad::Error.find(44)
29
+ #
30
+ # Find *all* notices by error_id
31
+ #
32
+ # notices = Hoptoad::Notice.all(1234) # 1234 == error id
33
+ #
34
+ # Find notice by id + error_id
35
+ #
36
+ # notice = Hoptoad::Notice.find(12345, 1234) # 12345 == notice id, 1234 == error id
25
37
 
26
38
  module Hoptoad
27
- class Error
39
+ class Base
28
40
  include HTTParty
29
41
  format :xml
30
-
31
- @@collection_path = '/errors.xml'
32
- @@individual_collection_path = '/errors/'
33
42
 
34
- def self.collection_path
35
- @@collection_path
36
- end
37
-
38
- def self.find(*args)
43
+ private
44
+
45
+ def self.setup
39
46
  base_uri Hoptoad.account
40
47
  default_params :auth_token => Hoptoad.auth_token
41
48
 
42
49
  check_configuration
50
+ end
43
51
 
52
+ def self.check_configuration
53
+ raise HoptoadError.new('API Token cannot be nil') if default_options.nil? || default_options[:default_params].nil? || !default_options[:default_params].has_key?(:auth_token)
54
+ raise HoptoadError.new('Account cannot be nil') unless default_options.has_key?(:base_uri)
55
+ end
56
+
57
+ def self.fetch(path, options)
58
+ response = get(path, { :query => options })
59
+ if response.code == 403
60
+ raise HoptoadError.new('SSL should be enabled - use Hoptoad.secure = true in configuration')
61
+ end
62
+
63
+ Hashie::Mash.new(response)
64
+ end
65
+
66
+ end
67
+
68
+ class Error < Base
69
+
70
+ def self.find(*args)
71
+ setup
72
+
44
73
  results = case args.first
45
74
  when Fixnum
46
75
  find_individual(args)
@@ -49,38 +78,100 @@ module Hoptoad
49
78
  else
50
79
  raise HoptoadError.new('Invalid argument')
51
80
  end
52
-
81
+
53
82
  raise HoptoadError.new('No results found.') if results.nil?
54
83
  raise HoptoadError.new(results.errors.error) if results.errors
55
84
 
56
85
  results.group || results.groups
57
86
  end
58
-
87
+
59
88
  def self.update(error, options)
60
- check_configuration
61
-
62
- self.class.put("#{@collection_path}", options)
89
+ setup
90
+
91
+ self.class.put(collection_path, options)
63
92
  end
64
-
93
+
65
94
  private
66
-
67
- def self.check_configuration
68
- raise HoptoadError.new('API Token cannot be nil') if default_options.nil? || default_options[:default_params].nil? || !default_options[:default_params].has_key?(:auth_token)
69
- raise HoptoadError.new('Account cannot be nil') unless default_options.has_key?(:base_uri)
70
- end
71
-
95
+
72
96
  def self.find_all(args)
73
97
  options = args.extract_options!
74
- Hashie::Mash.new(get("#{@@collection_path}", { :query => options }))
98
+
99
+ fetch(collection_path, options)
75
100
  end
76
-
101
+
77
102
  def self.find_individual(args)
78
103
  id = args.shift
79
104
  options = args.extract_options!
80
- hash = Hashie::Mash.new(response = get("#{@@individual_collection_path}#{id}.xml", { :query => options }))
81
- raise HoptoadError.new('SSL should be enabled - use Hoptoad.secure = true in configuration') if response.code == 403
82
- hash
105
+
106
+ fetch(error_path(id), options)
107
+ end
108
+
109
+ def self.collection_path
110
+ '/errors.xml'
111
+ end
112
+
113
+ def self.error_path(error_id)
114
+ "/errors/#{error_id}.xml"
115
+ end
116
+
117
+ end
118
+
119
+ class Notice < Base
120
+
121
+ def self.find(id, error_id, options={})
122
+ setup
123
+
124
+ hash = fetch(find_path(id, error_id), options)
125
+
126
+ if hash.errors
127
+ raise HoptoadError.new(results.errors.error)
128
+ end
129
+
130
+ hash.notice
131
+ end
132
+
133
+ def self.find_all_by_error_id(error_id)
134
+ setup
135
+
136
+ options = {}
137
+ notices = []
138
+ page = 1
139
+ while true
140
+ options[:page] = page
141
+ hash = fetch(all_path(error_id), options)
142
+ if hash.errors
143
+ raise HoptoadError.new(results.errors.error)
144
+ end
145
+ notice_stubs = hash.notices
146
+
147
+ notice_stubs.map do |notice|
148
+ notices << find(notice.id, error_id)
149
+ end
150
+ break if notice_stubs.size < 30
151
+ page += 1
152
+ end
153
+ notices
83
154
  end
84
155
 
156
+ def self.find_by_error_id(error_id, options={ 'page' => 1})
157
+ setup
158
+
159
+ hash = fetch(all_path(error_id), options)
160
+ if hash.errors
161
+ raise HoptoadError.new(results.errors.error)
162
+ end
163
+
164
+ hash.notices
165
+ end
166
+
167
+ private
168
+
169
+ def self.find_path(id, error_id)
170
+ "/errors/#{error_id}/notices/#{id}.xml"
171
+ end
172
+
173
+ def self.all_path(error_id)
174
+ "/errors/#{error_id}/notices.xml"
175
+ end
85
176
  end
86
- end
177
+ end
@@ -2,20 +2,4 @@ class Array
2
2
  def extract_options!
3
3
  last.is_a?(::Hash) ? pop : {}
4
4
  end
5
- end
6
-
7
- class Hash
8
-
9
- # Converts all of the keys to strings, optionally formatting key name
10
- def rubyify_keys!
11
- keys.each{|k|
12
- v = delete(k)
13
- new_key = k.to_s.underscore
14
- self[new_key] = v
15
- v.rubyify_keys! if v.is_a?(Hash)
16
- v.each{|p| p.rubyify_keys! if p.is_a?(Hash)} if v.is_a?(Array)
17
- }
18
- self
19
- end
20
-
21
5
  end
@@ -1,3 +1,3 @@
1
1
  module Hoptoad
2
- VERSION = '2.0.1'
2
+ VERSION = '2.1.0'
3
3
  end
@@ -0,0 +1,198 @@
1
+ HTTP/1.1 200 OK
2
+
3
+ <?xml version="1.0" encoding="UTF-8"?>
4
+ <notice>
5
+ <created-at type="datetime">2010-05-21T13:40:00Z</created-at>
6
+ <error-message>NoMethodError: undefined method `timezone_adjusted_traded_at' for nil:NilClass</error-message>
7
+ <group-id type="integer">1827573</group-id>
8
+ <id type="integer">294426853</id>
9
+ <project-id type="integer">248</project-id>
10
+ <updated-at type="datetime">2010-05-21T13:40:00Z</updated-at>
11
+ <environment>
12
+ <action-controller-rescue-request>#&lt;ActionController::Request:0x2ad2d6d0a588&gt;</action-controller-rescue-request>
13
+ <rack-session-record>#&lt;ActiveRecord::SessionStore::Session:0x2ad2d6cebed0&gt;</rack-session-record>
14
+ <server-name>_</server-name>
15
+ <http-from>googlebot(at)googlebot.com</http-from>
16
+ <rack-url-scheme>http</rack-url-scheme>
17
+ <passenger-app-spawner-idle-time>0</passenger-app-spawner-idle-time>
18
+ <http-user-agent>Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)</http-user-agent>
19
+ <rack-run-once>false</rack-run-once>
20
+ <path-info>/company/qek-la/trade_notes</path-info>
21
+ <http-te>chunked;q=1.0</http-te>
22
+ <rack-input>#&lt;Rack::RewindableInput:0x2ad2d6d0b9d8&gt;</rack-input>
23
+ <content-length>0</content-length>
24
+ <http-accept-encoding>gzip</http-accept-encoding>
25
+ <http-via>1.1 v1-akamaitech.net(ghost) (AkamaiGHost), 1.1 akamai.net(ghost) (AkamaiGHost)</http-via>
26
+ <http-cache-control>no-cache, max-age=0</http-cache-control>
27
+ <server-protocol>HTTP/1.0</server-protocol>
28
+ <action-controller-request-request-parameters></action-controller-request-request-parameters>
29
+ <server-addr>127.0.0.1</server-addr>
30
+ <http-host>community.tradeking.com</http-host>
31
+ <rack-errors>#&lt;IO:0x2ad2cc818ea8&gt;</rack-errors>
32
+ <script-name></script-name>
33
+ <remote-addr>127.0.0.1</remote-addr>
34
+ <server-software>nginx/0.6.35</server-software>
35
+ <passenger-spawn-method>smart-lv2</passenger-spawn-method>
36
+ <passenger-environment>production</passenger-environment>
37
+ <http-akamai-origin-hop>2</http-akamai-origin-hop>
38
+ <rack-request-query-hash></rack-request-query-hash>
39
+ <rack-multithread>false</rack-multithread>
40
+ <rack-version>10</rack-version>
41
+ <http-true-client-ip>66.249.65.108</http-true-client-ip>
42
+ <action_controller.request.path_parameters>
43
+ <action>index</action>
44
+ <controller>trade_notes</controller>
45
+ <company-id>qek-la</company-id>
46
+ </action_controller.request.path_parameters>
47
+ <rack-multiprocess>true</rack-multiprocess>
48
+ <http-x-akamai-config-log-detail>true</http-x-akamai-config-log-detail>
49
+ <request-uri>/company/qek-la/trade_notes</request-uri>
50
+ <document-root>/data/tradeking/current/public</document-root>
51
+ <server-port>81</server-port>
52
+ <scgi>1</scgi>
53
+ <passenger-app-type>rails</passenger-app-type>
54
+ <passenger-use-global-queue>true</passenger-use-global-queue>
55
+ <action-controller-rescue-response>#&lt;ActionController::Response:0x2ad2d6d0a178&gt;</action-controller-rescue-response>
56
+ <remote-port>51114</remote-port>
57
+ <http-pragma>no-cache</http-pragma>
58
+ <rack-request-query-string></rack-request-query-string>
59
+ <rack.session.options>
60
+ <domain></domain>
61
+ <id>bc65dcd014452ec479f77d43ce25fbe8</id>
62
+ <secure>false</secure>
63
+ <expire-after></expire-after>
64
+ <cookie-only>true</cookie-only>
65
+ <httponly>true</httponly>
66
+ <key>_tk_community_session</key>
67
+ <secret>270022c1d7400e0aba2f515d59d3bd56f18d036428c0a16a1292b6d4d1f0a90c67e5247f8e15d67abcc690fe94bac1793789cdef843a679231d7e43d104ad674</secret>
68
+ <path>/</path>
69
+ </rack.session.options>
70
+ <query-string></query-string>
71
+ <rack.session>
72
+ <sliding-session-expires-at>Fri May 21 08:39:58 -0700 2010</sliding-session-expires-at>
73
+ </rack.session>
74
+ <http-x-forwarded-for>66.249.65.108, 193.108.94.132, 199.3.115.196</http-x-forwarded-for>
75
+ <http-accept>*/*</http-accept>
76
+ <action-controller-request-query-parameters></action-controller-request-query-parameters>
77
+ <passenger-framework-spawner-idle-time>0</passenger-framework-spawner-idle-time>
78
+ <http-connection>close</http-connection>
79
+ <http-x-real-ip>199.3.115.196</http-x-real-ip>
80
+ <request-method>GET</request-method>
81
+ </environment>
82
+ <session>
83
+ <data>
84
+ <sliding-session-expires-at>Fri May 21 08:39:58 -0700 2010</sliding-session-expires-at>
85
+ </data>
86
+ </session>
87
+ <request>
88
+ <rails-root>/data/tradeking/releases/20100520043505</rails-root>
89
+ <url>http://community.tradeking.com/company/qek-la/trade_notes</url>
90
+ <params>
91
+ <action>index</action>
92
+ <controller>trade_notes</controller>
93
+ <company-id>qek-la</company-id>
94
+ </params>
95
+ </request>
96
+ <backtrace>
97
+ <line>/data/tradeking/releases/20100520043505/app/helpers/application_helper.rb:47:in `posted_time_ago'</line>
98
+ <line>/data/tradeking/releases/20100520043505/app/views/trade_notes/_in_list.html.erb:54:in `_run_erb_app47views47trade_notes47_in_list46html46erb_locals_in_list_object_trade_note'</line>
99
+ <line>/data/tradeking/releases/20100520043505/vendor/rails/actionpack/lib/action_view/renderable.rb:34:in `send'</line>
100
+ <line>/data/tradeking/releases/20100520043505/vendor/rails/actionpack/lib/action_view/renderable.rb:34:in `render_without_trace_View___path__Rendering'</line>
101
+ <line>/data/tradeking/releases/20100520043505/vendor/rails/actionpack/lib/action_view/base.rb:306:in `with_template'</line>
102
+ <line>/data/tradeking/releases/20100520043505/vendor/rails/actionpack/lib/action_view/renderable.rb:30:in `render_without_trace_View___path__Rendering'</line>
103
+ <line>/data/tradeking/releases/20100520043505/vendor/plugins/newrelic_rpm/lib/new_relic/agent/method_tracer.rb:161:in `render'</line>
104
+ <line>/data/tradeking/releases/20100520043505/vendor/plugins/newrelic_rpm/lib/new_relic/agent/method_tracer.rb:62:in `trace_method_execution_with_scope'</line>
105
+ <line>/data/tradeking/releases/20100520043505/vendor/plugins/newrelic_rpm/lib/new_relic/agent/method_tracer.rb:160:in `render'</line>
106
+ <line>/data/tradeking/releases/20100520043505/vendor/rails/actionpack/lib/action_view/renderable_partial.rb:20:in `render'</line>
107
+ <line>/data/tradeking/releases/20100520043505/vendor/rails/actionpack/lib/action_controller/benchmarking.rb:30:in `benchmark'</line>
108
+ <line>/data/tradeking/releases/20100520043505/vendor/rails/actionpack/lib/action_view/renderable_partial.rb:19:in `render'</line>
109
+ <line>/data/tradeking/releases/20100520043505/vendor/rails/actionpack/lib/action_view/template.rb:205:in `render_template'</line>
110
+ <line>/data/tradeking/releases/20100520043505/vendor/rails/actionpack/lib/action_view/renderable_partial.rb:44:in `render_partial_without_trace_View___path__Partial'</line>
111
+ <line>/data/tradeking/releases/20100520043505/vendor/plugins/newrelic_rpm/lib/new_relic/agent/method_tracer.rb:161:in `render_partial'</line>
112
+ <line>/data/tradeking/releases/20100520043505/vendor/plugins/newrelic_rpm/lib/new_relic/agent/method_tracer.rb:62:in `trace_method_execution_with_scope'</line>
113
+ <line>/data/tradeking/releases/20100520043505/vendor/plugins/newrelic_rpm/lib/new_relic/agent/method_tracer.rb:160:in `render_partial'</line>
114
+ <line>/data/tradeking/releases/20100520043505/vendor/rails/actionpack/lib/action_view/partials.rb:184:in `render_partial'</line>
115
+ <line>/data/tradeking/releases/20100520043505/vendor/rails/actionpack/lib/action_view/base.rb:267:in `render'</line>
116
+ <line>/data/tradeking/releases/20100520043505/app/views/trade_notes/_trade_notes.html.erb:3:in `_run_erb_app47views47trade_notes47_trade_notes46html46erb_locals_object_trade_notes'</line>
117
+ <line>/data/tradeking/releases/20100520043505/app/views/trade_notes/_trade_notes.html.erb:1:in `each'</line>
118
+ <line>/data/tradeking/releases/20100520043505/app/views/trade_notes/_trade_notes.html.erb:1:in `_run_erb_app47views47trade_notes47_trade_notes46html46erb_locals_object_trade_notes'</line>
119
+ <line>/data/tradeking/releases/20100520043505/vendor/rails/actionpack/lib/action_view/renderable.rb:34:in `send'</line>
120
+ <line>/data/tradeking/releases/20100520043505/vendor/rails/actionpack/lib/action_view/renderable.rb:34:in `render_without_trace_View___path__Rendering'</line>
121
+ <line>/data/tradeking/releases/20100520043505/vendor/rails/actionpack/lib/action_view/base.rb:306:in `with_template'</line>
122
+ <line>/data/tradeking/releases/20100520043505/vendor/rails/actionpack/lib/action_view/renderable.rb:30:in `render_without_trace_View___path__Rendering'</line>
123
+ <line>/data/tradeking/releases/20100520043505/vendor/plugins/newrelic_rpm/lib/new_relic/agent/method_tracer.rb:161:in `render'</line>
124
+ <line>/data/tradeking/releases/20100520043505/vendor/plugins/newrelic_rpm/lib/new_relic/agent/method_tracer.rb:62:in `trace_method_execution_with_scope'</line>
125
+ <line>/data/tradeking/releases/20100520043505/vendor/plugins/newrelic_rpm/lib/new_relic/agent/method_tracer.rb:160:in `render'</line>
126
+ <line>/data/tradeking/releases/20100520043505/vendor/rails/actionpack/lib/action_view/renderable_partial.rb:20:in `render'</line>
127
+ <line>/data/tradeking/releases/20100520043505/vendor/rails/actionpack/lib/action_controller/benchmarking.rb:30:in `benchmark'</line>
128
+ <line>/data/tradeking/releases/20100520043505/vendor/rails/actionpack/lib/action_view/renderable_partial.rb:19:in `render'</line>
129
+ <line>/data/tradeking/releases/20100520043505/vendor/rails/actionpack/lib/action_view/template.rb:205:in `render_template'</line>
130
+ <line>/data/tradeking/releases/20100520043505/vendor/rails/actionpack/lib/action_view/renderable_partial.rb:44:in `render_partial_without_trace_View___path__Partial'</line>
131
+ <line>/data/tradeking/releases/20100520043505/vendor/plugins/newrelic_rpm/lib/new_relic/agent/method_tracer.rb:161:in `render_partial'</line>
132
+ <line>/data/tradeking/releases/20100520043505/vendor/plugins/newrelic_rpm/lib/new_relic/agent/method_tracer.rb:62:in `trace_method_execution_with_scope'</line>
133
+ <line>/data/tradeking/releases/20100520043505/vendor/plugins/newrelic_rpm/lib/new_relic/agent/method_tracer.rb:160:in `render_partial'</line>
134
+ <line>/data/tradeking/releases/20100520043505/vendor/rails/actionpack/lib/action_view/partials.rb:184:in `render_partial'</line>
135
+ <line>/data/tradeking/releases/20100520043505/vendor/rails/actionpack/lib/action_view/base.rb:267:in `render'</line>
136
+ <line>/data/tradeking/releases/20100520043505/app/views/trade_notes/index.html.erb:32:in `_run_erb_app47views47trade_notes47index46html46erb'</line>
137
+ <line>/data/tradeking/releases/20100520043505/vendor/rails/actionpack/lib/action_view/renderable.rb:34:in `send'</line>
138
+ <line>/data/tradeking/releases/20100520043505/vendor/rails/actionpack/lib/action_view/renderable.rb:34:in `render_without_trace_View___path__Rendering'</line>
139
+ <line>/data/tradeking/releases/20100520043505/vendor/rails/actionpack/lib/action_view/base.rb:306:in `with_template'</line>
140
+ <line>/data/tradeking/releases/20100520043505/vendor/rails/actionpack/lib/action_view/renderable.rb:30:in `render_without_trace_View___path__Rendering'</line>
141
+ <line>/data/tradeking/releases/20100520043505/vendor/plugins/newrelic_rpm/lib/new_relic/agent/method_tracer.rb:161:in `render'</line>
142
+ <line>/data/tradeking/releases/20100520043505/vendor/plugins/newrelic_rpm/lib/new_relic/agent/method_tracer.rb:62:in `trace_method_execution_with_scope'</line>
143
+ <line>/data/tradeking/releases/20100520043505/vendor/plugins/newrelic_rpm/lib/new_relic/agent/method_tracer.rb:160:in `render'</line>
144
+ <line>/data/tradeking/releases/20100520043505/vendor/rails/actionpack/lib/action_view/template.rb:205:in `render_template'</line>
145
+ <line>/data/tradeking/releases/20100520043505/vendor/rails/actionpack/lib/action_view/base.rb:265:in `render'</line>
146
+ <line>/data/tradeking/releases/20100520043505/vendor/rails/actionpack/lib/action_view/base.rb:348:in `_render_with_layout'</line>
147
+ <line>/data/tradeking/releases/20100520043505/vendor/rails/actionpack/lib/action_view/base.rb:262:in `render'</line>
148
+ <line>/data/tradeking/releases/20100520043505/vendor/rails/actionpack/lib/action_controller/base.rb:1250:in `render_for_file'</line>
149
+ <line>/data/tradeking/releases/20100520043505/vendor/rails/actionpack/lib/action_controller/base.rb:945:in `render_without_benchmark'</line>
150
+ <line>/data/tradeking/releases/20100520043505/vendor/rails/actionpack/lib/action_controller/benchmarking.rb:51:in `render'</line>
151
+ <line>/data/tradeking/releases/20100520043505/vendor/rails/activesupport/lib/active_support/core_ext/benchmark.rb:17:in `ms'</line>
152
+ <line>/data/tradeking/releases/20100520043505/vendor/rails/activesupport/lib/active_support/core_ext/benchmark.rb:10:in `realtime'</line>
153
+ <line>/data/tradeking/releases/20100520043505/vendor/rails/activesupport/lib/active_support/core_ext/benchmark.rb:17:in `ms'</line>
154
+ <line>/data/tradeking/releases/20100520043505/vendor/rails/actionpack/lib/action_controller/benchmarking.rb:51:in `render'</line>
155
+ <line>/data/tradeking/releases/20100520043505/app/controllers/trade_notes_controller.rb:33:in `index'</line>
156
+ <line>/data/tradeking/releases/20100520043505/vendor/rails/actionpack/lib/action_controller/mime_responds.rb:135:in `call'</line>
157
+ <line>/data/tradeking/releases/20100520043505/vendor/rails/actionpack/lib/action_controller/mime_responds.rb:135:in `custom'</line>
158
+ <line>/data/tradeking/releases/20100520043505/vendor/rails/actionpack/lib/action_controller/mime_responds.rb:175:in `call'</line>
159
+ <line>/data/tradeking/releases/20100520043505/vendor/rails/actionpack/lib/action_controller/mime_responds.rb:175:in `respond'</line>
160
+ <line>/data/tradeking/releases/20100520043505/vendor/rails/actionpack/lib/action_controller/mime_responds.rb:173:in `each'</line>
161
+ <line>/data/tradeking/releases/20100520043505/vendor/rails/actionpack/lib/action_controller/mime_responds.rb:173:in `respond'</line>
162
+ <line>/data/tradeking/releases/20100520043505/vendor/rails/actionpack/lib/action_controller/mime_responds.rb:107:in `respond_to'</line>
163
+ <line>/data/tradeking/releases/20100520043505/app/controllers/trade_notes_controller.rb:32:in `index'</line>
164
+ <line>/data/tradeking/releases/20100520043505/vendor/rails/actionpack/lib/action_controller/base.rb:1331:in `send'</line>
165
+ <line>/data/tradeking/releases/20100520043505/vendor/rails/actionpack/lib/action_controller/base.rb:1331:in `perform_action_without_filters'</line>
166
+ <line>/data/tradeking/releases/20100520043505/vendor/rails/actionpack/lib/action_controller/filters.rb:617:in `call_filters'</line>
167
+ <line>/data/tradeking/releases/20100520043505/vendor/rails/actionpack/lib/action_controller/filters.rb:638:in `run_before_filters'</line>
168
+ <line>/data/tradeking/releases/20100520043505/vendor/rails/actionpack/lib/action_controller/filters.rb:189:in `call'</line>
169
+ <line>/data/tradeking/releases/20100520043505/vendor/rails/actionpack/lib/action_controller/filters.rb:189:in `call'</line>
170
+ <line>/data/tradeking/releases/20100520043505/vendor/rails/actionpack/lib/action_controller/filters.rb:635:in `run_before_filters'</line>
171
+ <line>/data/tradeking/releases/20100520043505/vendor/rails/actionpack/lib/action_controller/filters.rb:615:in `call_filters'</line>
172
+ <line>/data/tradeking/releases/20100520043505/vendor/rails/actionpack/lib/action_controller/filters.rb:610:in `perform_action_without_benchmark'</line>
173
+ <line>/data/tradeking/releases/20100520043505/vendor/rails/actionpack/lib/action_controller/benchmarking.rb:68:in `perform_action_without_rescue'</line>
174
+ <line>/data/tradeking/releases/20100520043505/vendor/rails/activesupport/lib/active_support/core_ext/benchmark.rb:17:in `ms'</line>
175
+ <line>/data/tradeking/releases/20100520043505/vendor/rails/activesupport/lib/active_support/core_ext/benchmark.rb:10:in `realtime'</line>
176
+ <line>/data/tradeking/releases/20100520043505/vendor/rails/activesupport/lib/active_support/core_ext/benchmark.rb:17:in `ms'</line>
177
+ <line>/data/tradeking/releases/20100520043505/vendor/rails/actionpack/lib/action_controller/benchmarking.rb:68:in `perform_action_without_rescue'</line>
178
+ <line>/data/tradeking/releases/20100520043505/vendor/rails/actionpack/lib/action_controller/rescue.rb:160:in `perform_action_without_flash'</line>
179
+ <line>/data/tradeking/releases/20100520043505/vendor/rails/actionpack/lib/action_controller/flash.rb:146:in `perform_action_without_newrelic_trace'</line>
180
+ <line>/data/tradeking/releases/20100520043505/vendor/plugins/newrelic_rpm/lib/new_relic/agent/instrumentation/controller_instrumentation.rb:138:in `perform_action'</line>
181
+ <line>/data/tradeking/releases/20100520043505/vendor/plugins/newrelic_rpm/lib/new_relic/agent/method_tracer.rb:62:in `trace_method_execution_with_scope'</line>
182
+ <line>/data/tradeking/releases/20100520043505/vendor/plugins/newrelic_rpm/lib/new_relic/agent/instrumentation/controller_instrumentation.rb:122:in `perform_action'</line>
183
+ <line>/data/tradeking/releases/20100520043505/vendor/plugins/newrelic_rpm/lib/new_relic/agent/method_tracer.rb:38:in `trace_method_execution_no_scope'</line>
184
+ <line>/data/tradeking/releases/20100520043505/vendor/plugins/newrelic_rpm/lib/new_relic/agent/instrumentation/controller_instrumentation.rb:117:in `perform_action'</line>
185
+ <line>/data/tradeking/releases/20100520043505/vendor/rails/actionpack/lib/action_controller/base.rb:532:in `send'</line>
186
+ <line>/data/tradeking/releases/20100520043505/vendor/rails/actionpack/lib/action_controller/base.rb:532:in `process_without_filters'</line>
187
+ <line>/data/tradeking/releases/20100520043505/vendor/rails/actionpack/lib/action_controller/filters.rb:606:in `process'</line>
188
+ <line>/data/tradeking/releases/20100520043505/vendor/rails/actionpack/lib/action_controller/base.rb:391:in `process'</line>
189
+ <line>/data/tradeking/releases/20100520043505/vendor/rails/actionpack/lib/action_controller/base.rb:386:in `call'</line>
190
+ <line>/data/tradeking/releases/20100520043505/vendor/rails/actionpack/lib/action_controller/routing/route_set.rb:437:in `call'</line>
191
+ <line>/data/tradeking/releases/20100520043505/vendor/rails/actionpack/lib/action_controller/dispatcher.rb:87:in `dispatch'</line>
192
+ <line>/data/tradeking/releases/20100520043505/vendor/rails/actionpack/lib/action_controller/dispatcher.rb:121:in `_call'</line>
193
+ <line>/data/tradeking/releases/20100520043505/vendor/rails/actionpack/lib/action_controller/dispatcher.rb:130:in `build_middleware_stack'</line>
194
+ <line>/data/tradeking/releases/20100520043505/vendor/rails/actionpack/lib/action_controller/string_coercion.rb:25:in `call'</line>
195
+ <line>/data/tradeking/releases/20100520043505/vendor/rails/actionpack/lib/action_controller/string_coercion.rb:25:in `call'</line>
196
+ <line>/data/tradeking/releases/20100520043505/vendor/gems/rack-1.0.1/lib/rack/head.rb:9:in `call'</line>
197
+ </backtrace>
198
+ </notice>
@@ -0,0 +1,245 @@
1
+ HTTP/1.1 200 OK
2
+
3
+ <?xml version="1.0" encoding="UTF-8"?>
4
+ <notices type="array">
5
+ <notice>
6
+ <created-at type="datetime">2010-05-25T01:30:58Z</created-at>
7
+ <error-message>NoMethodError: undefined method `oh_no_not_that' for nil:NilClass</error-message>
8
+ <group-id type="integer">1696170</group-id>
9
+ <id type="integer">1234</id>
10
+ <project-id type="integer">248</project-id>
11
+ <updated-at type="datetime">2010-05-25T01:30:58Z</updated-at>
12
+ </notice>
13
+ <notice>
14
+ <created-at type="datetime">2010-05-24T21:43:54Z</created-at>
15
+ <error-message>NoMethodError: undefined method `oh_no_not_that' for nil:NilClass</error-message>
16
+ <group-id type="integer">1696170</group-id>
17
+ <id type="integer">1234</id>
18
+ <project-id type="integer">248</project-id>
19
+ <updated-at type="datetime">2010-05-24T21:43:54Z</updated-at>
20
+ </notice>
21
+ <notice>
22
+ <created-at type="datetime">2010-05-24T15:29:01Z</created-at>
23
+ <error-message>NoMethodError: undefined method `oh_no_not_that' for nil:NilClass</error-message>
24
+ <group-id type="integer">1696170</group-id>
25
+ <id type="integer">1234</id>
26
+ <project-id type="integer">248</project-id>
27
+ <updated-at type="datetime">2010-05-24T15:29:01Z</updated-at>
28
+ </notice>
29
+ <notice>
30
+ <created-at type="datetime">2010-05-24T09:34:34Z</created-at>
31
+ <error-message>NoMethodError: undefined method `oh_no_not_that' for nil:NilClass</error-message>
32
+ <group-id type="integer">1696170</group-id>
33
+ <id type="integer">1234</id>
34
+ <project-id type="integer">248</project-id>
35
+ <updated-at type="datetime">2010-05-24T09:34:34Z</updated-at>
36
+ </notice>
37
+ <notice>
38
+ <created-at type="datetime">2010-05-24T03:48:08Z</created-at>
39
+ <error-message>NoMethodError: undefined method `oh_no_not_that' for nil:NilClass</error-message>
40
+ <group-id type="integer">1696170</group-id>
41
+ <id type="integer">1234</id>
42
+ <project-id type="integer">248</project-id>
43
+ <updated-at type="datetime">2010-05-24T03:48:08Z</updated-at>
44
+ </notice>
45
+ <notice>
46
+ <created-at type="datetime">2010-05-24T03:38:45Z</created-at>
47
+ <error-message>NoMethodError: undefined method `oh_no_not_that' for nil:NilClass</error-message>
48
+ <group-id type="integer">1696170</group-id>
49
+ <id type="integer">1234</id>
50
+ <project-id type="integer">248</project-id>
51
+ <updated-at type="datetime">2010-05-24T03:38:45Z</updated-at>
52
+ </notice>
53
+ <notice>
54
+ <created-at type="datetime">2010-05-24T03:34:05Z</created-at>
55
+ <error-message>NoMethodError: undefined method `oh_no_not_that' for nil:NilClass</error-message>
56
+ <group-id type="integer">1696170</group-id>
57
+ <id type="integer">1234</id>
58
+ <project-id type="integer">248</project-id>
59
+ <updated-at type="datetime">2010-05-24T03:34:05Z</updated-at>
60
+ </notice>
61
+ <notice>
62
+ <created-at type="datetime">2010-05-24T03:17:05Z</created-at>
63
+ <error-message>NoMethodError: undefined method `oh_no_not_that' for nil:NilClass</error-message>
64
+ <group-id type="integer">1696170</group-id>
65
+ <id type="integer">1234</id>
66
+ <project-id type="integer">248</project-id>
67
+ <updated-at type="datetime">2010-05-24T03:17:05Z</updated-at>
68
+ </notice>
69
+ <notice>
70
+ <created-at type="datetime">2010-05-23T23:11:54Z</created-at>
71
+ <error-message>NoMethodError: undefined method `oh_no_not_that' for nil:NilClass</error-message>
72
+ <group-id type="integer">1696170</group-id>
73
+ <id type="integer">1234</id>
74
+ <project-id type="integer">248</project-id>
75
+ <updated-at type="datetime">2010-05-23T23:11:54Z</updated-at>
76
+ </notice>
77
+ <notice>
78
+ <created-at type="datetime">2010-05-23T20:52:10Z</created-at>
79
+ <error-message>NoMethodError: undefined method `oh_no_not_that' for nil:NilClass</error-message>
80
+ <group-id type="integer">1696170</group-id>
81
+ <id type="integer">1234</id>
82
+ <project-id type="integer">248</project-id>
83
+ <updated-at type="datetime">2010-05-23T20:52:10Z</updated-at>
84
+ </notice>
85
+ <notice>
86
+ <created-at type="datetime">2010-05-23T20:49:07Z</created-at>
87
+ <error-message>NoMethodError: undefined method `oh_no_not_that' for nil:NilClass</error-message>
88
+ <group-id type="integer">1696170</group-id>
89
+ <id type="integer">1234</id>
90
+ <project-id type="integer">248</project-id>
91
+ <updated-at type="datetime">2010-05-23T20:49:07Z</updated-at>
92
+ </notice>
93
+ <notice>
94
+ <created-at type="datetime">2010-05-23T16:05:19Z</created-at>
95
+ <error-message>NoMethodError: undefined method `oh_no_not_that' for nil:NilClass</error-message>
96
+ <group-id type="integer">1696170</group-id>
97
+ <id type="integer">1234</id>
98
+ <project-id type="integer">248</project-id>
99
+ <updated-at type="datetime">2010-05-23T16:05:19Z</updated-at>
100
+ </notice>
101
+ <notice>
102
+ <created-at type="datetime">2010-05-23T11:43:20Z</created-at>
103
+ <error-message>NoMethodError: undefined method `oh_no_not_that' for nil:NilClass</error-message>
104
+ <group-id type="integer">1696170</group-id>
105
+ <id type="integer">1234</id>
106
+ <project-id type="integer">248</project-id>
107
+ <updated-at type="datetime">2010-05-23T11:43:20Z</updated-at>
108
+ </notice>
109
+ <notice>
110
+ <created-at type="datetime">2010-05-23T11:22:09Z</created-at>
111
+ <error-message>NoMethodError: undefined method `oh_no_not_that' for nil:NilClass</error-message>
112
+ <group-id type="integer">1696170</group-id>
113
+ <id type="integer">1234</id>
114
+ <project-id type="integer">248</project-id>
115
+ <updated-at type="datetime">2010-05-23T11:22:09Z</updated-at>
116
+ </notice>
117
+ <notice>
118
+ <created-at type="datetime">2010-05-22T19:29:40Z</created-at>
119
+ <error-message>NoMethodError: undefined method `oh_no_not_that' for nil:NilClass</error-message>
120
+ <group-id type="integer">1696170</group-id>
121
+ <id type="integer">1234</id>
122
+ <project-id type="integer">248</project-id>
123
+ <updated-at type="datetime">2010-05-22T19:29:40Z</updated-at>
124
+ </notice>
125
+ <notice>
126
+ <created-at type="datetime">2010-05-22T13:42:48Z</created-at>
127
+ <error-message>NoMethodError: undefined method `oh_no_not_that' for nil:NilClass</error-message>
128
+ <group-id type="integer">1696170</group-id>
129
+ <id type="integer">1234</id>
130
+ <project-id type="integer">248</project-id>
131
+ <updated-at type="datetime">2010-05-22T13:42:48Z</updated-at>
132
+ </notice>
133
+ <notice>
134
+ <created-at type="datetime">2010-05-22T08:09:35Z</created-at>
135
+ <error-message>NoMethodError: undefined method `oh_no_not_that' for nil:NilClass</error-message>
136
+ <group-id type="integer">1696170</group-id>
137
+ <id type="integer">1234</id>
138
+ <project-id type="integer">248</project-id>
139
+ <updated-at type="datetime">2010-05-22T08:09:35Z</updated-at>
140
+ </notice>
141
+ <notice>
142
+ <created-at type="datetime">2010-05-22T07:39:47Z</created-at>
143
+ <error-message>NoMethodError: undefined method `oh_no_not_that' for nil:NilClass</error-message>
144
+ <group-id type="integer">1696170</group-id>
145
+ <id type="integer">1234</id>
146
+ <project-id type="integer">248</project-id>
147
+ <updated-at type="datetime">2010-05-22T07:39:47Z</updated-at>
148
+ </notice>
149
+ <notice>
150
+ <created-at type="datetime">2010-05-22T07:35:33Z</created-at>
151
+ <error-message>NoMethodError: undefined method `oh_no_not_that' for nil:NilClass</error-message>
152
+ <group-id type="integer">1696170</group-id>
153
+ <id type="integer">1234</id>
154
+ <project-id type="integer">248</project-id>
155
+ <updated-at type="datetime">2010-05-22T07:35:33Z</updated-at>
156
+ </notice>
157
+ <notice>
158
+ <created-at type="datetime">2010-05-22T07:34:44Z</created-at>
159
+ <error-message>NoMethodError: undefined method `oh_no_not_that' for nil:NilClass</error-message>
160
+ <group-id type="integer">1696170</group-id>
161
+ <id type="integer">1234</id>
162
+ <project-id type="integer">248</project-id>
163
+ <updated-at type="datetime">2010-05-22T07:34:44Z</updated-at>
164
+ </notice>
165
+ <notice>
166
+ <created-at type="datetime">2010-05-22T00:59:38Z</created-at>
167
+ <error-message>NoMethodError: undefined method `oh_no_not_that' for nil:NilClass</error-message>
168
+ <group-id type="integer">1696170</group-id>
169
+ <id type="integer">1234</id>
170
+ <project-id type="integer">248</project-id>
171
+ <updated-at type="datetime">2010-05-22T00:59:38Z</updated-at>
172
+ </notice>
173
+ <notice>
174
+ <created-at type="datetime">2010-05-22T00:57:59Z</created-at>
175
+ <error-message>NoMethodError: undefined method `oh_no_not_that' for nil:NilClass</error-message>
176
+ <group-id type="integer">1696170</group-id>
177
+ <id type="integer">1234</id>
178
+ <project-id type="integer">248</project-id>
179
+ <updated-at type="datetime">2010-05-22T00:57:59Z</updated-at>
180
+ </notice>
181
+ <notice>
182
+ <created-at type="datetime">2010-05-22T00:53:13Z</created-at>
183
+ <error-message>NoMethodError: undefined method `oh_no_not_that' for nil:NilClass</error-message>
184
+ <group-id type="integer">1696170</group-id>
185
+ <id type="integer">1234</id>
186
+ <project-id type="integer">248</project-id>
187
+ <updated-at type="datetime">2010-05-22T00:53:13Z</updated-at>
188
+ </notice>
189
+ <notice>
190
+ <created-at type="datetime">2010-05-21T23:08:16Z</created-at>
191
+ <error-message>NoMethodError: undefined method `oh_no_not_that' for nil:NilClass</error-message>
192
+ <group-id type="integer">1696170</group-id>
193
+ <id type="integer">1234</id>
194
+ <project-id type="integer">248</project-id>
195
+ <updated-at type="datetime">2010-05-21T23:08:16Z</updated-at>
196
+ </notice>
197
+ <notice>
198
+ <created-at type="datetime">2010-05-21T18:44:37Z</created-at>
199
+ <error-message>NoMethodError: undefined method `oh_no_not_that' for nil:NilClass</error-message>
200
+ <group-id type="integer">1696170</group-id>
201
+ <id type="integer">1234</id>
202
+ <project-id type="integer">248</project-id>
203
+ <updated-at type="datetime">2010-05-21T18:44:37Z</updated-at>
204
+ </notice>
205
+ <notice>
206
+ <created-at type="datetime">2010-05-21T18:25:50Z</created-at>
207
+ <error-message>NoMethodError: undefined method `oh_no_not_that' for nil:NilClass</error-message>
208
+ <group-id type="integer">1696170</group-id>
209
+ <id type="integer">1234</id>
210
+ <project-id type="integer">248</project-id>
211
+ <updated-at type="datetime">2010-05-21T18:25:50Z</updated-at>
212
+ </notice>
213
+ <notice>
214
+ <created-at type="datetime">2010-05-21T18:24:28Z</created-at>
215
+ <error-message>NoMethodError: undefined method `oh_no_not_that' for nil:NilClass</error-message>
216
+ <group-id type="integer">1696170</group-id>
217
+ <id type="integer">1234</id>
218
+ <project-id type="integer">248</project-id>
219
+ <updated-at type="datetime">2010-05-21T18:24:28Z</updated-at>
220
+ </notice>
221
+ <notice>
222
+ <created-at type="datetime">2010-05-21T13:40:00Z</created-at>
223
+ <error-message>NoMethodError: undefined method `oh_no_not_that' for nil:NilClass</error-message>
224
+ <group-id type="integer">1696170</group-id>
225
+ <id type="integer">1234</id>
226
+ <project-id type="integer">248</project-id>
227
+ <updated-at type="datetime">2010-05-21T13:40:00Z</updated-at>
228
+ </notice>
229
+ <notice>
230
+ <created-at type="datetime">2010-05-21T11:07:18Z</created-at>
231
+ <error-message>NoMethodError: undefined method `oh_no_not_that' for nil:NilClass</error-message>
232
+ <group-id type="integer">1696170</group-id>
233
+ <id type="integer">1234</id>
234
+ <project-id type="integer">248</project-id>
235
+ <updated-at type="datetime">2010-05-21T11:07:18Z</updated-at>
236
+ </notice>
237
+ <notice>
238
+ <created-at type="datetime">2010-05-21T10:34:07Z</created-at>
239
+ <error-message>NoMethodError: undefined method `oh_no_not_that' for nil:NilClass</error-message>
240
+ <group-id type="integer">1696170</group-id>
241
+ <id type="integer">1234</id>
242
+ <project-id type="integer">248</project-id>
243
+ <updated-at type="datetime">2010-05-21T10:34:07Z</updated-at>
244
+ </notice>
245
+ </notices>
@@ -0,0 +1,101 @@
1
+ HTTP/1.1 200 OK
2
+
3
+ <?xml version="1.0" encoding="UTF-8"?>
4
+ <notices type="array">
5
+ <notice>
6
+ <created-at type="datetime">2010-05-21T10:31:41Z</created-at>
7
+ <error-message>NoMethodError: undefined method `oh_no_not_that' for nil:NilClass</error-message>
8
+ <group-id type="integer">1696170</group-id>
9
+ <id type="integer">1234</id>
10
+ <project-id type="integer">248</project-id>
11
+ <updated-at type="datetime">2010-05-21T10:31:41Z</updated-at>
12
+ </notice>
13
+ <notice>
14
+ <created-at type="datetime">2010-05-21T05:22:47Z</created-at>
15
+ <error-message>NoMethodError: undefined method `oh_no_not_that' for nil:NilClass</error-message>
16
+ <group-id type="integer">1696170</group-id>
17
+ <id type="integer">1234</id>
18
+ <project-id type="integer">248</project-id>
19
+ <updated-at type="datetime">2010-05-21T05:22:47Z</updated-at>
20
+ </notice>
21
+ <notice>
22
+ <created-at type="datetime">2010-05-20T23:54:26Z</created-at>
23
+ <error-message>NoMethodError: undefined method `oh_no_not_that' for nil:NilClass</error-message>
24
+ <group-id type="integer">1696170</group-id>
25
+ <id type="integer">1234</id>
26
+ <project-id type="integer">248</project-id>
27
+ <updated-at type="datetime">2010-05-20T23:54:26Z</updated-at>
28
+ </notice>
29
+ <notice>
30
+ <created-at type="datetime">2010-05-20T17:38:06Z</created-at>
31
+ <error-message>NoMethodError: undefined method `oh_no_not_that' for nil:NilClass</error-message>
32
+ <group-id type="integer">1696170</group-id>
33
+ <id type="integer">1234</id>
34
+ <project-id type="integer">248</project-id>
35
+ <updated-at type="datetime">2010-05-20T17:38:06Z</updated-at>
36
+ </notice>
37
+ <notice>
38
+ <created-at type="datetime">2010-05-20T11:08:22Z</created-at>
39
+ <error-message>NoMethodError: undefined method `oh_no_not_that' for nil:NilClass</error-message>
40
+ <group-id type="integer">1696170</group-id>
41
+ <id type="integer">1234</id>
42
+ <project-id type="integer">248</project-id>
43
+ <updated-at type="datetime">2010-05-20T11:08:22Z</updated-at>
44
+ </notice>
45
+ <notice>
46
+ <created-at type="datetime">2010-05-20T11:07:09Z</created-at>
47
+ <error-message>NoMethodError: undefined method `oh_no_not_that' for nil:NilClass</error-message>
48
+ <group-id type="integer">1696170</group-id>
49
+ <id type="integer">1234</id>
50
+ <project-id type="integer">248</project-id>
51
+ <updated-at type="datetime">2010-05-20T11:07:09Z</updated-at>
52
+ </notice>
53
+ <notice>
54
+ <created-at type="datetime">2010-05-20T11:05:02Z</created-at>
55
+ <error-message>NoMethodError: undefined method `oh_no_not_that' for nil:NilClass</error-message>
56
+ <group-id type="integer">1696170</group-id>
57
+ <id type="integer">1234</id>
58
+ <project-id type="integer">248</project-id>
59
+ <updated-at type="datetime">2010-05-20T11:05:02Z</updated-at>
60
+ </notice>
61
+ <notice>
62
+ <created-at type="datetime">2010-05-20T11:04:50Z</created-at>
63
+ <error-message>NoMethodError: undefined method `oh_no_not_that' for nil:NilClass</error-message>
64
+ <group-id type="integer">1696170</group-id>
65
+ <id type="integer">1234</id>
66
+ <project-id type="integer">248</project-id>
67
+ <updated-at type="datetime">2010-05-20T11:04:50Z</updated-at>
68
+ </notice>
69
+ <notice>
70
+ <created-at type="datetime">2010-05-20T07:45:50Z</created-at>
71
+ <error-message>NoMethodError: undefined method `oh_no_not_that' for nil:NilClass</error-message>
72
+ <group-id type="integer">1696170</group-id>
73
+ <id type="integer">1234</id>
74
+ <project-id type="integer">248</project-id>
75
+ <updated-at type="datetime">2010-05-20T07:45:50Z</updated-at>
76
+ </notice>
77
+ <notice>
78
+ <created-at type="datetime">2010-05-20T05:07:31Z</created-at>
79
+ <error-message>NoMethodError: undefined method `oh_no_not_that' for nil:NilClass</error-message>
80
+ <group-id type="integer">1696170</group-id>
81
+ <id type="integer">1234</id>
82
+ <project-id type="integer">248</project-id>
83
+ <updated-at type="datetime">2010-05-20T05:07:31Z</updated-at>
84
+ </notice>
85
+ <notice>
86
+ <created-at type="datetime">2010-05-20T04:43:33Z</created-at>
87
+ <error-message>NoMethodError: undefined method `oh_no_not_that' for nil:NilClass</error-message>
88
+ <group-id type="integer">1696170</group-id>
89
+ <id type="integer">1234</id>
90
+ <project-id type="integer">248</project-id>
91
+ <updated-at type="datetime">2010-05-20T04:43:33Z</updated-at>
92
+ </notice>
93
+ <notice>
94
+ <created-at type="datetime">2010-05-20T04:43:15Z</created-at>
95
+ <error-message>NoMethodError: undefined method `oh_no_not_that' for nil:NilClass</error-message>
96
+ <group-id type="integer">1696170</group-id>
97
+ <id type="integer">1234</id>
98
+ <project-id type="integer">248</project-id>
99
+ <updated-at type="datetime">2010-05-20T04:43:15Z</updated-at>
100
+ </notice>
101
+ </notices>
@@ -6,8 +6,20 @@ require 'fakeweb'
6
6
  require File.join(File.dirname(__FILE__), "..", "lib", "hoptoad-api")
7
7
 
8
8
  FakeWeb.allow_net_connect = false
9
+
10
+ # error responses
9
11
  FakeWeb.register_uri(:get, "http://myapp.hoptoadapp.com/errors.xml?auth_token=abcdefg123456", :response => File.join(File.dirname(__FILE__), 'fixtures', 'errors.xml'), :content_type => "application/xml; charset=utf-8", :status => ["200", "OK"])
10
12
  FakeWeb.register_uri(:get, "http://myapp.hoptoadapp.com/errors.xml?auth_token=abcdefg123456&page=2", :response => File.join(File.dirname(__FILE__), 'fixtures', 'paginated_errors.xml'), :content_type => "application/xml; charset=utf-8", :status => ["200", "OK"])
11
13
  FakeWeb.register_uri(:get, "http://myapp.hoptoadapp.com/errors/1696170.xml?auth_token=abcdefg123456", :response => File.join(File.dirname(__FILE__), 'fixtures', 'individual_error.xml'), :content_type => "application/xml; charset=utf-8", :status => ["200", "OK"])
14
+
15
+ # notice responses
16
+ FakeWeb.register_uri(:get, "http://myapp.hoptoadapp.com/errors/1696170/notices.xml?auth_token=abcdefg123456", :response => File.join(File.dirname(__FILE__), 'fixtures', 'notices.xml'), :content_type => "application/xml; charset=utf-8", :status => ["200", "OK"])
17
+ FakeWeb.register_uri(:get, "http://myapp.hoptoadapp.com/errors/1696170/notices.xml?auth_token=abcdefg123456&page=1", :response => File.join(File.dirname(__FILE__), 'fixtures', 'notices.xml'), :content_type => "application/xml; charset=utf-8", :status => ["200", "OK"])
18
+ FakeWeb.register_uri(:get, "http://myapp.hoptoadapp.com/errors/1696170/notices.xml?page=1&auth_token=abcdefg123456", :response => File.join(File.dirname(__FILE__), 'fixtures', 'notices.xml'), :content_type => "application/xml; charset=utf-8", :status => ["200", "OK"])
19
+ FakeWeb.register_uri(:get, "http://myapp.hoptoadapp.com/errors/1696170/notices.xml?auth_token=abcdefg123456&page=2", :response => File.join(File.dirname(__FILE__), 'fixtures', 'paginated_notices.xml'), :content_type => "application/xml; charset=utf-8", :status => ["200", "OK"])
20
+ FakeWeb.register_uri(:get, "http://myapp.hoptoadapp.com/errors/1696170/notices/1234.xml?auth_token=abcdefg123456", :response => File.join(File.dirname(__FILE__), 'fixtures', 'notices.xml'), :content_type => "application/xml; charset=utf-8", :status => ["200", "OK"])
21
+
22
+
23
+ # ssl responses
12
24
  FakeWeb.register_uri(:get, "http://sslapp.hoptoadapp.com/errors/1696170.xml?auth_token=abcdefg123456", :body => " ", :content_type => "application/xml; charset=utf-8", :status => ["403", "Forbidden"])
13
25
  FakeWeb.register_uri(:get, "https://sslapp.hoptoadapp.com/errors/1696170.xml?auth_token=abcdefg123456", :response => File.join(File.dirname(__FILE__), 'fixtures', 'individual_error.xml'), :content_type => "application/xml; charset=utf-8", :status => ["200", "OK"])
@@ -8,47 +8,76 @@ class HoptoadTest < Test::Unit::TestCase
8
8
  Hoptoad.auth_token = 'abcdefg123456'
9
9
  Hoptoad.secure = false
10
10
  end
11
-
11
+
12
12
  should "have correct collection path" do
13
13
  assert_equal "/errors.xml", Hoptoad::Error.collection_path
14
14
  end
15
-
16
- should "find a page of the 30 most recent errors" do
17
- errors = Hoptoad::Error.find(:all)
18
- ordered = errors.sort_by(&:most_recent_notice_at).reverse
19
- assert_equal ordered, errors
20
- assert_equal errors.size, 30
15
+
16
+ should "generate correct error path given an id" do
17
+ assert_equal "/errors/1234.xml", Hoptoad::Error.error_path(1234)
21
18
  end
19
+
20
+ context "when finding errors" do
22
21
 
23
- should "paginate errors" do
24
- errors = Hoptoad::Error.find(:all, :page => 2)
25
- ordered = errors.sort_by(&:most_recent_notice_at).reverse
26
- assert_equal ordered, errors
27
- assert_equal errors.size, 2
22
+ should "find a page of the 30 most recent errors" do
23
+ errors = Hoptoad::Error.find(:all)
24
+ ordered = errors.sort_by(&:most_recent_notice_at).reverse
25
+ assert_equal ordered, errors
26
+ assert_equal errors.size, 30
27
+ end
28
+
29
+ should "paginate errors" do
30
+ errors = Hoptoad::Error.find(:all, :page => 2)
31
+ ordered = errors.sort_by(&:most_recent_notice_at).reverse
32
+ assert_equal ordered, errors
33
+ assert_equal errors.size, 2
34
+ end
35
+
36
+ should "find an individual error" do
37
+ error = Hoptoad::Error.find(1696170)
38
+ assert_equal error.action, 'index'
39
+ assert_equal error.id, 1696170
40
+ end
41
+
28
42
  end
29
43
 
30
- should "find an individual error" do
31
- error = Hoptoad::Error.find(1696170)
32
- assert_equal error.action, 'index'
33
- assert_equal error.id, 1696170
44
+ context "when finding notices" do
45
+
46
+ should "find error notices" do
47
+ notices = Hoptoad::Notice.find_by_error_id(1696170)
48
+ assert_equal notices.size, 30
49
+ assert_equal notices.first.id, 1234
50
+ end
51
+
52
+ should "find all error notices" do
53
+ notices = Hoptoad::Notice.find_all_by_error_id(1696170)
54
+ assert_equal notices.size, 42
55
+ end
56
+
57
+ should "find individual notices" do
58
+ Hoptoad::Notice.find(1234, 1696170)
59
+ end
60
+
34
61
  end
35
62
 
36
- should "find an error if account is SSL enabled" do
37
- Hoptoad.secure = true
38
- Hoptoad.account = "sslapp"
39
- error = Hoptoad::Error.find(1696170)
40
- assert_equal error.id, 1696170
41
- end
42
-
43
- should "raise exception if trying to access SSL enabled account with unsecure connection" do
44
- Hoptoad.account = "sslapp"
45
- Hoptoad.secure = false
46
- assert_raise(Hoptoad::HoptoadError) do
63
+ context "when using SSL" do
64
+
65
+ should "find an error if account is SSL enabled" do
66
+ Hoptoad.secure = true
67
+ Hoptoad.account = "sslapp"
47
68
  error = Hoptoad::Error.find(1696170)
69
+ assert_equal error.id, 1696170
70
+ end
71
+
72
+ should "raise exception if trying to access SSL enabled account with unsecure connection" do
73
+ Hoptoad.account = "sslapp"
74
+ Hoptoad.secure = false
75
+ assert_raise(Hoptoad::HoptoadError) do
76
+ error = Hoptoad::Error.find(1696170)
77
+ end
48
78
  end
49
79
  end
50
80
 
51
81
  end
52
82
 
53
- end
54
-
83
+ end
metadata CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
4
4
  prerelease: false
5
5
  segments:
6
6
  - 2
7
- - 0
8
7
  - 1
9
- version: 2.0.1
8
+ - 0
9
+ version: 2.1.0
10
10
  platform: ruby
11
11
  authors:
12
12
  - Steve Agalloco
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2010-05-17 00:00:00 -04:00
17
+ date: 2010-05-26 00:00:00 -04:00
18
18
  default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
@@ -88,7 +88,10 @@ files:
88
88
  - lib/hoptoad-api/version.rb
89
89
  - test/fixtures/errors.xml
90
90
  - test/fixtures/individual_error.xml
91
+ - test/fixtures/individual_notice.xml
92
+ - test/fixtures/notices.xml
91
93
  - test/fixtures/paginated_errors.xml
94
+ - test/fixtures/paginated_notices.xml
92
95
  - test/test_helper.rb
93
96
  - test/test_hoptoad-api.rb
94
97
  has_rdoc: true