Module: XMLRPC::Convert

Defined in:
lib/xmlrpc/parser.rb

Class Method Summary collapse

Class Method Details

.base64(str) ⇒ Object



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

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

.boolean(str) ⇒ Object



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

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



87
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
# File 'lib/xmlrpc/parser.rb', line 87

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



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

def self.double(str)
  str.to_f
end

.fault(hash) ⇒ Object



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

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



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

def self.int(str)
  str.to_i
end

.struct(hash) ⇒ Object



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

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 =~ /^([a-zA-Z_]\w*)$/
      }
      obj
    rescue
      hash
    end
  end
end