lib/swirl/ec2.rb in swirl-1.5.3 vs lib/swirl/ec2.rb in swirl-1.6.0
- old
+ new
@@ -54,26 +54,32 @@
#
# Examples:
# ec2.call("DescribeInstances")
# ec2.call("TerminateInstances", "InstanceId" => ["i-1234", "i-993j"]
#
- def call(action, query={})
- code, data = call!(action, expand(query))
+ def call(action, query={}, &blk)
+ call!(action, expand(query)) do |code, data|
+ case code
+ when 200
+ response = compact(data)
+ when 400...500
+ messages = Array(data["Response"]["Errors"]).map {|_, e| e["Message"] }
+ raise InvalidRequest, messages.join(",")
+ else
+ msg = "unexpected response #{code} -> #{data.inspect}"
+ raise InvalidRequest, msg
+ end
- case code
- when 200
- compact(data)
- when 400...500
- messages = Array(data["Response"]["Errors"]).map {|_, e| e["Message"] }
- raise InvalidRequest, messages.join(",")
- else
- msg = "unexpected response #{code} -> #{data.inspect}"
- raise InvalidRequest, msg
+ if blk
+ blk.call(response)
+ else
+ response
+ end
end
end
- def call!(action, query={})
+ def call!(action, query={}, &blk)
# Hard coding this here until otherwise needed
method = "POST"
query["Action"] = action
query["AWSAccessKeyId"] = @aws_access_key_id
@@ -83,30 +89,31 @@
query["Version"] = @version
body = compile_sorted_form_data(query)
body += "&" + ["Signature", compile_signature(method, body)].join("=")
- response = post(body)
+ post(body) do |code, xml|
+ if ENV["SWIRL_LOG"]
+ puts response.body
+ end
- if ENV["SWIRL_LOG"]
- puts response.body
+ data = Crack::XML.parse(xml)
+ blk.call([code, data])
end
-
- data = Crack::XML.parse(response.body)
- [response.code.to_i, data]
end
- def post(body)
+ def post(body, &blk)
headers = { "Content-Type" => "application/x-www-form-urlencoded" }
http = Net::HTTP.new(@url.host, @url.port)
http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_NONE
request = Net::HTTP::Post.new(@url.request_uri, headers)
request.body = body
- http.request(request)
+ response = http.request(request)
+ blk.call(response.code.to_i, response.body)
end
def inspect
"<#{self.class.name} version: #{@version} url: #{@url} aws_access_key_id: #{@aws_access_key_id}>"
end