module XMLRPC::Convert
Helper class used to convert types.
Public Class Methods
Decodes the given str
using XMLRPC::Base64.decode
# File lib/xmlrpc/parser.rb, line 136 def self.base64(str) XMLRPC::Base64.decode(str) end
Converts a String to true
or false
Raises an exception if str
is not 0
or 1
# File lib/xmlrpc/parser.rb, line 84 def self.boolean(str) case str when "0" then false when "1" then true else raise "RPC-value of type boolean is wrong" end end
Converts a the given str
to a dateTime.iso8601
formatted date.
Raises an exception if the String isn't in dateTime.iso8601
format.
See also, XMLRPC::DateTime
# File lib/xmlrpc/parser.rb, line 105 def self.dateTime(str) case str when /^(-?\d\d\d\d)-?(\d\d)-?(\d\d)T(\d\d):(\d\d):(\d\d)(?:Z|([+-])(\d\d):?(\d\d))?$/ a = [$1, $2, $3, $4, $5, $6].collect{|i| i.to_i} if $7 ofs = $8.to_i*3600 + $9.to_i*60 ofs = -ofs if $7=='+' utc = Time.utc(*a) + ofs a = [ utc.year, utc.month, utc.day, utc.hour, utc.min, utc.sec ] end XMLRPC::DateTime.new(*a) when /^(-?\d\d)-?(\d\d)-?(\d\d)T(\d\d):(\d\d):(\d\d)(Z|([+-]\d\d):(\d\d))?$/ a = [$1, $2, $3, $4, $5, $6].collect{|i| i.to_i} if a[0] < 70 a[0] += 2000 else a[0] += 1900 end if $7 ofs = $8.to_i*3600 + $9.to_i*60 ofs = -ofs if $7=='+' utc = Time.utc(*a) + ofs a = [ utc.year, utc.month, utc.day, utc.hour, utc.min, utc.sec ] end XMLRPC::DateTime.new(*a) else raise "wrong dateTime.iso8601 format " + str end end
Converts a String to a Float
See also String.to_f
# File lib/xmlrpc/parser.rb, line 96 def self.double(str) str.to_f end
Converts the given hash
to an XMLRPC::FaultException
object by passing the faultCode
and faultString
attributes of the Hash
to XMLRPC::FaultException.new
Raises an Exception
if the given hash
doesn't meet the requirements. Those requirements being:
-
2 keys
-
'faultCode'
key is anInteger
-
'faultString'
key is a String
# File lib/xmlrpc/parser.rb, line 175 def self.fault(hash) if hash.kind_of? Hash and hash.size == 2 and hash.has_key? "faultCode" and hash.has_key? "faultString" and hash["faultCode"].kind_of? Integer and hash["faultString"].kind_of? String XMLRPC::FaultException.new(hash["faultCode"], hash["faultString"]) else raise "wrong fault-structure: #{hash.inspect}" end end
Converts a String to an Integer
See also String.to_i
# File lib/xmlrpc/parser.rb, line 77 def self.int(str) str.to_i end
Converts the given hash
to a marshalled object.
Returns the given hash
if an exception occurs.
# File lib/xmlrpc/parser.rb, line 143 def self.struct(hash) # convert to marshalled object klass = hash["___class___"] if klass.nil? or Config::ENABLE_MARSHALLING == false hash else begin mod = Module klass.split("::").each {|const| mod = mod.const_get(const.strip)} obj = mod.allocate hash.delete "___class___" hash.each {|key, value| obj.instance_variable_set("@#{ key }", value) if key =~ /^([a-zA-Z_]\w*)$/ } obj rescue hash end end end