lib/solusvm/base.rb in solusvm-0.10.1 vs lib/solusvm/base.rb in solusvm-1.0.0.beta
- old
+ new
@@ -4,20 +4,22 @@
attr_reader :returned_parameters, :statusmsg
VALID_SERVER_TYPES = ['openvz', 'xen', 'xen hvm']
# Prepares and sends the API request to the URL specificed in Solusvm.config
#
- #
# class MyClass < Base
# def create_server(name)
# perform_request(:action => 'name', :id => 1)
# end
# end
+ #
# Options:
# * <tt>:action</tt> - Specifies which API method to execute
# All other options passed in are converted to http query arguments and are passed along to the API
- def perform_request(options = {})
+ #
+ # <tt>force_array</tt> - see parse_response
+ def perform_request(options = {}, force_array = false)
options.merge!(api_login)
http = Net::HTTP.new(api_endpoint.host, api_endpoint.port)
if api_endpoint.port == 443
http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_NONE
@@ -25,20 +27,24 @@
http.start do |http|
request = Net::HTTP::Get.new("#{api_endpoint.path}?#{options.to_query}")
response = http.request(request)
handle_errors(response.body)
- @returned_parameters = parse_response(response.body)
+ @returned_parameters = parse_response(response.body, force_array)
log_messages(options)
end
successful?
end
# Converts the XML response to a Hash
- def parse_response(body)
+ #
+ # <tt>force_array</tt> - Parses the xml element as an array; can be a string with the element name
+ # or an array with element names
+ def parse_response(body, force_array = false)
+ force_array = Array(force_array) if force_array
body = "<solusrequest>#{body}</solusrequest>"
- XmlSimple.xml_in(body, 'ForceArray' => false)
+ XmlSimple.xml_in(body, 'ForceArray' => force_array)
end
# Look for known error messages
def handle_errors(body)
case body.downcase
@@ -67,17 +73,18 @@
def api_login
{:id => Solusvm.api_id, :key => Solusvm.api_key}
end
- # TODO: clean this up
def log_messages(options)
- if Solusvm.api_options[:logger] && Solusvm.api_options[:logger].respond_to?(Solusvm.api_options[:logger_method])
- Solusvm.api_options[:logger].send(Solusvm.api_options[:logger_method], "[Start] => #{options[:action]}")
+ logger, logger_method = Solusvm.api_options[:logger], Solusvm.api_options[:logger_method]
+
+ if logger && logger.respond_to?(logger_method)
+ logger.send(logger_method, "[Start] => #{options[:action]}")
returned_parameters.each do |k,v|
- Solusvm.api_options[:logger].send(Solusvm.api_options[:logger_method], " #{k} => #{v}")
+ logger.send(logger_method, " #{k} => #{v}")
end
- Solusvm.api_options[:logger].send(Solusvm.api_options[:logger_method], "[End] => #{options[:action]}")
+ logger.send(logger_method, "[End] => #{options[:action]}")
end
end
# API response message
def statusmsg