rbook 0.1
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/COPYING +340 -0
- data/LICENSE +13 -0
- data/README +16 -0
- data/Rakefile +206 -0
- data/examples/titlepage.rb +14 -0
- data/examples/www/find_all.rb +23 -0
- data/examples/www/find_cover_from_amazon.rb +12 -0
- data/examples/www/find_url_from_rainbow.rb +12 -0
- data/examples/www/list.rb +13 -0
- data/lib/rbook/bisac.rb +175 -0
- data/lib/rbook/errors.rb +7 -0
- data/lib/rbook/isbn.rb +249 -0
- data/lib/rbook/onix.rb +68 -0
- data/lib/rbook/onix/contributor.rb +60 -0
- data/lib/rbook/onix/lists.rb +2 -0
- data/lib/rbook/onix/lists/contributor_role.rb +10 -0
- data/lib/rbook/onix/lists/product_form.rb +100 -0
- data/lib/rbook/onix/message.rb +101 -0
- data/lib/rbook/onix/product.rb +188 -0
- data/lib/rbook/onix/sales_restriction.rb +51 -0
- data/lib/rbook/onix/supply_detail.rb +68 -0
- data/lib/rbook/onix/xchar.rb +98 -0
- data/lib/rbook/titlepage.rb +96 -0
- data/lib/rbook/titlepage/TitleQueryClient.rb +62 -0
- data/lib/rbook/titlepage/titlepage_driver.rb +134 -0
- data/lib/rbook/titlepage/titlepage_utils.rb +374 -0
- data/lib/rbook/www.rb +172 -0
- data/lib/rbook/www/aau_scraper.rb +76 -0
- data/lib/rbook/www/amazon_uk_scraper.rb +44 -0
- data/lib/rbook/www/base.rb +87 -0
- data/lib/rbook/www/harper_au_scraper.rb +56 -0
- data/lib/rbook/www/harper_us_scraper.rb +55 -0
- data/lib/rbook/www/hha_scraper.rb +50 -0
- data/lib/rbook/www/macmillan_scraper.rb +62 -0
- data/lib/rbook/www/orbis_scraper.rb +48 -0
- data/lib/rbook/www/oup_scraper.rb +64 -0
- data/lib/rbook/www/paulist_scraper.rb +53 -0
- data/lib/rbook/www/pearson_au_scraper.rb +52 -0
- data/lib/rbook/www/penguin_scraper.rb +45 -0
- data/lib/rbook/www/random_au_scraper.rb +90 -0
- data/lib/rbook/www/random_us_scraper.rb +59 -0
- data/lib/rbook/www/sas_scraper.rb +54 -0
- data/lib/rbook/www/unireps_scraper.rb +58 -0
- data/lib/rbook/www/wiley_us_scraper.rb +54 -0
- data/test/data/abingdon.xml +38931 -0
- data/test/data/augsburg.xml +39009 -0
- data/test/data/chalice.xml +10851 -0
- data/test/data/eerdsman.xml +36942 -0
- data/test/data/invalid_no_product.xml +9 -0
- data/test/data/not_xml.csv +1 -0
- data/test/data/single_product.xml +50 -0
- data/test/data/xml_not_onix.xml +7 -0
- data/test/mocks/titlepage_driver.rb +107 -0
- data/test/unit/bisac_test.rb +57 -0
- data/test/unit/isbn_test.rb +149 -0
- data/test/unit/onix/contributor_test.rb +50 -0
- data/test/unit/onix/message_test.rb +119 -0
- data/test/unit/onix/product_test.rb +101 -0
- data/test/unit/onix/sales_restriction_test.rb +48 -0
- data/test/unit/onix/supply_detail_test.rb +53 -0
- data/test/unit/onix/xchar_test.rb +37 -0
- data/test/unit/titlepage_test.rb +127 -0
- metadata +130 -0
@@ -0,0 +1,101 @@
|
|
1
|
+
$LOAD_PATH.unshift(File.dirname(__FILE__) + '/../../lib')
|
2
|
+
|
3
|
+
require 'test/unit'
|
4
|
+
require 'rexml/document'
|
5
|
+
require 'date'
|
6
|
+
require 'rbook/onix'
|
7
|
+
|
8
|
+
class ProductTest < Test::Unit::TestCase
|
9
|
+
|
10
|
+
def test_load_from_element
|
11
|
+
|
12
|
+
file = File.open(File.dirname(__FILE__)+"/../../data/single_product.xml", "r")
|
13
|
+
doc = REXML::Document.new(file)
|
14
|
+
product = RBook::Onix::Product.load_from_element(REXML::XPath.first(doc, '/ONIXMessage/Product'))
|
15
|
+
|
16
|
+
file.close
|
17
|
+
|
18
|
+
#check header elements
|
19
|
+
assert_equal('03', product.notification_type)
|
20
|
+
assert_equal('0827200528', product.record_reference)
|
21
|
+
assert_equal('BA', product.form)
|
22
|
+
assert_equal('0', product.pages)
|
23
|
+
assert_equal('YFH', product.bicmainsubject)
|
24
|
+
assert_equal('And Their Eyes Are Opened', product.title)
|
25
|
+
assert_equal('Story Sermons Embracing the World', product.subtitle)
|
26
|
+
assert_equal('Chalice', product.publisher)
|
27
|
+
assert Date.civil(2005, 3, 3) === product.publication_date
|
28
|
+
|
29
|
+
assert_equal(1, product.contributors.size, 'Product should contain 1 contributor')
|
30
|
+
assert_equal(1, product.supply_details.size, 'Product should contain 1 supply detail')
|
31
|
+
|
32
|
+
end
|
33
|
+
|
34
|
+
def test_load_from_element_not_product
|
35
|
+
|
36
|
+
element = REXML::Element.new('NonProduct')
|
37
|
+
element.add_element('NonContributor').text = 'blah'
|
38
|
+
|
39
|
+
assert_raise(LoadError) {
|
40
|
+
product = RBook::Onix::Product.load_from_element(element)
|
41
|
+
}
|
42
|
+
|
43
|
+
end
|
44
|
+
|
45
|
+
# ensure product information is output to xml correctly
|
46
|
+
# TODO: test more than just IDValue and TitleText
|
47
|
+
def test_to_element
|
48
|
+
|
49
|
+
product = RBook::Onix::Product.new
|
50
|
+
product.product_identifier = '0977616606'
|
51
|
+
product.title = 'This is a title'
|
52
|
+
product.publisher = 'Chalice'
|
53
|
+
|
54
|
+
contributor = RBook::Onix::Contributor.new
|
55
|
+
contributor.sequence_number = '0'
|
56
|
+
contributor.name_inverted = 'Healy, James'
|
57
|
+
contributor.role = 'A01'
|
58
|
+
product.add_contributor(contributor)
|
59
|
+
|
60
|
+
supply_detail = RBook::Onix::SupplyDetail.new
|
61
|
+
supply_detail.supplier_name = 'Walker'
|
62
|
+
supply_detail.availability_code = 'CS'
|
63
|
+
supply_detail.price = 29.95
|
64
|
+
product.add_supply_detail(supply_detail)
|
65
|
+
|
66
|
+
doc = product.to_element
|
67
|
+
|
68
|
+
assert_not_equal(nil,REXML::XPath.first(doc, '/ProductIdentifier/IDValue'))
|
69
|
+
assert_equal("0977616606", REXML::XPath.first(doc, '/ProductIdentifier/IDValue').text)
|
70
|
+
assert_not_equal(nil,REXML::XPath.first(doc, '/Title/TitleText'), 'TitleText must not be nil')
|
71
|
+
assert_equal("This is a title", REXML::XPath.first(doc, '/Title/TitleText').text)
|
72
|
+
assert_not_equal(nil, REXML::XPath.first(doc, '/Contributor'), 'Expected product element to contain a contributor')
|
73
|
+
assert_not_equal(nil, REXML::XPath.first(doc, '/Publisher/PublisherName'), 'Expected publisher name element to contain a contributor')
|
74
|
+
assert_equal("Chalice", REXML::XPath.first(doc, '/Publisher/PublisherName').text)
|
75
|
+
assert_not_equal(nil, REXML::XPath.first(doc, '/SupplyDetail'), 'Expected product element to contain a supply detail')
|
76
|
+
end
|
77
|
+
|
78
|
+
def test_to_s_valid_utf8_charset
|
79
|
+
|
80
|
+
# create an Onix::Product fragment
|
81
|
+
product = RBook::Onix::Product.new
|
82
|
+
product.product_identifier = "0977616606"
|
83
|
+
product.title = "Test Title\x11"
|
84
|
+
product.subtitle = "Test Subtitle\x11"
|
85
|
+
product.website = "http://www.google.com\x11"
|
86
|
+
product.form = "BA\x11"
|
87
|
+
product.bicmainsubject = "FGD\x11"
|
88
|
+
product.description = "This is a sample description\x11"
|
89
|
+
product.publisher = "Publisher\x11"
|
90
|
+
|
91
|
+
fragment = product.to_s
|
92
|
+
|
93
|
+
# loop over each byte in the product element and check it's
|
94
|
+
# a valid UTF-8 character
|
95
|
+
fragment.each_byte do |c|
|
96
|
+
n = XChar::CP1252[c] || c
|
97
|
+
n = nil unless XChar::VALID.find {|range| range.include? n}
|
98
|
+
assert_not_equal nil, n, "Non valid UTF8 char detected (code: #{n.to_s})"
|
99
|
+
end
|
100
|
+
end
|
101
|
+
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
$LOAD_PATH.unshift(File.dirname(__FILE__) + '/../../lib')
|
2
|
+
|
3
|
+
require 'test/unit'
|
4
|
+
require 'rexml/document'
|
5
|
+
require 'rbook/onix'
|
6
|
+
|
7
|
+
class SalesRestrictionTest < Test::Unit::TestCase
|
8
|
+
|
9
|
+
def test_load_from_element
|
10
|
+
|
11
|
+
file = File.open(File.dirname(__FILE__)+"/../../data/single_product.xml", "r")
|
12
|
+
doc = REXML::Document.new(file)
|
13
|
+
restriction = RBook::Onix::SalesRestriction.load_from_element(REXML::XPath.first(doc, '/ONIXMessage/Product/SalesRestriction'))
|
14
|
+
|
15
|
+
file.close
|
16
|
+
|
17
|
+
assert_equal('00', restriction.type)
|
18
|
+
assert_equal('Unknown', restriction.detail)
|
19
|
+
end
|
20
|
+
|
21
|
+
def test_load_from_element_not_sales_restriction
|
22
|
+
|
23
|
+
element = REXML::Element.new('NonRestriction')
|
24
|
+
element.add_element('Type').text = 'blah'
|
25
|
+
|
26
|
+
assert_raise(LoadError) {
|
27
|
+
product = RBook::Onix::SalesRestriction.load_from_element(element)
|
28
|
+
}
|
29
|
+
|
30
|
+
end
|
31
|
+
|
32
|
+
# ensure product information is output to xml correctly
|
33
|
+
def test_to_element
|
34
|
+
|
35
|
+
restriction = RBook::Onix::SalesRestriction.new
|
36
|
+
restriction.type = '00'
|
37
|
+
restriction.detail = 'Unknown'
|
38
|
+
|
39
|
+
doc = restriction.to_element
|
40
|
+
|
41
|
+
assert_not_equal(nil,REXML::XPath.first(doc, '/SalesRestrictionType'), 'Sales Restriction Type must not be nil')
|
42
|
+
assert_equal("00", REXML::XPath.first(doc, '/SalesRestrictionType').text)
|
43
|
+
assert_not_equal(nil,REXML::XPath.first(doc, '/SalesRestrictionDetail'), 'Sales Restriction Detail must not be nil')
|
44
|
+
assert_equal("Unknown", REXML::XPath.first(doc, '/SalesRestrictionDetail').text)
|
45
|
+
|
46
|
+
end
|
47
|
+
|
48
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
$LOAD_PATH.unshift(File.dirname(__FILE__) + '/../../lib')
|
2
|
+
|
3
|
+
require 'test/unit'
|
4
|
+
require 'rexml/document'
|
5
|
+
require 'rbook/onix'
|
6
|
+
|
7
|
+
class SupplyDetailTest < Test::Unit::TestCase
|
8
|
+
|
9
|
+
def test_load_from_element
|
10
|
+
|
11
|
+
file = File.open(File.dirname(__FILE__)+"/../../data/single_product.xml", "r")
|
12
|
+
doc = REXML::Document.new(file)
|
13
|
+
supply_detail = RBook::Onix::SupplyDetail.load_from_element(REXML::XPath.first(doc, '/ONIXMessage/Product/SupplyDetail'))
|
14
|
+
|
15
|
+
file.close
|
16
|
+
|
17
|
+
assert_equal('Chalice', supply_detail.supplier_name)
|
18
|
+
assert_equal('CS', supply_detail.availability_code)
|
19
|
+
assert_equal('99', supply_detail.intermediary_availability_code)
|
20
|
+
assert_equal(29.95, supply_detail.price)
|
21
|
+
end
|
22
|
+
|
23
|
+
def test_load_from_element_not_supply_detail
|
24
|
+
|
25
|
+
element = REXML::Element.new('NonSupplyDetail')
|
26
|
+
element.add_element('SupplierName').text = 'blah'
|
27
|
+
|
28
|
+
assert_raise(LoadError) {
|
29
|
+
supply_detail = RBook::Onix::SupplyDetail.load_from_element(element)
|
30
|
+
}
|
31
|
+
|
32
|
+
end
|
33
|
+
|
34
|
+
# ensure product information is output to xml correctly
|
35
|
+
def test_to_element
|
36
|
+
|
37
|
+
supply_detail = RBook::Onix::SupplyDetail.new
|
38
|
+
supply_detail.supplier_name = 'Walker'
|
39
|
+
supply_detail.availability_code = 'CS'
|
40
|
+
supply_detail.price = 38.05
|
41
|
+
|
42
|
+
doc = supply_detail.to_element
|
43
|
+
|
44
|
+
assert_not_equal(nil,REXML::XPath.first(doc, '/SupplierName'), 'Supplier Name must not be nil')
|
45
|
+
assert_equal("Walker", REXML::XPath.first(doc, '/SupplierName').text)
|
46
|
+
assert_not_equal(nil,REXML::XPath.first(doc, '/AvailabilityCode'), 'Availability Code must not be nil')
|
47
|
+
assert_equal("CS", REXML::XPath.first(doc, '/AvailabilityCode').text)
|
48
|
+
assert_not_equal(nil,REXML::XPath.first(doc, '/Price/PriceAmount'), 'Price Amount must not be nil')
|
49
|
+
assert_equal("38.05", REXML::XPath.first(doc, '/Price/PriceAmount').text)
|
50
|
+
|
51
|
+
end
|
52
|
+
|
53
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
$LOAD_PATH.unshift(File.dirname(__FILE__) + '/../../lib')
|
2
|
+
|
3
|
+
require 'test/unit'
|
4
|
+
require 'rbook/onix'
|
5
|
+
|
6
|
+
class TestXmlEscaping < Test::Unit::TestCase
|
7
|
+
def test_ascii
|
8
|
+
assert_equal 'abc', 'abc'.to_xs
|
9
|
+
end
|
10
|
+
|
11
|
+
def test_predefined
|
12
|
+
assert_equal '&', '&'.to_xs # ampersand
|
13
|
+
assert_equal '<', '<'.to_xs # left angle bracket
|
14
|
+
assert_equal '>', '>'.to_xs # right angle bracket
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_invalid
|
18
|
+
assert_equal '*', "\x00".to_xs # null
|
19
|
+
assert_equal '*', "\x0C".to_xs # form feed
|
20
|
+
assert_equal '*', "\xEF\xBF\xBF".to_xs # U+FFFF
|
21
|
+
end
|
22
|
+
|
23
|
+
def test_iso_8859_1
|
24
|
+
assert_equal 'ç', "\xE7".to_xs # small c cedilla
|
25
|
+
assert_equal '©', "\xA9".to_xs # copyright symbol
|
26
|
+
end
|
27
|
+
|
28
|
+
def test_win_1252
|
29
|
+
assert_equal '’', "\x92".to_xs # smart quote
|
30
|
+
assert_equal '€', "\x80".to_xs # euro
|
31
|
+
end
|
32
|
+
|
33
|
+
def test_utf8
|
34
|
+
assert_equal '’', "\xE2\x80\x99".to_xs # right single quote
|
35
|
+
assert_equal '©', "\xC2\xA9".to_xs # copy
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,127 @@
|
|
1
|
+
$LOAD_PATH.unshift(File.dirname(__FILE__) + '/../../lib')
|
2
|
+
|
3
|
+
require 'test/unit'
|
4
|
+
require 'rbook/titlepage'
|
5
|
+
require File.dirname(__FILE__) + '/../mocks/titlepage_driver'
|
6
|
+
|
7
|
+
class TitlePageTest < Test::Unit::TestCase
|
8
|
+
|
9
|
+
def setup
|
10
|
+
@tp = RBook::TitlePage.new(MockTitlePageDriver.new)
|
11
|
+
end
|
12
|
+
|
13
|
+
# ensure a SOAP exception is raised if incorrect login details are provided
|
14
|
+
def test_bad_login
|
15
|
+
unless RUBY_VERSION >= "1.8.3"
|
16
|
+
warn "Ruby version >= 1.8.3 required to use the titlepage library. Skipping unit test"
|
17
|
+
return
|
18
|
+
end
|
19
|
+
|
20
|
+
assert_raise(SOAP::FaultError) {
|
21
|
+
@tp.login("bad","login")
|
22
|
+
}
|
23
|
+
end
|
24
|
+
|
25
|
+
# ensure searching for a title using the open method works
|
26
|
+
def test_search_using_block
|
27
|
+
unless RUBY_VERSION >= "1.8.3"
|
28
|
+
warn "Ruby version >= 1.8.3 required to use the titlepage library. Skipping unit test"
|
29
|
+
return
|
30
|
+
end
|
31
|
+
|
32
|
+
RBook::TitlePage.open("test","apa", MockTitlePageDriver.new) do |tp|
|
33
|
+
|
34
|
+
result = tp.find("9780091835132")
|
35
|
+
|
36
|
+
assert_kind_of SearchResults, result
|
37
|
+
assert_not_equal nil, result.Product
|
38
|
+
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
# ensure searching for a title that is in stock returns a SearchResults object
|
43
|
+
def test_title_in_stock
|
44
|
+
|
45
|
+
unless RUBY_VERSION >= "1.8.3"
|
46
|
+
warn "Ruby version >= 1.8.3 required to use the titlepage library. Skipping unit test"
|
47
|
+
return
|
48
|
+
end
|
49
|
+
|
50
|
+
@tp.login("test","apa")
|
51
|
+
result = @tp.find("9780091835132")
|
52
|
+
|
53
|
+
assert_kind_of SearchResults, result
|
54
|
+
assert_not_equal nil, result.Product
|
55
|
+
|
56
|
+
@tp.logout
|
57
|
+
end
|
58
|
+
|
59
|
+
# ensure searching for a title that is out of stock returns a SearchResults object
|
60
|
+
def test_title_no_stock
|
61
|
+
|
62
|
+
unless RUBY_VERSION >= "1.8.3"
|
63
|
+
warn "Ruby version >= 1.8.3 required to use the titlepage library. Skipping unit test"
|
64
|
+
return
|
65
|
+
end
|
66
|
+
|
67
|
+
@tp.login("test","apa")
|
68
|
+
result = @tp.find("9780672327568")
|
69
|
+
|
70
|
+
assert_kind_of SearchResults, result
|
71
|
+
assert_not_equal nil, result.Product
|
72
|
+
|
73
|
+
@tp.logout
|
74
|
+
end
|
75
|
+
|
76
|
+
# ensure searching for a title that isn't listed on titlepage returns nil
|
77
|
+
def test_title_not_found
|
78
|
+
|
79
|
+
unless RUBY_VERSION >= "1.8.3"
|
80
|
+
warn "Ruby version >= 1.8.3 required to use the titlepage library. Skipping unit test"
|
81
|
+
return
|
82
|
+
end
|
83
|
+
|
84
|
+
@tp.login("test","apa")
|
85
|
+
result = @tp.find("9780522848670")
|
86
|
+
|
87
|
+
assert_equal nil, result
|
88
|
+
|
89
|
+
@tp.logout
|
90
|
+
end
|
91
|
+
|
92
|
+
# ensure searching for whack ISBNs returns nil
|
93
|
+
def test_boundaries
|
94
|
+
|
95
|
+
unless RUBY_VERSION >= "1.8.3"
|
96
|
+
warn "Ruby version >= 1.8.3 required to use the titlepage library. Skipping unit test"
|
97
|
+
return
|
98
|
+
end
|
99
|
+
|
100
|
+
@tp.login("test","apa")
|
101
|
+
|
102
|
+
assert_equal nil, @tp.find("978052284867")
|
103
|
+
assert_equal nil, @tp.find("978-0522-84867")
|
104
|
+
assert_equal nil, @tp.find(nil)
|
105
|
+
assert_equal nil, @tp.find(:test)
|
106
|
+
assert_equal nil, @tp.find(Array.new)
|
107
|
+
assert_equal nil, @tp.find(-1)
|
108
|
+
|
109
|
+
@tp.logout
|
110
|
+
end
|
111
|
+
|
112
|
+
# ensure logging out works
|
113
|
+
def test_logout
|
114
|
+
|
115
|
+
unless RUBY_VERSION >= "1.8.3"
|
116
|
+
warn "Ruby version >= 1.8.3 required to use the titlepage library. Skipping unit test"
|
117
|
+
return
|
118
|
+
end
|
119
|
+
|
120
|
+
@tp.login("test","apa")
|
121
|
+
result = @tp.find("9780522848670")
|
122
|
+
|
123
|
+
assert @tp.logout
|
124
|
+
end
|
125
|
+
end
|
126
|
+
|
127
|
+
|
metadata
ADDED
@@ -0,0 +1,130 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
rubygems_version: 0.8.11
|
3
|
+
specification_version: 1
|
4
|
+
name: rbook
|
5
|
+
version: !ruby/object:Gem::Version
|
6
|
+
version: "0.1"
|
7
|
+
date: 2006-09-26 00:00:00 +10:00
|
8
|
+
summary: A collection of classes and modules for working with bibliographic data
|
9
|
+
require_paths:
|
10
|
+
- lib
|
11
|
+
email: jimmy@deefa.com
|
12
|
+
homepage: http://rbook.rubyforge.org/
|
13
|
+
rubyforge_project: rbook
|
14
|
+
description: rbook is a collection of classes and modules for working with bibliographic data. It currently supports converting and validating isbns, and converting to and from both ONIX and BISAC
|
15
|
+
autorequire:
|
16
|
+
default_executable:
|
17
|
+
bindir: bin
|
18
|
+
has_rdoc: true
|
19
|
+
required_ruby_version: !ruby/object:Gem::Version::Requirement
|
20
|
+
requirements:
|
21
|
+
- - ">"
|
22
|
+
- !ruby/object:Gem::Version
|
23
|
+
version: 0.0.0
|
24
|
+
version:
|
25
|
+
platform: ruby
|
26
|
+
signing_key:
|
27
|
+
cert_chain:
|
28
|
+
authors:
|
29
|
+
- James Healy
|
30
|
+
files:
|
31
|
+
- examples/www
|
32
|
+
- examples/titlepage.rb
|
33
|
+
- examples/www/find_all.rb
|
34
|
+
- examples/www/list.rb
|
35
|
+
- examples/www/find_cover_from_amazon.rb
|
36
|
+
- examples/www/find_url_from_rainbow.rb
|
37
|
+
- lib/rbook
|
38
|
+
- lib/rbook/errors.rb
|
39
|
+
- lib/rbook/bisac.rb
|
40
|
+
- lib/rbook/titlepage.rb
|
41
|
+
- lib/rbook/isbn.rb
|
42
|
+
- lib/rbook/onix.rb
|
43
|
+
- lib/rbook/onix
|
44
|
+
- lib/rbook/www.rb
|
45
|
+
- lib/rbook/titlepage
|
46
|
+
- lib/rbook/www
|
47
|
+
- lib/rbook/onix/lists
|
48
|
+
- lib/rbook/onix/sales_restriction.rb
|
49
|
+
- lib/rbook/onix/supply_detail.rb
|
50
|
+
- lib/rbook/onix/product.rb
|
51
|
+
- lib/rbook/onix/lists.rb
|
52
|
+
- lib/rbook/onix/contributor.rb
|
53
|
+
- lib/rbook/onix/message.rb
|
54
|
+
- lib/rbook/onix/xchar.rb
|
55
|
+
- lib/rbook/onix/lists/contributor_role.rb
|
56
|
+
- lib/rbook/onix/lists/product_form.rb
|
57
|
+
- lib/rbook/titlepage/titlepage_driver.rb
|
58
|
+
- lib/rbook/titlepage/titlepage_utils.rb
|
59
|
+
- lib/rbook/titlepage/TitleQueryClient.rb
|
60
|
+
- lib/rbook/www/base.rb
|
61
|
+
- lib/rbook/www/pearson_au_scraper.rb
|
62
|
+
- lib/rbook/www/wiley_us_scraper.rb
|
63
|
+
- lib/rbook/www/hha_scraper.rb
|
64
|
+
- lib/rbook/www/random_au_scraper.rb
|
65
|
+
- lib/rbook/www/oup_scraper.rb
|
66
|
+
- lib/rbook/www/penguin_scraper.rb
|
67
|
+
- lib/rbook/www/harper_au_scraper.rb
|
68
|
+
- lib/rbook/www/aau_scraper.rb
|
69
|
+
- lib/rbook/www/orbis_scraper.rb
|
70
|
+
- lib/rbook/www/paulist_scraper.rb
|
71
|
+
- lib/rbook/www/amazon_uk_scraper.rb
|
72
|
+
- lib/rbook/www/unireps_scraper.rb
|
73
|
+
- lib/rbook/www/sas_scraper.rb
|
74
|
+
- lib/rbook/www/random_us_scraper.rb
|
75
|
+
- lib/rbook/www/harper_us_scraper.rb
|
76
|
+
- lib/rbook/www/macmillan_scraper.rb
|
77
|
+
- test/unit
|
78
|
+
- test/data
|
79
|
+
- test/mocks
|
80
|
+
- test/unit/onix
|
81
|
+
- test/unit/titlepage_test.rb
|
82
|
+
- test/unit/bisac_test.rb
|
83
|
+
- test/unit/isbn_test.rb
|
84
|
+
- test/unit/onix/sales_restriction_test.rb
|
85
|
+
- test/unit/onix/supply_detail_test.rb
|
86
|
+
- test/unit/onix/product_test.rb
|
87
|
+
- test/unit/onix/message_test.rb
|
88
|
+
- test/unit/onix/xchar_test.rb
|
89
|
+
- test/unit/onix/contributor_test.rb
|
90
|
+
- test/data/single_product.xml
|
91
|
+
- test/data/xml_not_onix.xml
|
92
|
+
- test/data/abingdon.xml
|
93
|
+
- test/data/invalid_no_product.xml
|
94
|
+
- test/data/chalice.xml
|
95
|
+
- test/data/not_xml.csv
|
96
|
+
- test/data/eerdsman.xml
|
97
|
+
- test/data/augsburg.xml
|
98
|
+
- test/mocks/titlepage_driver.rb
|
99
|
+
- Rakefile
|
100
|
+
- README
|
101
|
+
- COPYING
|
102
|
+
- LICENSE
|
103
|
+
test_files: []
|
104
|
+
|
105
|
+
rdoc_options:
|
106
|
+
- --title
|
107
|
+
- rbook Documentation
|
108
|
+
- --main
|
109
|
+
- README
|
110
|
+
- -q
|
111
|
+
extra_rdoc_files:
|
112
|
+
- README
|
113
|
+
- COPYING
|
114
|
+
- LICENSE
|
115
|
+
executables: []
|
116
|
+
|
117
|
+
extensions: []
|
118
|
+
|
119
|
+
requirements: []
|
120
|
+
|
121
|
+
dependencies:
|
122
|
+
- !ruby/object:Gem::Dependency
|
123
|
+
name: scrapi
|
124
|
+
version_requirement:
|
125
|
+
version_requirements: !ruby/object:Gem::Version::Requirement
|
126
|
+
requirements:
|
127
|
+
- - ">="
|
128
|
+
- !ruby/object:Gem::Version
|
129
|
+
version: 1.2.0
|
130
|
+
version:
|