Module: XMLRPC::Convert

Defined in:
lib/xmlrpc/parser.rb

Class Method Summary collapse

Class Method Details

.base64(str) ⇒ Object



118
119
120
# File 'lib/xmlrpc/parser.rb', line 118

def self.base64(str)
  XMLRPC::Base64.decode(str)
end

.boolean(str) ⇒ Object



75
76
77
78
79
80
81
82
# File 'lib/xmlrpc/parser.rb', line 75

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



88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
# File 'lib/xmlrpc/parser.rb', line 88

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



84
85
86
# File 'lib/xmlrpc/parser.rb', line 84

def self.double(str)
  str.to_f
end

.fault(hash) ⇒ Object



145
146
147
148
149
150
151
152
153
154
# File 'lib/xmlrpc/parser.rb', line 145

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



71
72
73
# File 'lib/xmlrpc/parser.rb', line 71

def self.int(str)
  str.to_i
end

.struct(hash) ⇒ Object



122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
# File 'lib/xmlrpc/parser.rb', line 122

def self.struct(hash)
  # convert to marhalled 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 =~ /^([\w_][\w_0-9]*)$/
      }
      obj
    rescue
      hash
    end
  end
end