activeresource 2.3.0 → 2.3.2

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of activeresource might be problematic. Click here for more details.

data/CHANGELOG CHANGED
@@ -1,6 +1,6 @@
1
- *2.3.0 [RC1] (February 1st, 2009)*
1
+ *2.3.2 [Final] (March 15, 2009)*
2
2
 
3
- * Nothing new, just included in 2.3.0
3
+ * Nothing new, just included in 2.3.2
4
4
 
5
5
 
6
6
  *2.2.1 [RC2] (November 14th, 2008)*
data/Rakefile CHANGED
@@ -28,6 +28,8 @@ task :default => [ :test ]
28
28
  # Run the unit tests
29
29
 
30
30
  Rake::TestTask.new { |t|
31
+ activesupport_path = "#{File.dirname(__FILE__)}/../activesupport/lib"
32
+ t.libs << activesupport_path if File.directory?(activesupport_path)
31
33
  t.libs << "test"
32
34
  t.pattern = 'test/**/*_test.rb'
33
35
  t.verbose = true
@@ -65,7 +67,7 @@ spec = Gem::Specification.new do |s|
65
67
  s.files = s.files + Dir.glob( "#{dir}/**/*" ).delete_if { |item| item.include?( "\.svn" ) }
66
68
  end
67
69
 
68
- s.add_dependency('activesupport', '= 2.3.0' + PKG_BUILD)
70
+ s.add_dependency('activesupport', '= 2.3.2' + PKG_BUILD)
69
71
 
70
72
  s.require_path = 'lib'
71
73
  s.autorequire = 'active_resource'
@@ -462,7 +462,7 @@ module ActiveResource
462
462
  # that_guy.valid? # => false
463
463
  # that_guy.new? # => true
464
464
  def create(attributes = {})
465
- returning(self.new(attributes)) { |res| res.save }
465
+ self.new(attributes).tap { |resource| resource.save }
466
466
  end
467
467
 
468
468
  # Core method for finding resources. Used similarly to Active Record's +find+ method.
@@ -600,7 +600,7 @@ module ActiveResource
600
600
  end
601
601
 
602
602
  def instantiate_record(record, prefix_options = {})
603
- returning new(record) do |resource|
603
+ new(record).tap do |resource|
604
604
  resource.prefix_options = prefix_options
605
605
  end
606
606
  end
@@ -747,7 +747,7 @@ module ActiveResource
747
747
  #
748
748
  def ==(other)
749
749
  other.equal?(self) || (other.instance_of?(self.class) && other.id == id && other.prefix_options == prefix_options)
750
- end
750
+ end
751
751
 
752
752
  # Tests for equality (delegates to ==).
753
753
  def eql?(other)
@@ -773,7 +773,7 @@ module ActiveResource
773
773
  # my_invoice.customer # => That Company
774
774
  # next_invoice.customer # => That Company
775
775
  def dup
776
- returning self.class.new do |resource|
776
+ self.class.new.tap do |resource|
777
777
  resource.attributes = @attributes
778
778
  resource.prefix_options = @prefix_options
779
779
  end
@@ -985,14 +985,14 @@ module ActiveResource
985
985
 
986
986
  # Update the resource on the remote service.
987
987
  def update
988
- returning connection.put(element_path(prefix_options), encode, self.class.headers) do |response|
988
+ connection.put(element_path(prefix_options), encode, self.class.headers).tap do |response|
989
989
  load_attributes_from_response(response)
990
990
  end
991
991
  end
992
992
 
993
993
  # Create (i.e., \save to the remote service) the \new resource.
994
994
  def create
995
- returning connection.post(collection_path, encode, self.class.headers) do |response|
995
+ connection.post(collection_path, encode, self.class.headers).tap do |response|
996
996
  self.id = id_from_response(response)
997
997
  load_attributes_from_response(response)
998
998
  end
@@ -59,7 +59,7 @@ module ActiveResource
59
59
  # end
60
60
  module_eval <<-EOE, __FILE__, __LINE__
61
61
  def #{method}(path, request_headers = {}, body = nil, status = 200, response_headers = {})
62
- @responses[Request.new(:#{method}, path, nil, request_headers)] = Response.new(body || "", status, response_headers)
62
+ @responses << [Request.new(:#{method}, path, nil, request_headers), Response.new(body || "", status, response_headers)]
63
63
  end
64
64
  EOE
65
65
  end
@@ -91,21 +91,17 @@ module ActiveResource
91
91
  @@requests ||= []
92
92
  end
93
93
 
94
- # Returns a hash of <tt>request => response</tt> pairs for all all responses this mock has delivered, where +request+
95
- # is an instance of ActiveResource::Request and the response is, naturally, an instance of
96
- # ActiveResource::Response.
94
+ # Returns the list of requests and their mocked responses. Look up a
95
+ # response for a request using responses.assoc(request).
97
96
  def responses
98
- @@responses ||= {}
97
+ @@responses ||= []
99
98
  end
100
99
 
101
100
  # Accepts a block which declares a set of requests and responses for the HttpMock to respond to. See the main
102
101
  # ActiveResource::HttpMock description for a more detailed explanation.
103
102
  def respond_to(pairs = {}) #:yields: mock
104
103
  reset!
105
- pairs.each do |(path, response)|
106
- responses[path] = response
107
- end
108
-
104
+ responses.concat pairs.to_a
109
105
  if block_given?
110
106
  yield Responder.new(responses)
111
107
  else
@@ -120,29 +116,23 @@ module ActiveResource
120
116
  end
121
117
  end
122
118
 
123
- for method in [ :post, :put ]
124
- # def post(path, body, headers)
125
- # request = ActiveResource::Request.new(:post, path, body, headers)
126
- # self.class.requests << request
127
- # self.class.responses[request] || raise(InvalidRequestError.new("No response recorded for #{request}"))
128
- # end
129
- module_eval <<-EOE, __FILE__, __LINE__
130
- def #{method}(path, body, headers)
131
- request = ActiveResource::Request.new(:#{method}, path, body, headers)
132
- self.class.requests << request
133
- self.class.responses[request] || raise(InvalidRequestError.new("No response recorded for \#{request}"))
134
- end
135
- EOE
136
- end
137
-
138
- for method in [ :get, :delete, :head ]
139
- module_eval <<-EOE, __FILE__, __LINE__
140
- def #{method}(path, headers)
141
- request = ActiveResource::Request.new(:#{method}, path, nil, headers)
142
- self.class.requests << request
143
- self.class.responses[request] || raise(InvalidRequestError.new("No response recorded for \#{request}"))
144
- end
145
- EOE
119
+ # body? methods
120
+ { true => %w(post put),
121
+ false => %w(get delete head) }.each do |has_body, methods|
122
+ methods.each do |method|
123
+ # def post(path, body, headers)
124
+ # request = ActiveResource::Request.new(:post, path, body, headers)
125
+ # self.class.requests << request
126
+ # self.class.responses.assoc(request).try(:second) || raise(InvalidRequestError.new("No response recorded for #{request}"))
127
+ # end
128
+ module_eval <<-EOE, __FILE__, __LINE__
129
+ def #{method}(path, #{'body, ' if has_body}headers)
130
+ request = ActiveResource::Request.new(:#{method}, path, #{has_body ? 'body, ' : 'nil, '}headers)
131
+ self.class.requests << request
132
+ self.class.responses.assoc(request).try(:second) || raise(InvalidRequestError.new("No response recorded for \#{request}"))
133
+ end
134
+ EOE
135
+ end
146
136
  end
147
137
 
148
138
  def initialize(site) #:nodoc:
@@ -157,21 +147,13 @@ module ActiveResource
157
147
  @method, @path, @body, @headers = method, path, body, headers.merge(ActiveResource::Connection::HTTP_FORMAT_HEADER_NAMES[method] => 'application/xml')
158
148
  end
159
149
 
160
- def ==(other_request)
161
- other_request.hash == hash
162
- end
163
-
164
- def eql?(other_request)
165
- self == other_request
150
+ def ==(req)
151
+ path == req.path && method == req.method && headers == req.headers
166
152
  end
167
153
 
168
154
  def to_s
169
155
  "<#{method.to_s.upcase}: #{path} [#{headers}] (#{body})>"
170
156
  end
171
-
172
- def hash
173
- "#{path}#{method}#{headers}".hash
174
- end
175
157
  end
176
158
 
177
159
  class Response
@@ -203,7 +203,7 @@ module ActiveResource
203
203
  def from_xml(xml)
204
204
  clear
205
205
  humanized_attributes = @base.attributes.keys.inject({}) { |h, attr_name| h.update(attr_name.humanize => attr_name) }
206
- messages = Hash.from_xml(xml)['errors']['error'] rescue []
206
+ messages = Array.wrap(Hash.from_xml(xml)['errors']['error']) rescue []
207
207
  messages.each do |message|
208
208
  attr_message = humanized_attributes.keys.detect do |attr_name|
209
209
  if message[0, attr_name.size + 1] == "#{attr_name} "
@@ -2,7 +2,7 @@ module ActiveResource
2
2
  module VERSION #:nodoc:
3
3
  MAJOR = 2
4
4
  MINOR = 3
5
- TINY = 0
5
+ TINY = 2
6
6
 
7
7
  STRING = [MAJOR, MINOR, TINY].join('.')
8
8
  end
@@ -1,6 +1,11 @@
1
+ require 'rubygems'
1
2
  require 'test/unit'
2
3
 
4
+ gem 'mocha', '>= 0.9.5'
5
+ require 'mocha'
6
+
3
7
  $:.unshift "#{File.dirname(__FILE__)}/../lib"
8
+ $:.unshift "#{File.dirname(__FILE__)}/../../activesupport/lib"
4
9
  require 'active_resource'
5
10
  require 'active_resource/http_mock'
6
11
 
@@ -10,17 +15,9 @@ require 'setter_trap'
10
15
  ActiveResource::Base.logger = Logger.new("#{File.dirname(__FILE__)}/debug.log")
11
16
 
12
17
  def uses_gem(gem_name, test_name, version = '> 0')
13
- require 'rubygems'
14
18
  gem gem_name.to_s, version
15
19
  require gem_name.to_s
16
20
  yield
17
21
  rescue LoadError
18
22
  $stderr.puts "Skipping #{test_name} tests. `gem install #{gem_name}` and try again."
19
23
  end
20
-
21
- # Wrap tests that use Mocha and skip if unavailable.
22
- unless defined? uses_mocha
23
- def uses_mocha(test_name, &block)
24
- uses_gem('mocha', test_name, '>= 0.5.5', &block)
25
- end
26
- end
@@ -107,10 +107,10 @@ class AuthorizationTest < Test::Unit::TestCase
107
107
  end
108
108
 
109
109
  def test_raises_invalid_request_on_unauthorized_requests
110
- assert_raises(ActiveResource::InvalidRequestError) { @conn.post("/people/2.xml") }
111
- assert_raises(ActiveResource::InvalidRequestError) { @conn.post("/people/2/addresses.xml") }
112
- assert_raises(ActiveResource::InvalidRequestError) { @conn.put("/people/2.xml") }
113
- assert_raises(ActiveResource::InvalidRequestError) { @conn.delete("/people/2.xml") }
110
+ assert_raise(ActiveResource::InvalidRequestError) { @conn.post("/people/2.xml") }
111
+ assert_raise(ActiveResource::InvalidRequestError) { @conn.post("/people/2/addresses.xml") }
112
+ assert_raise(ActiveResource::InvalidRequestError) { @conn.put("/people/2.xml") }
113
+ assert_raise(ActiveResource::InvalidRequestError) { @conn.delete("/people/2.xml") }
114
114
  end
115
115
 
116
116
  protected
@@ -47,7 +47,7 @@ class BaseTest < Test::Unit::TestCase
47
47
  {:name => 'Milena',
48
48
  :children => []}]}]}.to_xml(:root => 'customer')
49
49
  # - resource with yaml array of strings; for ActiveRecords using serialize :bar, Array
50
- @marty = <<-eof
50
+ @marty = <<-eof.strip
51
51
  <?xml version=\"1.0\" encoding=\"UTF-8\"?>
52
52
  <person>
53
53
  <id type=\"integer\">5</id>
@@ -564,14 +564,14 @@ class BaseTest < Test::Unit::TestCase
564
564
 
565
565
  def test_custom_header
566
566
  Person.headers['key'] = 'value'
567
- assert_raises(ActiveResource::ResourceNotFound) { Person.find(4) }
567
+ assert_raise(ActiveResource::ResourceNotFound) { Person.find(4) }
568
568
  ensure
569
569
  Person.headers.delete('key')
570
570
  end
571
571
 
572
572
  def test_find_by_id_not_found
573
- assert_raises(ActiveResource::ResourceNotFound) { Person.find(99) }
574
- assert_raises(ActiveResource::ResourceNotFound) { StreetAddress.find(1) }
573
+ assert_raise(ActiveResource::ResourceNotFound) { Person.find(99) }
574
+ assert_raise(ActiveResource::ResourceNotFound) { StreetAddress.find(1) }
575
575
  end
576
576
 
577
577
  def test_find_all_by_from
@@ -689,7 +689,7 @@ class BaseTest < Test::Unit::TestCase
689
689
  ActiveResource::HttpMock.respond_to do |mock|
690
690
  mock.post "/people.xml", {}, nil, 409
691
691
  end
692
- assert_raises(ActiveResource::ResourceConflict) { Person.create(:name => 'Rick') }
692
+ assert_raise(ActiveResource::ResourceConflict) { Person.create(:name => 'Rick') }
693
693
  end
694
694
 
695
695
  def test_create_without_location
@@ -726,7 +726,7 @@ class BaseTest < Test::Unit::TestCase
726
726
  matz.non_ar_arr = ["not", "ARes"]
727
727
  matz_c = matz.clone
728
728
  assert matz_c.new?
729
- assert_raises(NoMethodError) {matz_c.address}
729
+ assert_raise(NoMethodError) {matz_c.address}
730
730
  assert_equal matz.non_ar_hash, matz_c.non_ar_hash
731
731
  assert_equal matz.non_ar_arr, matz_c.non_ar_arr
732
732
 
@@ -764,7 +764,7 @@ class BaseTest < Test::Unit::TestCase
764
764
  mock.get "/people/2.xml", {}, @david
765
765
  mock.put "/people/2.xml", @default_request_headers, nil, 409
766
766
  end
767
- assert_raises(ActiveResource::ResourceConflict) { Person.find(2).save }
767
+ assert_raise(ActiveResource::ResourceConflict) { Person.find(2).save }
768
768
  end
769
769
 
770
770
  def test_destroy
@@ -772,7 +772,7 @@ class BaseTest < Test::Unit::TestCase
772
772
  ActiveResource::HttpMock.respond_to do |mock|
773
773
  mock.get "/people/1.xml", {}, nil, 404
774
774
  end
775
- assert_raises(ActiveResource::ResourceNotFound) { Person.find(1).destroy }
775
+ assert_raise(ActiveResource::ResourceNotFound) { Person.find(1).destroy }
776
776
  end
777
777
 
778
778
  def test_destroy_with_custom_prefix
@@ -780,7 +780,7 @@ class BaseTest < Test::Unit::TestCase
780
780
  ActiveResource::HttpMock.respond_to do |mock|
781
781
  mock.get "/people/1/addresses/1.xml", {}, nil, 404
782
782
  end
783
- assert_raises(ActiveResource::ResourceNotFound) { StreetAddress.find(1, :params => { :person_id => 1 }) }
783
+ assert_raise(ActiveResource::ResourceNotFound) { StreetAddress.find(1, :params => { :person_id => 1 }) }
784
784
  end
785
785
 
786
786
  def test_delete
@@ -788,7 +788,7 @@ class BaseTest < Test::Unit::TestCase
788
788
  ActiveResource::HttpMock.respond_to do |mock|
789
789
  mock.get "/people/1.xml", {}, nil, 404
790
790
  end
791
- assert_raises(ActiveResource::ResourceNotFound) { Person.find(1) }
791
+ assert_raise(ActiveResource::ResourceNotFound) { Person.find(1) }
792
792
  end
793
793
 
794
794
  def test_delete_with_custom_prefix
@@ -796,7 +796,7 @@ class BaseTest < Test::Unit::TestCase
796
796
  ActiveResource::HttpMock.respond_to do |mock|
797
797
  mock.get "/people/1/addresses/1.xml", {}, nil, 404
798
798
  end
799
- assert_raises(ActiveResource::ResourceNotFound) { StreetAddress.find(1, :params => { :person_id => 1 }) }
799
+ assert_raise(ActiveResource::ResourceNotFound) { StreetAddress.find(1, :params => { :person_id => 1 }) }
800
800
  end
801
801
 
802
802
  def test_exists
@@ -168,21 +168,19 @@ class ConnectionTest < Test::Unit::TestCase
168
168
  assert_equal 200, response.code
169
169
  end
170
170
 
171
- uses_mocha('test_timeout, test_accept_http_header') do
172
- def test_timeout
173
- @http = mock('new Net::HTTP')
174
- @conn.expects(:http).returns(@http)
175
- @http.expects(:get).raises(Timeout::Error, 'execution expired')
176
- assert_raise(ActiveResource::TimeoutError) { @conn.get('/people_timeout.xml') }
177
- end
178
-
179
- def test_accept_http_header
180
- @http = mock('new Net::HTTP')
181
- @conn.expects(:http).returns(@http)
182
- path = '/people/1.xml'
183
- @http.expects(:get).with(path, {'Accept' => 'application/xhtml+xml'}).returns(ActiveResource::Response.new(@matz, 200, {'Content-Type' => 'text/xhtml'}))
184
- assert_nothing_raised(Mocha::ExpectationError) { @conn.get(path, {'Accept' => 'application/xhtml+xml'}) }
185
- end
171
+ def test_timeout
172
+ @http = mock('new Net::HTTP')
173
+ @conn.expects(:http).returns(@http)
174
+ @http.expects(:get).raises(Timeout::Error, 'execution expired')
175
+ assert_raise(ActiveResource::TimeoutError) { @conn.get('/people_timeout.xml') }
176
+ end
177
+
178
+ def test_accept_http_header
179
+ @http = mock('new Net::HTTP')
180
+ @conn.expects(:http).returns(@http)
181
+ path = '/people/1.xml'
182
+ @http.expects(:get).with(path, {'Accept' => 'application/xhtml+xml'}).returns(ActiveResource::Response.new(@matz, 200, {'Content-Type' => 'text/xhtml'}))
183
+ assert_nothing_raised(Mocha::ExpectationError) { @conn.get(path, {'Accept' => 'application/xhtml+xml'}) }
186
184
  end
187
185
 
188
186
  protected
@@ -1,9 +1,8 @@
1
1
  class SetterTrap < ActiveSupport::BasicObject
2
2
  class << self
3
3
  def rollback_sets(obj)
4
- returning yield(setter_trap = new(obj)) do
5
- setter_trap.rollback_sets
6
- end
4
+ trapped = new(obj)
5
+ yield(trapped).tap { trapped.rollback_sets }
7
6
  end
8
7
  end
9
8
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: activeresource
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.3.0
4
+ version: 2.3.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - David Heinemeier Hansson
@@ -9,7 +9,7 @@ autorequire: active_resource
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-02-01 00:00:00 +01:00
12
+ date: 2009-03-15 00:00:00 -05:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -20,7 +20,7 @@ dependencies:
20
20
  requirements:
21
21
  - - "="
22
22
  - !ruby/object:Gem::Version
23
- version: 2.3.0
23
+ version: 2.3.2
24
24
  version:
25
25
  description: Wraps web resources in model classes that can be manipulated through XML over REST.
26
26
  email: david@loudthinking.com
@@ -56,7 +56,6 @@ files:
56
56
  - test/base_errors_test.rb
57
57
  - test/base_test.rb
58
58
  - test/connection_test.rb
59
- - test/debug.log
60
59
  - test/fixtures
61
60
  - test/fixtures/beast.rb
62
61
  - test/fixtures/customer.rb
@@ -1,274 +0,0 @@
1
- # Logfile created on Sun Feb 01 22:17:52 +0100 2009 by /
2
- DELETE http://localhost:80/people/2.xml
3
- --> 200 200 (0 0ms)
4
- GET http://localhost:80/people/2.xml
5
- --> 200 200 (107 0ms)
6
- POST http://localhost:80/people/2/addresses.xml
7
- --> 201 201 (0 0ms)
8
- PUT http://localhost:80/people/2.xml
9
- --> 204 204 (0 0ms)
10
- POST http://localhost:80/people/2.xml
11
- POST http://localhost:80/people/2/addresses.xml
12
- PUT http://localhost:80/people/2.xml
13
- DELETE http://localhost:80/people/2.xml
14
- POST http://37s.sunrise.i:3000/people.xml
15
- --> 422 422 (209 0ms)
16
- POST http://37s.sunrise.i:3000/people.xml
17
- --> 422 422 (209 0ms)
18
- POST http://37s.sunrise.i:3000/people.xml
19
- --> 422 422 (209 0ms)
20
- POST http://37s.sunrise.i:3000/people.xml
21
- --> 422 422 (209 0ms)
22
- POST http://37s.sunrise.i:3000/people.xml
23
- --> 422 422 (209 0ms)
24
- POST http://37s.sunrise.i:3000/people.xml
25
- --> 422 422 (209 0ms)
26
- GET http://37s.sunrise.i:3000/people/1.xml
27
- --> 200 200 (106 0ms)
28
- GET http://37s.sunrise.i:3000/people/1.xml
29
- --> 200 200 (106 0ms)
30
- GET http://37s.sunrise.i:3000/people/1/addresses/1.xml
31
- --> 200 200 (120 0ms)
32
- POST http://37s.sunrise.i:3000/people.xml
33
- --> 201 201 (109 0ms)
34
- POST http://37s.sunrise.i:3000/people.xml
35
- --> 409 409 (0 0ms)
36
- POST http://37s.sunrise.i:3000/people/1/addresses.xml
37
- --> 201 201 (0 0ms)
38
- POST http://37s.sunrise.i:3000/people.xml
39
- --> 201 201 (0 0ms)
40
- GET http://37s.sunrise.i:3000/people/Greg.xml
41
- --> 200 200 (106 0ms)
42
- GET http://37s.sunrise.i:3000/people/4.xml
43
- --> 404 404 (0 0ms)
44
- DELETE http://37s.sunrise.i:3000/people/1.xml
45
- --> 200 200 (0 0ms)
46
- GET http://37s.sunrise.i:3000/people/1.xml
47
- --> 404 404 (0 0ms)
48
- DELETE http://37s.sunrise.i:3000/people/1/addresses/1.xml
49
- --> 200 200 (0 0ms)
50
- GET http://37s.sunrise.i:3000/people/1/addresses/1.xml
51
- --> 404 404 (0 0ms)
52
- GET http://37s.sunrise.i:3000/people/1.xml
53
- --> 200 200 (106 0ms)
54
- DELETE http://37s.sunrise.i:3000/people/1.xml
55
- --> 200 200 (0 0ms)
56
- GET http://37s.sunrise.i:3000/people/1.xml
57
- --> 404 404 (0 0ms)
58
- GET http://37s.sunrise.i:3000/people/1/addresses/1.xml
59
- --> 200 200 (120 0ms)
60
- DELETE http://37s.sunrise.i:3000/people/1/addresses/1.xml
61
- --> 200 200 (0 0ms)
62
- GET http://37s.sunrise.i:3000/people/1/addresses/1.xml
63
- --> 404 404 (0 0ms)
64
- HEAD http://37s.sunrise.i:3000/people/1.xml
65
- --> 200 200 (0 0ms)
66
- HEAD http://37s.sunrise.i:3000/people/99.xml
67
- --> 404 404 (0 0ms)
68
- GET http://37s.sunrise.i:3000/people/1.xml
69
- --> 200 200 (106 0ms)
70
- HEAD http://37s.sunrise.i:3000/people/1.xml
71
- --> 200 200 (0 0ms)
72
- HEAD http://37s.sunrise.i:3000/people/99.xml
73
- --> 404 404 (0 0ms)
74
- HEAD http://37s.sunrise.i:3000/people/1/addresses/1.xml
75
- --> 200 200 (0 0ms)
76
- HEAD http://37s.sunrise.i:3000/people/2/addresses/1.xml
77
- --> 404 404 (0 0ms)
78
- HEAD http://37s.sunrise.i:3000/people/1/addresses/2.xml
79
- --> 404 404 (0 0ms)
80
- GET http://37s.sunrise.i:3000/people/1/addresses/1.xml
81
- --> 200 200 (120 0ms)
82
- HEAD http://37s.sunrise.i:3000/people/1/addresses/1.xml
83
- --> 200 200 (0 0ms)
84
- HEAD http://37s.sunrise.i:3000/people/2/addresses/1.xml
85
- --> 404 404 (0 0ms)
86
- HEAD http://37s.sunrise.i:3000/people/1/addresses/2.xml
87
- --> 404 404 (0 0ms)
88
- HEAD http://37s.sunrise.i:3000/people/Greg.xml
89
- --> 200 200 (0 0ms)
90
- GET http://37s.sunrise.i:3000/people/Greg.xml
91
- --> 200 200 (106 0ms)
92
- HEAD http://37s.sunrise.i:3000/people/Greg.xml
93
- --> 200 200 (0 0ms)
94
- GET http://37s.sunrise.i:3000/people/Greg.xml
95
- --> 200 200 (106 0ms)
96
- HEAD http://37s.sunrise.i:3000/people/Greg/addresses/1.xml
97
- --> 200 200 (0 0ms)
98
- GET http://37s.sunrise.i:3000/people/Greg.xml
99
- --> 200 200 (106 0ms)
100
- GET http://37s.sunrise.i:3000/people/Greg/addresses/1.xml
101
- --> 200 200 (120 0ms)
102
- HEAD http://37s.sunrise.i:3000/people/Greg/addresses/1.xml
103
- --> 200 200 (0 0ms)
104
- GET http://37s.sunrise.i:3000/people.xml
105
- --> 200 200 (222 0ms)
106
- GET http://37s.sunrise.i:3000/companies/1/people.xml
107
- --> 200 200 (147 0ms)
108
- GET http://37s.sunrise.i:3000/companies/1/people.xml
109
- --> 200 200 (147 0ms)
110
- GET http://37s.sunrise.i:3000/people/managers.xml
111
- --> 200 200 (147 0ms)
112
- GET http://37s.sunrise.i:3000/people/1.xml
113
- --> 200 200 (106 0ms)
114
- GET http://37s.sunrise.i:3000/people/99.xml
115
- --> 404 404 (0 0ms)
116
- GET http://37s.sunrise.i:3000/people//addresses/1.xml
117
- --> 404 404 (0 0ms)
118
- GET http://37s.sunrise.i:3000/people/1/addresses/1.xml
119
- --> 200 200 (120 0ms)
120
- GET http://37s.sunrise.i:3000/people.xml
121
- --> 200 200 (222 0ms)
122
- GET http://37s.sunrise.i:3000/people.xml
123
- --> 200 200 (222 0ms)
124
- GET http://37s.sunrise.i:3000/companies/1/manager.xml
125
- --> 200 200 (107 0ms)
126
- GET http://37s.sunrise.i:3000/people/leader.xml
127
- --> 200 200 (107 0ms)
128
- GET http://37s.sunrise.i:3000/people/1/addresses/1.xml
129
- --> 200 200 (120 0ms)
130
- GET http://37s.sunrise.i:3000/people/5.xml
131
- --> 200 200 (230 0ms)
132
- GET http://37s.sunrise.i:3000/people/1/addresses/1.xml
133
- --> 200 200 (120 0ms)
134
- GET http://37s.sunrise.i:3000/customers/1.xml
135
- --> 200 200 (1458 0ms)
136
- GET http://37s.sunrise.i:3000/people/Greg.xml
137
- --> 200 200 (106 0ms)
138
- GET http://37s.sunrise.i:3000/people/Greg.xml
139
- --> 200 200 (106 0ms)
140
- GET http://37s.sunrise.i:3000/people/1/addresses/1.xml
141
- --> 200 200 (120 0ms)
142
- GET http://37s.sunrise.i:3000/people/1/addresses/1.xml
143
- --> 200 200 (120 0ms)
144
- GET http://37s.sunrise.i:3000/people.xml
145
- --> 200 200 (222 0ms)
146
- GET http://37s.sunrise.i:3000/people/1.xml
147
- --> 200 200 (106 0ms)
148
- GET http://37s.sunrise.i:3000/people/1.xml
149
- --> 200 200 (106 0ms)
150
- POST http://37s.sunrise.i:3000/people.xml
151
- --> 201 201 (109 0ms)
152
- GET http://somewhere.else:80/people/1.xml
153
- --> 200 200 (106 0ms)
154
- GET http://somewhere.else:80/people/1.xml
155
- --> 200 200 (106 0ms)
156
- GET http://somewhere.else:80/people.xml
157
- --> 200 200 (222 0ms)
158
- PUT http://somewhere.else:80/people/1.xml
159
- --> 204 204 (0 0ms)
160
- GET http://somewhere.else:80/people/2.xml
161
- --> 200 200 (107 0ms)
162
- PUT http://somewhere.else:80/people/2.xml
163
- --> 409 409 (0 0ms)
164
- GET http://37s.sunrise.i:3000/people/1/addresses/1.xml
165
- --> 200 200 (120 0ms)
166
- PUT http://37s.sunrise.i:3000/people/1/addresses/1.xml
167
- --> 204 204 (0 0ms)
168
- GET http://37s.sunrise.i:3000/people/1/addresses.xml
169
- --> 200 200 (166 0ms)
170
- PUT http://37s.sunrise.i:3000/people/1/addresses/1.xml
171
- --> 204 204 (0 0ms)
172
- GET http://localhost:80/people/1.xml
173
- --> 200 200 (106 0ms)
174
- DELETE http://localhost:80/people/1.xml
175
- --> 200 200 (0 0ms)
176
- DELETE http://localhost:80/people/2.xml
177
- --> 200 200 (0 0ms)
178
- GET http://localhost:80/people/1.xml
179
- --> 200 200 (106 0ms)
180
- GET http://localhost:80/people.xml
181
- --> 200 200 (222 0ms)
182
- GET http://localhost:80/people_empty_elements.xml
183
- --> 200 200 (77 0ms)
184
- GET http://localhost:80/people_single_elements.xml
185
- --> 200 200 (208 0ms)
186
- GET http://localhost:80/people/2.xml
187
- --> 200 200 (107 0ms)
188
- HEAD http://localhost:80/people/1.xml
189
- --> 200 200 (0 0ms)
190
- POST http://localhost:80/people.xml
191
- --> 201 201 (0 0ms)
192
- POST http://localhost:80/members.xml
193
- --> 201 201 (1 0ms)
194
- PUT http://localhost:80/people/1.xml
195
- --> 204 204 (0 0ms)
196
- PUT http://localhost:80/people/2.xml
197
- --> 204 204 (0 0ms)
198
- GET http://localhost:80/people_timeout.xml
199
- GET http://somewhere.else:80/people/retrieve.xml?name=Matz
200
- --> 200 200 (146 0ms)
201
- POST http://somewhere.else:80/people/hire.xml?name=Matz
202
- --> 201 201 (0 0ms)
203
- PUT http://somewhere.else:80/people/promote.xml?name=Matz
204
- --> 204 204 (0 0ms)
205
- PUT http://somewhere.else:80/people/sort.xml?by=name
206
- --> 204 204 (0 0ms)
207
- DELETE http://somewhere.else:80/people/deactivate.xml?name=Matz
208
- --> 200 200 (0 0ms)
209
- PUT http://37s.sunrise.i:3000/people/1/addresses/sort.xml?by=name
210
- --> 204 204 (0 0ms)
211
- GET http://somewhere.else:80/people/1.xml
212
- --> 200 200 (106 0ms)
213
- GET http://somewhere.else:80/people/1/shallow.xml
214
- --> 200 200 (106 0ms)
215
- GET http://somewhere.else:80/people/1.xml
216
- --> 200 200 (106 0ms)
217
- GET http://somewhere.else:80/people/1/deep.xml
218
- --> 200 200 (129 0ms)
219
- GET http://somewhere.else:80/people/1.xml
220
- --> 200 200 (106 0ms)
221
- PUT http://somewhere.else:80/people/1/promote.xml?position=Manager
222
- --> 204 204 (0 0ms)
223
- GET http://somewhere.else:80/people/1.xml
224
- --> 200 200 (106 0ms)
225
- DELETE http://somewhere.else:80/people/1/deactivate.xml
226
- --> 200 200 (0 0ms)
227
- GET http://37s.sunrise.i:3000/people/1/addresses/1.xml
228
- --> 200 200 (120 0ms)
229
- GET http://37s.sunrise.i:3000/people/1/addresses/1/deep.xml
230
- --> 200 200 (139 0ms)
231
- GET http://37s.sunrise.i:3000/people/1/addresses/1.xml
232
- --> 200 200 (120 0ms)
233
- PUT http://37s.sunrise.i:3000/people/1/addresses/1/normalize_phone.xml?locale=US
234
- --> 204 204 (0 0ms)
235
- POST http://somewhere.else:80/people/new/register.xml
236
- --> 201 201 (78 0ms)
237
- POST http://37s.sunrise.i:3000/people/1/addresses/new/link.xml
238
- --> 201 201 (92 0ms)
239
- POST http://somewhere.else:80/people/1/register.xml
240
- --> 201 201 (106 0ms)
241
- GET http://somewhere.else:80/people/managers.xml
242
- --> 200 200 (146 0ms)
243
- GET http://somewhere.else:80/people.json
244
- --> 200 200 (55 0ms)
245
- GET http://somewhere.else:80/people.xml
246
- --> 200 200 (224 0ms)
247
- GET http://somewhere.else:80/people/retrieve.json?name=David
248
- --> 200 200 (28 0ms)
249
- GET http://somewhere.else:80/people/retrieve.xml?name=David
250
- --> 200 200 (149 0ms)
251
- GET http://somewhere.else:80/people/2.json
252
- --> 200 200 (26 0ms)
253
- GET http://somewhere.else:80/people/2/shallow.json
254
- --> 200 200 (26 0ms)
255
- GET http://somewhere.else:80/people/2.xml
256
- --> 200 200 (103 0ms)
257
- GET http://somewhere.else:80/people/2/shallow.xml
258
- --> 200 200 (103 0ms)
259
- POST http://somewhere.else:80/people.json
260
- --> 201 201 (16 0ms)
261
- POST http://somewhere.else:80/people/new/register.json
262
- --> 201 201 (16 0ms)
263
- POST http://somewhere.else:80/people.xml
264
- --> 201 201 (74 0ms)
265
- POST http://somewhere.else:80/people/new/register.xml
266
- --> 201 201 (74 0ms)
267
- GET http://somewhere.else:80/people/1.json
268
- --> 200 200 (26 0ms)
269
- GET http://somewhere.else:80/people/1.xml
270
- --> 200 200 (103 0ms)
271
- POST http://somewhere.else:80/people.json
272
- --> 201 201 (54 0ms)
273
- POST http://somewhere.else:80/people.xml
274
- --> 201 201 (132 0ms)