123456789_123456789_123456789_123456789_123456789_

Module: XMLRPC::Convert

Relationships & Source Files
Defined in: lib/xmlrpc/parser.rb

Overview

Helper class used to convert types.

Class Method Summary

Class Method Details

.base64(str)

Decodes the given str using Base64.decode

[ GitHub ]

  
# File 'lib/xmlrpc/parser.rb', line 135

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

.boolean(str)

Converts a String to true or false

Raises an exception if str is not 0 or 1

[ GitHub ]

  
# 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)

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

[ GitHub ]

  
# 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)

Converts a String to a Float

See also String.to_f

[ GitHub ]

  
# File 'lib/xmlrpc/parser.rb', line 95

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

[ GitHub ]

  
# 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)

Converts a String to an Integer

See also String.to_i

[ GitHub ]

  
# File 'lib/xmlrpc/parser.rb', line 76

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.

[ GitHub ]

  
# 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