im_onix 1.1.1 → 1.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile +1 -6
- data/README.md +1 -1
- data/bin/html_codelist_to_yml.rb +10 -6
- data/bin/onix_bench.rb +25 -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/doc-src/handlers.rb +32 -2
- data/im_onix.gemspec +3 -1
- data/lib/onix/addressee.rb +5 -3
- data/lib/onix/ancillary_content.rb +7 -0
- data/lib/onix/audience.rb +7 -0
- data/lib/onix/audience_range.rb +10 -0
- data/lib/onix/barcode.rb +6 -0
- data/lib/onix/builder.rb +197 -0
- data/lib/onix/cited_content.rb +15 -0
- data/lib/onix/code.rb +322 -42
- data/lib/onix/collateral_detail.rb +9 -13
- data/lib/onix/collection.rb +14 -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 +38 -0
- data/lib/onix/contributor.rb +56 -34
- data/lib/onix/contributor_place.rb +12 -0
- data/lib/onix/copyright_statement.rb +8 -0
- data/lib/onix/date.rb +107 -56
- data/lib/onix/descriptive_detail.rb +98 -49
- data/lib/onix/discount.rb +9 -0
- data/lib/onix/discount_coded.rb +3 -3
- data/lib/onix/entity.rb +22 -37
- 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/helper.rb +3 -12
- data/lib/onix/identifier.rb +81 -57
- data/lib/onix/language.rb +5 -2
- data/lib/onix/market.rb +2 -1
- data/lib/onix/market_publishing_detail.rb +14 -3
- data/lib/onix/measure.rb +7 -0
- data/lib/onix/onix21.rb +26 -24
- data/lib/onix/onix_message.rb +40 -48
- data/lib/onix/page_run.rb +6 -0
- data/lib/onix/price.rb +44 -11
- data/lib/onix/prize.rb +11 -0
- data/lib/onix/product.rb +45 -17
- data/lib/onix/product_classification.rb +8 -0
- data/lib/onix/product_contact.rb +11 -0
- data/lib/onix/product_part.rb +25 -10
- data/lib/onix/{product_supplies_extractor.rb → product_supplies_methods.rb} +3 -3
- data/lib/onix/product_supply.rb +4 -3
- data/lib/onix/professional_affiliation.rb +6 -0
- data/lib/onix/publisher_representative.rb +11 -0
- data/lib/onix/publishing_detail.rb +22 -9
- data/lib/onix/related_material.rb +6 -2
- data/lib/onix/related_product.rb +14 -6
- data/lib/onix/related_work.rb +5 -3
- data/lib/onix/resource_feature.rb +9 -0
- data/lib/onix/resource_version.rb +85 -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 +12 -2
- data/lib/onix/sales_restriction.rb +7 -16
- data/lib/onix/sales_rights.rb +6 -3
- data/lib/onix/sender.rb +5 -5
- data/lib/onix/serializer.rb +131 -87
- data/lib/onix/subject.rb +11 -6
- data/lib/onix/subset.rb +255 -104
- data/lib/onix/supplier_own_coding.rb +7 -0
- data/lib/onix/supply_contact.rb +9 -0
- data/lib/onix/supply_detail.rb +28 -5
- data/lib/onix/supporting_resource.rb +10 -113
- data/lib/onix/tax.rb +11 -5
- data/lib/onix/territory.rb +8 -4
- data/lib/onix/text_content.rb +13 -0
- data/lib/onix/text_item.rb +12 -0
- data/lib/onix/title_detail.rb +4 -3
- data/lib/onix/title_element.rb +16 -13
- data/lib/onix/website.rb +4 -3
- metadata +89 -3
@@ -0,0 +1,85 @@
|
|
1
|
+
require 'onix/resource_version_feature'
|
2
|
+
|
3
|
+
module ONIX
|
4
|
+
class ResourceVersion < SubsetDSL
|
5
|
+
element "ResourceForm", :subset, :shortcut => :form, :cardinality => 1
|
6
|
+
elements "ResourceVersionFeature", :subset, :shortcut => :features, :cardinality => 0..n
|
7
|
+
elements "ResourceLink", :text, :shortcut => :links, :cardinality => 1..n
|
8
|
+
elements "ContentDate", :subset, :cardinality => 0..n
|
9
|
+
|
10
|
+
# @return [String]
|
11
|
+
def filename
|
12
|
+
if @resource_form.human == "DownloadableFile"
|
13
|
+
resource_links.first
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
# @return [ResourceVersionFeature]
|
18
|
+
def file_format_feature
|
19
|
+
@resource_version_features.select { |f| f.type.human == "FileFormat" }.first
|
20
|
+
end
|
21
|
+
|
22
|
+
# @return [String]
|
23
|
+
def file_format
|
24
|
+
if ["DownloadableFile", "LinkableResource"].include?(@resource_form.human)
|
25
|
+
if file_format_feature
|
26
|
+
file_format_feature.value.human
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
def file_mimetype
|
32
|
+
if ["DownloadableFile", "LinkableResource"].include?(@resource_form.human)
|
33
|
+
if file_format_feature
|
34
|
+
file_format_feature.value.mimetype
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
def image_width_feature
|
40
|
+
@resource_version_features.image_pixels_width.first
|
41
|
+
end
|
42
|
+
|
43
|
+
def image_height_feature
|
44
|
+
@resource_version_features.image_pixels_height.first
|
45
|
+
end
|
46
|
+
|
47
|
+
def md5_hash_feature
|
48
|
+
@resource_version_features.md5_hash.first
|
49
|
+
end
|
50
|
+
|
51
|
+
def image_width
|
52
|
+
if self.image_width_feature
|
53
|
+
self.image_width_feature.value.to_i
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
def image_height
|
58
|
+
if self.image_height_feature
|
59
|
+
self.image_height_feature.value.to_i
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
def md5_hash
|
64
|
+
if self.md5_hash_feature
|
65
|
+
self.md5_hash_feature.value
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
def last_updated_content_date
|
70
|
+
@content_dates.last_updated.first
|
71
|
+
end
|
72
|
+
|
73
|
+
def last_updated
|
74
|
+
if self.last_updated_content_date
|
75
|
+
self.last_updated_content_date.date
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
def last_updated_utc
|
80
|
+
if self.last_updated_content_date and self.last_updated_content_date.date
|
81
|
+
self.last_updated_content_date.date.to_time.utc.strftime('%Y%m%dT%H%M%S%z')
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module ONIX
|
2
|
+
class ResourceVersionFeature < SubsetDSL
|
3
|
+
element "ResourceVersionFeatureType", :subset, :shortcut => :type, :cardinality => 1
|
4
|
+
elements "FeatureNote", :text, :shortcut => :notes, :cardinality => 0..n
|
5
|
+
element "FeatureValue", :text, {
|
6
|
+
:shortcut => :value,
|
7
|
+
:serialize_lambda => lambda { |v| v.class == SupportingResourceFileFormat ? v.code : v }
|
8
|
+
}
|
9
|
+
|
10
|
+
scope :image_pixels_width, lambda { human_code_match(:resource_version_feature_type, "ImageWidthInPixels") }
|
11
|
+
scope :image_pixels_height, lambda { human_code_match(:resource_version_feature_type, "ImageHeightInPixels") }
|
12
|
+
scope :md5_hash, lambda { human_code_match(:resource_version_feature_type, "Md5HashValue") }
|
13
|
+
|
14
|
+
def parse(n)
|
15
|
+
super
|
16
|
+
|
17
|
+
if @resource_version_feature_type.human == "FileFormat"
|
18
|
+
@feature_value = SupportingResourceFileFormat.from_code(@feature_value)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,8 @@
|
|
1
|
+
module ONIX
|
2
|
+
class ReturnsConditions < SubsetDSL
|
3
|
+
element "ReturnsCodeType", :subset, :cardinality => 1
|
4
|
+
element "ReturnsCodeTypeName", :text, :cardinality => 0..1
|
5
|
+
element "ReturnsCode", :subset, :cardinality => 1
|
6
|
+
elements "ReturnsNote", :text, :cardinality => 0..n
|
7
|
+
end
|
8
|
+
end
|
data/lib/onix/sales_outlet.rb
CHANGED
@@ -1,6 +1,16 @@
|
|
1
1
|
module ONIX
|
2
2
|
class SalesOutlet < SubsetDSL
|
3
|
-
|
4
|
-
element "SalesOutletName", :text, :shortcut => :name
|
3
|
+
elements "SalesOutletIdentifier", :subset, :shortcut => :identifiers, :cardinality => 0..n
|
4
|
+
element "SalesOutletName", :text, :shortcut => :name, :cardinality => 0..1
|
5
|
+
|
6
|
+
# @return [SalesOutletIdentifier]
|
7
|
+
def sales_outlet_identifier
|
8
|
+
self.sales_outlet_identifiers.first
|
9
|
+
end
|
10
|
+
|
11
|
+
# @return [SalesOutletIdentifier]
|
12
|
+
def identifier
|
13
|
+
self.identifiers.first
|
14
|
+
end
|
5
15
|
end
|
6
16
|
end
|
@@ -2,23 +2,14 @@ require 'onix/sales_outlet'
|
|
2
2
|
module ONIX
|
3
3
|
class SalesRestriction < SubsetDSL
|
4
4
|
element "SalesRestrictionType", :subset, :shortcut => :type
|
5
|
-
elements "SalesOutlet", :subset
|
6
|
-
|
5
|
+
elements "SalesOutlet", :subset, :cardinality => 0..n
|
6
|
+
elements "SalesRestrictionNote", :text, :shortcut => :notes
|
7
|
+
element "StartDate", :date, :cardinality => 0..1
|
8
|
+
element "EndDate", :date, :cardinality => 0..1
|
7
9
|
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
super
|
12
|
-
n.elements.each do |t|
|
13
|
-
case t
|
14
|
-
when tag_match("StartDate")
|
15
|
-
fmt = t["dateformat"] || "00"
|
16
|
-
@start_date = ONIX::Helper.to_date(fmt, t.text)
|
17
|
-
when tag_match("EndDate")
|
18
|
-
fmt = t["dateformat"] || "00"
|
19
|
-
@end_date = ONIX::Helper.to_date(fmt, t.text)
|
20
|
-
end
|
21
|
-
end
|
10
|
+
# @return [SalesRestrictionNote]
|
11
|
+
def note
|
12
|
+
self.notes.first
|
22
13
|
end
|
23
14
|
end
|
24
15
|
end
|
data/lib/onix/sales_rights.rb
CHANGED
@@ -1,8 +1,11 @@
|
|
1
1
|
require 'onix/sales_restriction'
|
2
|
+
|
2
3
|
module ONIX
|
3
4
|
class SalesRights < SubsetDSL
|
4
|
-
element "SalesRightsType", :subset, :shortcut => :type
|
5
|
-
element "Territory", :subset
|
6
|
-
elements "SalesRestriction", :subset
|
5
|
+
element "SalesRightsType", :subset, :shortcut => :type, :cardinality => 1
|
6
|
+
element "Territory", :subset, :cardinality => 1
|
7
|
+
elements "SalesRestriction", :subset, :cardinality => 0..n
|
8
|
+
elements "ProductIdentifier", :subset, :cardinality => 0..n
|
9
|
+
element "PublisherName", :text, :cardinality => 0..1
|
7
10
|
end
|
8
11
|
end
|
data/lib/onix/sender.rb
CHANGED
@@ -2,11 +2,11 @@ require 'onix/identifier'
|
|
2
2
|
|
3
3
|
module ONIX
|
4
4
|
class Sender < SubsetDSL
|
5
|
-
include
|
5
|
+
include IdentifiersMethods::Gln
|
6
6
|
|
7
|
-
elements "SenderIdentifier", :subset, :shortcut => :identifiers
|
8
|
-
element "SenderName", :text, :shortcut => :name
|
9
|
-
element "ContactName", :text
|
10
|
-
element "EmailAddress", :text
|
7
|
+
elements "SenderIdentifier", :subset, :shortcut => :identifiers, :cardinality => 0..n
|
8
|
+
element "SenderName", :text, :shortcut => :name, :cardinality => 0..1
|
9
|
+
element "ContactName", :text, :cardinality => 0..1
|
10
|
+
element "EmailAddress", :text, :cardinality => 0..1
|
11
11
|
end
|
12
12
|
end
|
data/lib/onix/serializer.rb
CHANGED
@@ -1,156 +1,200 @@
|
|
1
1
|
module ONIX
|
2
|
+
class Root < SubsetDSL
|
3
|
+
element "ONIXMessage", :subset
|
4
|
+
elements "Product", :subset
|
5
|
+
end
|
6
|
+
|
2
7
|
module Serializer
|
3
8
|
class Traverser
|
4
9
|
|
5
|
-
def self.
|
6
|
-
|
7
|
-
|
10
|
+
def self.serialize(mod, xml, subset, tag = nil)
|
11
|
+
ONIX::Serializer::Traverser.serialize_subset(mod, xml, subset, tag)
|
12
|
+
end
|
13
|
+
|
14
|
+
def self.serialize_subset(mod, data, subset, parent_tag = nil, level = 0)
|
15
|
+
if subset.is_a?(ONIX::Root)
|
16
|
+
ONIX::Serializer::Traverser.recursive_serialize(mod, data, subset, parent_tag, level)
|
8
17
|
else
|
9
|
-
if subset.
|
10
|
-
mod.const_get("
|
18
|
+
if subset.is_a?(ONIX::ONIXMessage)
|
19
|
+
mod.const_get("Root").serialize(data, subset, "ONIXMessage", level)
|
11
20
|
else
|
12
|
-
if subset.class.included_modules.include?(
|
13
|
-
mod.const_get("
|
21
|
+
if subset.class.included_modules.include?(DateMethods)
|
22
|
+
mod.const_get("Date").serialize(data, subset, parent_tag, level)
|
14
23
|
else
|
15
|
-
|
24
|
+
if subset.class.included_modules.include?(CodeMethods)
|
25
|
+
mod.const_get("Code").serialize(data, subset, parent_tag, level)
|
26
|
+
else
|
27
|
+
mod.const_get("Subset").serialize(data, subset, parent_tag, level)
|
28
|
+
end
|
16
29
|
end
|
17
30
|
end
|
18
31
|
end
|
19
32
|
end
|
20
33
|
|
21
|
-
def self.
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
else
|
46
|
-
end
|
34
|
+
def self.any_serialize(type, mod, data, val, tag, level)
|
35
|
+
case type
|
36
|
+
when :subset
|
37
|
+
self.serialize_subset(mod, data, val, tag, level)
|
38
|
+
when :datestamp
|
39
|
+
mod.const_get("Primitive").serialize(data, val.code, tag, level)
|
40
|
+
when :text, :integer, :float
|
41
|
+
mod.const_get("Primitive").serialize(data, val, tag, level)
|
42
|
+
when :bool
|
43
|
+
mod.const_get("Primitive").serialize(data, nil, tag, level) if val
|
44
|
+
when :ignore
|
45
|
+
else
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
def self.recursive_serialize(mod, data, subset, parent_tag = nil, level = 0)
|
50
|
+
if subset.respond_to?(:registered_elements)
|
51
|
+
subset.registered_elements.each do |tag, element|
|
52
|
+
next if element.short
|
53
|
+
val = subset.instance_variable_get(element.to_instance)
|
54
|
+
if val
|
55
|
+
if element.is_array?
|
56
|
+
val.each do |subval|
|
57
|
+
self.any_serialize(element.type, mod, data, subval, tag, level)
|
47
58
|
end
|
59
|
+
else
|
60
|
+
self.any_serialize(element.type, mod, data, element.serialize_lambda(val), tag, level)
|
48
61
|
end
|
49
62
|
end
|
50
63
|
end
|
51
64
|
end
|
52
|
-
|
53
65
|
end
|
54
66
|
end
|
55
67
|
|
56
68
|
module Default
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
69
|
+
def self.serialize(xml, subset, tag = nil)
|
70
|
+
ONIX::Serializer::Traverser.serialize(Default, xml, subset, tag)
|
71
|
+
end
|
72
|
+
|
73
|
+
class Root
|
74
|
+
def self.serialize(xml, subset, tag, level = 0)
|
75
|
+
root_options = subset.version && subset.version >= 300 ? { :xmlns => "http://ns.editeur.org/onix/3.0/reference", :release => subset.release } : {}
|
76
|
+
xml.send(tag, root_options) {
|
77
|
+
ONIX::Serializer::Traverser.recursive_serialize(Default, xml, subset, tag, level + 1)
|
61
78
|
}
|
62
79
|
end
|
63
80
|
end
|
64
81
|
|
82
|
+
class Subset
|
83
|
+
def self.serialize(xml, subset, tag, level = 0)
|
84
|
+
if tag
|
85
|
+
xml.send(tag, subset.serialized_attributes) {
|
86
|
+
ONIX::Serializer::Traverser.recursive_serialize(Default, xml, subset, tag, level + 1)
|
87
|
+
}
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
65
92
|
class Primitive
|
66
|
-
def self.serialize(xml,
|
67
|
-
|
68
|
-
|
93
|
+
def self.serialize(xml, val, tag, level = 0)
|
94
|
+
if val.is_a?(ONIX::TextWithAttributes)
|
95
|
+
if val.serialized_attributes["textformat"] == "05" # content is XHTML
|
96
|
+
xml.send(tag, val.serialized_attributes) do
|
97
|
+
xml.__send__ :insert, val.to_s
|
98
|
+
end
|
99
|
+
else
|
100
|
+
xml.send(tag, val.serialized_attributes, val)
|
101
|
+
end
|
102
|
+
else
|
103
|
+
xml.send(tag, val)
|
69
104
|
end
|
70
105
|
end
|
71
106
|
end
|
72
107
|
|
73
108
|
class Date
|
74
109
|
def self.serialize(xml, date, parent_tag = nil, level = 0)
|
110
|
+
deprecated_date_format = date.deprecated_date_format
|
111
|
+
date_format = date.date_format || DateFormat.from_code("00")
|
112
|
+
code_format = date.format_from_code(date_format.code)
|
113
|
+
|
75
114
|
xml.send(parent_tag, nil) {
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
115
|
+
date.registered_elements.each do |tag, element|
|
116
|
+
next if element.short
|
117
|
+
val = date.instance_variable_get(element.to_instance)
|
118
|
+
if val
|
119
|
+
case tag
|
120
|
+
when "DateFormat"
|
121
|
+
if deprecated_date_format
|
122
|
+
xml.DateFormat(date_format.code)
|
123
|
+
end
|
124
|
+
when "Date"
|
125
|
+
if deprecated_date_format
|
126
|
+
xml.Date(date.date.strftime(code_format))
|
127
|
+
else
|
128
|
+
attrs = date.date_format ? { :dateformat => date_format.code } : {}
|
129
|
+
xml.Date(date.date.strftime(code_format), attrs)
|
130
|
+
end
|
131
|
+
else
|
132
|
+
ONIX::Serializer::Traverser.any_serialize(element.type, Default, xml, element.serialize_lambda(val), tag, level)
|
133
|
+
end
|
134
|
+
end
|
135
|
+
end
|
80
136
|
}
|
81
|
-
|
82
137
|
end
|
83
138
|
end
|
84
139
|
|
85
140
|
class Code
|
86
141
|
def self.serialize(xml, code, parent_tag = nil, level = 0)
|
87
|
-
xml.send(parent_tag,
|
142
|
+
xml.send(parent_tag, code.serialized_attributes) {
|
88
143
|
xml.text(code.code)
|
89
144
|
}
|
90
145
|
end
|
91
146
|
end
|
147
|
+
end
|
92
148
|
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
xml.send(entity.class.name_tag, entity.name)
|
104
|
-
end
|
105
|
-
ONIX::Serializer::Traverser.recursive_serialize(Default, xml, entity, parent_tag, level+1)
|
106
|
-
}
|
149
|
+
module Dump
|
150
|
+
def self.serialize(io, subset, tag = nil)
|
151
|
+
ONIX::Serializer::Traverser.serialize(Dump, io, subset, tag)
|
152
|
+
end
|
153
|
+
|
154
|
+
class Root
|
155
|
+
def self.serialize(io, subset, tag, level = 0)
|
156
|
+
io.write " " * level
|
157
|
+
io.write "#{tag}(ROOT):\n"
|
158
|
+
ONIX::Serializer::Traverser.recursive_serialize(Dump, io, subset, tag, level + 1)
|
107
159
|
end
|
108
160
|
end
|
109
|
-
end
|
110
161
|
|
111
|
-
module Dump
|
112
162
|
class Subset
|
113
|
-
def self.serialize(io,
|
114
|
-
io.write " "*level
|
115
|
-
|
116
|
-
|
163
|
+
def self.serialize(io, subset, tag, level = 0)
|
164
|
+
io.write " " * level
|
165
|
+
if subset.attributes.length > 0
|
166
|
+
io.write "#{tag}[#{subset.attributes.to_a.map { |k, v| "#{k}: #{v.code}(#{v.human})" }.join(", ")}]\n"
|
167
|
+
else
|
168
|
+
io.write "#{tag}:\n"
|
169
|
+
end
|
170
|
+
ONIX::Serializer::Traverser.recursive_serialize(Dump, io, subset, tag, level + 1)
|
117
171
|
end
|
118
172
|
end
|
119
173
|
|
120
174
|
class Primitive
|
121
|
-
def self.serialize(io,
|
122
|
-
|
123
|
-
|
124
|
-
io.write "#{tag} : #{
|
175
|
+
def self.serialize(io, val, tag, level = 0)
|
176
|
+
io.write " " * level
|
177
|
+
if val.is_a?(ONIX::TextWithAttributes)
|
178
|
+
io.write "#{tag}[#{val.attributes.to_a.map { |k, v| "#{k}: #{v.code}(#{v.human})" }.join(", ")}]: #{val.to_s}\n"
|
179
|
+
else
|
180
|
+
io.write "#{tag}: #{val}\n"
|
125
181
|
end
|
126
182
|
end
|
127
183
|
end
|
128
184
|
|
129
185
|
class Date
|
130
186
|
def self.serialize(io, date, parent_tag = nil, level = 0)
|
131
|
-
io.write " "*level
|
187
|
+
io.write " " * level
|
132
188
|
io.write "#{parent_tag}: #{date.date}\n"
|
133
189
|
end
|
134
190
|
end
|
135
191
|
|
136
192
|
class Code
|
137
193
|
def self.serialize(io, code, parent_tag = nil, level = 0)
|
138
|
-
io.write " "*level
|
194
|
+
io.write " " * level
|
139
195
|
io.write "#{parent_tag}: #{code.human}(#{code.code})\n"
|
140
196
|
end
|
141
197
|
end
|
142
|
-
|
143
|
-
class Entity
|
144
|
-
def self.serialize(io, entity, parent_tag = nil, level = 0)
|
145
|
-
io.write " "*level
|
146
|
-
io.write "#{parent_tag}: #{entity.name}\n"
|
147
|
-
if entity.role
|
148
|
-
io.write " "*(level+1)
|
149
|
-
io.write "Role: #{entity.role.human}(#{entity.role.code})\n"
|
150
|
-
end
|
151
|
-
end
|
152
|
-
end
|
153
198
|
end
|
154
|
-
|
155
199
|
end
|
156
|
-
end
|
200
|
+
end
|
data/lib/onix/subject.rb
CHANGED
@@ -1,11 +1,16 @@
|
|
1
1
|
module ONIX
|
2
2
|
class Subject < SubsetDSL
|
3
|
-
element "MainSubject", :bool
|
4
|
-
element "SubjectSchemeIdentifier", :subset, :shortcut => :scheme_identifier
|
5
|
-
element "SubjectSchemeName", :text, :shortcut => :scheme_name
|
6
|
-
element "SubjectSchemeVersion", :text, :shortcut => :scheme_version
|
7
|
-
element "SubjectCode", :text, :shortcut => :code
|
8
|
-
|
3
|
+
element "MainSubject", :bool, :cardinality => 0..1
|
4
|
+
element "SubjectSchemeIdentifier", :subset, :shortcut => :scheme_identifier, :cardinality => 1
|
5
|
+
element "SubjectSchemeName", :text, :shortcut => :scheme_name, :cardinality => 0..1
|
6
|
+
element "SubjectSchemeVersion", :text, :shortcut => :scheme_version, :cardinality => 0..1
|
7
|
+
element "SubjectCode", :text, :shortcut => :code, :cardinality => 0..1
|
8
|
+
elements "SubjectHeadingText", :text, :shortcut => :heading_texts, :cardinality => 0..n
|
9
|
+
|
10
|
+
# @return [String]
|
11
|
+
def heading_text
|
12
|
+
self.heading_texts.first
|
13
|
+
end
|
9
14
|
|
10
15
|
scope :bisac, lambda { human_code_match(:subject_scheme_identifier, "BisacSubjectHeading") }
|
11
16
|
scope :clil, lambda { human_code_match(:subject_scheme_identifier, "Clil") }
|