wrest 1.0.0.beta2-universal-java-1.6

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 (101) hide show
  1. data/CHANGELOG +59 -0
  2. data/LICENCE +7 -0
  3. data/README.rdoc +127 -0
  4. data/bin/wrest +3 -0
  5. data/bin/wrest_shell.rb +21 -0
  6. data/lib/wrest.rb +101 -0
  7. data/lib/wrest.rbc +1900 -0
  8. data/lib/wrest/components.rb +20 -0
  9. data/lib/wrest/components.rbc +217 -0
  10. data/lib/wrest/components/container.rb +185 -0
  11. data/lib/wrest/components/container.rbc +2466 -0
  12. data/lib/wrest/components/container/alias_accessors.rb +66 -0
  13. data/lib/wrest/components/container/alias_accessors.rbc +905 -0
  14. data/lib/wrest/components/container/typecaster.rb +127 -0
  15. data/lib/wrest/components/container/typecaster.rbc +1985 -0
  16. data/lib/wrest/components/mutators.rb +39 -0
  17. data/lib/wrest/components/mutators.rbc +650 -0
  18. data/lib/wrest/components/mutators/base.rb +56 -0
  19. data/lib/wrest/components/mutators/base.rbc +702 -0
  20. data/lib/wrest/components/mutators/camel_to_snake_case.rb +22 -0
  21. data/lib/wrest/components/mutators/camel_to_snake_case.rbc +360 -0
  22. data/lib/wrest/components/mutators/xml_mini_type_caster.rb +43 -0
  23. data/lib/wrest/components/mutators/xml_mini_type_caster.rbc +679 -0
  24. data/lib/wrest/components/mutators/xml_simple_type_caster.rb +37 -0
  25. data/lib/wrest/components/mutators/xml_simple_type_caster.rbc +559 -0
  26. data/lib/wrest/components/translators.rb +28 -0
  27. data/lib/wrest/components/translators.rbc +517 -0
  28. data/lib/wrest/components/translators/content_types.rb +20 -0
  29. data/lib/wrest/components/translators/content_types.rbc +339 -0
  30. data/lib/wrest/components/translators/json.rb +25 -0
  31. data/lib/wrest/components/translators/json.rbc +462 -0
  32. data/lib/wrest/components/translators/xml.rb +24 -0
  33. data/lib/wrest/components/translators/xml.rbc +457 -0
  34. data/lib/wrest/core_ext/hash.rb +5 -0
  35. data/lib/wrest/core_ext/hash.rbc +182 -0
  36. data/lib/wrest/core_ext/hash/conversions.rb +44 -0
  37. data/lib/wrest/core_ext/hash/conversions.rbc +501 -0
  38. data/lib/wrest/core_ext/string.rb +5 -0
  39. data/lib/wrest/core_ext/string.rbc +182 -0
  40. data/lib/wrest/core_ext/string/conversions.rb +23 -0
  41. data/lib/wrest/core_ext/string/conversions.rbc +471 -0
  42. data/lib/wrest/curl.rb +49 -0
  43. data/lib/wrest/curl.rbc +704 -0
  44. data/lib/wrest/curl/delete.rb +23 -0
  45. data/lib/wrest/curl/get.rb +23 -0
  46. data/lib/wrest/curl/options.rb +16 -0
  47. data/lib/wrest/curl/post.rb +23 -0
  48. data/lib/wrest/curl/put.rb +23 -0
  49. data/lib/wrest/curl/request.rb +97 -0
  50. data/lib/wrest/curl/response.rb +71 -0
  51. data/lib/wrest/curl/session.rb +57 -0
  52. data/lib/wrest/exceptions.rb +33 -0
  53. data/lib/wrest/exceptions.rbc +312 -0
  54. data/lib/wrest/http_shared.rb +23 -0
  55. data/lib/wrest/http_shared.rbc +279 -0
  56. data/lib/wrest/http_shared/headers.rb +343 -0
  57. data/lib/wrest/http_shared/headers.rbc +353 -0
  58. data/lib/wrest/http_shared/standard_headers.rb +21 -0
  59. data/lib/wrest/http_shared/standard_headers.rbc +336 -0
  60. data/lib/wrest/http_shared/standard_tokens.rb +18 -0
  61. data/lib/wrest/http_shared/standard_tokens.rbc +316 -0
  62. data/lib/wrest/multipart.rb +52 -0
  63. data/lib/wrest/native.rb +33 -0
  64. data/lib/wrest/native.rbc +513 -0
  65. data/lib/wrest/native/connection_factory.rb +23 -0
  66. data/lib/wrest/native/connection_factory.rbc +445 -0
  67. data/lib/wrest/native/delete.rb +23 -0
  68. data/lib/wrest/native/delete.rbc +371 -0
  69. data/lib/wrest/native/get.rb +51 -0
  70. data/lib/wrest/native/get.rbc +855 -0
  71. data/lib/wrest/native/options.rb +23 -0
  72. data/lib/wrest/native/options.rbc +347 -0
  73. data/lib/wrest/native/post.rb +23 -0
  74. data/lib/wrest/native/post.rbc +388 -0
  75. data/lib/wrest/native/post_multipart.rb +32 -0
  76. data/lib/wrest/native/put.rb +23 -0
  77. data/lib/wrest/native/put.rbc +388 -0
  78. data/lib/wrest/native/put_multipart.rb +32 -0
  79. data/lib/wrest/native/redirection.rb +38 -0
  80. data/lib/wrest/native/redirection.rbc +520 -0
  81. data/lib/wrest/native/request.rb +94 -0
  82. data/lib/wrest/native/request.rbc +1675 -0
  83. data/lib/wrest/native/response.rb +120 -0
  84. data/lib/wrest/native/response.rbc +2150 -0
  85. data/lib/wrest/native/session.rb +57 -0
  86. data/lib/wrest/native/session.rbc +1372 -0
  87. data/lib/wrest/resource.rb +18 -0
  88. data/lib/wrest/resource.rbc +163 -0
  89. data/lib/wrest/resource/base.rb +99 -0
  90. data/lib/wrest/resource/base.rbc +2115 -0
  91. data/lib/wrest/resource/collection.rb +12 -0
  92. data/lib/wrest/resource/state.rb +6 -0
  93. data/lib/wrest/test.rb +1 -0
  94. data/lib/wrest/test/request_patches.rb +5 -0
  95. data/lib/wrest/uri.rb +160 -0
  96. data/lib/wrest/uri.rbc +2599 -0
  97. data/lib/wrest/uri_template.rb +49 -0
  98. data/lib/wrest/uri_template.rbc +505 -0
  99. data/lib/wrest/version.rb +23 -0
  100. data/lib/wrest/version.rbc +372 -0
  101. metadata +231 -0
@@ -0,0 +1,23 @@
1
+ # Copyright 2009 Sidu Ponnappa
2
+
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
6
+ # Unless required by applicable law or agreed to in writing, software distributed under the License
7
+ # is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
8
+ # See the License for the specific language governing permissions and limitations under the License.
9
+
10
+ module Wrest::Curl
11
+ class Delete < Request
12
+ def initialize(wrest_uri, parameters = {}, headers = {}, options = {})
13
+ super(
14
+ wrest_uri,
15
+ :delete,
16
+ parameters,
17
+ nil,
18
+ headers,
19
+ options
20
+ )
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,23 @@
1
+ # Copyright 2009 Sidu Ponnappa
2
+
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
6
+ # Unless required by applicable law or agreed to in writing, software distributed under the License
7
+ # is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
8
+ # See the License for the specific language governing permissions and limitations under the License.
9
+
10
+ module Wrest::Curl
11
+ class Get < Request
12
+ def initialize(wrest_uri, parameters = {}, headers = {}, options = {})
13
+ super(
14
+ wrest_uri,
15
+ :get,
16
+ parameters,
17
+ nil,
18
+ headers,
19
+ options
20
+ )
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,16 @@
1
+ # Copyright 2009 Sidu Ponnappa
2
+
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
6
+ # Unless required by applicable law or agreed to in writing, software distributed under the License
7
+ # is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
8
+ # See the License for the specific language governing permissions and limitations under the License.
9
+
10
+ module Wrest::Curl
11
+ class Options < Request
12
+ def initialize(*args)
13
+ raise Wrest::Exceptions::UnsupportedHttpVerb, 'Options'
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,23 @@
1
+ # Copyright 2009 Sidu Ponnappa
2
+
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
6
+ # Unless required by applicable law or agreed to in writing, software distributed under the License
7
+ # is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
8
+ # See the License for the specific language governing permissions and limitations under the License.
9
+
10
+ module Wrest::Curl
11
+ class Post < Request
12
+ def initialize(wrest_uri, body = '', headers = {}, parameters = {}, options = {})
13
+ super(
14
+ wrest_uri,
15
+ :post,
16
+ parameters,
17
+ body,
18
+ headers,
19
+ options
20
+ )
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,23 @@
1
+ # Copyright 2009 Sidu Ponnappa
2
+
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
6
+ # Unless required by applicable law or agreed to in writing, software distributed under the License
7
+ # is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
8
+ # See the License for the specific language governing permissions and limitations under the License.
9
+
10
+ module Wrest::Curl
11
+ class Put < Request
12
+ def initialize(wrest_uri, body = '', headers = {}, parameters = {}, options = {})
13
+ super(
14
+ wrest_uri,
15
+ :put,
16
+ parameters,
17
+ body,
18
+ headers,
19
+ options
20
+ )
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,97 @@
1
+ # Copyright 2009 Sidu Ponnappa
2
+
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
6
+ # Unless required by applicable law or agreed to in writing, software distributed under the License
7
+ # is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
8
+ # See the License for the specific language governing permissions and limitations under the License.
9
+
10
+ module Wrest
11
+ module Curl
12
+ # This represents a HTTP request. Typically you will never need to instantiate
13
+ # one of these yourself - you can use one of the more conveient APIs via Wrest::Uri
14
+ # or Wrest::Curl::Get etc. instead.
15
+ class Request
16
+ attr_reader :http_request, :uri, :body, :headers, :username, :password, :follow_redirects,
17
+ :follow_redirects_limit, :timeout, :connection, :parameters, :auth_type
18
+ # Valid tuples for the options are:
19
+ # :username => String, defaults to nil
20
+ # :password => String, defaults to nil
21
+ # :follow_redirects => Boolean, defaults to true for Get, false for anything else
22
+ # :follow_redirects_limit => Integer, defaults to 5. This is the number of redirects
23
+ # that Wrest will automatically follow before raising an
24
+ # Wrest::Exceptions::AutoRedirectLimitExceeded exception.
25
+ # For example, if you set this to 1, the very first redirect
26
+ # will raise the exception.
27
+ # :timeout => The period, in seconds, after which a Timeout::Error is raised
28
+ # in the event of a connection failing to open. Defaulted to 60 by Uri#create_connection.
29
+ # :connection => The HTTP Connection object to use. This is how a keep-alive connection can be
30
+ # used for multiple requests. Not yet fully implemented for Curl.
31
+ #
32
+ # Curl specific options:
33
+ # :auth_type => This is a curl specific option and can be one of :basic, :digest, or :any. The default is :basic.
34
+ def initialize(wrest_uri, http_verb, parameters = {}, body = nil, headers = {}, options = {})
35
+ @uri = wrest_uri
36
+ @headers = headers.stringify_keys
37
+ @parameters = parameters
38
+ @body = body
39
+
40
+ @options = options.clone
41
+ @auth_type = @options[:auth_type] || :basic
42
+ @username = @options[:username]
43
+ @password = @options[:password]
44
+ @follow_redirects = (@options[:follow_redirects] ||= false)
45
+
46
+ @follow_redirects_limit = (@options[:follow_redirects_limit] ||= 5)
47
+ @timeout = @options[:timeout] || 60
48
+ @connection = @options[:connection]
49
+
50
+ @http_request = Patron::Request.new
51
+ @http_request.action = http_verb
52
+ @http_request.upload_data = body
53
+ @http_request.headers = headers
54
+ @http_request.username = username
55
+ @http_request.password = password
56
+ @http_request.auth_type = auth_type
57
+ @http_request.url = parameters.empty? ? uri.to_s : "#{uri.to_s}?#{parameters.to_query}"
58
+ @http_request.max_redirects = follow_redirects_limit if follow_redirects
59
+ @http_request.timeout = @timeout
60
+ end
61
+
62
+ # Makes a request and returns a Wrest::Http::Response.
63
+ # Data about the request is and logged to Wrest.logger
64
+ # The log entry contains the following information:
65
+ #
66
+ # --> indicates a request
67
+ # <-- indicates a response
68
+ #
69
+ # The type of request is mentioned in caps, followed by a hash
70
+ # uniquely uniquely identifying a particular request/response pair.
71
+ # In a multi-process or multi-threaded scenario, this can be used
72
+ # to identify request-response pairs.
73
+ #
74
+ # The request hash is followed by a connection hash; requests using the
75
+ # same connection (effectively a keep-alive connection) will have the
76
+ # same connection hash.
77
+ #
78
+ # This is followed by the response code, the payload size and the time taken.
79
+ def invoke
80
+ response = nil
81
+
82
+ @connection ||= Patron::Session.new
83
+ raise ArgumentError, "Empty URL" if http_request.url.empty?
84
+
85
+ prefix = "#{http_request.action.to_s.upcase} #{http_request.hash} #{connection.hash}"
86
+
87
+ Wrest.logger.debug "--> (#{prefix}) #{http_request.url}"
88
+ time = Benchmark.realtime { response = Wrest::Curl::Response.new(connection.handle_request(http_request))}
89
+ Wrest.logger.debug "<-- (#{prefix}) %s (%d bytes %.2fs)" % [response.message, response.body ? response.body.length : 0, time]
90
+
91
+ response
92
+ rescue Patron::TimeoutError => e
93
+ raise Wrest::Exceptions::Timeout.new(e)
94
+ end
95
+ end
96
+ end
97
+ end
@@ -0,0 +1,71 @@
1
+ # Copyright 2009 Sidu Ponnappa
2
+
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at Http://www.apache.org/licenses/LICENSE-2.0
6
+ # Unless required by applicable law or agreed to in writing, software distributed under the License
7
+ # is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
8
+ # See the License for the specific language governing permissions and limitations under the License.
9
+
10
+ module Wrest #:nodoc:
11
+ module Curl #:nodoc:
12
+ # Decorates a response providing support for deserialisation.
13
+ class Response
14
+ attr_reader :http_response
15
+ include HttpShared::Headers
16
+
17
+ extend Forwardable
18
+ def_delegators :@http_response, :body, :headers
19
+
20
+ def initialize_http_header
21
+ headers.merge!(headers.inject({}) do |downcased_headers, tuple|
22
+ key, value = tuple
23
+ downcased_headers[key.downcase] = value
24
+ downcased_headers
25
+ end)
26
+ end
27
+
28
+ def initialize(http_response)
29
+ @http_response = http_response
30
+ initialize_http_header
31
+ end
32
+
33
+ def deserialise
34
+ deserialise_using(Wrest::Components::Translators.lookup(content_type))
35
+ end
36
+
37
+ def deserialise_using(translator)
38
+ translator.deserialise(@http_response)
39
+ end
40
+
41
+ def code
42
+ @http_response.status
43
+ end
44
+
45
+ def message
46
+ @http_response.status_line
47
+ end
48
+
49
+ def content_length
50
+ self[H::ContentLength].try(:to_i)
51
+ end
52
+
53
+ def content_type
54
+ self[H::ContentType].split(';').first
55
+ end
56
+
57
+ # A null object implementation - invoking this method on
58
+ # a response simply returns the same response unless
59
+ # the response is a Redirection (code 3xx), in which case a
60
+ # get is invoked on the url stored in the response headers
61
+ # under the key 'location' and the new Response is returned.
62
+ def follow(redirect_request_options = {})
63
+ self
64
+ end
65
+
66
+ def connection_closed?
67
+ self[StandardHeaders::Connection].downcase == StandardTokens::Close.downcase
68
+ end
69
+ end
70
+ end
71
+ end
@@ -0,0 +1,57 @@
1
+ # Copyright 2009 Sidu Ponnappa
2
+
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
6
+ # Unless required by applicable law or agreed to in writing, software distributed under the License
7
+ # is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
8
+ # See the License for the specific language governing permissions and limitations under the License.
9
+
10
+ module Wrest::Native
11
+ # This class is a wrapper for a keep-alive HTTP connection. It simply passes the
12
+ # same connection instance as an option to all Wrest::Http::Request instances created using it.
13
+ #
14
+ # If at any point the server closes an existing connection during a Session by returning a
15
+ # Connection: Close header the current connection is destroyed and a fresh one created for the next
16
+ # request.
17
+ #
18
+ # The Session constructor can accept either a String URI or a Wrest::Uri as a parameter. If you
19
+ # need HTTP authentication, you should use a Wrest::Uri.
20
+ class Session
21
+ attr_reader :uri
22
+ def initialize(uri)
23
+ @uri = uri.is_a?(String) ? uri.to_uri : uri
24
+ @default_headers = { StandardHeaders::Connection => StandardTokens::KeepAlive }
25
+
26
+ yield(self) if block_given?
27
+ end
28
+
29
+ def connection
30
+ @connection ||= @uri.create_connection
31
+ end
32
+
33
+ def get(path = '', parameters = {}, headers = {})
34
+ maybe_destroy_connection @uri[path, {:connection => self.connection}].get(parameters, headers.merge(@default_headers))
35
+ end
36
+
37
+ def post(path = '', body = '', headers = {}, params = {})
38
+ maybe_destroy_connection @uri[path, {:connection => self.connection}].post(body, headers.merge(@default_headers), params)
39
+ end
40
+
41
+ def put(path = '', body = '', headers = {}, params = {})
42
+ maybe_destroy_connection @uri[path, {:connection => self.connection}].put(body, headers.merge(@default_headers), params)
43
+ end
44
+
45
+ def delete(path = '', parameters = {}, headers = {})
46
+ maybe_destroy_connection @uri[path, {:connection => self.connection}].delete(parameters, headers.merge(@default_headers))
47
+ end
48
+
49
+ def maybe_destroy_connection(response)
50
+ if response.connection_closed?
51
+ Wrest.logger.warn "Connection #{@connection.hash} has been closed by the server"
52
+ @connection = nil
53
+ end
54
+ response
55
+ end
56
+ end
57
+ end
@@ -0,0 +1,33 @@
1
+ module Wrest
2
+ module Exceptions #:nodoc:
3
+ # Raised when a base method that should be overriden
4
+ # is invoked on a subclass that has not implemented it.
5
+ class MethodNotOverridden < StandardError
6
+ end
7
+
8
+ # Raised when a translator for an unregisterd response content type
9
+ # is requested. See Translators.
10
+ class UnsupportedContentType < StandardError
11
+ end
12
+
13
+ # Raised when a request auto redirects more times than are allowed
14
+ # by its follow_redirects_limit. See Wrest::Http::Redirection.
15
+ class AutoRedirectLimitExceeded < StandardError
16
+ end
17
+
18
+ # Raised when a request is made when either RAILS_ENV or
19
+ # ENV['RAILS_ENV'] is set to 'test', which is the case when
20
+ # running tests/specs in a Rails application.
21
+ #
22
+ # See wrest/test/request_patches.
23
+ class RealRequestMadeInTestEnvironmet < StandardError
24
+ end
25
+
26
+ # Raised when a request times out
27
+ class Timeout < StandardError
28
+ end
29
+
30
+ class UnsupportedHttpVerb < StandardError
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,312 @@
1
+ !RBIX
2
+ 0
3
+ x
4
+ M
5
+ 1
6
+ n
7
+ n
8
+ x
9
+ 10
10
+ __script__
11
+ i
12
+ 28
13
+ 99
14
+ 7
15
+ 0
16
+ 65
17
+ 49
18
+ 1
19
+ 2
20
+ 13
21
+ 99
22
+ 12
23
+ 7
24
+ 2
25
+ 12
26
+ 7
27
+ 3
28
+ 12
29
+ 65
30
+ 12
31
+ 49
32
+ 4
33
+ 4
34
+ 15
35
+ 49
36
+ 2
37
+ 0
38
+ 15
39
+ 2
40
+ 11
41
+ I
42
+ 6
43
+ I
44
+ 0
45
+ I
46
+ 0
47
+ I
48
+ 0
49
+ n
50
+ p
51
+ 5
52
+ x
53
+ 5
54
+ Wrest
55
+ x
56
+ 11
57
+ open_module
58
+ x
59
+ 15
60
+ __module_init__
61
+ M
62
+ 1
63
+ n
64
+ n
65
+ x
66
+ 5
67
+ Wrest
68
+ i
69
+ 28
70
+ 5
71
+ 66
72
+ 99
73
+ 7
74
+ 0
75
+ 65
76
+ 49
77
+ 1
78
+ 2
79
+ 13
80
+ 99
81
+ 12
82
+ 7
83
+ 2
84
+ 12
85
+ 7
86
+ 3
87
+ 12
88
+ 65
89
+ 12
90
+ 49
91
+ 4
92
+ 4
93
+ 15
94
+ 49
95
+ 2
96
+ 0
97
+ 11
98
+ I
99
+ 6
100
+ I
101
+ 0
102
+ I
103
+ 0
104
+ I
105
+ 0
106
+ n
107
+ p
108
+ 5
109
+ x
110
+ 10
111
+ Exceptions
112
+ x
113
+ 11
114
+ open_module
115
+ x
116
+ 15
117
+ __module_init__
118
+ M
119
+ 1
120
+ n
121
+ n
122
+ x
123
+ 10
124
+ Exceptions
125
+ i
126
+ 80
127
+ 5
128
+ 66
129
+ 99
130
+ 7
131
+ 0
132
+ 45
133
+ 1
134
+ 2
135
+ 65
136
+ 49
137
+ 3
138
+ 3
139
+ 15
140
+ 1
141
+ 15
142
+ 99
143
+ 7
144
+ 4
145
+ 45
146
+ 1
147
+ 5
148
+ 65
149
+ 49
150
+ 3
151
+ 3
152
+ 15
153
+ 1
154
+ 15
155
+ 99
156
+ 7
157
+ 6
158
+ 45
159
+ 1
160
+ 7
161
+ 65
162
+ 49
163
+ 3
164
+ 3
165
+ 15
166
+ 1
167
+ 15
168
+ 99
169
+ 7
170
+ 8
171
+ 45
172
+ 1
173
+ 9
174
+ 65
175
+ 49
176
+ 3
177
+ 3
178
+ 15
179
+ 1
180
+ 15
181
+ 99
182
+ 7
183
+ 10
184
+ 45
185
+ 1
186
+ 11
187
+ 65
188
+ 49
189
+ 3
190
+ 3
191
+ 15
192
+ 1
193
+ 15
194
+ 99
195
+ 7
196
+ 12
197
+ 45
198
+ 1
199
+ 13
200
+ 65
201
+ 49
202
+ 3
203
+ 3
204
+ 15
205
+ 1
206
+ 11
207
+ I
208
+ 4
209
+ I
210
+ 0
211
+ I
212
+ 0
213
+ I
214
+ 0
215
+ n
216
+ p
217
+ 14
218
+ x
219
+ 19
220
+ MethodNotOverridden
221
+ x
222
+ 13
223
+ StandardError
224
+ n
225
+ x
226
+ 10
227
+ open_class
228
+ x
229
+ 22
230
+ UnsupportedContentType
231
+ n
232
+ x
233
+ 25
234
+ AutoRedirectLimitExceeded
235
+ n
236
+ x
237
+ 31
238
+ RealRequestMadeInTestEnvironmet
239
+ n
240
+ x
241
+ 7
242
+ Timeout
243
+ n
244
+ x
245
+ 19
246
+ UnsupportedHttpVerb
247
+ n
248
+ p
249
+ 13
250
+ I
251
+ 2
252
+ I
253
+ 5
254
+ I
255
+ f
256
+ I
257
+ a
258
+ I
259
+ 1c
260
+ I
261
+ f
262
+ I
263
+ 29
264
+ I
265
+ 17
266
+ I
267
+ 36
268
+ I
269
+ 1b
270
+ I
271
+ 43
272
+ I
273
+ 1e
274
+ I
275
+ 50
276
+ x
277
+ 46
278
+ /Users/sidu/Work/wrest/lib/wrest/exceptions.rb
279
+ p
280
+ 0
281
+ x
282
+ 13
283
+ attach_method
284
+ p
285
+ 3
286
+ I
287
+ 2
288
+ I
289
+ 2
290
+ I
291
+ 1c
292
+ x
293
+ 46
294
+ /Users/sidu/Work/wrest/lib/wrest/exceptions.rb
295
+ p
296
+ 0
297
+ x
298
+ 13
299
+ attach_method
300
+ p
301
+ 3
302
+ I
303
+ 0
304
+ I
305
+ 1
306
+ I
307
+ 1c
308
+ x
309
+ 46
310
+ /Users/sidu/Work/wrest/lib/wrest/exceptions.rb
311
+ p
312
+ 0