Class XMLRPC::Client
In: xmlrpc/client.rb
Parent: Object

Methods

Included Modules

ParserWriterChooseMixin ParseContentType

Classes and Modules

Class XMLRPC::Client::Proxy

Constants

USER_AGENT = "XMLRPC::Client (Ruby #{RUBY_VERSION})"

External Aliases

new2 -> new_from_uri
new3 -> new_from_hash

Attributes

cookie  [RW]  Cookie support
http_header_extra  [RW]  add additional HTTP headers to the request
http_last_response  [R]  makes last HTTP response accessible
password  [R] 
timeout  [R] 
user  [R] 

Public Class methods

Constructors ——————————————————————-

[Source]

# File xmlrpc/client.rb, line 295
    def initialize(host=nil, path=nil, port=nil, proxy_host=nil, proxy_port=nil, 
                   user=nil, password=nil, use_ssl=nil, timeout=nil)

      @http_header_extra = nil
      @http_last_response = nil 
      @cookie = nil

      @host       = host || "localhost"
      @path       = path || "/RPC2"
      @proxy_host = proxy_host
      @proxy_port = proxy_port
      @proxy_host ||= 'localhost' if @proxy_port != nil
      @proxy_port ||= 8080 if @proxy_host != nil
      @use_ssl    = use_ssl || false
      @timeout    = timeout || 30

      if use_ssl
        require "net/https"
        @port = port || 443
      else
        @port = port || 80
      end

      @user, @password = user, password

      set_auth

      # convert ports to integers
      @port = @port.to_i if @port != nil
      @proxy_port = @proxy_port.to_i if @proxy_port != nil

      # HTTP object for synchronous calls
      Net::HTTP.version_1_2
      @http = Net::HTTP.new(@host, @port, @proxy_host, @proxy_port) 
      @http.use_ssl = @use_ssl if @use_ssl
      @http.read_timeout = @timeout
      @http.open_timeout = @timeout

      @parser = nil
      @create = nil
    end

[Source]

# File xmlrpc/client.rb, line 340
    def new2(uri, proxy=nil, timeout=nil)
      if match = /^([^:]+):\/\/(([^@]+)@)?([^\/]+)(\/.*)?$/.match(uri)
        proto = match[1]
        user, passwd = (match[3] || "").split(":")
        host, port = match[4].split(":") 
        path = match[5]

        if proto != "http" and proto != "https"
          raise "Wrong protocol specified. Only http or https allowed!"
        end

      else
        raise "Wrong URI as parameter!"
      end
 
      proxy_host, proxy_port = (proxy || "").split(":")

      self.new(host, path, port, proxy_host, proxy_port, user, passwd, (proto == "https"), timeout)
    end

[Source]

# File xmlrpc/client.rb, line 362
    def new3(hash={})

      # convert all keys into lowercase strings
      h = {}
      hash.each { |k,v| h[k.to_s.downcase] = v }

      self.new(h['host'], h['path'], h['port'], h['proxy_host'], h['proxy_port'], h['user'], h['password'],
               h['use_ssl'], h['timeout'])
    end

Public Instance methods

Call methods —————————————————————

[Source]

# File xmlrpc/client.rb, line 409
    def call(method, *args)
      ok, param = call2(method, *args) 
      if ok
        param
      else
        raise param
      end
    end

[Source]

# File xmlrpc/client.rb, line 418
    def call2(method, *args)
      request = create().methodCall(method, *args)
      data = do_rpc(request, false)
      parser().parseMethodResponse(data)
    end

[Source]

# File xmlrpc/client.rb, line 433
    def call2_async(method, *args)
      request = create().methodCall(method, *args)
      data = do_rpc(request, true)
      parser().parseMethodResponse(data)
    end

[Source]

# File xmlrpc/client.rb, line 424
    def call_async(method, *args)
      ok, param = call2_async(method, *args) 
      if ok
        param
      else
        raise param
      end
    end

Multicall methods —————————————————————

[Source]

# File xmlrpc/client.rb, line 442
    def multicall(*methods)
      ok, params = multicall2(*methods)
      if ok
        params
      else
        raise params
      end
    end

[Source]

# File xmlrpc/client.rb, line 451
    def multicall2(*methods)
      gen_multicall(methods, false)
    end

[Source]

# File xmlrpc/client.rb, line 464
    def multicall2_async(*methods)
      gen_multicall(methods, true)
    end

[Source]

# File xmlrpc/client.rb, line 455
    def multicall_async(*methods)
      ok, params = multicall2_async(*methods)
      if ok
        params
      else
        raise params
      end
    end

[Source]

# File xmlrpc/client.rb, line 402
    def password=(new_password)
      @password = new_password
      set_auth
    end

Proxy generating methods ——————————————

[Source]

# File xmlrpc/client.rb, line 471
    def proxy(prefix=nil, *args)
      Proxy.new(self, prefix, args, :call)
    end

[Source]

# File xmlrpc/client.rb, line 475
    def proxy2(prefix=nil, *args)
      Proxy.new(self, prefix, args, :call2)
    end

[Source]

# File xmlrpc/client.rb, line 483
    def proxy2_async(prefix=nil, *args)
      Proxy.new(self, prefix, args, :call2_async)
    end

[Source]

# File xmlrpc/client.rb, line 479
    def proxy_async(prefix=nil, *args)
      Proxy.new(self, prefix, args, :call_async)
    end

[Source]

# File xmlrpc/client.rb, line 391
    def timeout=(new_timeout)
      @timeout = new_timeout
      @http.read_timeout = @timeout
      @http.open_timeout = @timeout
    end

[Source]

# File xmlrpc/client.rb, line 397
    def user=(new_user)
      @user = new_user
      set_auth
    end

[Validate]