aboutsummaryrefslogtreecommitdiffstats
path: root/activeresource/test/http_mock.rb
diff options
context:
space:
mode:
authorDavid Heinemeier Hansson <david@loudthinking.com>2006-06-25 14:44:22 +0000
committerDavid Heinemeier Hansson <david@loudthinking.com>2006-06-25 14:44:22 +0000
commit99d268c8534ad398c6c60a4978ef94699cbb8ada (patch)
tree70a65800284217eef66405826748c8588504e666 /activeresource/test/http_mock.rb
parenta55265132b37c6fb8ac15a96b44e64a64bcd4c45 (diff)
downloadrails-99d268c8534ad398c6c60a4978ef94699cbb8ada.tar.gz
rails-99d268c8534ad398c6c60a4978ef94699cbb8ada.tar.bz2
rails-99d268c8534ad398c6c60a4978ef94699cbb8ada.zip
Initial check-in of Active Resourse
git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@4492 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
Diffstat (limited to 'activeresource/test/http_mock.rb')
-rw-r--r--activeresource/test/http_mock.rb84
1 files changed, 84 insertions, 0 deletions
diff --git a/activeresource/test/http_mock.rb b/activeresource/test/http_mock.rb
new file mode 100644
index 0000000000..a4bc7e7cb2
--- /dev/null
+++ b/activeresource/test/http_mock.rb
@@ -0,0 +1,84 @@
+require 'active_resource/connection'
+
+module ActiveResource
+ class HttpMock
+ class << self
+ def requests
+ @@requests ||= []
+ end
+
+ def responses
+ @@responses ||= {}
+ end
+
+ def respond_to(pairs)
+ reset!
+ pairs.each do |(path, response)|
+ responses[path] = response
+ end
+ end
+
+ def reset!
+ requests.clear
+ responses.clear
+ end
+ end
+
+ for method in [ :post, :put, :get, :delete ]
+ module_eval <<-EOE
+ def #{method}(*arguments)
+ request = ActiveResource::Request.new(:#{method}, *arguments)
+ self.class.requests << request
+ self.class.responses[request] || raise("No response recorded for: \#{request}")
+ end
+ EOE
+ end
+
+ def initialize(site)
+ @site = site
+ end
+ end
+
+ class Request
+ attr_accessor :path, :method, :body
+
+ def initialize(method, path, body = nil)
+ @method, @path, @body = method, path, body
+ end
+
+ def ==(other_request)
+ other_request.hash == hash
+ end
+
+ def eql?(other_request)
+ self == other_request
+ end
+
+ def to_s
+ "<#{method.to_s.upcase}: #{path} (#{body})>"
+ end
+
+ def hash
+ "#{path}#{method}".hash
+ end
+ end
+
+ class Response
+ attr_accessor :body, :code
+
+ def initialize(body, code = 200)
+ @body, @code = body, code
+ end
+
+ def success?
+ (200..299).include?(code)
+ end
+ end
+
+ class Connection
+ private
+ def http
+ @http ||= HttpMock.new(@site)
+ end
+ end
+end \ No newline at end of file