In Files

  • xmlrpc/parser.rb

XMLRPC::Convert

Helper class used to convert types.

Public Class Methods

base64(str) click to toggle source

Decodes the given str using XMLRPC::Base64.decode

 
               # File xmlrpc/parser.rb, line 135
def self.base64(str)
  XMLRPC::Base64.decode(str)
end
            
boolean(str) click to toggle source

Converts a String to true or false

Raises an exception if str is not 0 or 1

 
               # File 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) click to toggle source

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

 
               # File 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) click to toggle source

Converts a String to a Float

See also String.to_f

 
               # File xmlrpc/parser.rb, line 95
def self.double(str)
  str.to_f
end
            
fault(hash) click to toggle source

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

 
               # File 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) click to toggle source

Converts a String to an Integer

See also String.to_i

 
               # File xmlrpc/parser.rb, line 76
def self.int(str)
  str.to_i
end
            
struct(hash) click to toggle source

Converts the given hash to a marshalled object.

Returns the given hash if an exception occurs.

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

Commenting is here to help enhance the documentation. For example, code samples, or clarification of the documentation.

If you have questions about Ruby or the documentation, please post to one of the Ruby mailing lists. You will get better, faster, help that way.

If you wish to post a correction of the docs, please do so, but also file bug report so that it can be corrected for the next release. Thank you.

If you want to help improve the Ruby documentation, please visit Documenting-ruby.org.

blog comments powered by Disqus