Skip to content
Snippets Groups Projects
iRAA.rb 3.13 KiB
Newer Older
  • Learn to ignore specific revisions
  • require 'soap/mapping'
    
    
    module RAA; extend SOAP
    
    
    InterfaceNS = "http://www.ruby-lang.org/xmlns/soap/interface/RAA/0.0.1"
    MappingRegistry = SOAP::Mapping::Registry.new
    
    Methods = [
      ['getAllListings', ['retval', 'return']],
      ['getProductTree', ['retval', 'return']],
      ['getInfoFromCategory', ['in', 'category'], [ 'retval', 'return']],
      ['getModifiedInfoSince', ['in', 'time'], [ 'retval', 'return']],
      ['getInfoFromName', ['in', 'name'], ['retval', 'return']],
    ]
    
    
    class Category
      include SOAP::Marshallable
    
      @@schema_type = 'Category'
      @@schema_ns = InterfaceNS
    
      attr_reader :major, :minor
    
      def initialize(major, minor = nil)
        @major = major
        @minor = minor
      end
    
      def to_s
        "#{ @major }/#{ @minor }"
      end
    
      def ==(rhs)
        if @major != rhs.major
          false
        elsif !@minor or !rhs.minor
          true
        else
          @minor == rhs.minor
        end
      end
    end
    
    MappingRegistry.set(
      ::RAA::Category,
      ::SOAP::SOAPStruct,
      ::SOAP::Mapping::Registry::TypedStructFactory,
      { :type => XSD::QName.new(InterfaceNS, "Category") }
    )
    
    class Product
      include SOAP::Marshallable
    
      @@schema_type = 'Product'
      @@schema_ns = InterfaceNS
    
      attr_reader :id, :name
      attr_accessor :short_description, :version, :status, :homepage, :download, :license, :description
    
      def initialize(name, short_description = nil, version = nil, status = nil, homepage = nil, download = nil, license = nil, description = nil)
        @name = name
        @short_description = short_description
        @version = version
        @status = status
        @homepage = homepage
        @download = download
        @license = license
        @description = description
      end
    end
    
    MappingRegistry.set(
      ::RAA::Product,
      ::SOAP::SOAPStruct,
      ::SOAP::Mapping::Registry::TypedStructFactory,
      { :type => XSD::QName.new(InterfaceNS, "Product") }
    )
    
    class Owner
      include SOAP::Marshallable
    
      @@schema_type = 'Owner'
      @@schema_ns = InterfaceNS
    
      attr_reader :id
      attr_accessor :email, :name
    
      def initialize(email, name)
        @email = email
        @name = name
        @id = "#{ @email }-#{ @name }"
      end
    end
    
    MappingRegistry.set(
      ::RAA::Owner,
      ::SOAP::SOAPStruct,
      ::SOAP::Mapping::Registry::TypedStructFactory,
      { :type => XSD::QName.new(InterfaceNS, "Owner") }
    )
    
    class Info
      include SOAP::Marshallable
    
      @@schema_type = 'Info'
      @@schema_ns = InterfaceNS
    
      attr_accessor :category, :product, :owner, :update
    
      def initialize(category = nil, product = nil, owner = nil, update = nil)
        @category = category
        @product = product
        @owner = owner
        @update = update
      end
    
      def <=>(rhs)
        @update <=> rhs.update
      end
    
      def eql?(rhs)
        @product.name == rhs.product.name
      end
    end
    
    MappingRegistry.set(
      ::RAA::Info,
      ::SOAP::SOAPStruct,
      ::SOAP::Mapping::Registry::TypedStructFactory,
      { :type => XSD::QName.new(InterfaceNS, "Info") }
    )
    
    class StringArray < Array; end
    MappingRegistry.set(
      ::RAA::StringArray,
      ::SOAP::SOAPArray,
      ::SOAP::Mapping::Registry::TypedArrayFactory,
      { :type => XSD::XSDString::Type }
    )
    
    class InfoArray < Array; end
    MappingRegistry.set(
      ::RAA::InfoArray,
      ::SOAP::SOAPArray,
      ::SOAP::Mapping::Registry::TypedArrayFactory,
      { :type => XSD::QName.new(InterfaceNS, 'Info') }
    )
    
    
    end