summaryrefslogtreecommitdiff
path: root/sample/soap/raa/iRAA.rb
blob: 2b188fb887dc549737b401ed736303d5f984ff96 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
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
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
require 'soap/mapping'


module RAA; extend SOAP


InterfaceNS = "http://www.ruby-lang.org/xmlns/soap/interface/RAA/0.0.2/"
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, :updated, :created

  def initialize(category = nil, product = nil, owner = nil, updated = nil, created = nil)
    @category = category
    @product = product
    @owner = owner
    @updated = updated
    @created = created
  end

  def <=>(rhs)
    @updated <=> rhs.updated
  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