aboutsummaryrefslogtreecommitdiffstats
path: root/activeresource/lib/active_resource/connection.rb
diff options
context:
space:
mode:
Diffstat (limited to 'activeresource/lib/active_resource/connection.rb')
-rw-r--r--activeresource/lib/active_resource/connection.rb86
1 files changed, 86 insertions, 0 deletions
diff --git a/activeresource/lib/active_resource/connection.rb b/activeresource/lib/active_resource/connection.rb
new file mode 100644
index 0000000000..7318e7256f
--- /dev/null
+++ b/activeresource/lib/active_resource/connection.rb
@@ -0,0 +1,86 @@
+require 'net/https'
+require 'date'
+require 'time'
+require 'uri'
+
+module ActiveResource
+ class ConnectionError < StandardError
+ attr_reader :response
+
+ def initialize(response, message = nil)
+ @response = response
+ @message = message
+ end
+
+ def to_s
+ "Failed with #{response.code}"
+ end
+ end
+
+ class ClientError < ConnectionError
+ end
+
+ class ServerError < ConnectionError
+ end
+
+ class ResourceNotFound < ClientError
+ end
+
+ class Connection
+ attr_accessor :uri
+
+ class << self
+ def requests
+ @@requests ||= []
+ end
+ end
+
+ def initialize(site)
+ @site = site
+ end
+
+ def get(path)
+ Hash.create_from_xml(request(:get, path).body)
+ end
+
+ def delete(path)
+ request(:delete, path)
+ end
+
+ def put(path, body)
+ request(:put, path, body)
+ end
+
+ def post(path, body)
+ request(:post, path, body)
+ end
+
+ private
+ def request(method, *arguments)
+ response = http.send(method, *arguments)
+
+ case response.code.to_i
+ when 200...300
+ response
+ when 404
+ raise(ResourceNotFound.new(response))
+ when 400...500
+ raise(ClientError.new(response))
+ when 500...600
+ raise(ServerError.new(response))
+ else
+ raise(ConnectionError.new(response, "Unknown response code: #{response.code}"))
+ end
+ end
+
+ def http
+ unless @http
+ @http = Net::HTTP.new(@site.host, @site.port)
+ @http.use_ssl = @site.is_a?(URI::HTTPS)
+ @http.verify_mode = OpenSSL::SSL::VERIFY_NONE if @http.use_ssl
+ end
+
+ @http
+ end
+ end
+end \ No newline at end of file