Module: XMLRPC::Convert
Relationships & Source Files | |
Defined in: | lib/xmlrpc/parser.rb |
Overview
Helper class used to convert types.
Class Method Summary
-
.base64(str)
Decodes the given
str
using Base64.decode -
.boolean(str)
Converts a String to
true
orfalse
-
.dateTime(str)
Converts a the given
str
to adateTime.iso8601
formatted date. -
.double(str)
Converts a String to a Float.
-
.fault(hash)
Converts the given
hash
to an FaultException object by passing thefaultCode
andfaultString
attributes of the Hash to FaultException.new -
.int(str)
Converts a String to an Integer.
-
.struct(hash)
Converts the given
hash
to a marshalled object.
Class Method Details
.base64(str)
Decodes the given str
using Base64.decode
.boolean(str)
Converts a String to true
or false
Raises an exception if str
is not 0
or 1
# File 'lib/xmlrpc/parser.rb', line 48
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
.dateTime(str)
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, DateTime
# File 'lib/xmlrpc/parser.rb', line 69
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
.double(str)
Converts a String to a Float
See also String.to_f
# File 'lib/xmlrpc/parser.rb', line 60
def self.double(str) str.to_f end
.fault(hash)
Converts the given hash
to an FaultException object by passing the faultCode
and faultString
attributes of the Hash to FaultException.new
Raises an Exception if the given hash
doesn't meet the requirements. Those requirements being:
-
2 keys
-
'faultCode'
key is an Integer -
'faultString'
key is a String
# File 'lib/xmlrpc/parser.rb', line 139
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
.int(str)
Converts a String to an Integer
See also String.to_i
# File 'lib/xmlrpc/parser.rb', line 41
def self.int(str) str.to_i end
.struct(hash)
Converts the given hash
to a marshalled object.
Returns the given hash
if an exception occurs.
# File 'lib/xmlrpc/parser.rb', line 107
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