milkfarm-onix 0.8.8 → 0.8.9
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/CHANGELOG +6 -0
- data/lib/onix/list_writer.rb +21 -0
- data/lib/onix/product.rb +4 -10
- data/lib/onix/product_identifiers.rb +63 -0
- data/lib/onix/related_product.rb +22 -0
- data/lib/onix/set.rb +12 -60
- data/lib/onix/sl_product.rb +18 -3
- data/lib/onix/version.rb +1 -1
- data/lib/onix/work_identifier.rb +2 -7
- data/lib/onix.rb +3 -0
- data/spec/list_writer_spec.rb +46 -0
- data/spec/product_identifiers_spec.rb +71 -0
- data/spec/related_product_spec.rb +45 -0
- data/spec/set_spec.rb +4 -4
- data/spec/sl_product_spec.rb +63 -28
- data/spec/work_identifier_spec.rb +6 -0
- metadata +13 -4
data/CHANGELOG
CHANGED
@@ -1,3 +1,9 @@
|
|
1
|
+
v0.8.9 (24 March 2011)
|
2
|
+
- Add RelatedProduct composite (PR.23.7 - PR.23.33)
|
3
|
+
- Create ProductIdentifiers module
|
4
|
+
- Create ListWriter module
|
5
|
+
- WARNING: Set methods product_identifier, product_identifier_set removed
|
6
|
+
|
1
7
|
v0.8.8 (15 March 2011)
|
2
8
|
- Format EpubType value as 3-digit, padded number
|
3
9
|
|
@@ -0,0 +1,21 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
|
3
|
+
module ONIX
|
4
|
+
module ListWriter
|
5
|
+
|
6
|
+
def list_writer(name, options = {})
|
7
|
+
options.symbolize_keys!
|
8
|
+
unless options.is_a?(Hash) && options[:list].is_a?(Integer)
|
9
|
+
raise ArgumentError, "Must specify code list number as ':list => Integer'"
|
10
|
+
end
|
11
|
+
define_method("#{name}=") do |value|
|
12
|
+
if value.nil? || ONIX::Lists.list(options[:list]).keys.include?(value)
|
13
|
+
self.instance_variable_set("@#{name}", value)
|
14
|
+
else
|
15
|
+
raise ArgumentError, "Invalid #{("_" + name.to_s).downcase.gsub!(/_(.)/) { $1.upcase }} '#{value}' -- Refer to ONIX Code List #{options[:list]}"
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
21
|
+
end
|
data/lib/onix/product.rb
CHANGED
@@ -3,6 +3,7 @@
|
|
3
3
|
module ONIX
|
4
4
|
class Product
|
5
5
|
include ROXML
|
6
|
+
extend ONIX::ListWriter
|
6
7
|
|
7
8
|
xml_name "Product"
|
8
9
|
|
@@ -12,6 +13,7 @@ module ONIX
|
|
12
13
|
xml_accessor :product_form, :from => "ProductForm"
|
13
14
|
xml_accessor :product_form_detail, :from => "ProductFormDetail"
|
14
15
|
xml_reader :epub_type, :from => "EpubType", :as => Fixnum, :to_xml => ONIX::Formatters.three_digit
|
16
|
+
list_writer :epub_type, :list => 10
|
15
17
|
xml_accessor :series, :from => "Series", :as => [ONIX::Series]
|
16
18
|
xml_accessor :sets, :from => "Set", :as => [ONIX::Set]
|
17
19
|
xml_accessor :titles, :from => "Title", :as => [ONIX::Title]
|
@@ -42,6 +44,7 @@ module ONIX
|
|
42
44
|
xml_accessor :year_first_published, :from => "YearFirstPublished", :as => Fixnum
|
43
45
|
xml_accessor :sales_restrictions, :from => "SalesRestriction", :as => [ONIX::SalesRestriction]
|
44
46
|
xml_accessor :measurements, :from => "Measure", :as => [ONIX::Measure]
|
47
|
+
xml_accessor :related_products, :from => "RelatedProduct", :as => [ONIX::RelatedProduct]
|
45
48
|
xml_accessor :supply_details, :from => "SupplyDetail", :as => [ONIX::SupplyDetail]
|
46
49
|
xml_accessor :market_representations, :from => "MarketRepresentation", :as => [ONIX::MarketRepresentation]
|
47
50
|
|
@@ -71,19 +74,10 @@ module ONIX
|
|
71
74
|
self.publishers = []
|
72
75
|
self.sales_restrictions = []
|
73
76
|
self.measurements = []
|
77
|
+
self.related_products = []
|
74
78
|
self.supply_details = []
|
75
79
|
self.market_representations = []
|
76
80
|
end
|
77
81
|
|
78
|
-
# TODO: Refactor writer methods using method_missing
|
79
|
-
def epub_type=(new_epub_type)
|
80
|
-
if new_epub_type.nil? || ONIX::Lists.list(10).keys.include?(new_epub_type)
|
81
|
-
# ProductForm code must equal DG if EpubType element is present
|
82
|
-
@product_form = "DG"
|
83
|
-
@epub_type = new_epub_type
|
84
|
-
else
|
85
|
-
raise "Invalid EpubType #{new_epub_type}"
|
86
|
-
end
|
87
|
-
end
|
88
82
|
end
|
89
83
|
end
|
@@ -0,0 +1,63 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
|
3
|
+
module ONIX
|
4
|
+
module ProductIdentifiers
|
5
|
+
ACCESSOR_METHODS = {:proprietary_id => 1, :ean => 3, :isbn10 => 2, :isbn13 => 15, :isbn => 15, :lccn => 13}
|
6
|
+
|
7
|
+
def initialize_product_identifiers(options)
|
8
|
+
@product_identifiers ||= []
|
9
|
+
ACCESSOR_METHODS.keys.push(:product_identifiers).each do |name|
|
10
|
+
self.send("#{name}=", options[name]) if options[name]
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
ACCESSOR_METHODS.each do |name, digit|
|
15
|
+
define_method(name) do
|
16
|
+
identifier(digit).andand.id_value
|
17
|
+
end
|
18
|
+
define_method("#{name}=") do |value|
|
19
|
+
identifier_set(digit, value)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def product_identifiers
|
24
|
+
@product_identifiers ||= []
|
25
|
+
end
|
26
|
+
|
27
|
+
private
|
28
|
+
|
29
|
+
def product_identifiers=(values)
|
30
|
+
values = [values] if values.nil? || values.is_a?(ONIX::ProductIdentifier)
|
31
|
+
if values.is_a?(Array)
|
32
|
+
# Empty array
|
33
|
+
@product_identifiers = []
|
34
|
+
# Add any valid value
|
35
|
+
values.each do |value|
|
36
|
+
@product_identifiers << value if value.is_a?(ONIX::ProductIdentifier)
|
37
|
+
end
|
38
|
+
else
|
39
|
+
raise ArgumentError, "Invalid ProductIdentifier value: #{values.inspect}"
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
# find the ProductIdentifier matching a particular type
|
44
|
+
def identifier(type)
|
45
|
+
@product_identifiers.find { |obj| obj.product_id_type == type }
|
46
|
+
end
|
47
|
+
|
48
|
+
# set the value of a particular ProductIdentifier (found by type)
|
49
|
+
def identifier_set(type, value)
|
50
|
+
obj = identifier(type)
|
51
|
+
|
52
|
+
# create a new product identifier object if we necessary
|
53
|
+
if obj.nil?
|
54
|
+
obj = ONIX::ProductIdentifier.new
|
55
|
+
obj.product_id_type = type
|
56
|
+
@product_identifiers << obj
|
57
|
+
end
|
58
|
+
|
59
|
+
obj.id_value = value
|
60
|
+
end
|
61
|
+
|
62
|
+
end
|
63
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
|
3
|
+
module ONIX
|
4
|
+
class RelatedProduct
|
5
|
+
include ROXML
|
6
|
+
include ONIX::ProductIdentifiers
|
7
|
+
extend ONIX::ListWriter
|
8
|
+
|
9
|
+
xml_name "RelatedProduct"
|
10
|
+
|
11
|
+
xml_reader :relation_code, :from => "RelationCode", :as => Fixnum, :to_xml => ONIX::Formatters.two_digit
|
12
|
+
xml_reader :product_identifiers, :from => "ProductIdentifier", :as => [ONIX::ProductIdentifier]
|
13
|
+
list_writer :relation_code, :list => 51
|
14
|
+
|
15
|
+
def initialize(options = {})
|
16
|
+
options.symbolize_keys!
|
17
|
+
self.relation_code = options[:relation_code]
|
18
|
+
self.initialize_product_identifiers(options) # Must be called to setup @product_identifiers array
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
22
|
+
end
|
data/lib/onix/set.rb
CHANGED
@@ -3,74 +3,26 @@
|
|
3
3
|
module ONIX
|
4
4
|
class Set
|
5
5
|
include ROXML
|
6
|
+
include ONIX::ProductIdentifiers
|
6
7
|
|
7
8
|
xml_name "Set"
|
8
9
|
|
9
|
-
|
10
|
+
xml_reader :product_identifiers, :from => "ProductIdentifier", :as => [ONIX::ProductIdentifier]
|
10
11
|
xml_accessor :title_of_set, :from => "TitleOfSet"
|
11
12
|
|
12
|
-
def initialize
|
13
|
-
|
13
|
+
def initialize(options = {})
|
14
|
+
options.symbolize_keys!
|
15
|
+
self.initialize_product_identifiers(options) # Must be called to setup @product_identifiers array
|
14
16
|
end
|
15
17
|
|
16
|
-
#
|
17
|
-
|
18
|
-
|
19
|
-
end
|
20
|
-
|
21
|
-
# set a new proprietary set ID
|
22
|
-
def proprietary_set_id=(id)
|
23
|
-
product_identifier_set(1, id)
|
24
|
-
end
|
18
|
+
# Following methods removed os of gem 0.8.9 (aliased for backwards compatible):
|
19
|
+
alias_method :proprietary_set_id, :proprietary_id
|
20
|
+
alias_method :proprietary_set_id=, :proprietary_id=
|
25
21
|
|
26
|
-
#
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
# set a new 10-digit isbn
|
32
|
-
def isbn10=(id)
|
33
|
-
product_identifier_set(2, id)
|
34
|
-
end
|
22
|
+
# Following methods removed os of gem 0.8.9 (NOT backwards compatible):
|
23
|
+
# original method -> replacement method
|
24
|
+
# product_identifier(type) -> see product_identifiers.rb (eg, use isbn, lccn...)
|
25
|
+
# product_identifier_set(type, value) -> see product_identifiers.rb (eg, use isbn=, lccn=...)
|
35
26
|
|
36
|
-
# retrieve the 13-digit isbn
|
37
|
-
def isbn
|
38
|
-
product_identifier(15).andand.id_value
|
39
|
-
end
|
40
|
-
|
41
|
-
# set a new 13-digit isbn
|
42
|
-
def isbn=(id)
|
43
|
-
product_identifier_set(15, id)
|
44
|
-
end
|
45
|
-
|
46
|
-
# retrieve the lccn
|
47
|
-
def lccn
|
48
|
-
product_identifier(13).andand.id_value
|
49
|
-
end
|
50
|
-
|
51
|
-
# set a new lccn
|
52
|
-
def lccn=(id)
|
53
|
-
product_identifier_set(13, id)
|
54
|
-
end
|
55
|
-
|
56
|
-
# retrieve the value of a particular ID
|
57
|
-
def product_identifier(type)
|
58
|
-
identifier = product_identifiers.find { |id| id.product_id_type == type }
|
59
|
-
end
|
60
|
-
|
61
|
-
# set the value of a particular ID
|
62
|
-
def product_identifier_set(type, value)
|
63
|
-
product_identifier_id = product_identifiers.find { |id| id.product_id_type == type }
|
64
|
-
|
65
|
-
# create a new set identifier record if we need to
|
66
|
-
if product_identifier_id.nil?
|
67
|
-
product_identifier_id = ONIX::ProductIdentifier.new
|
68
|
-
end
|
69
|
-
|
70
|
-
product_identifier_id.product_id_type = type
|
71
|
-
product_identifier_id.id_value = value
|
72
|
-
|
73
|
-
product_identifiers << product_identifier_id
|
74
|
-
end
|
75
27
|
end
|
76
28
|
end
|
data/lib/onix/sl_product.rb
CHANGED
@@ -8,6 +8,7 @@ module ONIX
|
|
8
8
|
delegate :product_form_detail, :product_form_detail=
|
9
9
|
delegate :basic_main_subject, :basic_main_subject=
|
10
10
|
delegate :epub_type, :epub_type=
|
11
|
+
delegate :related_products, :related_products=
|
11
12
|
|
12
13
|
# retrieve the value of a particular ID
|
13
14
|
def series(str)
|
@@ -63,14 +64,28 @@ module ONIX
|
|
63
64
|
# process based on value type
|
64
65
|
if value.is_a?(WorkIdentifier)
|
65
66
|
str = value.id_value
|
66
|
-
|
67
|
+
obj = value
|
67
68
|
else
|
68
69
|
str = value
|
69
|
-
|
70
|
+
obj = ONIX::WorkIdentifier.new(:work_id_type => type, :id_value => value)
|
70
71
|
end
|
71
72
|
# check if exists already
|
72
73
|
unless work_identifier(str)
|
73
|
-
product.work_identifiers <<
|
74
|
+
product.work_identifiers << obj
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
# find the related_product that has relation_code 5
|
79
|
+
def replacement
|
80
|
+
product.related_products.find { |obj| obj.relation_code == 5 }
|
81
|
+
end
|
82
|
+
|
83
|
+
# set the proprietary_id of the replacement product
|
84
|
+
def replacement=(value)
|
85
|
+
if obj = replacement
|
86
|
+
obj.proprietary_id = value
|
87
|
+
else
|
88
|
+
product.related_products << ONIX::RelatedProduct.new(:relation_code => 5, :proprietary_id => value)
|
74
89
|
end
|
75
90
|
end
|
76
91
|
|
data/lib/onix/version.rb
CHANGED
data/lib/onix/work_identifier.rb
CHANGED
@@ -3,12 +3,14 @@
|
|
3
3
|
module ONIX
|
4
4
|
class WorkIdentifier
|
5
5
|
include ROXML
|
6
|
+
extend ONIX::ListWriter
|
6
7
|
|
7
8
|
xml_name "WorkIdentifier"
|
8
9
|
|
9
10
|
xml_reader :work_id_type, :from => "WorkIDType", :as => Fixnum, :to_xml => ONIX::Formatters.two_digit
|
10
11
|
xml_accessor :id_type_name, :from => "IDTypeName"
|
11
12
|
xml_accessor :id_value, :from => "IDValue"
|
13
|
+
list_writer :work_id_type, :list => 16
|
12
14
|
|
13
15
|
def initialize(options = {})
|
14
16
|
options.symbolize_keys!
|
@@ -17,12 +19,5 @@ module ONIX
|
|
17
19
|
@id_value = options[:id_value]
|
18
20
|
end
|
19
21
|
|
20
|
-
def work_id_type=(new_work_id_type)
|
21
|
-
if new_work_id_type.nil? || ::ONIX::Lists.list(16).keys.include?(new_work_id_type)
|
22
|
-
@work_id_type = new_work_id_type
|
23
|
-
else
|
24
|
-
raise "Invalid WorkIDType #{new_work_id_type}"
|
25
|
-
end
|
26
|
-
end
|
27
22
|
end
|
28
23
|
end
|
data/lib/onix.rb
CHANGED
@@ -55,9 +55,11 @@ end
|
|
55
55
|
# core files
|
56
56
|
# - ordering is important, classes need to be defined before any
|
57
57
|
# other class can use them
|
58
|
+
require File.join(File.dirname(__FILE__), "onix", "list_writer")
|
58
59
|
require File.join(File.dirname(__FILE__), "onix", "sender_identifier")
|
59
60
|
require File.join(File.dirname(__FILE__), "onix", "addressee_identifier")
|
60
61
|
require File.join(File.dirname(__FILE__), "onix", "header")
|
62
|
+
require File.join(File.dirname(__FILE__), "onix", "product_identifiers")
|
61
63
|
require File.join(File.dirname(__FILE__), "onix", "product_identifier")
|
62
64
|
require File.join(File.dirname(__FILE__), "onix", "series_identifier")
|
63
65
|
require File.join(File.dirname(__FILE__), "onix", "series")
|
@@ -76,6 +78,7 @@ require File.join(File.dirname(__FILE__), "onix", "media_file")
|
|
76
78
|
require File.join(File.dirname(__FILE__), "onix", "sales_restriction")
|
77
79
|
require File.join(File.dirname(__FILE__), "onix", "stock")
|
78
80
|
require File.join(File.dirname(__FILE__), "onix", "price")
|
81
|
+
require File.join(File.dirname(__FILE__), "onix", "related_product")
|
79
82
|
require File.join(File.dirname(__FILE__), "onix", "supply_detail")
|
80
83
|
require File.join(File.dirname(__FILE__), "onix", "market_representation")
|
81
84
|
require File.join(File.dirname(__FILE__), "onix", "measure")
|
@@ -0,0 +1,46 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
|
3
|
+
require File.dirname(__FILE__) + '/spec_helper.rb'
|
4
|
+
|
5
|
+
describe ONIX::ListWriter do
|
6
|
+
|
7
|
+
module ONIX
|
8
|
+
class FakeEntity
|
9
|
+
include ROXML
|
10
|
+
extend ONIX::ListWriter
|
11
|
+
|
12
|
+
xml_name "FakeEntity"
|
13
|
+
xml_reader :series_id_type, :from => "SeriesIDType", :as => Fixnum, :to_xml => ONIX::Formatters.two_digit
|
14
|
+
list_writer :series_id_type, :list => 13
|
15
|
+
|
16
|
+
def initialize(options = {})
|
17
|
+
self.series_id_type = options[:series_id_type]
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
before :each do
|
23
|
+
data_path = File.join(File.dirname(__FILE__),"..","data")
|
24
|
+
file1 = File.join(data_path, "fake_entity_for_lists.xml")
|
25
|
+
@doc = Nokogiri::XML::Document.parse(File.read(file1))
|
26
|
+
@root = @doc.root
|
27
|
+
end
|
28
|
+
|
29
|
+
it "should provide read access to first level attribute" do
|
30
|
+
fake = ONIX::FakeEntity.from_xml(@root.to_s)
|
31
|
+
fake.series_id_type.should eql(1)
|
32
|
+
end
|
33
|
+
|
34
|
+
it "should provide write access to first level attribute" do
|
35
|
+
fake = ONIX::FakeEntity.new(:series_id_type => 3)
|
36
|
+
fake.series_id_type.should eql(3)
|
37
|
+
fake.to_xml.to_s.include?("<SeriesIDType>03</SeriesIDType>").should be_true
|
38
|
+
end
|
39
|
+
|
40
|
+
it "should raise error writing value not in list" do
|
41
|
+
fake = ONIX::FakeEntity.new
|
42
|
+
lambda {fake.series_id_type = 100}.should raise_error
|
43
|
+
lambda {ONIX::FakeEntity.new(:series_id_type => 100)}.should raise_error
|
44
|
+
end
|
45
|
+
|
46
|
+
end
|
@@ -0,0 +1,71 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
|
3
|
+
require File.dirname(__FILE__) + '/spec_helper.rb'
|
4
|
+
|
5
|
+
describe ONIX::ProductIdentifiers do
|
6
|
+
|
7
|
+
module ONIX
|
8
|
+
class FakeEntity
|
9
|
+
include ROXML
|
10
|
+
include ONIX::ProductIdentifiers
|
11
|
+
|
12
|
+
xml_name "FakeEntity"
|
13
|
+
xml_reader :product_identifiers, :from => "ProductIdentifier", :as => [ONIX::ProductIdentifier]
|
14
|
+
|
15
|
+
def initialize(options = {})
|
16
|
+
self.initialize_product_identifiers(options)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
before :each do
|
22
|
+
@fake = ONIX::FakeEntity.new(:isbn => 123456)
|
23
|
+
data_path = File.join(File.dirname(__FILE__),"..","data")
|
24
|
+
file1 = File.join(data_path, "fake_entity.xml")
|
25
|
+
@doc = Nokogiri::XML::Document.parse(File.read(file1))
|
26
|
+
@root = @doc.root
|
27
|
+
end
|
28
|
+
|
29
|
+
it "should instantiate product identifiers array" do
|
30
|
+
@fake.product_identifiers.should be_a(Array)
|
31
|
+
end
|
32
|
+
|
33
|
+
it "should provide read access to product identifiers" do
|
34
|
+
fe = ONIX::FakeEntity.from_xml(@root.to_s)
|
35
|
+
fe.proprietary_id.should eql("PROPRIETARY_ID")
|
36
|
+
fe.isbn10.should eql("ISBN10")
|
37
|
+
fe.isbn.should eql("ISBN13")
|
38
|
+
fe.isbn13.should eql("ISBN13")
|
39
|
+
fe.ean.should eql("EAN")
|
40
|
+
fe.lccn.should eql("LCCN")
|
41
|
+
end
|
42
|
+
|
43
|
+
it "should provide write access to product identifiers" do
|
44
|
+
id_value = "123456"
|
45
|
+
{:proprietary_id => 1, :ean => 3, :isbn10 => 2, :isbn13 => 15, :isbn => 15, :lccn => 13}.each do |key, product_id_type|
|
46
|
+
fe = ONIX::FakeEntity.new(key => id_value)
|
47
|
+
fe.to_xml.to_s.include?("<ProductIDType>#{sprintf('%02d', product_id_type)}</ProductIDType>").should be_true
|
48
|
+
fe.to_xml.to_s.include?("<IDValue>#{id_value}</IDValue>").should be_true
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
it "should provide write access to product_identifiers array" do
|
53
|
+
id = ONIX::ProductIdentifier.new
|
54
|
+
id.product_id_type = 1
|
55
|
+
id.id_value = "123456"
|
56
|
+
fe = ONIX::FakeEntity.new(:product_identifiers => id)
|
57
|
+
|
58
|
+
fe.to_xml.to_s.include?("<ProductIdentifier>").should be_true
|
59
|
+
fe.to_xml.to_s.include?("<ProductIDType>01</ProductIDType>").should be_true
|
60
|
+
fe.to_xml.to_s.include?("<IDValue>123456</IDValue>").should be_true
|
61
|
+
|
62
|
+
id = ONIX::ProductIdentifier.new
|
63
|
+
id.product_id_type = 2
|
64
|
+
id.id_value = "987654"
|
65
|
+
fe.product_identifiers << id
|
66
|
+
|
67
|
+
fe.to_xml.to_s.include?("<ProductIDType>02</ProductIDType>").should be_true
|
68
|
+
fe.to_xml.to_s.include?("<IDValue>987654</IDValue>").should be_true
|
69
|
+
end
|
70
|
+
|
71
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
|
3
|
+
require File.dirname(__FILE__) + '/spec_helper.rb'
|
4
|
+
|
5
|
+
describe ONIX::RelatedProduct do
|
6
|
+
|
7
|
+
before(:each) do
|
8
|
+
data_path = File.join(File.dirname(__FILE__),"..","data")
|
9
|
+
file1 = File.join(data_path, "related_product.xml")
|
10
|
+
@doc = Nokogiri::XML::Document.parse(File.read(file1))
|
11
|
+
@root = @doc.root
|
12
|
+
end
|
13
|
+
|
14
|
+
it "should correctly convert to a string" do
|
15
|
+
rp = ONIX::RelatedProduct.from_xml(@root.to_s)
|
16
|
+
rp.to_xml.to_s[0,16].should eql("<RelatedProduct>")
|
17
|
+
end
|
18
|
+
|
19
|
+
it "should provide read access to relation_code" do
|
20
|
+
rp = ONIX::RelatedProduct.from_xml(@root.to_s)
|
21
|
+
rp.relation_code.should eql(5)
|
22
|
+
end
|
23
|
+
|
24
|
+
it "should provide write access to relation_code" do
|
25
|
+
rp = ONIX::RelatedProduct.new(:relation_code => 1)
|
26
|
+
rp.to_xml.to_s.include?("<RelationCode>01</RelationCode>").should be_true
|
27
|
+
|
28
|
+
rp.relation_code = 2
|
29
|
+
rp.to_xml.to_s.include?("<RelationCode>02</RelationCode>").should be_true
|
30
|
+
end
|
31
|
+
|
32
|
+
# This is essentially testing product_identifers.rb module
|
33
|
+
it "should provide read access to proprietary_id" do
|
34
|
+
rp = ONIX::RelatedProduct.from_xml(@root.to_s)
|
35
|
+
rp.proprietary_id.should eql("123456")
|
36
|
+
end
|
37
|
+
|
38
|
+
# This is essentially testing product_identifers.rb module
|
39
|
+
it "should provide write access to proprietary_id" do
|
40
|
+
rp = ONIX::RelatedProduct.new(:proprietary_id => 123456)
|
41
|
+
rp.to_xml.to_s.include?("<ProductIDType>01</ProductIDType>").should be_true
|
42
|
+
rp.to_xml.to_s.include?("<IDValue>123456</IDValue>").should be_true
|
43
|
+
end
|
44
|
+
|
45
|
+
end
|
data/spec/set_spec.rb
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
require File.dirname(__FILE__) + '/spec_helper.rb'
|
4
4
|
|
5
|
-
|
5
|
+
describe ONIX::Set do
|
6
6
|
|
7
7
|
before(:each) do
|
8
8
|
data_path = File.join(File.dirname(__FILE__),"..","data")
|
@@ -11,18 +11,18 @@ context "ONIX::Set" do
|
|
11
11
|
@root = @doc.root
|
12
12
|
end
|
13
13
|
|
14
|
-
|
14
|
+
it "should correctly convert to a string" do
|
15
15
|
set = ONIX::Set.from_xml(@root.to_s)
|
16
16
|
set.to_xml.to_s[0,5].should eql("<Set>")
|
17
17
|
end
|
18
18
|
|
19
|
-
|
19
|
+
it "should provide read access to first level attributes" do
|
20
20
|
set = ONIX::Set.from_xml(@root.to_s)
|
21
21
|
|
22
22
|
set.title_of_set.should eql("Citizens and Their Governments")
|
23
23
|
end
|
24
24
|
|
25
|
-
|
25
|
+
it "should provide write access to first level attributes" do
|
26
26
|
set = ONIX::Set.new
|
27
27
|
|
28
28
|
set.title_of_set = "Cool Science Careers"
|
data/spec/sl_product_spec.rb
CHANGED
@@ -3,43 +3,45 @@
|
|
3
3
|
require File.dirname(__FILE__) + '/spec_helper.rb'
|
4
4
|
require 'date'
|
5
5
|
|
6
|
-
|
6
|
+
describe ONIX::SLProduct do
|
7
7
|
|
8
8
|
before(:each) do
|
9
9
|
@data_path = File.join(File.dirname(__FILE__),"..","data")
|
10
|
-
file1 = File.join(@data_path, "
|
10
|
+
file1 = File.join(@data_path, "sl_product.xml")
|
11
11
|
@doc = Nokogiri::XML::Document.parse(File.read(file1))
|
12
12
|
@product_node = @doc.root
|
13
13
|
end
|
14
14
|
|
15
|
-
|
16
|
-
@product
|
17
|
-
@sl
|
15
|
+
it "should provide read access to attributes" do
|
16
|
+
@product = ONIX::Product.from_xml(@product_node.to_s)
|
17
|
+
@sl = ONIX::SLProduct.new(@product)
|
18
18
|
|
19
|
-
@sl.record_reference.should eql("
|
19
|
+
@sl.record_reference.should eql("200002")
|
20
20
|
@sl.notification_type.should eql(3)
|
21
|
-
@sl.product_form.should eql("
|
22
|
-
@sl.number_of_pages.should eql(
|
23
|
-
@sl.
|
21
|
+
@sl.product_form.should eql("BB")
|
22
|
+
@sl.number_of_pages.should eql(32)
|
23
|
+
@sl.basic_main_subject.should eql("JNF053090")
|
24
24
|
@sl.publishing_status.should eql(4)
|
25
|
-
@sl.publication_date.should eql(Date.civil(
|
26
|
-
@sl.
|
25
|
+
@sl.publication_date.should eql(Date.civil(2007,8,1))
|
26
|
+
@sl.related_products.should be_a(Array)
|
27
|
+
@sl.related_products[0].should be_a(ONIX::RelatedProduct)
|
28
|
+
@sl.related_products[0].relation_code.should eql(5)
|
27
29
|
end
|
28
30
|
|
29
|
-
|
31
|
+
it "should provide write access to attributes" do
|
30
32
|
sl = ONIX::SLProduct.new
|
31
33
|
|
32
34
|
sl.notification_type = 3
|
33
35
|
sl.to_xml.to_s.include?("<NotificationType>03</NotificationType>").should be_true
|
34
36
|
|
35
|
-
sl.record_reference = "
|
36
|
-
sl.to_xml.to_s.include?("<RecordReference>
|
37
|
+
sl.record_reference = "200002"
|
38
|
+
sl.to_xml.to_s.include?("<RecordReference>200002</RecordReference>").should be_true
|
37
39
|
|
38
|
-
sl.product_form = "
|
39
|
-
sl.to_xml.to_s.include?("<ProductForm>
|
40
|
+
sl.product_form = "BB"
|
41
|
+
sl.to_xml.to_s.include?("<ProductForm>BB</ProductForm>").should be_true
|
40
42
|
|
41
|
-
sl.number_of_pages =
|
42
|
-
sl.to_xml.to_s.include?("<NumberOfPages>
|
43
|
+
sl.number_of_pages = 32
|
44
|
+
sl.to_xml.to_s.include?("<NumberOfPages>32</NumberOfPages>").should be_true
|
43
45
|
|
44
46
|
sl.basic_main_subject = "JNF053090"
|
45
47
|
sl.to_xml.to_s.include?("<BASICMainSubject>JNF053090</BASICMainSubject>").should be_true
|
@@ -47,17 +49,50 @@ context "ONIX::SLProduct" do
|
|
47
49
|
sl.publishing_status = 4
|
48
50
|
sl.to_xml.to_s.include?("<PublishingStatus>04</PublishingStatus>").should be_true
|
49
51
|
|
50
|
-
sl.publication_date = Date.civil(
|
51
|
-
sl.to_xml.to_s.include?("<PublicationDate>
|
52
|
+
sl.publication_date = Date.civil(2007,8,1)
|
53
|
+
sl.to_xml.to_s.include?("<PublicationDate>20070801</PublicationDate>").should be_true
|
54
|
+
|
55
|
+
id = ONIX::ProductIdentifier.new
|
56
|
+
id.product_id_type = 1
|
57
|
+
id.id_value = "123456"
|
58
|
+
sl.related_products = [ONIX::RelatedProduct.new(:relation_code => 1, :product_identifiers => id)]
|
59
|
+
sl.related_products << ONIX::RelatedProduct.new(:relation_code => 2, :product_identifiers => id)
|
60
|
+
sl.related_products[0].to_xml.to_s.include?("<RelationCode>01</RelationCode>").should be_true
|
61
|
+
sl.related_products[1].to_xml.to_s.include?("<RelationCode>02</RelationCode>").should be_true
|
62
|
+
end
|
63
|
+
|
64
|
+
it "should provide read access to replacement" do
|
65
|
+
@product = ONIX::Product.from_xml(@product_node.to_s)
|
66
|
+
@sl = ONIX::SLProduct.new(@product)
|
52
67
|
|
53
|
-
sl.
|
54
|
-
sl.
|
68
|
+
@sl.replacement.relation_code.should eql(5)
|
69
|
+
@sl.replacement.proprietary_id.should eql("123456")
|
70
|
+
end
|
71
|
+
|
72
|
+
it "should provide write access to replacement" do
|
73
|
+
sl = ONIX::SLProduct.new
|
74
|
+
|
75
|
+
sl.replacement = "XYZ123"
|
76
|
+
sl.related_products[0].to_xml.to_s.include?("<RelationCode>05</RelationCode>").should be_true
|
77
|
+
sl.related_products[0].to_xml.to_s.include?("<ProductIDType>01</ProductIDType>").should be_true
|
78
|
+
sl.related_products[0].to_xml.to_s.include?("<IDValue>XYZ123</IDValue>").should be_true
|
79
|
+
end
|
80
|
+
|
81
|
+
it "should provide write access to epub_type" do
|
82
|
+
sl = ONIX::SLProduct.new
|
83
|
+
sl.epub_type = 1
|
84
|
+
sl.to_xml.to_s.include?("<EpubType>001</EpubType>").should be_true
|
85
|
+
end
|
86
|
+
|
87
|
+
it "should raise error when writing invalid epub_type" do
|
88
|
+
sl = ONIX::SLProduct.new
|
89
|
+
lambda {sl.epub_type = 999}.should raise_error
|
55
90
|
end
|
56
91
|
|
57
92
|
end
|
58
93
|
|
59
|
-
|
60
|
-
|
94
|
+
describe ONIX::SLProduct, "series method" do
|
95
|
+
it "should set the nested series value on the underlying product class" do
|
61
96
|
sl = ONIX::SLProduct.new
|
62
97
|
|
63
98
|
sl.series = "Harry Potter"
|
@@ -67,7 +102,7 @@ context ONIX::SLProduct, "series method" do
|
|
67
102
|
end
|
68
103
|
end
|
69
104
|
|
70
|
-
|
105
|
+
describe ONIX::SLProduct, "price method" do
|
71
106
|
before(:each) do
|
72
107
|
@data_path = File.join(File.dirname(__FILE__),"..","data")
|
73
108
|
file1 = File.join(@data_path, "usd.xml")
|
@@ -75,7 +110,7 @@ context ONIX::SLProduct, "price method" do
|
|
75
110
|
@product_node = @doc.root
|
76
111
|
end
|
77
112
|
|
78
|
-
|
113
|
+
it "should return the first price in the file, regardless of type" do
|
79
114
|
@product = ONIX::Product.from_xml(@product_node.to_s)
|
80
115
|
@sl = ONIX::SLProduct.new(@product)
|
81
116
|
|
@@ -83,7 +118,7 @@ context ONIX::SLProduct, "price method" do
|
|
83
118
|
end
|
84
119
|
end
|
85
120
|
|
86
|
-
|
121
|
+
describe ONIX::SLProduct, "rrp_exc_sales_tax method" do
|
87
122
|
before(:each) do
|
88
123
|
@data_path = File.join(File.dirname(__FILE__),"..","data")
|
89
124
|
file1 = File.join(@data_path, "usd.xml")
|
@@ -91,7 +126,7 @@ context ONIX::SLProduct, "rrp_exc_sales_tax method" do
|
|
91
126
|
@product_node = @doc.root
|
92
127
|
end
|
93
128
|
|
94
|
-
|
129
|
+
it "should return the first price in the file of type 1" do
|
95
130
|
@product = ONIX::Product.from_xml(@product_node.to_s)
|
96
131
|
@sl = ONIX::SLProduct.new(@product)
|
97
132
|
|
@@ -35,5 +35,11 @@ describe ONIX::WorkIdentifier do
|
|
35
35
|
t.id_value = "ABC123"
|
36
36
|
t.to_xml.to_s.include?("<IDValue>ABC123</IDValue>").should be_true
|
37
37
|
end
|
38
|
+
|
39
|
+
it "should raise error writing work_id_type value not in list" do
|
40
|
+
t = ONIX::WorkIdentifier.new
|
41
|
+
lambda {t.work_id_type = 999}.should raise_error
|
42
|
+
lambda {ONIX::WorkIdentifier.new(:work_id_type => 999)}.should raise_error
|
43
|
+
end
|
38
44
|
|
39
45
|
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: milkfarm-onix
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 45
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 8
|
9
|
-
-
|
10
|
-
version: 0.8.
|
9
|
+
- 9
|
10
|
+
version: 0.8.9
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- James Healy
|
@@ -16,7 +16,7 @@ autorequire:
|
|
16
16
|
bindir: bin
|
17
17
|
cert_chain: []
|
18
18
|
|
19
|
-
date: 2011-03-
|
19
|
+
date: 2011-03-24 00:00:00 -07:00
|
20
20
|
default_executable:
|
21
21
|
dependencies:
|
22
22
|
- !ruby/object:Gem::Dependency
|
@@ -126,6 +126,7 @@ files:
|
|
126
126
|
- lib/onix/header.rb
|
127
127
|
- lib/onix/imprint.rb
|
128
128
|
- lib/onix/language.rb
|
129
|
+
- lib/onix/list_writer.rb
|
129
130
|
- lib/onix/lists.rb
|
130
131
|
- lib/onix/market_representation.rb
|
131
132
|
- lib/onix/measure.rb
|
@@ -135,8 +136,10 @@ files:
|
|
135
136
|
- lib/onix/price.rb
|
136
137
|
- lib/onix/product.rb
|
137
138
|
- lib/onix/product_identifier.rb
|
139
|
+
- lib/onix/product_identifiers.rb
|
138
140
|
- lib/onix/publisher.rb
|
139
141
|
- lib/onix/reader.rb
|
142
|
+
- lib/onix/related_product.rb
|
140
143
|
- lib/onix/sales_restriction.rb
|
141
144
|
- lib/onix/sender_identifier.rb
|
142
145
|
- lib/onix/series.rb
|
@@ -335,6 +338,7 @@ files:
|
|
335
338
|
- spec/header_spec.rb
|
336
339
|
- spec/imprint_spec.rb
|
337
340
|
- spec/language_spec.rb
|
341
|
+
- spec/list_writer_spec.rb
|
338
342
|
- spec/lists_spec.rb
|
339
343
|
- spec/market_representation_spec.rb
|
340
344
|
- spec/measure_spec.rb
|
@@ -343,9 +347,11 @@ files:
|
|
343
347
|
- spec/other_text_spec.rb
|
344
348
|
- spec/price_spec.rb
|
345
349
|
- spec/product_identifier_spec.rb
|
350
|
+
- spec/product_identifiers_spec.rb
|
346
351
|
- spec/product_spec.rb
|
347
352
|
- spec/publisher_spec.rb
|
348
353
|
- spec/reader_spec.rb
|
354
|
+
- spec/related_product_spec.rb
|
349
355
|
- spec/sales_restriction_spec.rb
|
350
356
|
- spec/sender_identifier.rb
|
351
357
|
- spec/series_identifier_spec.rb
|
@@ -403,6 +409,7 @@ test_files:
|
|
403
409
|
- spec/header_spec.rb
|
404
410
|
- spec/imprint_spec.rb
|
405
411
|
- spec/language_spec.rb
|
412
|
+
- spec/list_writer_spec.rb
|
406
413
|
- spec/lists_spec.rb
|
407
414
|
- spec/market_representation_spec.rb
|
408
415
|
- spec/measure_spec.rb
|
@@ -411,9 +418,11 @@ test_files:
|
|
411
418
|
- spec/other_text_spec.rb
|
412
419
|
- spec/price_spec.rb
|
413
420
|
- spec/product_identifier_spec.rb
|
421
|
+
- spec/product_identifiers_spec.rb
|
414
422
|
- spec/product_spec.rb
|
415
423
|
- spec/publisher_spec.rb
|
416
424
|
- spec/reader_spec.rb
|
425
|
+
- spec/related_product_spec.rb
|
417
426
|
- spec/sales_restriction_spec.rb
|
418
427
|
- spec/sender_identifier.rb
|
419
428
|
- spec/series_identifier_spec.rb
|