titlepage 0.9.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,201 @@
1
+ require 'soap/mapping'
2
+
3
+ module TitlePage
4
+
5
+ module DefaultMappingRegistry
6
+ EncodedRegistry = ::SOAP::Mapping::EncodedRegistry.new
7
+ LiteralRegistry = ::SOAP::Mapping::LiteralRegistry.new
8
+ NsTitleQuery = "urn:TitleQuery"
9
+
10
+ EncodedRegistry.register(
11
+ :class => TitlePage::ProductIdentifier,
12
+ :schema_type => XSD::QName.new(NsTitleQuery, "ProductIdentifier"),
13
+ :schema_element => [
14
+ ["productIDType", ["SOAP::SOAPString", XSD::QName.new(nil, "ProductIDType")]],
15
+ ["iDValue", ["SOAP::SOAPString", XSD::QName.new(nil, "IDValue")]]
16
+ ]
17
+ )
18
+
19
+ EncodedRegistry.register(
20
+ :class => TitlePage::Title,
21
+ :schema_type => XSD::QName.new(NsTitleQuery, "Title"),
22
+ :schema_element => [
23
+ ["titleType", ["SOAP::SOAPString", XSD::QName.new(nil, "TitleType")]],
24
+ ["titleText", ["SOAP::SOAPString", XSD::QName.new(nil, "TitleText")]],
25
+ ["titlePrefix", ["SOAP::SOAPString", XSD::QName.new(nil, "TitlePrefix")]],
26
+ ["titleWithoutPrefix", ["SOAP::SOAPString", XSD::QName.new(nil, "TitleWithoutPrefix")]],
27
+ ["subtitle", ["SOAP::SOAPString", XSD::QName.new(nil, "Subtitle")]]
28
+ ]
29
+ )
30
+
31
+ EncodedRegistry.register(
32
+ :class => TitlePage::Contributor,
33
+ :schema_type => XSD::QName.new(NsTitleQuery, "Contributor"),
34
+ :schema_element => [
35
+ ["sequenceNumber", ["SOAP::SOAPInteger", XSD::QName.new(nil, "SequenceNumber")]],
36
+ ["contributorRole", ["SOAP::SOAPString", XSD::QName.new(nil, "ContributorRole")]],
37
+ ["personName", ["SOAP::SOAPString", XSD::QName.new(nil, "PersonName")]],
38
+ ["personNameInverted", ["SOAP::SOAPString", XSD::QName.new(nil, "PersonNameInverted")]],
39
+ ["titlesBeforeNames", ["SOAP::SOAPString", XSD::QName.new(nil, "TitlesBeforeNames")]],
40
+ ["keyNames", ["SOAP::SOAPString", XSD::QName.new(nil, "KeyNames")]]
41
+ ]
42
+ )
43
+
44
+ EncodedRegistry.register(
45
+ :class => TitlePage::Stock,
46
+ :schema_type => XSD::QName.new(NsTitleQuery, "Stock"),
47
+ :schema_element => [
48
+ ["onHand", ["SOAP::SOAPString", XSD::QName.new(nil, "OnHand")]],
49
+ ["onOrder", ["SOAP::SOAPString", XSD::QName.new(nil, "OnOrder")]]
50
+ ]
51
+ )
52
+
53
+ EncodedRegistry.register(
54
+ :class => TitlePage::Price,
55
+ :schema_type => XSD::QName.new(NsTitleQuery, "Price"),
56
+ :schema_element => [
57
+ ["priceTypeCode", ["SOAP::SOAPString", XSD::QName.new(nil, "PriceTypeCode")]],
58
+ ["priceAmount", ["SOAP::SOAPDecimal", XSD::QName.new(nil, "PriceAmount")]]
59
+ ]
60
+ )
61
+
62
+ EncodedRegistry.register(
63
+ :class => TitlePage::SupplyDetail,
64
+ :schema_type => XSD::QName.new(NsTitleQuery, "SupplyDetail"),
65
+ :schema_element => [
66
+ ["supplierName", ["SOAP::SOAPString", XSD::QName.new(nil, "SupplierName")]],
67
+ ["supplierRole", ["SOAP::SOAPString", XSD::QName.new(nil, "SupplierRole")]],
68
+ ["productAvailability", ["SOAP::SOAPString", XSD::QName.new(nil, "ProductAvailability")]],
69
+ ["expectedShipDate", ["SOAP::SOAPString", XSD::QName.new(nil, "ExpectedShipDate")]],
70
+ ["stock", ["TitlePage::Stock", XSD::QName.new(nil, "Stock")]],
71
+ ["packQuantity", ["SOAP::SOAPInteger", XSD::QName.new(nil, "PackQuantity")]],
72
+ ["price", ["TitlePage::Price", XSD::QName.new(nil, "Price")]]
73
+ ]
74
+ )
75
+
76
+ EncodedRegistry.set(
77
+ TitlePage::ArrayOfContributor,
78
+ ::SOAP::SOAPArray,
79
+ ::SOAP::Mapping::EncodedRegistry::TypedArrayFactory,
80
+ { :type => XSD::QName.new(NsTitleQuery, "Contributor") }
81
+ )
82
+
83
+ EncodedRegistry.set(
84
+ TitlePage::ArrayOfProductIdentifier,
85
+ ::SOAP::SOAPArray,
86
+ ::SOAP::Mapping::EncodedRegistry::TypedArrayFactory,
87
+ { :type => XSD::QName.new(NsTitleQuery, "ProductIdentifier") }
88
+ )
89
+
90
+ EncodedRegistry.register(
91
+ :class => TitlePage::Product,
92
+ :schema_type => XSD::QName.new(NsTitleQuery, "Product"),
93
+ :schema_element => [
94
+ ["productIdentifiers", ["TitlePage::ArrayOfProductIdentifier", XSD::QName.new(nil, "ProductIdentifiers")]],
95
+ ["title", ["TitlePage::Title", XSD::QName.new(nil, "Title")]],
96
+ ["contributors", ["TitlePage::ArrayOfContributor", XSD::QName.new(nil, "Contributors")]],
97
+ ["supplyDetail", ["TitlePage::SupplyDetail", XSD::QName.new(nil, "SupplyDetail")]]
98
+ ]
99
+ )
100
+
101
+ EncodedRegistry.register(
102
+ :class => TitlePage::SearchResults,
103
+ :schema_type => XSD::QName.new(NsTitleQuery, "SearchResults"),
104
+ :schema_element => [
105
+ ["iSBN", ["SOAP::SOAPString", XSD::QName.new(nil, "ISBN")]],
106
+ ["eAN", ["SOAP::SOAPString", XSD::QName.new(nil, "EAN")]],
107
+ ["iSBN13", ["SOAP::SOAPString", XSD::QName.new(nil, "ISBN13")]],
108
+ ["product", ["TitlePage::Product", XSD::QName.new(nil, "Product")]]
109
+ ]
110
+ )
111
+
112
+ LiteralRegistry.register(
113
+ :class => TitlePage::ProductIdentifier,
114
+ :schema_type => XSD::QName.new(NsTitleQuery, "ProductIdentifier"),
115
+ :schema_element => [
116
+ ["productIDType", ["SOAP::SOAPString", XSD::QName.new(nil, "ProductIDType")]],
117
+ ["iDValue", ["SOAP::SOAPString", XSD::QName.new(nil, "IDValue")]]
118
+ ]
119
+ )
120
+
121
+ LiteralRegistry.register(
122
+ :class => TitlePage::Title,
123
+ :schema_type => XSD::QName.new(NsTitleQuery, "Title"),
124
+ :schema_element => [
125
+ ["titleType", ["SOAP::SOAPString", XSD::QName.new(nil, "TitleType")]],
126
+ ["titleText", ["SOAP::SOAPString", XSD::QName.new(nil, "TitleText")]],
127
+ ["titlePrefix", ["SOAP::SOAPString", XSD::QName.new(nil, "TitlePrefix")]],
128
+ ["titleWithoutPrefix", ["SOAP::SOAPString", XSD::QName.new(nil, "TitleWithoutPrefix")]],
129
+ ["subtitle", ["SOAP::SOAPString", XSD::QName.new(nil, "Subtitle")]]
130
+ ]
131
+ )
132
+
133
+ LiteralRegistry.register(
134
+ :class => TitlePage::Contributor,
135
+ :schema_type => XSD::QName.new(NsTitleQuery, "Contributor"),
136
+ :schema_element => [
137
+ ["sequenceNumber", ["SOAP::SOAPInteger", XSD::QName.new(nil, "SequenceNumber")]],
138
+ ["contributorRole", ["SOAP::SOAPString", XSD::QName.new(nil, "ContributorRole")]],
139
+ ["personName", ["SOAP::SOAPString", XSD::QName.new(nil, "PersonName")]],
140
+ ["personNameInverted", ["SOAP::SOAPString", XSD::QName.new(nil, "PersonNameInverted")]],
141
+ ["titlesBeforeNames", ["SOAP::SOAPString", XSD::QName.new(nil, "TitlesBeforeNames")]],
142
+ ["keyNames", ["SOAP::SOAPString", XSD::QName.new(nil, "KeyNames")]]
143
+ ]
144
+ )
145
+
146
+ LiteralRegistry.register(
147
+ :class => TitlePage::Stock,
148
+ :schema_type => XSD::QName.new(NsTitleQuery, "Stock"),
149
+ :schema_element => [
150
+ ["onHand", ["SOAP::SOAPString", XSD::QName.new(nil, "OnHand")]],
151
+ ["onOrder", ["SOAP::SOAPString", XSD::QName.new(nil, "OnOrder")]]
152
+ ]
153
+ )
154
+
155
+ LiteralRegistry.register(
156
+ :class => TitlePage::Price,
157
+ :schema_type => XSD::QName.new(NsTitleQuery, "Price"),
158
+ :schema_element => [
159
+ ["priceTypeCode", ["SOAP::SOAPString", XSD::QName.new(nil, "PriceTypeCode")]],
160
+ ["priceAmount", ["SOAP::SOAPDecimal", XSD::QName.new(nil, "PriceAmount")]]
161
+ ]
162
+ )
163
+
164
+ LiteralRegistry.register(
165
+ :class => TitlePage::SupplyDetail,
166
+ :schema_type => XSD::QName.new(NsTitleQuery, "SupplyDetail"),
167
+ :schema_element => [
168
+ ["supplierName", ["SOAP::SOAPString", XSD::QName.new(nil, "SupplierName")]],
169
+ ["supplierRole", ["SOAP::SOAPString", XSD::QName.new(nil, "SupplierRole")]],
170
+ ["productAvailability", ["SOAP::SOAPString", XSD::QName.new(nil, "ProductAvailability")]],
171
+ ["expectedShipDate", ["SOAP::SOAPString", XSD::QName.new(nil, "ExpectedShipDate")]],
172
+ ["stock", ["TitlePage::Stock", XSD::QName.new(nil, "Stock")]],
173
+ ["packQuantity", ["SOAP::SOAPInteger", XSD::QName.new(nil, "PackQuantity")]],
174
+ ["price", ["TitlePage::Price", XSD::QName.new(nil, "Price")]]
175
+ ]
176
+ )
177
+
178
+ LiteralRegistry.register(
179
+ :class => TitlePage::Product,
180
+ :schema_type => XSD::QName.new(NsTitleQuery, "Product"),
181
+ :schema_element => [
182
+ ["productIdentifiers", ["TitlePage::ArrayOfProductIdentifier", XSD::QName.new(nil, "ProductIdentifiers")]],
183
+ ["title", ["TitlePage::Title", XSD::QName.new(nil, "Title")]],
184
+ ["contributors", ["TitlePage::ArrayOfContributor", XSD::QName.new(nil, "Contributors")]],
185
+ ["supplyDetail", ["TitlePage::SupplyDetail", XSD::QName.new(nil, "SupplyDetail")]]
186
+ ]
187
+ )
188
+
189
+ LiteralRegistry.register(
190
+ :class => TitlePage::SearchResults,
191
+ :schema_type => XSD::QName.new(NsTitleQuery, "SearchResults"),
192
+ :schema_element => [
193
+ ["iSBN", ["SOAP::SOAPString", XSD::QName.new(nil, "ISBN")]],
194
+ ["eAN", ["SOAP::SOAPString", XSD::QName.new(nil, "EAN")]],
195
+ ["iSBN13", ["SOAP::SOAPString", XSD::QName.new(nil, "ISBN13")]],
196
+ ["product", ["TitlePage::Product", XSD::QName.new(nil, "Product")]]
197
+ ]
198
+ )
199
+ end
200
+
201
+ end
@@ -0,0 +1,87 @@
1
+ require 'soap/rpc/driver'
2
+
3
+ module TitlePage
4
+ class TitleQueryPortType < ::SOAP::RPC::Driver
5
+ DefaultEndpointUrl = "http://www.titlepage.com.au/ws/TitleQuery.php"
6
+ NsWs = "http://www.titlepage.com/ws"
7
+
8
+ Methods = [
9
+ [ XSD::QName.new(NsWs, "Login"),
10
+ "http://www.titlepage.com.au/ws/TitleQuery.php/Login",
11
+ "login",
12
+ [ ["in", "UserName", ["::SOAP::SOAPString"]],
13
+ ["in", "Password", ["::SOAP::SOAPString"]],
14
+ ["retval", "Token", ["::SOAP::SOAPString"]] ],
15
+ { :request_style => :rpc, :request_use => :encoded,
16
+ :response_style => :rpc, :response_use => :encoded,
17
+ :faults => {} }
18
+ ],
19
+ [ XSD::QName.new(NsWs, "SearchByISBN"),
20
+ "http://www.titlepage.com.au/ws/TitleQuery.php/SearchByISBN",
21
+ "searchByISBN",
22
+ [ ["in", "Token", ["::SOAP::SOAPString"]],
23
+ ["in", "ISBN", ["::SOAP::SOAPString"]],
24
+ ["retval", "SearchResults", ["TitlePage::SearchResults", "urn:TitleQuery", "SearchResults"]] ],
25
+ { :request_style => :rpc, :request_use => :encoded,
26
+ :response_style => :rpc, :response_use => :encoded,
27
+ :faults => {} }
28
+ ],
29
+ [ XSD::QName.new(NsWs, "SearchByISBN13"),
30
+ "http://www.titlepage.com.au/ws/TitleQuery.php/SearchByISBN13",
31
+ "searchByISBN13",
32
+ [ ["in", "Token", ["::SOAP::SOAPString"]],
33
+ ["in", "ISBN13", ["::SOAP::SOAPString"]],
34
+ ["retval", "SearchResults", ["TitlePage::SearchResults", "urn:TitleQuery", "SearchResults"]] ],
35
+ { :request_style => :rpc, :request_use => :encoded,
36
+ :response_style => :rpc, :response_use => :encoded,
37
+ :faults => {} }
38
+ ],
39
+ [ XSD::QName.new(NsWs, "SearchByEAN"),
40
+ "http://www.titlepage.com.au/ws/TitleQuery.php/SearchByEAN",
41
+ "searchByEAN",
42
+ [ ["in", "Token", ["::SOAP::SOAPString"]],
43
+ ["in", "EAN", ["::SOAP::SOAPString"]],
44
+ ["retval", "SearchResults", ["TitlePage::SearchResults", "urn:TitleQuery", "SearchResults"]] ],
45
+ { :request_style => :rpc, :request_use => :encoded,
46
+ :response_style => :rpc, :response_use => :encoded,
47
+ :faults => {} }
48
+ ],
49
+ [ XSD::QName.new(NsWs, "Logout"),
50
+ "http://www.titlepage.com.au/ws/TitleQuery.php/Logout",
51
+ "logout",
52
+ [ ["in", "token", ["::SOAP::SOAPString"]] ],
53
+ { :request_style => :rpc, :request_use => :encoded,
54
+ :response_style => :rpc, :response_use => :encoded,
55
+ :faults => {} }
56
+ ]
57
+ ]
58
+
59
+ def initialize(endpoint_url = nil)
60
+ endpoint_url ||= DefaultEndpointUrl
61
+ super(endpoint_url, nil)
62
+ self.mapping_registry = DefaultMappingRegistry::EncodedRegistry
63
+ self.literal_mapping_registry = DefaultMappingRegistry::LiteralRegistry
64
+ init_methods
65
+ end
66
+
67
+ private
68
+
69
+ def init_methods
70
+ Methods.each do |definitions|
71
+ opt = definitions.last
72
+ if opt[:request_style] == :document
73
+ add_document_operation(*definitions)
74
+ else
75
+ add_rpc_operation(*definitions)
76
+ qname = definitions[0]
77
+ name = definitions[2]
78
+ if qname.name != name and qname.name.capitalize == name.capitalize
79
+ ::SOAP::Mapping.define_singleton_method(self, qname.name) do |*arg|
80
+ __send__(name, *arg)
81
+ end
82
+ end
83
+ end
84
+ end
85
+ end
86
+ end
87
+ end
@@ -0,0 +1,293 @@
1
+ require 'xsd/qname'
2
+
3
+ module TitlePage
4
+
5
+ # {urn:TitleQuery}ProductIdentifier
6
+ # productIDType - SOAP::SOAPString
7
+ # iDValue - SOAP::SOAPString
8
+ class ProductIdentifier
9
+ attr_accessor :productIDType
10
+ attr_accessor :iDValue
11
+
12
+ def initialize(productIDType = nil, iDValue = nil)
13
+ @productIDType = productIDType
14
+ @iDValue = iDValue
15
+ end
16
+
17
+ # An older version of soap4r that was used to generate boilerplate code
18
+ # in versions of this gem <= 0.9.3 created methods that started with
19
+ # capitals. Detect when some code calls these old method names and
20
+ # print a deprecation warning.
21
+ def method_missing(method, *arguments)
22
+ new_method = method.to_s[0,1].downcase
23
+ new_method << method.to_s[1,20]
24
+
25
+ if self.respond_to?(new_method)
26
+ $stderr.puts "Warning: #{method} is deprecated. Use #{new_method} instead"
27
+ self.send(new_method, *arguments)
28
+ else
29
+ super
30
+ end
31
+ end
32
+ end
33
+
34
+ # {urn:TitleQuery}Title
35
+ # titleType - SOAP::SOAPString
36
+ # titleText - SOAP::SOAPString
37
+ # titlePrefix - SOAP::SOAPString
38
+ # titleWithoutPrefix - SOAP::SOAPString
39
+ # subtitle - SOAP::SOAPString
40
+ class Title
41
+ attr_accessor :titleType
42
+ attr_accessor :titleText
43
+ attr_accessor :titlePrefix
44
+ attr_accessor :titleWithoutPrefix
45
+ attr_accessor :subtitle
46
+
47
+ def initialize(titleType = nil, titleText = nil, titlePrefix = nil, titleWithoutPrefix = nil, subtitle = nil)
48
+ @titleType = titleType
49
+ @titleText = titleText
50
+ @titlePrefix = titlePrefix
51
+ @titleWithoutPrefix = titleWithoutPrefix
52
+ @subtitle = subtitle
53
+ end
54
+
55
+ # An older version of soap4r that was used to generate boilerplate code
56
+ # in versions of this gem <= 0.9.3 created methods that started with
57
+ # capitals. Detect when some code calls these old method names and
58
+ # print a deprecation warning.
59
+ def method_missing(method, *arguments)
60
+ new_method = method.to_s[0,1].downcase
61
+ new_method << method.to_s[1,20]
62
+
63
+ if self.respond_to?(new_method)
64
+ $stderr.puts "Warning: #{method} is deprecated. Use #{new_method} instead"
65
+ self.send(new_method, *arguments)
66
+ else
67
+ super
68
+ end
69
+ end
70
+ end
71
+
72
+ # {urn:TitleQuery}Contributor
73
+ # sequenceNumber - SOAP::SOAPInteger
74
+ # contributorRole - SOAP::SOAPString
75
+ # personName - SOAP::SOAPString
76
+ # personNameInverted - SOAP::SOAPString
77
+ # titlesBeforeNames - SOAP::SOAPString
78
+ # keyNames - SOAP::SOAPString
79
+ class Contributor
80
+ attr_accessor :sequenceNumber
81
+ attr_accessor :contributorRole
82
+ attr_accessor :personName
83
+ attr_accessor :personNameInverted
84
+ attr_accessor :titlesBeforeNames
85
+ attr_accessor :keyNames
86
+
87
+ def initialize(sequenceNumber = nil, contributorRole = nil, personName = nil, personNameInverted = nil, titlesBeforeNames = nil, keyNames = nil)
88
+ @sequenceNumber = sequenceNumber
89
+ @contributorRole = contributorRole
90
+ @personName = personName
91
+ @personNameInverted = personNameInverted
92
+ @titlesBeforeNames = titlesBeforeNames
93
+ @keyNames = keyNames
94
+ end
95
+
96
+ # An older version of soap4r that was used to generate boilerplate code
97
+ # in versions of this gem <= 0.9.3 created methods that started with
98
+ # capitals. Detect when some code calls these old method names and
99
+ # print a deprecation warning.
100
+ def method_missing(method, *arguments)
101
+ new_method = method.to_s[0,1].downcase
102
+ new_method << method.to_s[1,20]
103
+
104
+ if self.respond_to?(new_method)
105
+ $stderr.puts "Warning: #{method} is deprecated. Use #{new_method} instead"
106
+ self.send(new_method, *arguments)
107
+ else
108
+ super
109
+ end
110
+ end
111
+ end
112
+
113
+ # {urn:TitleQuery}Stock
114
+ # onHand - SOAP::SOAPString
115
+ # onOrder - SOAP::SOAPString
116
+ class Stock
117
+ attr_accessor :onHand
118
+ attr_accessor :onOrder
119
+
120
+ def initialize(onHand = nil, onOrder = nil)
121
+ @onHand = onHand
122
+ @onOrder = onOrder
123
+ end
124
+
125
+ # An older version of soap4r that was used to generate boilerplate code
126
+ # in versions of this gem <= 0.9.3 created methods that started with
127
+ # capitals. Detect when some code calls these old method names and
128
+ # print a deprecation warning.
129
+ def method_missing(method, *arguments)
130
+ new_method = method.to_s[0,1].downcase
131
+ new_method << method.to_s[1,20]
132
+
133
+ if self.respond_to?(new_method)
134
+ $stderr.puts "Warning: #{method} is deprecated. Use #{new_method} instead"
135
+ self.send(new_method, *arguments)
136
+ else
137
+ super
138
+ end
139
+ end
140
+ end
141
+
142
+ # {urn:TitleQuery}Price
143
+ # priceTypeCode - SOAP::SOAPString
144
+ # priceAmount - SOAP::SOAPDecimal
145
+ class Price
146
+ attr_accessor :priceTypeCode
147
+ attr_accessor :priceAmount
148
+
149
+ def initialize(priceTypeCode = nil, priceAmount = nil)
150
+ @priceTypeCode = priceTypeCode
151
+ @priceAmount = priceAmount
152
+ end
153
+
154
+ # An older version of soap4r that was used to generate boilerplate code
155
+ # in versions of this gem <= 0.9.3 created methods that started with
156
+ # capitals. Detect when some code calls these old method names and
157
+ # print a deprecation warning.
158
+ def method_missing(method, *arguments)
159
+ new_method = method.to_s[0,1].downcase
160
+ new_method << method.to_s[1,20]
161
+
162
+ if self.respond_to?(new_method)
163
+ $stderr.puts "Warning: #{method} is deprecated. Use #{new_method} instead"
164
+ self.send(new_method, *arguments)
165
+ else
166
+ super
167
+ end
168
+ end
169
+ end
170
+
171
+ # {urn:TitleQuery}SupplyDetail
172
+ # supplierName - SOAP::SOAPString
173
+ # supplierRole - SOAP::SOAPString
174
+ # productAvailability - SOAP::SOAPString
175
+ # expectedShipDate - SOAP::SOAPString
176
+ # stock - TitlePage::Stock
177
+ # packQuantity - SOAP::SOAPInteger
178
+ # price - TitlePage::Price
179
+ class SupplyDetail
180
+ attr_accessor :supplierName
181
+ attr_accessor :supplierRole
182
+ attr_accessor :productAvailability
183
+ attr_accessor :expectedShipDate
184
+ attr_accessor :stock
185
+ attr_accessor :packQuantity
186
+ attr_accessor :price
187
+
188
+ def initialize(supplierName = nil, supplierRole = nil, productAvailability = nil, expectedShipDate = nil, stock = nil, packQuantity = nil, price = nil)
189
+ @supplierName = supplierName
190
+ @supplierRole = supplierRole
191
+ @productAvailability = productAvailability
192
+ @expectedShipDate = expectedShipDate
193
+ @stock = stock
194
+ @packQuantity = packQuantity
195
+ @price = price
196
+ end
197
+
198
+ # An older version of soap4r that was used to generate boilerplate code
199
+ # in versions of this gem <= 0.9.3 created methods that started with
200
+ # capitals. Detect when some code calls these old method names and
201
+ # print a deprecation warning.
202
+ def method_missing(method, *arguments)
203
+ new_method = method.to_s[0,1].downcase
204
+ new_method << method.to_s[1,20]
205
+
206
+ if self.respond_to?(new_method)
207
+ $stderr.puts "Warning: #{method} is deprecated. Use #{new_method} instead"
208
+ self.send(new_method, *arguments)
209
+ else
210
+ super
211
+ end
212
+ end
213
+ end
214
+
215
+ # {urn:TitleQuery}Product
216
+ # productIdentifiers - TitlePage::ArrayOfProductIdentifier
217
+ # title - TitlePage::Title
218
+ # contributors - TitlePage::ArrayOfContributor
219
+ # supplyDetail - TitlePage::SupplyDetail
220
+ class Product
221
+ attr_accessor :productIdentifiers
222
+ attr_accessor :title
223
+ attr_accessor :contributors
224
+ attr_accessor :supplyDetail
225
+
226
+ def initialize(productIdentifiers = nil, title = nil, contributors = nil, supplyDetail = nil)
227
+ @productIdentifiers = productIdentifiers
228
+ @title = title
229
+ @contributors = contributors
230
+ @supplyDetail = supplyDetail
231
+ end
232
+
233
+ # An older version of soap4r that was used to generate boilerplate code
234
+ # in versions of this gem <= 0.9.3 created methods that started with
235
+ # capitals. Detect when some code calls these old method names and
236
+ # print a deprecation warning.
237
+ def method_missing(method, *arguments)
238
+ new_method = method.to_s[0,1].downcase
239
+ new_method << method.to_s[1,20]
240
+
241
+ if self.respond_to?(new_method)
242
+ $stderr.puts "Warning: #{method} is deprecated. Use #{new_method} instead"
243
+ self.send(new_method, *arguments)
244
+ else
245
+ super
246
+ end
247
+ end
248
+ end
249
+
250
+ # {urn:TitleQuery}SearchResults
251
+ # iSBN - SOAP::SOAPString
252
+ # eAN - SOAP::SOAPString
253
+ # iSBN13 - SOAP::SOAPString
254
+ # product - TitlePage::Product
255
+ class SearchResults
256
+ attr_accessor :iSBN
257
+ attr_accessor :eAN
258
+ attr_accessor :iSBN13
259
+ attr_accessor :product
260
+
261
+ def initialize(iSBN = nil, eAN = nil, iSBN13 = nil, product = nil)
262
+ @iSBN = iSBN
263
+ @eAN = eAN
264
+ @iSBN13 = iSBN13
265
+ @product = product
266
+ end
267
+
268
+ # An older version of soap4r that was used to generate boilerplate code
269
+ # in versions of this gem <= 0.9.3 created methods that started with
270
+ # capitals. Detect when some code calls these old method names and
271
+ # print a deprecation warning.
272
+ def method_missing(method, *arguments)
273
+ new_method = method.to_s[0,1].downcase
274
+ new_method << method.to_s[1,20]
275
+
276
+ if self.respond_to?(new_method)
277
+ $stderr.puts "Warning: #{method} is deprecated. Use #{new_method} instead"
278
+ self.send(new_method, *arguments)
279
+ else
280
+ super
281
+ end
282
+ end
283
+ end
284
+
285
+ # {urn:TitleQuery}ArrayOfContributor
286
+ class ArrayOfContributor < ::Array
287
+ end
288
+
289
+ # {urn:TitleQuery}ArrayOfProductIdentifier
290
+ class ArrayOfProductIdentifier < ::Array
291
+ end
292
+
293
+ end
@@ -0,0 +1,102 @@
1
+ $LOAD_PATH.unshift(File.dirname(__FILE__) + "/../")
2
+
3
+ require 'rbook/isbn'
4
+ require 'net/http'
5
+
6
+ module TitlePage
7
+
8
+ # A helper class for grabbing ONIX files from titlepage.com
9
+ #
10
+ # A valid login is required, see the site for information on applying
11
+ # for access.
12
+ #
13
+ # You should be aware of any limits of query volume imposed by the provider - currently a
14
+ # maximum of 30 queries per minute is permitted.
15
+ #
16
+ # = Usage
17
+ #
18
+ # TitlePage::WWWClient.open("username","password") do |tp|
19
+ # puts tp.get_onix_file("9780091835132")
20
+ # end
21
+ #
22
+ class WWWClient
23
+
24
+ TITLEPAGE_DOMAIN = "www.titlepage.com"
25
+
26
+ def get_onix_file(isbn)
27
+ isbn = RBook::ISBN.convert_to_isbn13(isbn)
28
+ raise ArgumentError, 'Invalid ISBN supplied' if isbn.nil?
29
+
30
+ headers = { 'Cookie' => @cookie }
31
+
32
+ login_response = Net::HTTP.start(TITLEPAGE_DOMAIN, 80) do |http|
33
+ data = [
34
+ "posted=yes",
35
+ "quicksearch=#{isbn}",
36
+ "qsrchby=ean",
37
+ "detailed=Search"
38
+ ].join("&")
39
+ http.post('/results.php', data, headers)
40
+ end
41
+ regex = /onclick=\"bookPopUp\(\'(.+)\'\);\"/
42
+ code = login_response.body.match(regex)
43
+ if code.nil?
44
+ return nil
45
+ else
46
+ code = code[1]
47
+ end
48
+ onix_file = Net::HTTP.start(TITLEPAGE_DOMAIN, 80) do |http|
49
+ data = [
50
+ "download=Download",
51
+ "rr=#{code}"
52
+ ].join("&")
53
+ http.post('/detail.php', data, headers)
54
+ end
55
+ return onix_file.body
56
+ end
57
+
58
+ # login to the titlepage website.
59
+ def login(username, password)
60
+ login_response = Net::HTTP.start(TITLEPAGE_DOMAIN, 80) do |http|
61
+ data = [
62
+ "usr=#{username}",
63
+ "pwd=#{password}",
64
+ "login=Login"
65
+ ].join("&")
66
+ http.post('/index.php', data)
67
+ end
68
+ @cookie = login_response['set-cookie']
69
+ end
70
+
71
+ # logout from the titlepage API
72
+ def logout
73
+ if @cookie
74
+ login_response = Net::HTTP.start(TITLEPAGE_DOMAIN, 80) do |http|
75
+ http.get("/logout.php")
76
+ end
77
+ @cookie = nil
78
+ end
79
+ end
80
+
81
+ # a convenience method to make queries to title page a little cleaner. This function
82
+ # essentially calls the login and logout functions for you automatically.
83
+ #
84
+ # TitlePage::WWWClient.open("username","password") do |tp|
85
+ # result = tp.get_onix_file("9780091835132")
86
+ # end
87
+ def self.open(username, password)
88
+
89
+ tp = self.new
90
+
91
+ begin
92
+ tp.login(username, password)
93
+
94
+ yield(tp)
95
+
96
+ ensure
97
+ tp.logout
98
+ end
99
+ end
100
+
101
+ end
102
+ end