titlepage 0.9.6 → 1.0.0
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.
- data/Rakefile +3 -2
- data/examples/titlepage.rb +14 -15
- data/examples/titlepage_www.rb +5 -1
- data/lib/titlepage.rb +21 -16
- data/lib/titlepage/client.rb +13 -10
- data/lib/titlepage/driver.rb +84 -0
- data/lib/titlepage/utils.rb +273 -0
- data/lib/titlepage/wwwclient.rb +1 -4
- metadata +17 -8
- data/lib/titlepage/mapping_registry.rb +0 -201
- data/lib/titlepage/titlepage_driver.rb +0 -87
- data/lib/titlepage/titlepage_utils.rb +0 -299
data/Rakefile
CHANGED
@@ -6,7 +6,7 @@ require 'rake/testtask'
|
|
6
6
|
require "rake/gempackagetask"
|
7
7
|
require 'spec/rake/spectask'
|
8
8
|
|
9
|
-
PKG_VERSION = "0.
|
9
|
+
PKG_VERSION = "1.0.0"
|
10
10
|
PKG_NAME = "titlepage"
|
11
11
|
PKG_FILE_NAME = "#{PKG_NAME}-#{PKG_VERSION}"
|
12
12
|
RUBYFORGE_PROJECT = 'rbook'
|
@@ -70,7 +70,8 @@ spec = Gem::Specification.new do |spec|
|
|
70
70
|
spec.extra_rdoc_files = %w{README COPYING LICENSE}
|
71
71
|
spec.rdoc_options << '--title' << 'titlepage Documentation' << '--main' << 'README' << '-q'
|
72
72
|
spec.add_dependency('rbook-isbn', '>= 1.0')
|
73
|
-
spec.add_dependency('
|
73
|
+
spec.add_dependency('andand', '1.3.1')
|
74
|
+
spec.add_dependency('troelskn-handsoap', '0.1.2')
|
74
75
|
spec.author = "James Healy"
|
75
76
|
spec.email = "jimmy@deefa.com"
|
76
77
|
spec.rubyforge_project = "rbook"
|
data/examples/titlepage.rb
CHANGED
@@ -1,15 +1,14 @@
|
|
1
|
-
# assuming you have
|
2
|
-
# in a regular script, replace the following require
|
3
|
-
# line with these 2 lines:
|
4
|
-
# require 'rubygems'
|
5
|
-
# require '
|
6
|
-
require
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
end
|
1
|
+
# assuming you have titlepage installed via rubygems,
|
2
|
+
# in a regular script, replace the following require
|
3
|
+
# line with these 2 lines:
|
4
|
+
# require 'rubygems'
|
5
|
+
# require 'titlepage'
|
6
|
+
require File.dirname(__FILE__) + '/../lib/titlepage'
|
7
|
+
|
8
|
+
TitlePage::Client.open("username", "password") do |tp|
|
9
|
+
|
10
|
+
puts tp.find("0091835135").inspect
|
11
|
+
sleep 3
|
12
|
+
puts tp.find("1741146712").inspect
|
13
|
+
|
14
|
+
end
|
data/examples/titlepage_www.rb
CHANGED
@@ -1,4 +1,8 @@
|
|
1
|
-
|
1
|
+
# assuming you have titlepage installed via rubygems,
|
2
|
+
# in a regular script, replace the following require
|
3
|
+
# line with these 2 lines:
|
4
|
+
# require 'rubygems'
|
5
|
+
# require 'titlepage'
|
2
6
|
require File.dirname(__FILE__) + '/../lib/titlepage'
|
3
7
|
|
4
8
|
client = TitlePage::WWWClient.new
|
data/lib/titlepage.rb
CHANGED
@@ -1,21 +1,18 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
# the soap4r gem is often a little better than the version that lives in
|
4
|
-
# the ruby standard library, so if the local system has the gem installed
|
5
|
-
# use that
|
6
|
-
begin
|
7
|
-
gem 'soap4r'
|
8
|
-
rescue LoadError => e
|
9
|
-
# do nothing
|
10
|
-
end
|
1
|
+
# encoding: utf-8
|
11
2
|
|
3
|
+
require 'bigdecimal'
|
4
|
+
require 'net/http'
|
12
5
|
require 'rubygems'
|
6
|
+
gem 'troelskn-handsoap', '0.1.2'
|
7
|
+
gem 'andand', '1.3.1'
|
8
|
+
require "handsoap"
|
9
|
+
require "andand"
|
10
|
+
|
13
11
|
require 'rbook/isbn'
|
14
|
-
|
15
|
-
|
16
|
-
require
|
17
|
-
|
18
|
-
require File.dirname(__FILE__) + '/titlepage/wwwclient'
|
12
|
+
|
13
|
+
if RUBY_VERSION < "1.9"
|
14
|
+
require 'iconv'
|
15
|
+
end
|
19
16
|
|
20
17
|
# a convenience module for accessing the SOAP API for http://www.titlepage.com.
|
21
18
|
# Uses boilerplate code generated by soap4r.
|
@@ -42,6 +39,14 @@ require File.dirname(__FILE__) + '/titlepage/wwwclient'
|
|
42
39
|
# puts tp.find("9780672327568").inspect
|
43
40
|
# end
|
44
41
|
module TitlePage
|
45
|
-
|
42
|
+
SERVICE_ENDPOINT = {
|
43
|
+
:uri => "http://www.titlepage.com.au/ws/TitleQuery.php",
|
44
|
+
:version => 1
|
45
|
+
}
|
46
46
|
class NotLoggedInError < RuntimeError;end;
|
47
47
|
end
|
48
|
+
|
49
|
+
require File.dirname(__FILE__) + '/titlepage/driver'
|
50
|
+
require File.dirname(__FILE__) + '/titlepage/utils'
|
51
|
+
require File.dirname(__FILE__) + '/titlepage/client'
|
52
|
+
require File.dirname(__FILE__) + '/titlepage/wwwclient'
|
data/lib/titlepage/client.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
|
1
|
+
# encoding: utf-8
|
2
2
|
|
3
3
|
module TitlePage
|
4
4
|
|
@@ -14,13 +14,13 @@ module TitlePage
|
|
14
14
|
# Optional driver parameter allows an alternative SOAP driver to the default to be specified.
|
15
15
|
# This is primarily for testing purposes and probably isn't useful to anyone in the real world.
|
16
16
|
def initialize
|
17
|
-
@driver =
|
17
|
+
@driver = TitlePage::Driver.new
|
18
18
|
@token = nil
|
19
19
|
end
|
20
20
|
|
21
21
|
# login to the titlepage API.
|
22
|
+
#
|
22
23
|
def login(username, password)
|
23
|
-
raise InvalidRubyVersionError, 'Ruby 1.8.3 or higher is required to use this class' unless RUBY_VERSION >= "1.8.3"
|
24
24
|
logout if @token
|
25
25
|
@token = @driver.login(username, password)
|
26
26
|
if @token
|
@@ -31,6 +31,7 @@ module TitlePage
|
|
31
31
|
end
|
32
32
|
|
33
33
|
# logout from the titlepage API
|
34
|
+
#
|
34
35
|
def logout
|
35
36
|
if @token
|
36
37
|
@driver.logout(@token)
|
@@ -38,29 +39,31 @@ module TitlePage
|
|
38
39
|
end
|
39
40
|
end
|
40
41
|
|
41
|
-
#
|
42
|
+
# Retrieve information on a specified ISBN. Can be an ISBN10 or ISBN13.
|
43
|
+
#
|
42
44
|
def find(isbn)
|
43
45
|
return NotLoggedInError, 'You must login to titlepage API before performing a search' unless @token
|
44
46
|
isbn = RBook::ISBN::convert_to_isbn13(isbn)
|
45
47
|
return nil if isbn.nil?
|
46
48
|
begin
|
47
|
-
|
49
|
+
results = @driver.search_by_isbn13(@token, isbn)
|
48
50
|
|
49
|
-
if
|
51
|
+
if results.size == 0
|
50
52
|
return nil
|
51
53
|
else
|
52
|
-
return
|
54
|
+
return results.first
|
53
55
|
end
|
54
56
|
end
|
55
57
|
end
|
56
58
|
|
57
59
|
# a convenience method to make single queries to title page a little cleaner.
|
58
60
|
#
|
59
|
-
# result =
|
61
|
+
# result = TitlePage.find("username","password","9780091835132")
|
60
62
|
# puts result.inspect
|
63
|
+
#
|
61
64
|
def self.find(username, password, isbn)
|
62
65
|
result = nil
|
63
|
-
|
66
|
+
TitlePage::Client.open(username, password) do |tp|
|
64
67
|
result = tp.find(isbn)
|
65
68
|
end
|
66
69
|
return result
|
@@ -69,7 +72,7 @@ module TitlePage
|
|
69
72
|
# a convenience method to make queries to title page a little cleaner. This function
|
70
73
|
# essentially calls the login and logout functions for you automatically.
|
71
74
|
#
|
72
|
-
#
|
75
|
+
# TitlePage.open("username","password") do |tp|
|
73
76
|
# result = tp.find("9780091835132")
|
74
77
|
# end
|
75
78
|
def self.open(username, password)
|
@@ -0,0 +1,84 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
module TitlePage
|
4
|
+
class Driver < Handsoap::Service
|
5
|
+
endpoint TitlePage::SERVICE_ENDPOINT
|
6
|
+
|
7
|
+
# Login to the webservice. Accepts a username and password.
|
8
|
+
#
|
9
|
+
# Note that you can use the standard same username and password,
|
10
|
+
# but the account needs to have API access activated first.
|
11
|
+
#
|
12
|
+
# Returns a string token that must be passed to all other methods.
|
13
|
+
#
|
14
|
+
def login(username, password)
|
15
|
+
response = invoke("Login") do |message|
|
16
|
+
message.add "UserName", username
|
17
|
+
message.add "Password", password
|
18
|
+
end
|
19
|
+
response.document.xpath("//Token/text()").to_s
|
20
|
+
end
|
21
|
+
|
22
|
+
# logout from the webservice. The standard authentication token must be
|
23
|
+
# provided.
|
24
|
+
#
|
25
|
+
# There is no useful return value
|
26
|
+
#
|
27
|
+
def logout(token)
|
28
|
+
response = invoke("Logout") do |message|
|
29
|
+
message.add "token", token
|
30
|
+
end
|
31
|
+
true
|
32
|
+
end
|
33
|
+
|
34
|
+
# search for products by ISBN10. The standard authentication token must be
|
35
|
+
# provided along with the ISBN.
|
36
|
+
#
|
37
|
+
# Returns an array of results.
|
38
|
+
#
|
39
|
+
def search_by_isbn(token, isbn)
|
40
|
+
response = invoke("SearchByISBN") do |message|
|
41
|
+
message.add "Token", token
|
42
|
+
message.add "ISBN", isbn
|
43
|
+
end
|
44
|
+
response.document.xpath("//SearchResults/Product").collect do |node|
|
45
|
+
TitlePage::Product.from_xml(node)
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
# search for products by ISBN13. The standard authentication token must be
|
50
|
+
# provided along with the ISBN.
|
51
|
+
#
|
52
|
+
# Returns an array of results.
|
53
|
+
#
|
54
|
+
def search_by_isbn13(token, isbn)
|
55
|
+
response = invoke("SearchByISBN13") do |message|
|
56
|
+
message.add "Token", token
|
57
|
+
message.add "ISBN13", isbn
|
58
|
+
end
|
59
|
+
response.document.xpath("//SearchResults/Product").collect do |node|
|
60
|
+
TitlePage::Product.from_xml(node)
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
# search for products by EAN. The standard authentication token must be
|
65
|
+
# provided along with the ISBN.
|
66
|
+
#
|
67
|
+
# Returns an array of results.
|
68
|
+
#
|
69
|
+
# Note that although in theory EAN and ISBN13 are the same, many suppliers
|
70
|
+
# don't include an explicit EAN in the ONIX files they provide Titlepage,
|
71
|
+
# so it is nearly always preferable to search by ISBN13.
|
72
|
+
#
|
73
|
+
def search_by_ean(token, ean)
|
74
|
+
response = invoke("SearchByEAN") do |message|
|
75
|
+
message.add "Token", token
|
76
|
+
message.add "EAN", ean
|
77
|
+
end
|
78
|
+
response.document.xpath("//SearchResults/Product").collect do |node|
|
79
|
+
TitlePage::Product.from_xml(node)
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
end
|
84
|
+
end
|
@@ -0,0 +1,273 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
#
|
4
|
+
# A set of classes to hold results from the API.
|
5
|
+
# Based on the classes generated by soap4r, with attributes
|
6
|
+
# changed to use ruby conventions
|
7
|
+
#
|
8
|
+
|
9
|
+
module TitlePage
|
10
|
+
|
11
|
+
class Response
|
12
|
+
|
13
|
+
private
|
14
|
+
|
15
|
+
# ensure all specified attributes are encoded as UTF-8. At this stage the
|
16
|
+
# Titlepage API is encoded in ISO-8859-1, but this *should* continue to
|
17
|
+
# work if they change that.
|
18
|
+
#
|
19
|
+
def normalise_attrib_encodings!(current_enc, attributes)
|
20
|
+
return if current_enc.downcase == "utf-8"
|
21
|
+
|
22
|
+
if RUBY_VERSION < "1.9"
|
23
|
+
attributes.each do |attrib|
|
24
|
+
if self.__send__(attrib)
|
25
|
+
new_val = Iconv.conv("utf-8",current_enc, self.__send__(attrib))
|
26
|
+
self.__send__("#{attrib}=", new_val)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
else
|
30
|
+
current_enc = Encoding.find(current_enc)
|
31
|
+
attributes.each do |attrib|
|
32
|
+
if self.__send__(attrib)
|
33
|
+
self.__send__(attrib).force_encoding(current_enc)
|
34
|
+
self.__send__(attrib).encode!("utf-8")
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
class ProductIdentifier < TitlePage::Response
|
42
|
+
attr_accessor :product_id_type
|
43
|
+
attr_accessor :id_value
|
44
|
+
|
45
|
+
# convert a nokogiri node to a TitlePage::ProductIdentifier object
|
46
|
+
#
|
47
|
+
def self.from_xml(node)
|
48
|
+
return nil if node.nil?
|
49
|
+
#<ProductIdentifiers xsi:type="SOAP-ENC:Array" SOAP-ENC:arrayType="tns:ProductIdentifier[1]">
|
50
|
+
# <item xsi:type="tns:ProductIdentifier">
|
51
|
+
# <ProductIDType xsi:type="xsd:string">15</ProductIDType>
|
52
|
+
# <IDValue xsi:type="xsd:string">9780091835132</IDValue>
|
53
|
+
# </item>
|
54
|
+
#</ProductIdentifiers>
|
55
|
+
id = self.new
|
56
|
+
id.product_id_type = node.xpath("//item/ProductIDType/text()").to_s
|
57
|
+
id.id_value = node.xpath("//item/IDValue/text()").to_s
|
58
|
+
id.normalise_encodings!(node.document.encoding)
|
59
|
+
id
|
60
|
+
end
|
61
|
+
|
62
|
+
# ensure all string attributes are UTF-8 encoded
|
63
|
+
#
|
64
|
+
def normalise_encodings!(current_enc)
|
65
|
+
attribs = [:product_id_type, :id_value]
|
66
|
+
normalise_attrib_encodings!(current_enc, attribs)
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
class Title < TitlePage::Response
|
71
|
+
attr_accessor :title_type
|
72
|
+
attr_accessor :title_text
|
73
|
+
attr_accessor :title_prefix
|
74
|
+
attr_accessor :title_without_prefix
|
75
|
+
attr_accessor :subtitle
|
76
|
+
|
77
|
+
# convert a nokogiri node to a TitlePage::Title object
|
78
|
+
#
|
79
|
+
def self.from_xml(node)
|
80
|
+
return nil if node.nil?
|
81
|
+
#<Title xsi:type="tns:Title">
|
82
|
+
# <TitleType xsi:type="xsd:string">01</TitleType>
|
83
|
+
# <TitleText xsi:type="xsd:string">Fight Club</TitleText>
|
84
|
+
#</Title>
|
85
|
+
title = self.new
|
86
|
+
title.title_type = node.xpath("//Title/TitleType/text()").first.andand.to_s
|
87
|
+
title.title_text = node.xpath("//Title/TitleText/text()").first.andand.to_s
|
88
|
+
title.title_prefix = node.xpath("//Title/TitlePrefix/text()").first.andand.to_s
|
89
|
+
title.title_without_prefix = node.xpath("//Title/TitleWithoutPrefix/text()").first.andand.to_s
|
90
|
+
title.subtitle = node.xpath("//Title/Subtitle/text()").first.andand.to_s
|
91
|
+
|
92
|
+
# normalise encodings to utf-8
|
93
|
+
title.normalise_encodings!(node.document.encoding)
|
94
|
+
title
|
95
|
+
end
|
96
|
+
|
97
|
+
# ensure all string attributes are UTF-8 encoded
|
98
|
+
#
|
99
|
+
def normalise_encodings!(current_enc)
|
100
|
+
attribs = [:title_type, :title_text, :title_prefix, :title_without_prefix, :subtitle]
|
101
|
+
normalise_attrib_encodings!(current_enc, attribs)
|
102
|
+
end
|
103
|
+
|
104
|
+
end
|
105
|
+
|
106
|
+
class Contributor < TitlePage::Response
|
107
|
+
attr_accessor :sequence_number
|
108
|
+
attr_accessor :contributor_role
|
109
|
+
attr_accessor :person_name
|
110
|
+
attr_accessor :person_name_inverted
|
111
|
+
attr_accessor :titles_before_names
|
112
|
+
attr_accessor :key_names
|
113
|
+
|
114
|
+
# convert a nokogiri node to a TitlePage::Contributor object
|
115
|
+
#
|
116
|
+
def self.from_xml(node)
|
117
|
+
return nil if node.nil?
|
118
|
+
#<Contributors xsi:type="SOAP-ENC:Array" SOAP-ENC:arrayType="tns:Contributor[1]">
|
119
|
+
# <item xsi:type="tns:Contributor">
|
120
|
+
# <SequenceNumber xsi:type="xsd:integer">1</SequenceNumber>
|
121
|
+
# <ContributorRole xsi:type="xsd:string">A01</ContributorRole>
|
122
|
+
# <PersonNameInverted xsi:type="xsd:string">Palahniuk, Chuck</PersonNameInverted>
|
123
|
+
# </item>
|
124
|
+
#</Contributors>
|
125
|
+
contrib = self.new
|
126
|
+
contrib.sequence_number = node.xpath("//item/SequenceNumber/text()").first.andand.to_s.andand.to_i
|
127
|
+
contrib.contributor_role = node.xpath("//item/ContributorRole/text()").first.andand.to_s
|
128
|
+
contrib.person_name = node.xpath("//item/PersonName/text()").first.andand.to_s
|
129
|
+
contrib.person_name_inverted = node.xpath("//item/PersonNameInverted/text()").first.andand.to_s
|
130
|
+
contrib.titles_before_names = node.xpath("//item/TitlesBeforeNames/text()").first.andand.to_s
|
131
|
+
contrib.key_names = node.xpath("//item/KeyNames/text()").first.andand.to_s
|
132
|
+
contrib.normalise_encodings!(node.document.encoding)
|
133
|
+
contrib
|
134
|
+
end
|
135
|
+
|
136
|
+
# ensure all string attributes are UTF-8 encoded
|
137
|
+
#
|
138
|
+
def normalise_encodings!(current_enc)
|
139
|
+
attribs = [:contributor_role, :person_name, :person_name_inverted, :titles_before_names, :key_names]
|
140
|
+
normalise_attrib_encodings!(current_enc, attribs)
|
141
|
+
end
|
142
|
+
|
143
|
+
end
|
144
|
+
|
145
|
+
class Stock < TitlePage::Response
|
146
|
+
attr_accessor :on_hand
|
147
|
+
attr_accessor :on_order
|
148
|
+
|
149
|
+
# convert a nokogiri node to a TitlePage::Stock object
|
150
|
+
#
|
151
|
+
def self.from_xml(node)
|
152
|
+
return nil if node.nil?
|
153
|
+
#<Stock xsi:type="tns:Stock">
|
154
|
+
# <OnHand xsi:type="xsd:string">Out Of Stock</OnHand>
|
155
|
+
# <OnOrder xsi:type="xsd:string">Yes</OnOrder>
|
156
|
+
#</Stock>
|
157
|
+
stock = self.new
|
158
|
+
stock.on_hand = node.xpath("//Stock/OnHand/text()").first.andand.to_s
|
159
|
+
stock.on_order = node.xpath("//Stock/OnOrder/text()").first.andand.to_s
|
160
|
+
stock.normalise_encodings!(node.document.encoding)
|
161
|
+
stock
|
162
|
+
end
|
163
|
+
|
164
|
+
# ensure all string attributes are UTF-8 encoded
|
165
|
+
#
|
166
|
+
def normalise_encodings!(current_enc)
|
167
|
+
attribs = [:on_hand, :on_order]
|
168
|
+
normalise_attrib_encodings!(current_enc, attribs)
|
169
|
+
end
|
170
|
+
end
|
171
|
+
|
172
|
+
class Price < TitlePage::Response
|
173
|
+
attr_accessor :price_type_code
|
174
|
+
attr_accessor :price_amount
|
175
|
+
|
176
|
+
# convert a nokogiri node to a TitlePage::Price object
|
177
|
+
#
|
178
|
+
def self.from_xml(node)
|
179
|
+
return nil if node.nil?
|
180
|
+
#<Price xsi:type="tns:Price">
|
181
|
+
# <PriceAmount xsi:type="xsd:decimal">24.95</PriceAmount>
|
182
|
+
#</Price>
|
183
|
+
price = self.new
|
184
|
+
price.price_type_code = node.xpath("//Price/PriceTypeCode/text()").first.andand.to_s
|
185
|
+
val = node.xpath("//Price/PriceAmount/text()").first.andand.to_s
|
186
|
+
price.price_amount = BigDecimal.new(val) if val.size > 0
|
187
|
+
price.normalise_encodings!(node.document.encoding)
|
188
|
+
price
|
189
|
+
end
|
190
|
+
|
191
|
+
# ensure all string attributes are UTF-8 encoded
|
192
|
+
#
|
193
|
+
def normalise_encodings!(current_enc)
|
194
|
+
attribs = [:price_type_code]
|
195
|
+
normalise_attrib_encodings!(current_enc, attribs)
|
196
|
+
end
|
197
|
+
end
|
198
|
+
|
199
|
+
class SupplyDetail < TitlePage::Response
|
200
|
+
attr_accessor :supplier_name
|
201
|
+
attr_accessor :supplier_role
|
202
|
+
attr_accessor :product_availability
|
203
|
+
attr_accessor :expected_ship_date
|
204
|
+
attr_accessor :stock
|
205
|
+
attr_accessor :pack_quantity
|
206
|
+
attr_accessor :price
|
207
|
+
|
208
|
+
# convert a nokogiri node to a TitlePage::SupplyDetail object
|
209
|
+
#
|
210
|
+
def self.from_xml(node)
|
211
|
+
return nil if node.nil?
|
212
|
+
#<SupplyDetail xsi:type="tns:SupplyDetail">
|
213
|
+
# <SupplierName xsi:type="xsd:string">Random House Australia</SupplierName>
|
214
|
+
# <ProductAvailability xsi:type="xsd:string">20</ProductAvailability>
|
215
|
+
# <Stock xsi:type="tns:Stock">
|
216
|
+
# <OnHand xsi:type="xsd:string">Out Of Stock</OnHand>
|
217
|
+
# <OnOrder xsi:type="xsd:string">Yes</OnOrder>
|
218
|
+
# </Stock>
|
219
|
+
# <PackQuantity xsi:type="xsd:integer">28</PackQuantity>
|
220
|
+
# <Price xsi:type="tns:Price">
|
221
|
+
# <PriceAmount xsi:type="xsd:decimal">24.95</PriceAmount>
|
222
|
+
# </Price>
|
223
|
+
#</SupplyDetail>
|
224
|
+
|
225
|
+
sd = self.new
|
226
|
+
sd.supplier_name = node.xpath("//SupplyDetail/SupplierName/text()").first.andand.to_s
|
227
|
+
sd.supplier_role = node.xpath("//SupplyDetail/SupplierRole/text()").first.andand.to_s
|
228
|
+
sd.product_availability = node.xpath("//SupplyDetail/ProductAvailability/text()").first.andand.to_s
|
229
|
+
sd.expected_ship_date = node.xpath("//SupplyDetail/ExpectedShipDate/text()").first.andand.to_s
|
230
|
+
sd.stock = TitlePage::Stock.from_xml(node.xpath("//SupplyDetail/Stock").first)
|
231
|
+
sd.pack_quantity = node.xpath("//SupplyDetail/PackQuantity/text()").first.andand.to_s.andand.to_i
|
232
|
+
sd.price = TitlePage::Price.from_xml(node.xpath("//SupplyDetail/Price").first)
|
233
|
+
sd.normalise_encodings!(node.document.encoding)
|
234
|
+
sd
|
235
|
+
end
|
236
|
+
|
237
|
+
# ensure all string attributes are UTF-8 encoded
|
238
|
+
#
|
239
|
+
def normalise_encodings!(current_enc)
|
240
|
+
attribs = [:supplier_name, :supplier_role, :product_availability, :expected_ship_date]
|
241
|
+
normalise_attrib_encodings!(current_enc, attribs)
|
242
|
+
end
|
243
|
+
end
|
244
|
+
|
245
|
+
class Product
|
246
|
+
attr_accessor :product_identifiers
|
247
|
+
attr_accessor :title
|
248
|
+
attr_accessor :contributors
|
249
|
+
attr_accessor :supply_detail
|
250
|
+
|
251
|
+
def self.from_xml(node)
|
252
|
+
return nil if node.nil?
|
253
|
+
|
254
|
+
product = self.new
|
255
|
+
|
256
|
+
product.product_identifiers = node.xpath("//Product/ProductIdentifiers/item").map do |node|
|
257
|
+
TitlePage::ProductIdentifier.from_xml(node)
|
258
|
+
end
|
259
|
+
|
260
|
+
title_node = node.xpath("//Product/Title")
|
261
|
+
product.title = TitlePage::Title.from_xml(title_node)
|
262
|
+
|
263
|
+
product.contributors = node.xpath("//Product/Contributors/item").map do |node|
|
264
|
+
TitlePage::Contributor.from_xml(node)
|
265
|
+
end
|
266
|
+
|
267
|
+
sd_node = node.xpath("//Product/SupplyDetail")
|
268
|
+
product.supply_detail = TitlePage::SupplyDetail.from_xml(sd_node)
|
269
|
+
|
270
|
+
product
|
271
|
+
end
|
272
|
+
end
|
273
|
+
end
|
data/lib/titlepage/wwwclient.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: titlepage
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- James Healy
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date:
|
12
|
+
date: 2009-05-27 00:00:00 +10:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -23,14 +23,24 @@ dependencies:
|
|
23
23
|
version: "1.0"
|
24
24
|
version:
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
|
-
name:
|
26
|
+
name: andand
|
27
27
|
type: :runtime
|
28
28
|
version_requirement:
|
29
29
|
version_requirements: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- - "
|
31
|
+
- - "="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 1.3.1
|
34
|
+
version:
|
35
|
+
- !ruby/object:Gem::Dependency
|
36
|
+
name: troelskn-handsoap
|
37
|
+
type: :runtime
|
38
|
+
version_requirement:
|
39
|
+
version_requirements: !ruby/object:Gem::Requirement
|
40
|
+
requirements:
|
41
|
+
- - "="
|
32
42
|
- !ruby/object:Gem::Version
|
33
|
-
version: 1.
|
43
|
+
version: 0.1.2
|
34
44
|
version:
|
35
45
|
description: This library is designed to assist with using the titlepage.com SOAP API.
|
36
46
|
email: jimmy@deefa.com
|
@@ -47,10 +57,9 @@ files:
|
|
47
57
|
- examples/titlepage_www.rb
|
48
58
|
- lib/titlepage
|
49
59
|
- lib/titlepage/client.rb
|
50
|
-
- lib/titlepage/
|
51
|
-
- lib/titlepage/
|
60
|
+
- lib/titlepage/driver.rb
|
61
|
+
- lib/titlepage/utils.rb
|
52
62
|
- lib/titlepage/wwwclient.rb
|
53
|
-
- lib/titlepage/mapping_registry.rb
|
54
63
|
- lib/titlepage.rb
|
55
64
|
- Rakefile
|
56
65
|
- README
|
@@ -1,201 +0,0 @@
|
|
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
|
@@ -1,87 +0,0 @@
|
|
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
|
@@ -1,299 +0,0 @@
|
|
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
|
-
# convenience method
|
269
|
-
#
|
270
|
-
def Product
|
271
|
-
@product
|
272
|
-
end
|
273
|
-
|
274
|
-
# An older version of soap4r that was used to generate boilerplate code
|
275
|
-
# in versions of this gem <= 0.9.3 created methods that started with
|
276
|
-
# capitals. Detect when some code calls these old method names and
|
277
|
-
# print a deprecation warning.
|
278
|
-
def method_missing(method, *arguments)
|
279
|
-
new_method = method.to_s[0,1].downcase
|
280
|
-
new_method << method.to_s[1,20]
|
281
|
-
|
282
|
-
if self.respond_to?(new_method)
|
283
|
-
$stderr.puts "Warning: #{method} is deprecated. Use #{new_method} instead"
|
284
|
-
self.send(new_method, *arguments)
|
285
|
-
else
|
286
|
-
super
|
287
|
-
end
|
288
|
-
end
|
289
|
-
end
|
290
|
-
|
291
|
-
# {urn:TitleQuery}ArrayOfContributor
|
292
|
-
class ArrayOfContributor < ::Array
|
293
|
-
end
|
294
|
-
|
295
|
-
# {urn:TitleQuery}ArrayOfProductIdentifier
|
296
|
-
class ArrayOfProductIdentifier < ::Array
|
297
|
-
end
|
298
|
-
|
299
|
-
end
|