im_onix 1.1.1 → 1.2.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/bin/html_codelist_to_yml.rb +10 -6
- data/bin/onix_bench.rb +9 -4
- data/bin/onix_pp.rb +26 -26
- data/bin/onix_serialize.rb +12 -16
- data/data/codelists/codelist-1.yml +4 -5
- data/data/codelists/codelist-10.yml +13 -11
- data/data/codelists/codelist-100.yml +1 -0
- data/data/codelists/codelist-102.yml +3 -2
- data/data/codelists/codelist-11.yml +2 -2
- data/data/codelists/codelist-12.yml +8 -3
- data/data/codelists/codelist-121.yml +46 -17
- data/data/codelists/codelist-13.yml +3 -0
- data/data/codelists/codelist-139.yml +83 -9
- data/data/codelists/codelist-141.yml +4 -4
- data/data/codelists/codelist-142.yml +2 -2
- data/data/codelists/codelist-143.yml +11 -0
- data/data/codelists/codelist-144.yml +2 -2
- data/data/codelists/codelist-145.yml +4 -1
- data/data/codelists/codelist-147.yml +18 -2
- data/data/codelists/codelist-149.yml +1 -0
- data/data/codelists/codelist-15.yml +2 -1
- data/data/codelists/codelist-150.yml +46 -26
- data/data/codelists/codelist-151.yml +4 -1
- data/data/codelists/codelist-153.yml +19 -4
- data/data/codelists/codelist-154.yml +4 -2
- data/data/codelists/codelist-155.yml +3 -1
- data/data/codelists/codelist-156.yml +1 -0
- data/data/codelists/codelist-158.yml +18 -0
- data/data/codelists/codelist-159.yml +1 -1
- data/data/codelists/codelist-16.yml +3 -0
- data/data/codelists/codelist-160.yml +2 -0
- data/data/codelists/codelist-162.yml +2 -0
- data/data/codelists/codelist-163.yml +8 -3
- data/data/codelists/codelist-165.yml +3 -0
- data/data/codelists/codelist-166.yml +7 -2
- data/data/codelists/codelist-167.yml +6 -0
- data/data/codelists/codelist-168.yml +1 -0
- data/data/codelists/codelist-169.yml +2 -2
- data/data/codelists/codelist-17.yml +20 -2
- data/data/codelists/codelist-170.yml +5 -1
- data/data/codelists/codelist-171.yml +1 -0
- data/data/codelists/codelist-173.yml +1 -1
- data/data/codelists/codelist-175.yml +113 -35
- data/data/codelists/codelist-176.yml +2 -2
- data/data/codelists/codelist-177.yml +1 -0
- data/data/codelists/codelist-178.yml +6 -0
- data/data/codelists/codelist-179.yml +1 -0
- data/data/codelists/codelist-18.yml +3 -1
- data/data/codelists/codelist-184.yml +1 -0
- data/data/codelists/codelist-19.yml +5 -4
- data/data/codelists/codelist-196.yml +16 -4
- data/data/codelists/codelist-197.yml +2 -0
- data/data/codelists/codelist-198.yml +7 -0
- data/data/codelists/codelist-2.yml +6 -6
- data/data/codelists/codelist-20.yml +10 -1
- data/data/codelists/codelist-203.yml +1 -1
- data/data/codelists/codelist-204.yml +4 -0
- data/data/codelists/codelist-21.yml +24 -19
- data/data/codelists/codelist-215.yml +9 -0
- data/data/codelists/codelist-216.yml +11 -0
- data/data/codelists/codelist-217.yml +9 -0
- data/data/codelists/codelist-218.yml +5 -0
- data/data/codelists/codelist-219.yml +5 -0
- data/data/codelists/codelist-22.yml +5 -4
- data/data/codelists/codelist-220.yml +10 -0
- data/data/codelists/codelist-221.yml +6 -0
- data/data/codelists/codelist-222.yml +4 -0
- data/data/codelists/codelist-223.yml +4 -0
- data/data/codelists/codelist-224.yml +8 -0
- data/data/codelists/codelist-225.yml +4 -0
- data/data/codelists/codelist-226.yml +7 -0
- data/data/codelists/codelist-227.yml +21 -0
- data/data/codelists/codelist-228.yml +3 -0
- data/data/codelists/codelist-229.yml +5 -0
- data/data/codelists/codelist-23.yml +5 -3
- data/data/codelists/codelist-230.yml +8 -0
- data/data/codelists/codelist-238.yml +23 -0
- data/data/codelists/codelist-239.yml +4 -0
- data/data/codelists/codelist-24.yml +3 -0
- data/data/codelists/codelist-240.yml +6 -0
- data/data/codelists/codelist-241.yml +9 -0
- data/data/codelists/codelist-242.yml +24 -0
- data/data/codelists/codelist-243.yml +9 -0
- data/data/codelists/codelist-244.yml +3 -0
- data/data/codelists/codelist-245.yml +5 -0
- data/data/codelists/codelist-246.yml +4 -0
- data/data/codelists/codelist-247.yml +4 -0
- data/data/codelists/codelist-25.yml +4 -2
- data/data/codelists/codelist-26.yml +28 -18
- data/data/codelists/codelist-27.yml +35 -19
- data/data/codelists/codelist-28.yml +2 -1
- data/data/codelists/codelist-29.yml +8 -3
- data/data/codelists/codelist-3.yml +5 -2
- data/data/codelists/codelist-30.yml +6 -2
- data/data/codelists/codelist-32.yml +7 -0
- data/data/codelists/codelist-33.yml +6 -2
- data/data/codelists/codelist-34.yml +0 -11
- data/data/codelists/codelist-38.yml +1 -1
- data/data/codelists/codelist-39.yml +2 -2
- data/data/codelists/codelist-41.yml +4 -3
- data/data/codelists/codelist-42.yml +0 -12
- data/data/codelists/codelist-43.yml +3 -1
- data/data/codelists/codelist-44.yml +16 -3
- data/data/codelists/codelist-45.yml +8 -3
- data/data/codelists/codelist-46.yml +4 -4
- data/data/codelists/codelist-48.yml +20 -2
- data/data/codelists/codelist-49.yml +268 -1
- data/data/codelists/codelist-5.yml +6 -3
- data/data/codelists/codelist-51.yml +11 -5
- data/data/codelists/codelist-55.yml +2 -2
- data/data/codelists/codelist-57.yml +1 -0
- data/data/codelists/codelist-58.yml +14 -12
- data/data/codelists/codelist-59.yml +10 -1
- data/data/codelists/codelist-6.yml +39 -39
- data/data/codelists/codelist-60.yml +1 -1
- data/data/codelists/codelist-62.yml +2 -1
- data/data/codelists/codelist-64.yml +3 -2
- data/data/codelists/codelist-65.yml +1 -0
- data/data/codelists/codelist-68.yml +2 -2
- data/data/codelists/codelist-69.yml +2 -2
- data/data/codelists/codelist-7.yml +21 -17
- data/data/codelists/codelist-71.yml +16 -6
- data/data/codelists/codelist-73.yml +7 -5
- data/data/codelists/codelist-74.yml +59 -31
- data/data/codelists/codelist-75.yml +1 -1
- data/data/codelists/codelist-76.yml +3 -3
- data/data/codelists/codelist-78.yml +52 -26
- data/data/codelists/codelist-79.yml +16 -7
- data/data/codelists/codelist-8.yml +3 -3
- data/data/codelists/codelist-80.yml +6 -5
- data/data/codelists/codelist-81.yml +8 -5
- data/data/codelists/codelist-83.yml +3 -2
- data/data/codelists/codelist-85.yml +1 -1
- data/data/codelists/codelist-9.yml +7 -3
- data/data/codelists/codelist-90.yml +2 -2
- data/data/codelists/codelist-91.yml +11 -11
- data/data/codelists/codelist-92.yml +1 -1
- data/data/codelists/codelist-93.yml +9 -6
- data/data/codelists/codelist-96.yml +45 -40
- data/data/codelists/codelist-98.yml +6 -3
- data/data/codelists/codelist-99.yml +8 -5
- data/data/onix21/codelists/codelist-1.yml +2 -2
- data/data/onix21/codelists/codelist-10.yml +12 -12
- data/data/onix21/codelists/codelist-11.yml +2 -2
- data/data/onix21/codelists/codelist-12.yml +3 -3
- data/data/onix21/codelists/codelist-121.yml +9 -9
- data/data/onix21/codelists/codelist-13.yml +1 -1
- data/data/onix21/codelists/codelist-139.yml +6 -6
- data/data/onix21/codelists/codelist-141.yml +4 -4
- data/data/onix21/codelists/codelist-142.yml +2 -2
- data/data/onix21/codelists/codelist-145.yml +2 -2
- data/data/onix21/codelists/codelist-147.yml +2 -2
- data/data/onix21/codelists/codelist-148.yml +1 -1
- data/data/onix21/codelists/codelist-149.yml +1 -1
- data/data/onix21/codelists/codelist-15.yml +1 -1
- data/data/onix21/codelists/codelist-150.yml +23 -23
- data/data/onix21/codelists/codelist-151.yml +1 -1
- data/data/onix21/codelists/codelist-153.yml +3 -3
- data/data/onix21/codelists/codelist-154.yml +2 -2
- data/data/onix21/codelists/codelist-155.yml +1 -1
- data/data/onix21/codelists/codelist-158.yml +2 -2
- data/data/onix21/codelists/codelist-159.yml +1 -1
- data/data/onix21/codelists/codelist-163.yml +2 -2
- data/data/onix21/codelists/codelist-166.yml +1 -1
- data/data/onix21/codelists/codelist-169.yml +2 -2
- data/data/onix21/codelists/codelist-17.yml +2 -2
- data/data/onix21/codelists/codelist-173.yml +1 -1
- data/data/onix21/codelists/codelist-175.yml +23 -23
- data/data/onix21/codelists/codelist-176.yml +2 -2
- data/data/onix21/codelists/codelist-18.yml +1 -1
- data/data/onix21/codelists/codelist-196.yml +4 -4
- data/data/onix21/codelists/codelist-2.yml +6 -6
- data/data/onix21/codelists/codelist-203.yml +1 -1
- data/data/onix21/codelists/codelist-21.yml +1 -1
- data/data/onix21/codelists/codelist-216.yml +2 -2
- data/data/onix21/codelists/codelist-218.yml +1 -1
- data/data/onix21/codelists/codelist-22.yml +3 -3
- data/data/onix21/codelists/codelist-23.yml +2 -2
- data/data/onix21/codelists/codelist-25.yml +2 -2
- data/data/onix21/codelists/codelist-26.yml +18 -18
- data/data/onix21/codelists/codelist-27.yml +18 -18
- data/data/onix21/codelists/codelist-28.yml +1 -1
- data/data/onix21/codelists/codelist-29.yml +3 -3
- data/data/onix21/codelists/codelist-3.yml +2 -2
- data/data/onix21/codelists/codelist-30.yml +1 -1
- data/data/onix21/codelists/codelist-32.yml +1 -1
- data/data/onix21/codelists/codelist-33.yml +2 -2
- data/data/onix21/codelists/codelist-34.yml +2 -2
- data/data/onix21/codelists/codelist-38.yml +1 -1
- data/data/onix21/codelists/codelist-39.yml +2 -2
- data/data/onix21/codelists/codelist-41.yml +3 -3
- data/data/onix21/codelists/codelist-43.yml +1 -1
- data/data/onix21/codelists/codelist-44.yml +2 -2
- data/data/onix21/codelists/codelist-45.yml +4 -4
- data/data/onix21/codelists/codelist-46.yml +3 -3
- data/data/onix21/codelists/codelist-48.yml +2 -2
- data/data/onix21/codelists/codelist-49.yml +12 -12
- data/data/onix21/codelists/codelist-5.yml +3 -3
- data/data/onix21/codelists/codelist-51.yml +3 -3
- data/data/onix21/codelists/codelist-55.yml +2 -2
- data/data/onix21/codelists/codelist-58.yml +10 -10
- data/data/onix21/codelists/codelist-59.yml +2 -2
- data/data/onix21/codelists/codelist-6.yml +36 -36
- data/data/onix21/codelists/codelist-60.yml +1 -1
- data/data/onix21/codelists/codelist-62.yml +1 -1
- data/data/onix21/codelists/codelist-64.yml +2 -2
- data/data/onix21/codelists/codelist-68.yml +2 -2
- data/data/onix21/codelists/codelist-69.yml +2 -2
- data/data/onix21/codelists/codelist-7.yml +17 -17
- data/data/onix21/codelists/codelist-71.yml +2 -2
- data/data/onix21/codelists/codelist-73.yml +5 -5
- data/data/onix21/codelists/codelist-74.yml +28 -28
- data/data/onix21/codelists/codelist-75.yml +1 -1
- data/data/onix21/codelists/codelist-76.yml +3 -3
- data/data/onix21/codelists/codelist-78.yml +24 -24
- data/data/onix21/codelists/codelist-79.yml +6 -6
- data/data/onix21/codelists/codelist-8.yml +3 -3
- data/data/onix21/codelists/codelist-80.yml +5 -5
- data/data/onix21/codelists/codelist-81.yml +4 -4
- data/data/onix21/codelists/codelist-83.yml +2 -2
- data/data/onix21/codelists/codelist-85.yml +1 -1
- data/data/onix21/codelists/codelist-9.yml +3 -3
- data/data/onix21/codelists/codelist-90.yml +2 -2
- data/data/onix21/codelists/codelist-91.yml +6 -6
- data/data/onix21/codelists/codelist-92.yml +1 -1
- data/data/onix21/codelists/codelist-93.yml +6 -6
- data/data/onix21/codelists/codelist-96.yml +1 -1
- data/data/onix21/codelists/codelist-98.yml +2 -2
- data/data/onix21/codelists/codelist-99.yml +4 -4
- data/im_onix.gemspec +1 -1
- data/lib/onix/addressee.rb +4 -3
- data/lib/onix/ancillary_content.rb +7 -0
- data/lib/onix/audience.rb +7 -0
- data/lib/onix/audience_range.rb +9 -0
- data/lib/onix/builder.rb +181 -0
- data/lib/onix/cited_content.rb +15 -0
- data/lib/onix/code.rb +285 -6
- data/lib/onix/collateral_detail.rb +9 -13
- data/lib/onix/collection.rb +11 -4
- data/lib/onix/collection_sequence.rb +3 -3
- data/lib/onix/comparison_product_price.rb +17 -0
- data/lib/onix/complexity.rb +6 -0
- data/lib/onix/content_detail.rb +7 -0
- data/lib/onix/content_item.rb +32 -0
- data/lib/onix/contributor.rb +42 -34
- data/lib/onix/contributor_place.rb +12 -0
- data/lib/onix/copyright_statement.rb +7 -0
- data/lib/onix/date.rb +77 -47
- data/lib/onix/descriptive_detail.rb +56 -25
- data/lib/onix/discount.rb +9 -0
- data/lib/onix/discount_coded.rb +3 -3
- data/lib/onix/entity.rb +16 -36
- data/lib/onix/epub_license.rb +8 -0
- data/lib/onix/epub_license_expression.rb +7 -0
- data/lib/onix/epub_usage_constraint.rb +5 -3
- data/lib/onix/epub_usage_limit.rb +2 -2
- data/lib/onix/error.rb +2 -0
- data/lib/onix/extent.rb +4 -3
- data/lib/onix/header.rb +17 -0
- data/lib/onix/identifier.rb +29 -13
- data/lib/onix/language.rb +5 -2
- data/lib/onix/market.rb +2 -1
- data/lib/onix/market_publishing_detail.rb +13 -3
- data/lib/onix/measure.rb +7 -0
- data/lib/onix/onix_message.rb +36 -48
- data/lib/onix/page_run.rb +6 -0
- data/lib/onix/price.rb +33 -9
- data/lib/onix/prize.rb +11 -0
- data/lib/onix/product.rb +31 -11
- data/lib/onix/product_classification.rb +8 -0
- data/lib/onix/product_contact.rb +11 -0
- data/lib/onix/product_part.rb +18 -8
- data/lib/onix/product_supply.rb +3 -3
- data/lib/onix/professional_affiliation.rb +6 -0
- data/lib/onix/publishing_detail.rb +16 -9
- data/lib/onix/related_material.rb +2 -2
- data/lib/onix/related_product.rb +8 -4
- data/lib/onix/related_work.rb +2 -2
- data/lib/onix/resource_feature.rb +9 -0
- data/lib/onix/resource_version.rb +82 -0
- data/lib/onix/resource_version_feature.rb +22 -0
- data/lib/onix/returns_conditions.rb +8 -0
- data/lib/onix/review_rating.rb +7 -0
- data/lib/onix/sales_outlet.rb +10 -2
- data/lib/onix/sales_restriction.rb +6 -16
- data/lib/onix/sales_rights.rb +6 -3
- data/lib/onix/sender.rb +4 -4
- data/lib/onix/serializer.rb +130 -86
- data/lib/onix/subject.rb +10 -6
- data/lib/onix/subset.rb +125 -24
- data/lib/onix/supplier_own_coding.rb +7 -0
- data/lib/onix/supply_contact.rb +9 -0
- data/lib/onix/supply_detail.rb +20 -5
- data/lib/onix/supporting_resource.rb +8 -113
- data/lib/onix/tax.rb +11 -5
- data/lib/onix/territory.rb +4 -4
- data/lib/onix/text_content.rb +13 -0
- data/lib/onix/text_item.rb +12 -0
- data/lib/onix/title_detail.rb +3 -3
- data/lib/onix/title_element.rb +15 -13
- data/lib/onix/website.rb +4 -3
- metadata +58 -2
data/lib/onix/onix_message.rb
CHANGED
@@ -4,6 +4,7 @@ require 'time'
|
|
4
4
|
require 'onix/subset'
|
5
5
|
require 'onix/helper'
|
6
6
|
require 'onix/code'
|
7
|
+
require 'onix/header'
|
7
8
|
require 'onix/sender'
|
8
9
|
require 'onix/addressee'
|
9
10
|
require 'onix/product'
|
@@ -11,11 +12,22 @@ require 'onix/product'
|
|
11
12
|
require 'onix/onix21'
|
12
13
|
|
13
14
|
module ONIX
|
14
|
-
class ONIXMessage <
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
15
|
+
class ONIXMessage < SubsetDSL
|
16
|
+
extend Forwardable
|
17
|
+
attr_accessor :release
|
18
|
+
|
19
|
+
element "Header", :subset, :cardinality => 1
|
20
|
+
elements "Product", :subset, :cardinality => 0..n
|
21
|
+
|
22
|
+
def_delegator :header, :sender
|
23
|
+
def_delegator :header, :addressee
|
24
|
+
def_delegator :header, :default_language_of_text
|
25
|
+
def_delegator :header, :default_currency_code
|
26
|
+
def_delegator :header, :sent_date_time
|
27
|
+
|
28
|
+
def header
|
29
|
+
@header || Header.new
|
30
|
+
end
|
19
31
|
|
20
32
|
def initialize
|
21
33
|
@products = []
|
@@ -53,6 +65,8 @@ module ONIX
|
|
53
65
|
product.identifiers.each do |ident|
|
54
66
|
@vault[ident.uniq_id] = product
|
55
67
|
end
|
68
|
+
product.default_language_of_text = self.default_language_of_text if @header
|
69
|
+
product.default_currency_code = self.default_currency_code if @header
|
56
70
|
end
|
57
71
|
|
58
72
|
@products.each do |product|
|
@@ -117,57 +131,31 @@ module ONIX
|
|
117
131
|
end
|
118
132
|
end
|
119
133
|
|
134
|
+
def product_klass
|
135
|
+
self.version >= 300 ? Product : ONIX21::Product
|
136
|
+
end
|
137
|
+
|
138
|
+
def get_class(name)
|
139
|
+
if name == "Product"
|
140
|
+
self.product_klass
|
141
|
+
else
|
142
|
+
super(name)
|
143
|
+
end
|
144
|
+
end
|
145
|
+
|
120
146
|
# parse filename or file
|
121
147
|
def parse(arg, force_encoding = nil, force_release = nil)
|
122
|
-
xml = open(arg, force_encoding)
|
123
148
|
@products = []
|
149
|
+
xml = open(arg, force_encoding)
|
124
150
|
root = xml.root
|
125
151
|
set_release_from_xml(root, force_release)
|
126
152
|
case root
|
127
|
-
when tag_match("ONIXMessage")
|
128
|
-
root.elements.each do |e|
|
129
|
-
case e
|
130
|
-
when tag_match("Header")
|
131
|
-
e.elements.each do |t|
|
132
|
-
case t
|
133
|
-
when tag_match("Sender")
|
134
|
-
@sender = Sender.parse(t)
|
135
|
-
when tag_match("Addressee")
|
136
|
-
@addressee = Addressee.parse(t)
|
137
|
-
when tag_match("SentDateTime")
|
138
|
-
tm = t.text
|
139
|
-
@sent_date_time = Time.strptime(tm, "%Y%m%dT%H%M%S") rescue Time.strptime(tm, "%Y%m%dT%H%M") rescue Time.strptime(tm, "%Y%m%d") rescue nil
|
140
|
-
when tag_match("DefaultLanguageOfText")
|
141
|
-
@default_language_of_text = LanguageCode.parse(t)
|
142
|
-
when tag_match("DefaultCurrencyCode")
|
143
|
-
@default_currency_code = t.text
|
144
|
-
else
|
145
|
-
unsupported(t)
|
146
|
-
end
|
147
|
-
end
|
148
|
-
when tag_match("Product")
|
149
|
-
product = nil
|
150
|
-
if self.version >= 300
|
151
|
-
product = Product.parse(e)
|
152
|
-
else
|
153
|
-
product = ONIX21::Product.parse(e)
|
154
|
-
end
|
155
|
-
product.default_language_of_text = @default_language_of_text
|
156
|
-
product.default_currency_code = @default_currency_code
|
157
|
-
@products << product
|
158
|
-
end
|
159
|
-
end
|
160
153
|
when tag_match("Product")
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
else
|
165
|
-
product = ONIX21::Product.parse(root)
|
166
|
-
end
|
167
|
-
product.default_language_of_text = @default_language_of_text
|
168
|
-
product.default_currency_code = @default_currency_code
|
169
|
-
@products << product
|
154
|
+
@products << self.product_klass.parse(root)
|
155
|
+
else # ONIXMessage
|
156
|
+
super(root)
|
170
157
|
end
|
158
|
+
|
171
159
|
init_vault
|
172
160
|
end
|
173
161
|
end
|
data/lib/onix/price.rb
CHANGED
@@ -1,23 +1,47 @@
|
|
1
|
+
require 'onix/date'
|
1
2
|
require 'onix/tax'
|
2
3
|
require 'onix/discount_coded'
|
3
|
-
require 'onix/
|
4
|
+
require 'onix/discount'
|
5
|
+
require 'onix/epub_license'
|
6
|
+
require 'onix/comparison_product_price'
|
4
7
|
|
5
8
|
module ONIX
|
6
9
|
class Price < SubsetDSL
|
7
|
-
|
8
|
-
element "
|
9
|
-
element "
|
10
|
+
# elements "PriceIdentifier", :subset, :cardinality => 0..n
|
11
|
+
element "PriceType", :subset, :shortcut => :type, :cardinality => 0..1
|
12
|
+
element "PriceQualifier", :subset, :shortcut => :qualifier, :cardinality => 0..1
|
13
|
+
elements "EpubTechnicalProtection", :subset, :cardinality => 0..n
|
14
|
+
# elements "PriceConstraint", :subset, :cardinality => 0..n
|
15
|
+
element "EpubLicense", :subset, :cardinality => 0..1
|
16
|
+
element "PriceTypeDescription", :text, :cardinality => 0..n
|
17
|
+
# element "PricePer", :subset, :cardinality => 0..1
|
18
|
+
# elements "PriceCondition", :subset, :cardinality => 0..n
|
19
|
+
# element "MinimumOrderQuantity", :integer, :cardinality => 0..1
|
20
|
+
# elements "BatchBonus", :subset, :cardinality => 0..n
|
21
|
+
elements "DiscountCoded", :subset, :cardinality => 0..n
|
22
|
+
elements "Discount", :subset, :cardinality => 0..n
|
10
23
|
element "PriceStatus", :subset
|
11
|
-
elements "PriceDate", :subset, :shortcut => :dates
|
12
24
|
element "PriceAmount", :float,
|
13
25
|
{
|
14
26
|
:shortcut => :amount,
|
15
27
|
:parse_lambda => lambda { |v| (v * 100).round },
|
16
|
-
:serialize_lambda => lambda { |v| v / 100.0 }
|
28
|
+
:serialize_lambda => lambda { |v| format("%.2f", v / 100.0) },
|
29
|
+
:cardinality => 0..1
|
17
30
|
}
|
18
|
-
element "Tax", :subset
|
19
|
-
element "
|
20
|
-
element "
|
31
|
+
element "Tax", :subset, :cardinality => 0..n
|
32
|
+
element "TaxExempt", :bool, :cardinality => 0..1
|
33
|
+
element "UnpricedItemType", :subset, :cardinality => 0..1
|
34
|
+
element "CurrencyCode", :text, :shortcut => :currency, :cardinality => 0..1
|
35
|
+
element "Territory", :subset, :cardinality => 0..1
|
36
|
+
elements "ComparisonProductPrice", :subset, :cardinality => 0..n
|
37
|
+
elements "PriceDate", :subset, :shortcut => :dates, :cardinality => 0..n
|
38
|
+
element "PrintedOnProduct", :subset, :cardinality => 0..1
|
39
|
+
element "PositionOnProduct", :subset, :cardinality => 0..1
|
40
|
+
|
41
|
+
# FIXME discount_coded != discount
|
42
|
+
def discount
|
43
|
+
self.discount_codeds.first
|
44
|
+
end
|
21
45
|
|
22
46
|
# @!group High level
|
23
47
|
|
data/lib/onix/prize.rb
ADDED
@@ -0,0 +1,11 @@
|
|
1
|
+
module ONIX
|
2
|
+
class Prize < SubsetDSL
|
3
|
+
elements "PrizeName", :text, :cardinality => 1..n
|
4
|
+
element "PrizeYear", :text, :cardinality => 0..1
|
5
|
+
element "PrizeCountry", :subset, :klass => "CountryCode", :cardinality => 0..1
|
6
|
+
element "PrizeRegion", :subset, :klass => "RegionCode", :cardinality => 0..1
|
7
|
+
element "PrizeCode", :subset, :cardinality => 0..1
|
8
|
+
elements "PrizeStatement", :text, :cardinality => 0..n
|
9
|
+
elements "PrizeJury", :text, :cardinality => 0..n
|
10
|
+
end
|
11
|
+
end
|
data/lib/onix/product.rb
CHANGED
@@ -2,12 +2,14 @@ require 'forwardable'
|
|
2
2
|
require 'onix/helper'
|
3
3
|
require 'onix/code'
|
4
4
|
require 'onix/entity'
|
5
|
+
require 'onix/identifier'
|
5
6
|
require 'onix/descriptive_detail'
|
6
7
|
require 'onix/publishing_detail'
|
7
8
|
require 'onix/collateral_detail'
|
8
9
|
require 'onix/related_material'
|
9
10
|
require 'onix/supporting_resource'
|
10
11
|
require 'onix/product_supply'
|
12
|
+
require 'onix/content_detail'
|
11
13
|
require 'onix/territory'
|
12
14
|
require 'onix/error'
|
13
15
|
require 'onix/product_supplies_extractor'
|
@@ -20,15 +22,21 @@ module ONIX
|
|
20
22
|
include ProprietaryIdMethods
|
21
23
|
include ProductSuppliesExtractor
|
22
24
|
|
23
|
-
element "RecordReference", :text
|
24
|
-
element "NotificationType", :subset
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
element "
|
29
|
-
|
30
|
-
|
31
|
-
|
25
|
+
element "RecordReference", :text, :cardinality => 1
|
26
|
+
element "NotificationType", :subset, :cardinality => 1
|
27
|
+
elements "DeletionText", :text, :cardinality => 0..n
|
28
|
+
element "RecordSourceType", :subset, :cardinality => 0..1
|
29
|
+
elements "RecordSourceIdentifier", :subset, :cardinality => 0..n
|
30
|
+
element "RecordSourceName", :text, :cardinality => 0..1
|
31
|
+
elements "ProductIdentifier", :subset, :shortcut => :identifiers, :cardinality => 0..n
|
32
|
+
# elements "Barcode", :subset, :cardinality => 0..n
|
33
|
+
element "DescriptiveDetail", :subset, :cardinality => 0..1
|
34
|
+
element "CollateralDetail", :subset, :cardinality => 0..1
|
35
|
+
# element "PromotionDetail", :subset, :cardinality => 0..1
|
36
|
+
element "ContentDetail", :subset, :cardinality => 0..1
|
37
|
+
element "PublishingDetail", :subset, :cardinality => 0..1
|
38
|
+
element "RelatedMaterial", :subset, :cardinality => 0..1
|
39
|
+
elements "ProductSupply", :subset, :cardinality => 0..n
|
32
40
|
|
33
41
|
# default LanguageCode from ONIXMessage
|
34
42
|
attr_accessor :default_language_of_text
|
@@ -91,6 +99,18 @@ module ONIX
|
|
91
99
|
def_delegator :publishing_detail, :imprint
|
92
100
|
def_delegator :publishing_detail, :publisher
|
93
101
|
|
102
|
+
def collateral_detail
|
103
|
+
@collateral_detail || CollateralDetail.new
|
104
|
+
end
|
105
|
+
|
106
|
+
def descriptive_detail
|
107
|
+
@descriptive_detail || DescriptiveDetail.new
|
108
|
+
end
|
109
|
+
|
110
|
+
def publishing_detail
|
111
|
+
@publishing_detail || PublishingDetail.new
|
112
|
+
end
|
113
|
+
|
94
114
|
# product LanguageCode of text
|
95
115
|
def language_of_text
|
96
116
|
@descriptive_detail.language_of_text || @default_language_of_text
|
@@ -274,7 +294,7 @@ module ONIX
|
|
274
294
|
def excerpts
|
275
295
|
return [] unless @collateral_detail && @collateral_detail.supporting_resources
|
276
296
|
|
277
|
-
@collateral_detail.supporting_resources.sample_content.human_code_match(:resource_mode, ["Text", "
|
297
|
+
@collateral_detail.supporting_resources.sample_content.human_code_match(:resource_mode, ["Text", "MultiMode"]).map do |resource|
|
278
298
|
{
|
279
299
|
:url => resource.versions.last.links.first.strip,
|
280
300
|
:form => resource.versions.last.form.human,
|
@@ -328,7 +348,7 @@ module ONIX
|
|
328
348
|
(!sales_restriction.end_date or sales_restriction.end_date >= Date.today)
|
329
349
|
}.map { |sale_right|
|
330
350
|
sale_right.sales_outlets.select { |sale_outlet|
|
331
|
-
sale_outlet.identifier and sale_outlet.identifier.type.human == "
|
351
|
+
sale_outlet.identifier and sale_outlet.identifier.type.human == "OnixRetailSalesOutletIdCode" }.map { |sale_outlet|
|
332
352
|
sale_outlet.identifier.value
|
333
353
|
}
|
334
354
|
}
|
@@ -0,0 +1,8 @@
|
|
1
|
+
module ONIX
|
2
|
+
class ProductClassification < SubsetDSL
|
3
|
+
element "ProductClassificationType", :subset, :cardinality => 1
|
4
|
+
element "ProductClassificationTypeName", :text, :cardinality => 0..1
|
5
|
+
element "ProductClassificationCode", :text, :cardinality => 1
|
6
|
+
element "Percent", :text, :cardinality => 0..1
|
7
|
+
end
|
8
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
require 'onix/identifier'
|
2
|
+
|
3
|
+
module ONIX
|
4
|
+
class ProductContact < SubsetDSL
|
5
|
+
element "ProductContactRole", :subset, :cardinality => 1
|
6
|
+
elements "ProductContactIdentifier", :subset, :cardinality => 0..n
|
7
|
+
element "ProductContactName", :text, :cardinality => 0..1
|
8
|
+
element "ContactName", :text, :cardinality => 0..1
|
9
|
+
element "EmailAddress", :text, :cardinality => 0..1
|
10
|
+
end
|
11
|
+
end
|
data/lib/onix/product_part.rb
CHANGED
@@ -4,17 +4,27 @@ module ONIX
|
|
4
4
|
include EanMethods
|
5
5
|
include ProprietaryIdMethods
|
6
6
|
|
7
|
-
|
8
|
-
|
9
|
-
element "
|
10
|
-
elements "ProductFormDetail", :subset, :shortcut => :form_details
|
11
|
-
elements "
|
12
|
-
element "
|
7
|
+
element "PrimaryPart", :bool, :cardinality => 0..1
|
8
|
+
elements "ProductIdentifier", :subset, :shortcut => :identifiers, :cardinality => 0..n
|
9
|
+
element "ProductForm", :subset, :shortcut => :form, :cardinality => 1
|
10
|
+
elements "ProductFormDetail", :subset, :shortcut => :form_details, :cardinality => 0..n
|
11
|
+
elements "ProductFormFeature", :subset, :cardinality => 0..n
|
12
|
+
# element "ProductPackaging", :subset, :cardinality => 0..1
|
13
|
+
elements "ProductFormDescription", :text, :shortcut => :file_description, :cardinality => 0..n
|
14
|
+
elements "ProductContentType", :subset, :shortcut => :content_types, :cardinality => 0..n
|
15
|
+
elements "Measure", :subset, :cardinality => 0..n
|
16
|
+
element "NumberOfItemsOfThisForm", :integer, :cardinality => 0..1
|
17
|
+
element "NumberOfCopies", :integer, :cardinality => 0..1
|
18
|
+
element "CountryOfManufacture", :subset, :cardinality => 0..1
|
13
19
|
|
14
20
|
def file_formats
|
15
21
|
@product_form_details.select { |fd| fd.code =~ /^E1.*/ }
|
16
22
|
end
|
17
23
|
|
24
|
+
def product_form_description
|
25
|
+
product_form_descriptions.first
|
26
|
+
end
|
27
|
+
|
18
28
|
# full Product if referenced in ONIXMessage
|
19
29
|
attr_accessor :product
|
20
30
|
|
@@ -47,8 +57,8 @@ module ONIX
|
|
47
57
|
# raw part file description string without HTML
|
48
58
|
# @return [String]
|
49
59
|
def raw_file_description
|
50
|
-
if
|
51
|
-
Helper.strip_html(
|
60
|
+
if product_form_description
|
61
|
+
Helper.strip_html(product_form_description).gsub(/\s+/, " ").strip
|
52
62
|
end
|
53
63
|
end
|
54
64
|
|
data/lib/onix/product_supply.rb
CHANGED
@@ -5,9 +5,9 @@ require 'onix/supply_detail'
|
|
5
5
|
|
6
6
|
module ONIX
|
7
7
|
class ProductSupply < SubsetDSL
|
8
|
-
elements "Market", :subset
|
9
|
-
element "MarketPublishingDetail", :subset
|
10
|
-
elements "SupplyDetail", :subset
|
8
|
+
elements "Market", :subset, :cardinality => 0..n
|
9
|
+
element "MarketPublishingDetail", :subset, :cardinality => 0..1
|
10
|
+
elements "SupplyDetail", :subset, :cardinality => 1..n
|
11
11
|
|
12
12
|
# availability date from market
|
13
13
|
# @return [Date]
|
@@ -1,16 +1,23 @@
|
|
1
|
+
require 'onix/product_contact'
|
1
2
|
require 'onix/sales_rights'
|
3
|
+
require 'onix/copyright_statement'
|
2
4
|
require 'onix/date'
|
5
|
+
|
3
6
|
module ONIX
|
4
7
|
class PublishingDetail < SubsetDSL
|
5
|
-
elements "Imprint", :subset
|
6
|
-
elements "Publisher", :subset
|
7
|
-
element "CityOfPublication", :text, :shortcut => :city
|
8
|
-
element "CountryOfPublication", :text, :shortcut => :country
|
9
|
-
|
10
|
-
|
11
|
-
elements "
|
12
|
-
|
13
|
-
element "
|
8
|
+
elements "Imprint", :subset, :cardinality => 0..n
|
9
|
+
elements "Publisher", :subset, :cardinality => 0..n
|
10
|
+
element "CityOfPublication", :text, :shortcut => :city, :cardinality => 0..n
|
11
|
+
element "CountryOfPublication", :text, :shortcut => :country, :cardinality => 0..1
|
12
|
+
elements "ProductContact", :subset, :cardinality => 0..n
|
13
|
+
element "PublishingStatus", :subset, :shortcut => :status, :cardinality => 0..1
|
14
|
+
elements "PublishingStatusNote", :text, :cardinality => 0..n
|
15
|
+
elements "PublishingDate", :subset, :cardinality => 0..n
|
16
|
+
element "LatestReprintNumber", :integer, :cardinality => 0..1
|
17
|
+
elements "CopyrightStatement", :subset, :cardinality => 0..n
|
18
|
+
elements "SalesRights", :subset, :pluralize => false, :cardinality => 0..n
|
19
|
+
element "ROWSalesRightsType", :subset, :klass => "SalesRightsType", :cardinality => 0..1
|
20
|
+
element "SalesRestriction", :subset, :cardinality => 0..n
|
14
21
|
|
15
22
|
# @!group High level
|
16
23
|
|
@@ -2,8 +2,8 @@ require 'onix/related_product'
|
|
2
2
|
require 'onix/related_work'
|
3
3
|
module ONIX
|
4
4
|
class RelatedMaterial < SubsetDSL
|
5
|
-
elements "RelatedWork", :subset
|
6
|
-
elements "RelatedProduct", :subset
|
5
|
+
elements "RelatedWork", :subset, :cardinality => 0..n
|
6
|
+
elements "RelatedProduct", :subset, :cardinality => 0..n
|
7
7
|
|
8
8
|
# @!group High level
|
9
9
|
|
data/lib/onix/related_product.rb
CHANGED
@@ -3,14 +3,18 @@ module ONIX
|
|
3
3
|
include EanMethods
|
4
4
|
include ProprietaryIdMethods
|
5
5
|
|
6
|
-
|
7
|
-
elements "ProductIdentifier", :subset, :shortcut => :identifiers
|
8
|
-
element "ProductForm", :subset, :shortcut => :form
|
9
|
-
elements "ProductFormDetail", :subset, :shortcut => :form_details
|
6
|
+
elements "ProductRelationCode", :subset, :shortcut => :codes, :cardinality => 1..n
|
7
|
+
elements "ProductIdentifier", :subset, :shortcut => :identifiers, :cardinality => 1..n
|
8
|
+
element "ProductForm", :subset, :shortcut => :form, :cardinality => 0..1
|
9
|
+
elements "ProductFormDetail", :subset, :shortcut => :form_details, :cardinality => 0..n
|
10
10
|
|
11
11
|
# full Product if referenced in ONIXMessage
|
12
12
|
attr_accessor :product
|
13
13
|
|
14
|
+
def code
|
15
|
+
self.codes.first
|
16
|
+
end
|
17
|
+
|
14
18
|
# @!group High level
|
15
19
|
def file_format
|
16
20
|
file_formats.first.human if file_formats.first
|
data/lib/onix/related_work.rb
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
module ONIX
|
2
2
|
class RelatedWork < SubsetDSL
|
3
3
|
include EanMethods
|
4
|
-
element "WorkRelationCode", :subset, :shortcut => :code
|
5
|
-
elements "WorkIdentifier", :subset, :shortcut => :identifiers
|
4
|
+
element "WorkRelationCode", :subset, :shortcut => :code, :cardinality => 0..n
|
5
|
+
elements "WorkIdentifier", :subset, :shortcut => :identifiers, :cardinality => 0..n
|
6
6
|
|
7
7
|
# full Product if referenced in ONIXMessage
|
8
8
|
attr_accessor :product
|