Module: XMLRPC::Convert
- Defined in:
- lib/xmlrpc/parser.rb
Overview
Helper class used to convert types.
Class Method Summary collapse
-
.base64(str) ⇒ Object
Decodes the given
str
using XMLRPC::Base64.decode. -
.boolean(str) ⇒ Object
Converts a String to
true
orfalse
. -
.dateTime(str) ⇒ Object
Converts a the given
str
to adateTime.iso8601
formatted date. -
.double(str) ⇒ Object
Converts a String to a Float.
-
.fault(hash) ⇒ Object
Converts the given
hash
to an XMLRPC::FaultException object by passing thefaultCode
andfaultString
attributes of the Hash to XMLRPC::FaultException.new. -
.int(str) ⇒ Object
Converts a String to an Integer.
-
.struct(hash) ⇒ Object
Converts the given
hash
to a marshalled object.
Class Method Details
.base64(str) ⇒ Object
Decodes the given str
using XMLRPC::Base64.decode
135 136 137 |
# File 'lib/xmlrpc/parser.rb', line 135 def self.base64(str) XMLRPC::Base64.decode(str) end |
.boolean(str) ⇒ Object
Converts a String to true
or false
Raises an exception if str
is not 0
or 1
83 84 85 86 87 88 89 90 |
# File 'lib/xmlrpc/parser.rb', line 83 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) ⇒ Object
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
104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 |
# File 'lib/xmlrpc/parser.rb', line 104 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) ⇒ Object
Converts a String to a Float
See also String.to_f
95 96 97 |
# File 'lib/xmlrpc/parser.rb', line 95 def self.double(str) str.to_f end |
.fault(hash) ⇒ Object
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 an Integer -
'faultString'
key is a String
174 175 176 177 178 179 180 181 182 183 |
# File 'lib/xmlrpc/parser.rb', line 174 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) ⇒ Object
Converts a String to an Integer
See also String.to_i
76 77 78 |
# File 'lib/xmlrpc/parser.rb', line 76 def self.int(str) str.to_i end |
.struct(hash) ⇒ Object
Converts the given hash
to a marshalled object.
Returns the given hash
if an exception occurs.
142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 |
# File 'lib/xmlrpc/parser.rb', line 142 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 |