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
data/lib/onix/entity.rb
CHANGED
@@ -7,51 +7,25 @@ module ONIX
|
|
7
7
|
end
|
8
8
|
|
9
9
|
class Entity < SubsetDSL
|
10
|
-
|
11
|
-
attr_accessor :name
|
12
|
-
# entity role
|
13
|
-
attr_accessor :role
|
14
|
-
# entity Identifier list
|
15
|
-
attr_accessor :identifiers
|
16
|
-
|
17
|
-
include GlnMethods
|
10
|
+
include IdentifiersMethods::Gln
|
18
11
|
include EntityHelper
|
19
12
|
|
20
|
-
|
21
|
-
super
|
22
|
-
@identifiers = []
|
23
|
-
end
|
24
|
-
|
13
|
+
# @return [String]
|
25
14
|
def self.role_tag
|
26
15
|
"#{self.prefix}Role"
|
27
16
|
end
|
28
17
|
|
18
|
+
# @return [String]
|
29
19
|
def self.name_tag
|
30
20
|
"#{self.prefix}Name"
|
31
21
|
end
|
32
22
|
|
23
|
+
# @return [String]
|
33
24
|
def self.identifier_tag
|
34
25
|
"#{self.prefix}Identifier"
|
35
26
|
end
|
36
27
|
|
37
|
-
|
38
|
-
super
|
39
|
-
n.children.each do |t|
|
40
|
-
case t
|
41
|
-
when tag_match(self.class.name_tag)
|
42
|
-
@name = t.text
|
43
|
-
when tag_match(self.class.role_tag)
|
44
|
-
if self.class.role_class
|
45
|
-
@role = self.class.role_class.parse(t)
|
46
|
-
end
|
47
|
-
when tag_match(self.class.identifier_tag)
|
48
|
-
if self.class.identifier_class
|
49
|
-
@identifiers << self.class.identifier_class.parse(t)
|
50
|
-
end
|
51
|
-
end
|
52
|
-
end
|
53
|
-
end
|
54
|
-
|
28
|
+
# @return [String]
|
55
29
|
def self.prefix
|
56
30
|
end
|
57
31
|
|
@@ -73,29 +47,40 @@ module ONIX
|
|
73
47
|
define_singleton_method :role_class do
|
74
48
|
return role
|
75
49
|
end
|
50
|
+
|
51
|
+
self.element self.role_tag, :subset, :klass => self.role_class.to_s, :shortcut => :role, :cardinality => 1
|
52
|
+
self.elements self.identifier_tag, :subset, :klass => self.identifier_class.to_s, :shortcut => :identifiers, :cardinality => 0..n
|
53
|
+
self.element self.name_tag, :text, :shortcut => :name, :cardinality => 0..1
|
76
54
|
end
|
77
55
|
end
|
78
56
|
|
79
57
|
class Agent < Entity
|
80
58
|
entity_setup "Agent", AgentIdentifier, AgentRole
|
59
|
+
elements "Website", :subset, :cardinality => 0..n
|
81
60
|
end
|
82
61
|
|
83
|
-
class Imprint <
|
84
|
-
|
62
|
+
class Imprint < SubsetDSL
|
63
|
+
include IdentifiersMethods::Gln
|
64
|
+
|
65
|
+
elements "ImprintIdentifier", :subset, :shortcut => :identifiers, :cardinality => 0..n
|
66
|
+
element "ImprintName", :text, :shortcut => :name, :cardinality => 0..1
|
85
67
|
end
|
86
68
|
|
87
69
|
class Supplier < Entity
|
88
|
-
elements "Website", :subset
|
89
70
|
entity_setup "Supplier", SupplierIdentifier, SupplierRole
|
71
|
+
elements "TelephoneNumber", :text, :cardinality => 0..n
|
72
|
+
elements "FaxNumber", :text, :cardinality => 0..n
|
73
|
+
elements "EmailAddress", :text, :cardinality => 0..n
|
74
|
+
elements "Website", :subset, :cardinality => 0..n
|
90
75
|
end
|
91
76
|
|
92
77
|
class Publisher < Entity
|
93
|
-
elements "Website", :subset
|
94
|
-
entity_setup "Publisher", PublisherIdentifier, PublishingRole
|
95
|
-
|
96
78
|
# @note role tag is not PublisherRole but PublishingRole
|
97
79
|
def self.role_tag
|
98
80
|
"PublishingRole"
|
99
81
|
end
|
82
|
+
|
83
|
+
entity_setup "Publisher", PublisherIdentifier, PublishingRole
|
84
|
+
elements "Website", :subset, :cardinality => 0..n
|
100
85
|
end
|
101
86
|
end
|
@@ -1,7 +1,9 @@
|
|
1
|
+
require 'onix/epub_usage_limit'
|
2
|
+
|
1
3
|
module ONIX
|
2
4
|
class EpubUsageConstraint < SubsetDSL
|
3
|
-
element "EpubUsageType", :subset, :shortcut => :type
|
4
|
-
element "EpubUsageStatus", :subset, :shortcut => :status
|
5
|
-
elements "EpubUsageLimit", :subset, :shortcut => :limits
|
5
|
+
element "EpubUsageType", :subset, :shortcut => :type, :cardinality => 1
|
6
|
+
element "EpubUsageStatus", :subset, :shortcut => :status, :cardinality => 1
|
7
|
+
elements "EpubUsageLimit", :subset, :shortcut => :limits, :cardinality => 0..n
|
6
8
|
end
|
7
9
|
end
|
@@ -1,6 +1,6 @@
|
|
1
1
|
module ONIX
|
2
2
|
class EpubUsageLimit < SubsetDSL
|
3
|
-
element "
|
4
|
-
element "
|
3
|
+
element "Quantity", :integer, :cardinality => 1
|
4
|
+
element "EpubUsageUnit", :subset, :shortcut => :unit, :cardinality => 1
|
5
5
|
end
|
6
6
|
end
|
data/lib/onix/error.rb
CHANGED
data/lib/onix/extent.rb
CHANGED
@@ -1,8 +1,9 @@
|
|
1
1
|
module ONIX
|
2
2
|
class Extent < SubsetDSL
|
3
|
-
element "ExtentType", :subset, :shortcut => :type
|
4
|
-
element "
|
5
|
-
element "
|
3
|
+
element "ExtentType", :subset, :shortcut => :type, :cardinality => 1
|
4
|
+
element "ExtentValue", :text, :shortcut => :value, :cardinality => 0..1
|
5
|
+
element "ExtentValueRoman", :text, :cardinality => 0..1
|
6
|
+
element "ExtentUnit", :subset, :shortcut => :unit, :cardinality => 1
|
6
7
|
|
7
8
|
scope :filesize, lambda { human_code_match(:extent_type, /Filesize/) }
|
8
9
|
scope :page, lambda { human_code_match(:extent_type, /Page/) }
|
data/lib/onix/header.rb
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'onix/sender'
|
2
|
+
require 'onix/addressee'
|
3
|
+
|
4
|
+
module ONIX
|
5
|
+
class Header < SubsetDSL
|
6
|
+
element "Sender", :subset, :cardinality => 1
|
7
|
+
element "Addressee", :subset, :cardinality => 0..n
|
8
|
+
element "MessageNumber", :integer, :cardinality => 0..1
|
9
|
+
element "MessageRepeat", :integer, :cardinality => 0..1
|
10
|
+
element "SentDateTime", :datestamp, :cardinality => 1,
|
11
|
+
:serialize_lambda => lambda {|v| v.is_a?(Time) ? v.strftime("%Y%m%dT%H%M%S%z") : v}
|
12
|
+
element "MessageNote", :text, :cardinality => 0..n
|
13
|
+
element "DefaultLanguageOfText", :subset, :klass => "LanguageCode", :cardinality => 0..1
|
14
|
+
element "DefaultPriceType", :subset, :klass => "PriceType", :cardinality => 0..1
|
15
|
+
element "DefaultCurrencyCode", :text, :cardinality => 0..1
|
16
|
+
end
|
17
|
+
end
|
data/lib/onix/helper.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
module ONIX
|
2
2
|
class Helper
|
3
3
|
# convert arbitrary arg to File/String
|
4
|
+
# @param [String, File] arg
|
4
5
|
def self.arg_to_data(arg)
|
5
6
|
data = ""
|
6
7
|
case arg
|
@@ -33,18 +34,8 @@ module ONIX
|
|
33
34
|
end
|
34
35
|
end
|
35
36
|
|
36
|
-
|
37
|
-
|
38
|
-
n.at_xpath(xpath).text.strip
|
39
|
-
else
|
40
|
-
nil
|
41
|
-
end
|
42
|
-
end
|
43
|
-
|
44
|
-
def self.mandatory_text_at(n, xpath)
|
45
|
-
self.text_at(n, xpath)
|
46
|
-
end
|
47
|
-
|
37
|
+
# @param [String] html
|
38
|
+
# @return [String]
|
48
39
|
def self.strip_html(html)
|
49
40
|
html.gsub(/ /, " ").gsub(/<[^>]*(>+|\s*\z)/m, '')
|
50
41
|
end
|
data/lib/onix/identifier.rb
CHANGED
@@ -1,10 +1,11 @@
|
|
1
1
|
module ONIX
|
2
2
|
class Identifier < SubsetDSL
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
3
|
+
class << self
|
4
|
+
def identifier_elements(id_type)
|
5
|
+
element id_type, :subset, :shortcut => :type, :cardinality => 1
|
6
|
+
element "IDTypeName", :text, :shortcut => :name, :cardinality => 0..1
|
7
|
+
element "IDValue", :text, :shortcut => :value, :cardinality => 1
|
8
|
+
end
|
8
9
|
end
|
9
10
|
|
10
11
|
def uniq_id
|
@@ -13,105 +14,128 @@ module ONIX
|
|
13
14
|
end
|
14
15
|
|
15
16
|
class SenderIdentifier < Identifier
|
16
|
-
|
17
|
+
identifier_elements "SenderIDType"
|
17
18
|
end
|
18
19
|
|
19
20
|
class AddresseeIdentifier < Identifier
|
20
|
-
|
21
|
+
identifier_elements "AddresseeIDType"
|
22
|
+
end
|
23
|
+
|
24
|
+
class RecordSourceIdentifier < Identifier
|
25
|
+
identifier_elements "RecordSourceIDType"
|
21
26
|
end
|
22
27
|
|
23
28
|
class AgentIdentifier < Identifier
|
24
|
-
|
29
|
+
identifier_elements "AgentIDType"
|
25
30
|
end
|
26
31
|
|
27
32
|
class ImprintIdentifier < Identifier
|
28
|
-
|
33
|
+
identifier_elements "ImprintIDType"
|
29
34
|
end
|
30
35
|
|
31
36
|
class PublisherIdentifier < Identifier
|
32
|
-
|
37
|
+
identifier_elements "PublisherIDType"
|
33
38
|
end
|
34
39
|
|
35
40
|
class SupplierIdentifier < Identifier
|
36
|
-
|
41
|
+
identifier_elements "SupplierIDType"
|
37
42
|
end
|
38
43
|
|
39
44
|
class NameIdentifier < Identifier
|
40
|
-
|
45
|
+
identifier_elements "NameIDType"
|
41
46
|
end
|
42
47
|
|
43
48
|
class CollectionIdentifier < Identifier
|
44
|
-
|
49
|
+
identifier_elements "CollectionIDType"
|
45
50
|
end
|
46
51
|
|
47
52
|
class ProductIdentifier < Identifier
|
48
|
-
|
53
|
+
identifier_elements "ProductIDType"
|
54
|
+
end
|
55
|
+
|
56
|
+
class ProductContactIdentifier < Identifier
|
57
|
+
identifier_elements "ProductContactIDType"
|
49
58
|
end
|
50
59
|
|
51
60
|
class SalesOutletIdentifier < Identifier
|
52
|
-
|
61
|
+
identifier_elements "SalesOutletIDType"
|
53
62
|
end
|
54
63
|
|
55
64
|
class WorkIdentifier < Identifier
|
56
|
-
|
65
|
+
identifier_elements "WorkIDType"
|
57
66
|
end
|
58
67
|
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
if ean_identifier
|
63
|
-
ean_identifier.value
|
64
|
-
else
|
65
|
-
nil
|
66
|
-
end
|
67
|
-
end
|
68
|
+
class SupplyContactIdentifier < Identifier
|
69
|
+
identifier_elements "SupplyContactIDType"
|
70
|
+
end
|
68
71
|
|
69
|
-
|
70
|
-
|
71
|
-
self.identifiers.select { |id| id.type.human=="Gtin13" }.first || self.identifiers.select { |id| id.type.human=="Isbn13" }.first
|
72
|
-
end
|
72
|
+
class TextItemIdentifier < Identifier
|
73
|
+
identifier_elements "TextItemIDType"
|
73
74
|
end
|
74
75
|
|
75
|
-
module
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
76
|
+
module IdentifiersMethods
|
77
|
+
module Ean
|
78
|
+
# EAN string identifier from identifiers
|
79
|
+
# @return [String]
|
80
|
+
def ean
|
81
|
+
if ean_identifier
|
82
|
+
ean_identifier.value
|
83
|
+
else
|
84
|
+
nil
|
85
|
+
end
|
82
86
|
end
|
83
|
-
end
|
84
87
|
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
+
private
|
89
|
+
|
90
|
+
def ean_identifier
|
91
|
+
self.identifiers.select { |id| id.type.human == "Gtin13" }.first || self.identifiers.select { |id| id.type.human == "Isbn13" }.first
|
92
|
+
end
|
88
93
|
end
|
89
|
-
end
|
90
94
|
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
if
|
96
|
-
|
95
|
+
module Isbn
|
96
|
+
# ISBN-13 string identifier from identifiers
|
97
|
+
# @return [String]
|
98
|
+
def isbn13
|
99
|
+
if isbn13_identifier
|
100
|
+
isbn13_identifier.value
|
97
101
|
else
|
98
|
-
puts "Invalid GLN #{gln_identifier.value}"
|
99
102
|
nil
|
100
103
|
end
|
101
|
-
|
102
|
-
|
104
|
+
end
|
105
|
+
|
106
|
+
private
|
107
|
+
|
108
|
+
def isbn13_identifier
|
109
|
+
self.identifiers.select { |id| id.type.human == "Isbn13" }.first
|
103
110
|
end
|
104
111
|
end
|
105
112
|
|
106
|
-
|
107
|
-
|
108
|
-
|
113
|
+
module Gln
|
114
|
+
# GLN string identifier from identifiers
|
115
|
+
# @return [String]
|
116
|
+
def gln
|
117
|
+
if gln_identifier
|
118
|
+
if gln_identifier.value =~ /\d{13}/
|
119
|
+
gln_identifier.value
|
120
|
+
else
|
121
|
+
# puts "WARN Invalid GLN #{gln_identifier.value}"
|
122
|
+
nil
|
123
|
+
end
|
124
|
+
else
|
125
|
+
nil
|
126
|
+
end
|
127
|
+
end
|
128
|
+
|
129
|
+
# private
|
130
|
+
def gln_identifier
|
131
|
+
self.identifiers.select { |id| id.type.human == "Gln" }.first
|
132
|
+
end
|
109
133
|
end
|
110
|
-
end
|
111
134
|
|
112
|
-
|
113
|
-
|
114
|
-
|
135
|
+
module ProprietaryId
|
136
|
+
def proprietary_ids
|
137
|
+
self.identifiers.select { |id| id.type.human == "Proprietary" }
|
138
|
+
end
|
115
139
|
end
|
116
140
|
end
|
117
141
|
end
|
data/lib/onix/language.rb
CHANGED
@@ -1,7 +1,10 @@
|
|
1
1
|
module ONIX
|
2
2
|
class Language < SubsetDSL
|
3
|
-
element "LanguageRole", :subset, :shortcut => :role
|
4
|
-
element "LanguageCode", :subset, :shortcut => :code
|
3
|
+
element "LanguageRole", :subset, :shortcut => :role, :cardinality => 1
|
4
|
+
element "LanguageCode", :subset, :shortcut => :code, :cardinality => 1
|
5
|
+
element "CountryCode", :subset, :cardinality => 0..1
|
6
|
+
element "RegionCode", :subset, :cardinality => 0..1
|
7
|
+
element "ScriptCode", :subset, :cardinality => 0..1
|
5
8
|
|
6
9
|
scope :of_text, lambda { human_code_match(:language_role, "LanguageOfText") }
|
7
10
|
end
|
data/lib/onix/market.rb
CHANGED
@@ -1,8 +1,19 @@
|
|
1
|
+
require 'onix/publisher_representative'
|
2
|
+
require 'onix/product_contact'
|
3
|
+
|
1
4
|
module ONIX
|
2
5
|
class MarketPublishingDetail < SubsetDSL
|
3
|
-
elements "PublisherRepresentative", :subset,
|
4
|
-
|
5
|
-
|
6
|
+
elements "PublisherRepresentative", :subset, :klass => "Agent", :cardinality => 0..n
|
7
|
+
elements "ProductContact", :subset, :cardinality => 0..n
|
8
|
+
element "MarketPublishingStatus", :subset, :cardinality => 1
|
9
|
+
elements "MarketPublishingStatusNote", :text, :cardinality => 0..n
|
10
|
+
elements "MarketDate", :subset, :cardinality => 0..n
|
11
|
+
elements "PromotionCampaign", :text, :cardinality => 0..n
|
12
|
+
element "PromotionContact", :text, :cardinality => 0..1
|
13
|
+
elements "InitialPrintRun", :text, :cardinality => 0..n
|
14
|
+
elements "ReprintDetail", :text, :cardinality => 0..n
|
15
|
+
elements "CopiesSold", :text, :cardinality => 0..n
|
16
|
+
elements "BookClubAdoption", :text, :cardinality => 0..n
|
6
17
|
|
7
18
|
# @!group High level
|
8
19
|
|
data/lib/onix/measure.rb
ADDED
data/lib/onix/onix21.rb
CHANGED
@@ -2,26 +2,28 @@ module ONIX
|
|
2
2
|
module ONIX21
|
3
3
|
class ShortToRef
|
4
4
|
def self.names
|
5
|
-
@shortnames ||= YAML.load(File.open(File.dirname(__FILE__) + "/../../data/onix21/shortnames.yml"))
|
5
|
+
@shortnames ||= YAML.load(File.open(File.dirname(__FILE__) + "/../../data/onix21/shortnames.yml")).freeze
|
6
6
|
end
|
7
7
|
end
|
8
8
|
|
9
9
|
class RefToShort
|
10
10
|
def self.names
|
11
|
-
@refnames ||= ShortToRef.names.invert
|
11
|
+
@refnames ||= ShortToRef.names.invert.freeze
|
12
12
|
end
|
13
13
|
end
|
14
14
|
|
15
15
|
class SubsetDSL < ONIX::SubsetDSL
|
16
|
-
|
17
|
-
|
18
|
-
|
16
|
+
class << self
|
17
|
+
def short_to_ref(name)
|
18
|
+
ONIX::ONIX21::ShortToRef.names[name]
|
19
|
+
end
|
19
20
|
|
20
|
-
|
21
|
-
|
21
|
+
def ref_to_short(name)
|
22
|
+
ONIX::ONIX21::RefToShort.names[name]
|
23
|
+
end
|
22
24
|
end
|
23
25
|
|
24
|
-
def
|
26
|
+
def get_class(name)
|
25
27
|
if ONIX::ONIX21.const_defined?(name, false)
|
26
28
|
ONIX::ONIX21.const_get(name)
|
27
29
|
else
|
@@ -34,11 +36,11 @@ module ONIX
|
|
34
36
|
|
35
37
|
class CodeFromYaml < Code
|
36
38
|
def self.hash
|
37
|
-
@hash ||= YAML.load(File.open(File.dirname(__FILE__) + "/../../data/onix21/codelists/codelist-#{self.code_ident}.yml"))[:codelist]
|
39
|
+
@hash ||= YAML.load(File.open(File.dirname(__FILE__) + "/../../data/onix21/codelists/codelist-#{self.code_ident}.yml"))[:codelist].freeze
|
38
40
|
end
|
39
41
|
|
40
42
|
def self.list
|
41
|
-
self.hash.
|
43
|
+
self.hash.keys
|
42
44
|
end
|
43
45
|
|
44
46
|
def self.code_ident
|
@@ -131,8 +133,8 @@ module ONIX
|
|
131
133
|
class Price < SubsetDSL
|
132
134
|
element "PriceTypeCode", :subset, :klass => "PriceType"
|
133
135
|
element "PriceAmount", :float, {
|
134
|
-
|
135
|
-
|
136
|
+
:shortcut => :amount,
|
137
|
+
:parse_lambda => lambda { |v| (v * 100).round }
|
136
138
|
}
|
137
139
|
element "PriceQualifier", :subset, :shortcut => :qualifier
|
138
140
|
element "DiscountCoded", :subset
|
@@ -196,8 +198,8 @@ module ONIX
|
|
196
198
|
element "AvailabilityCode", :text
|
197
199
|
element "ProductAvailability", :text
|
198
200
|
element "OnSaleDate", :text, {
|
199
|
-
|
200
|
-
|
201
|
+
:shortcut => :availability_date,
|
202
|
+
:parse_lambda => lambda { |v| Date.strptime(v, "%Y%m%d") }
|
201
203
|
}
|
202
204
|
elements "Price", :subset
|
203
205
|
|
@@ -232,8 +234,8 @@ module ONIX
|
|
232
234
|
end
|
233
235
|
|
234
236
|
class RelatedProduct < SubsetDSL
|
235
|
-
include
|
236
|
-
include
|
237
|
+
include IdentifiersMethods::Ean
|
238
|
+
include IdentifiersMethods::ProprietaryId
|
237
239
|
|
238
240
|
element "RelationCode", :text, :shortcut => :code
|
239
241
|
elements "ProductIdentifier", :subset, :shortcut => :identifiers
|
@@ -246,17 +248,17 @@ module ONIX
|
|
246
248
|
element "SubjectCode", :text, :shortcut => :code
|
247
249
|
element "SubjectHeadingText", :text, :shortcut => :heading_text
|
248
250
|
element "MainSubjectSchemeIdentifier", :subset, {
|
249
|
-
|
250
|
-
|
251
|
+
:shortcut => :scheme_identifier,
|
252
|
+
:klass => "SubjectSchemeIdentifier"
|
251
253
|
}
|
252
254
|
element "SubjectSchemeName", :text, :shortcut => :scheme_name
|
253
255
|
element "SubjectSchemeVersion", :text, :shortcut => :scheme_version
|
254
256
|
end
|
255
257
|
|
256
258
|
class Product < SubsetDSL
|
257
|
-
include
|
258
|
-
include
|
259
|
-
include
|
259
|
+
include IdentifiersMethods::Ean
|
260
|
+
include IdentifiersMethods::Isbn
|
261
|
+
include IdentifiersMethods::ProprietaryId
|
260
262
|
|
261
263
|
element "RecordReference", :text
|
262
264
|
elements "ProductIdentifier", :subset, :shortcut => :identifiers
|
@@ -281,7 +283,7 @@ module ONIX
|
|
281
283
|
|
282
284
|
elements "OtherText", :subset
|
283
285
|
|
284
|
-
elements "SalesRights", :subset, {:pluralize => false}
|
286
|
+
elements "SalesRights", :subset, { :pluralize => false }
|
285
287
|
elements "NotForSale", :subset
|
286
288
|
|
287
289
|
element "BASICMainSubject", :text
|
@@ -289,7 +291,7 @@ module ONIX
|
|
289
291
|
elements "Subject", :subset
|
290
292
|
|
291
293
|
element "PublishingStatus", :text
|
292
|
-
element "PublicationDate", :text, {:parse_lambda => lambda { |v| Date.strptime(v, "%Y%m%d") }}
|
294
|
+
element "PublicationDate", :text, { :parse_lambda => lambda { |v| Date.strptime(v, "%Y%m%d") } }
|
293
295
|
|
294
296
|
elements "RelatedProduct", :subset, :shortcut => :related
|
295
297
|
|
@@ -440,7 +442,7 @@ module ONIX
|
|
440
442
|
nil
|
441
443
|
end
|
442
444
|
|
443
|
-
include
|
445
|
+
include ProductSuppliesMethods
|
444
446
|
|
445
447
|
# doesn't apply
|
446
448
|
def parts
|