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
@@ -1,18 +1,14 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
element "Text", :text
|
6
|
-
element "TextAuthor", :text
|
7
|
-
element "SourceTitle", :text
|
8
|
-
|
9
|
-
scope :description, lambda { human_code_match(:text_type, "Description") }
|
10
|
-
scope :short_description, lambda { human_code_match(:text_type, "ShortDescriptionannotation") }
|
11
|
-
end
|
1
|
+
require 'onix/text_content'
|
2
|
+
require 'onix/supporting_resource'
|
3
|
+
require 'onix/cited_content'
|
4
|
+
require 'onix/prize'
|
12
5
|
|
6
|
+
module ONIX
|
13
7
|
class CollateralDetail < SubsetDSL
|
14
|
-
elements "TextContent", :subset
|
15
|
-
elements "
|
8
|
+
elements "TextContent", :subset, :cardinality => 0..n
|
9
|
+
elements "CitedContent", :subset, :cardinality => 0..n
|
10
|
+
elements "SupportingResource", :subset, :cardinality => 0..n
|
11
|
+
elements "Prize", :subset, :cardinality => 0..n
|
16
12
|
|
17
13
|
# @!group High level
|
18
14
|
|
data/lib/onix/collection.rb
CHANGED
@@ -1,9 +1,16 @@
|
|
1
|
+
require 'onix/collection_sequence'
|
2
|
+
|
1
3
|
module ONIX
|
2
4
|
class Collection < SubsetDSL
|
3
|
-
element "CollectionType", :subset, :shortcut => :type
|
4
|
-
|
5
|
-
elements "
|
6
|
-
elements "CollectionSequence", :subset, :shortcut => :sequences
|
5
|
+
element "CollectionType", :subset, :shortcut => :type, :cardinality => 1
|
6
|
+
element "SourceName", :text, :cardinality => 0..1
|
7
|
+
elements "CollectionIdentifier", :subset, :shortcut => :identifiers, :cardinality => 0..n
|
8
|
+
elements "CollectionSequence", :subset, :shortcut => :sequences, :cardinality => 0..n
|
9
|
+
elements "TitleDetail", :subset, :cardinality => 0..n
|
10
|
+
elements "Contributor", :subset, :cardinality => 0..n
|
11
|
+
elements "ContributorStatement", :text, :cardinality => 0..n
|
12
|
+
elements "ContributorStatement", :text, :cardinality => 0..n
|
13
|
+
element "NoContributor", :bool, :cardinality => 0..1
|
7
14
|
|
8
15
|
scope :publisher, lambda { human_code_match(:collection_type, "PublisherCollection") }
|
9
16
|
|
@@ -1,7 +1,7 @@
|
|
1
1
|
module ONIX
|
2
2
|
class CollectionSequence < SubsetDSL
|
3
|
-
element "CollectionSequenceType", :subset, :shortcut => :type
|
4
|
-
element "CollectionSequenceTypeName", :string, :shortcut => :type_name
|
5
|
-
element "CollectionSequenceNumber", :string, :shortcut => :number
|
3
|
+
element "CollectionSequenceType", :subset, :shortcut => :type, :cardinality => 1
|
4
|
+
element "CollectionSequenceTypeName", :string, :shortcut => :type_name, :cardinality => 0..1
|
5
|
+
element "CollectionSequenceNumber", :string, :shortcut => :number, :cardinality => 1
|
6
6
|
end
|
7
7
|
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'onix/code'
|
2
|
+
require 'onix/identifier'
|
3
|
+
|
4
|
+
module ONIX
|
5
|
+
class ComparisonProductPrice < SubsetDSL
|
6
|
+
elements "ProductIdentifier", :subset, :cardinality => 1..n
|
7
|
+
element "PriceType", :subset, :shortcut => :type, :cardinality => 0..1
|
8
|
+
element "PriceAmount", :float,
|
9
|
+
{
|
10
|
+
:shortcut => :amount,
|
11
|
+
:parse_lambda => lambda { |v| (v * 100).round },
|
12
|
+
:serialize_lambda => lambda { |v| v / 100.0 },
|
13
|
+
:cardinality => 1
|
14
|
+
}
|
15
|
+
element "CurrencyCode", :text, :shortcut => :currency, :cardinality => 0..1
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
require 'onix/text_item'
|
2
|
+
require 'onix/contributor'
|
3
|
+
require 'onix/language'
|
4
|
+
require 'onix/subject'
|
5
|
+
require 'onix/title_detail'
|
6
|
+
require 'onix/text_content'
|
7
|
+
require 'onix/cited_content'
|
8
|
+
require 'onix/supporting_resource'
|
9
|
+
require 'onix/related_work'
|
10
|
+
require 'onix/related_product'
|
11
|
+
|
12
|
+
module ONIX
|
13
|
+
class ContentItem < SubsetDSL
|
14
|
+
element "LevelSequenceNumber", :integer, :cardinality => 0..1
|
15
|
+
element "TextItem", :subset, :cardinality => 0..1
|
16
|
+
# element "AVItem", :subset, :cardinality => 0..1
|
17
|
+
element "ComponentTypeName", :text, :cardinality => 0..1
|
18
|
+
element "ComponentNumber", :text, :cardinality => 0..1
|
19
|
+
elements "TitleDetail", :subset, :cardinality => 0..n
|
20
|
+
elements "Contributor", :subset, :cardinality => 0..n
|
21
|
+
elements "ContributorStatement", :text, :cardinality => 0..n
|
22
|
+
element "NoContributor", :bool, :cardinality => 0..1
|
23
|
+
elements "Language", :subset, :cardinality => 0..n
|
24
|
+
elements "Subject", :subset, :cardinality => 0..n
|
25
|
+
# elements "NameAsSubject", :subset, :cardinality => 0..n
|
26
|
+
elements "TextContent", :subset, :cardinality => 0..n
|
27
|
+
elements "CitedContent", :subset, :cardinality => 0..n
|
28
|
+
elements "SupportingResource", :subset, :cardinality => 0..n
|
29
|
+
elements "RelatedWork", :subset, :cardinality => 0..n
|
30
|
+
elements "RelatedProduct", :subset, :cardinality => 0..n
|
31
|
+
end
|
32
|
+
end
|
data/lib/onix/contributor.rb
CHANGED
@@ -1,49 +1,70 @@
|
|
1
1
|
require 'onix/subset'
|
2
2
|
require 'onix/website'
|
3
|
+
require 'onix/professional_affiliation'
|
4
|
+
require 'onix/contributor_place'
|
3
5
|
|
4
6
|
module ONIX
|
5
7
|
class Contributor < SubsetDSL
|
6
|
-
element "SequenceNumber", :integer
|
7
|
-
element "ContributorRole", :subset, :shortcut => :role
|
8
|
-
elements "
|
9
|
-
|
10
|
-
element "
|
11
|
-
|
12
|
-
element "
|
13
|
-
element "
|
14
|
-
element "
|
15
|
-
element "
|
16
|
-
|
17
|
-
element "
|
18
|
-
|
8
|
+
element "SequenceNumber", :integer, :cardinality => 0..1
|
9
|
+
element "ContributorRole", :subset, :shortcut => :role, :cardinality => 1..n
|
10
|
+
elements "FromLanguage", :subset, :klass => "LanguageCode", :cardinality => 0..n
|
11
|
+
elements "ToLanguage", :subset, :klass => "LanguageCode", :cardinality => 0..n
|
12
|
+
# element "NameType", :subset, :cardinality => 0..1
|
13
|
+
elements "NameIdentifier", :subset, :shortcut => :identifiers, :cardinality => 0..n
|
14
|
+
element "PersonName", :text, :cardinality => 0..1
|
15
|
+
element "PersonNameInverted", :text, :cardinality => 0..1
|
16
|
+
element "TitlesBeforeNames", :text, :cardinality => 0..1
|
17
|
+
element "NamesBeforeKey", :text, :shortcut => :name_before_key, :cardinality => 0..1
|
18
|
+
element "PrefixToKey", :text, :cardinality => 0..1
|
19
|
+
element "KeyNames", :text, :cardinality => 0..1
|
20
|
+
element "NamesAfterKey", :text, :cardinality => 0..1
|
21
|
+
element "SuffixToKey", :text, :cardinality => 0..1
|
22
|
+
element "LettersAfterNames", :text, :cardinality => 0..1
|
23
|
+
element "TitlesAfterNames", :text, :cardinality => 0..1
|
24
|
+
# element "Gender", :subset, :cardinality => 0..1
|
25
|
+
element "CorporateName", :text, :cardinality => 0..1
|
26
|
+
element "CorporateNameInverted", :text, :cardinality => 0..1
|
27
|
+
# element "UnnamedPersons", :subset, :cardinality => 0..1
|
28
|
+
# elements "AlternativeName", :subset, :cardinality => 0..n
|
29
|
+
elements "ContributorDate", :subset, :shortcut => :dates, :cardinality => 0..n
|
30
|
+
elements "ProfessionalAffiliation", :subset, :cardinality => 0..n
|
31
|
+
elements "Prize", :subset, :cardinality => 0..n
|
32
|
+
elements "BiographicalNote", :text, :shortcut => :biographies, :cardinality => 0..n
|
33
|
+
elements "Website", :subset, :cardinality => 0..n
|
34
|
+
elements "ContributorDescription", :text, :cardinality => 0..n
|
35
|
+
elements "ContributorPlace", :subset, :shortcut => :places, :cardinality => 0..n
|
19
36
|
|
20
37
|
# @!group High level
|
21
38
|
# flatten person name (firstname lastname)
|
22
39
|
# @return [String]
|
23
40
|
def name
|
24
|
-
return
|
41
|
+
return person_name if person_name
|
25
42
|
|
26
|
-
if
|
27
|
-
if
|
28
|
-
return "#{
|
43
|
+
if key_names
|
44
|
+
if names_before_key
|
45
|
+
return "#{names_before_key} #{key_names}"
|
29
46
|
else
|
30
|
-
return
|
47
|
+
return key_names
|
31
48
|
end
|
32
49
|
end
|
33
50
|
|
34
|
-
|
51
|
+
corporate_name
|
35
52
|
end
|
36
53
|
|
37
54
|
# inverted flatten person name
|
38
55
|
# @return [String]
|
39
56
|
def inverted_name
|
40
|
-
|
57
|
+
person_name_inverted || corporate_name_inverted
|
41
58
|
end
|
42
59
|
|
43
60
|
# biography string with HTML
|
44
61
|
# @return [String]
|
45
62
|
def biography
|
46
|
-
|
63
|
+
self.biographies.first
|
64
|
+
end
|
65
|
+
|
66
|
+
def place
|
67
|
+
self.places.first
|
47
68
|
end
|
48
69
|
|
49
70
|
# raw biography string without HTML
|
@@ -72,17 +93,4 @@ module ONIX
|
|
72
93
|
|
73
94
|
# @!endgroup
|
74
95
|
end
|
75
|
-
|
76
|
-
class ContributorPlace < SubsetDSL
|
77
|
-
element "ContributorPlaceRelator", :subset
|
78
|
-
element "CountryCode", :subset
|
79
|
-
|
80
|
-
def relator
|
81
|
-
@contributor_place_relator
|
82
|
-
end
|
83
|
-
|
84
|
-
def country_code
|
85
|
-
@country_code.code
|
86
|
-
end
|
87
|
-
end
|
88
96
|
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
module ONIX
|
2
|
+
class ContributorPlace < SubsetDSL
|
3
|
+
element "ContributorPlaceRelator", :subset, :shortcut => :relator, :cardinality => 1
|
4
|
+
element "CountryCode", :subset, :cardinality => 0..1
|
5
|
+
element "RegionCode", :subset, :cardinality => 0..1
|
6
|
+
elements "LocationName", :text, :cardinality => 0..n
|
7
|
+
|
8
|
+
def country_code
|
9
|
+
@country_code.code
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
data/lib/onix/date.rb
CHANGED
@@ -1,52 +1,39 @@
|
|
1
1
|
module ONIX
|
2
2
|
module DateHelper
|
3
|
-
attr_accessor :date_format, :date
|
4
|
-
|
5
|
-
def parse_date(n)
|
6
|
-
@date_format = DateFormat.from_code("00")
|
7
|
-
date_txt = nil
|
8
|
-
@date = nil
|
9
|
-
n.elements.each do |t|
|
10
|
-
case t
|
11
|
-
when tag_match("DateFormat")
|
12
|
-
@date_format = DateFormat.parse(t)
|
13
|
-
when tag_match("Date")
|
14
|
-
date_txt = t.text
|
15
|
-
end
|
3
|
+
attr_accessor :date_format, :date, :datetime
|
16
4
|
|
17
|
-
|
18
|
-
|
5
|
+
def parse_date
|
6
|
+
if @date_format
|
7
|
+
@deprecated_date_format = true
|
8
|
+
else
|
9
|
+
if @date.is_a?(TextWithAttributes)
|
10
|
+
@date_format = @date.attributes["dateformat"]
|
19
11
|
end
|
20
12
|
end
|
21
13
|
|
22
|
-
|
14
|
+
@datetime = strpdate!(@date, @date_format)
|
15
|
+
@date = @datetime ? @datetime.to_date : nil
|
16
|
+
end
|
17
|
+
|
18
|
+
def strpdate!(date_txt, date_format)
|
19
|
+
date_format ||= DateFormat.from_code("00")
|
20
|
+
code_format = format_from_code(date_format.code)
|
23
21
|
text_format = format_from_string(date_txt)
|
24
22
|
|
25
23
|
format = code_format
|
26
24
|
|
27
25
|
if code_format != text_format
|
28
|
-
|
26
|
+
puts "WARN incorrect date format #{text_format} != #{code_format}"
|
29
27
|
format = text_format
|
30
28
|
end
|
31
29
|
|
32
30
|
begin
|
33
|
-
if format
|
34
|
-
|
35
|
-
when "00"
|
36
|
-
@date = Date.strptime(date_txt, format)
|
37
|
-
when "01"
|
38
|
-
@date = Date.strptime(date_txt, format)
|
39
|
-
when "05"
|
40
|
-
@date = Date.strptime(date_txt, format)
|
41
|
-
when "14"
|
42
|
-
@date = Time.strptime(date_txt, format)
|
43
|
-
else
|
44
|
-
@date = nil
|
45
|
-
end
|
46
|
-
end
|
47
|
-
rescue
|
31
|
+
datetime = Time.strptime(date_txt, format) if format && %w[00 01 02 05 13 14].include?(date_format.code)
|
32
|
+
rescue => e
|
48
33
|
# invalid date
|
49
34
|
end
|
35
|
+
|
36
|
+
datetime
|
50
37
|
end
|
51
38
|
|
52
39
|
def format_from_code(code)
|
@@ -55,8 +42,12 @@ module ONIX
|
|
55
42
|
"%Y%m%d"
|
56
43
|
when "01"
|
57
44
|
"%Y%m"
|
45
|
+
when "02"
|
46
|
+
"%Y%%W"
|
58
47
|
when "05"
|
59
48
|
"%Y"
|
49
|
+
when "13"
|
50
|
+
"%Y%m%dT%H%M%S"
|
60
51
|
when "14"
|
61
52
|
"%Y%m%dT%H%M%S%z"
|
62
53
|
else
|
@@ -82,30 +73,77 @@ module ONIX
|
|
82
73
|
end
|
83
74
|
|
84
75
|
def time
|
85
|
-
@
|
76
|
+
@datetime
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
# support for datestamp attribute and SentDateTime
|
81
|
+
class DateStamp
|
82
|
+
attr_accessor :format, :datetime
|
83
|
+
|
84
|
+
def initialize(dt = nil, fmt = "%Y%m%d")
|
85
|
+
@datetime = dt
|
86
|
+
@format = fmt unless @datetime.is_a?(String)
|
87
|
+
end
|
88
|
+
|
89
|
+
def supported_formats
|
90
|
+
["%Y%m%dT%H%M%S%z", "%Y%m%dT%H%M%S", "%Y%m%dT%H%M%z", "%Y%m%dT%H%M", "%Y%m%d"]
|
91
|
+
end
|
92
|
+
|
93
|
+
def parse(tm)
|
94
|
+
@format = nil
|
95
|
+
found_format = nil
|
96
|
+
supported_formats.each do |supported_format|
|
97
|
+
begin
|
98
|
+
@datetime = Time.strptime(tm, supported_format)
|
99
|
+
found_format = supported_format
|
100
|
+
break
|
101
|
+
rescue
|
102
|
+
end
|
103
|
+
end
|
104
|
+
@format = found_format
|
105
|
+
@datetime = tm unless @format
|
106
|
+
end
|
107
|
+
|
108
|
+
def self.from_code(code)
|
109
|
+
ds = self.new
|
110
|
+
ds.parse(code)
|
111
|
+
ds
|
112
|
+
end
|
113
|
+
|
114
|
+
def human
|
115
|
+
@datetime
|
116
|
+
end
|
117
|
+
|
118
|
+
def code
|
119
|
+
@format ? @datetime.strftime(@format) : @datetime
|
86
120
|
end
|
87
121
|
end
|
88
122
|
|
89
123
|
class BaseDate < SubsetDSL
|
90
124
|
include DateHelper
|
125
|
+
element "DateFormat", :subset
|
126
|
+
element "Date", :text
|
127
|
+
attr_accessor :deprecated_date_format
|
128
|
+
|
129
|
+
def initialize
|
130
|
+
super
|
131
|
+
@deprecated_date_format = false
|
132
|
+
end
|
91
133
|
|
92
134
|
def parse(n)
|
93
135
|
super
|
94
|
-
parse_date
|
136
|
+
parse_date
|
95
137
|
end
|
96
138
|
end
|
97
139
|
|
98
140
|
class MarketDate < BaseDate
|
99
|
-
element "Date", :ignore
|
100
|
-
element "DateFormat", :ignore
|
101
141
|
element "MarketDateRole", :subset, :shortcut => :role
|
102
142
|
|
103
143
|
scope :availability, lambda { human_code_match(:market_date_role, ["PublicationDate", "EmbargoDate"]) }
|
104
144
|
end
|
105
145
|
|
106
146
|
class PriceDate < BaseDate
|
107
|
-
element "Date", :ignore
|
108
|
-
element "DateFormat", :ignore
|
109
147
|
element "PriceDateRole", :subset, :shortcut => :role
|
110
148
|
|
111
149
|
scope :from_date, lambda { human_code_match(:price_date_role, "FromDate") }
|
@@ -113,35 +151,27 @@ module ONIX
|
|
113
151
|
end
|
114
152
|
|
115
153
|
class SupplyDate < BaseDate
|
116
|
-
element "Date", :ignore
|
117
|
-
element "DateFormat", :ignore
|
118
154
|
element "SupplyDateRole", :subset, :shortcut => :role
|
119
155
|
|
120
156
|
scope :availability, lambda { human_code_match(:supply_date_role, ["ExpectedAvailabilityDate", "EmbargoDate"]) }
|
121
157
|
end
|
122
158
|
|
123
159
|
class PublishingDate < BaseDate
|
124
|
-
element "Date", :ignore
|
125
|
-
element "DateFormat", :ignore
|
126
160
|
element "PublishingDateRole", :subset, :shortcut => :role
|
127
161
|
|
128
162
|
scope :publication, lambda { human_code_match(:publishing_date_role, ["PublicationDate", "PublicationDateOfPrintCounterpart"]) }
|
129
|
-
scope :embargo, lambda { human_code_match(:publishing_date_role, "
|
163
|
+
scope :embargo, lambda { human_code_match(:publishing_date_role, "SalesEmbargoDate") }
|
130
164
|
scope :preorder_embargo, lambda { human_code_match(:publishing_date_role, "PreorderEmbargoDate") }
|
131
165
|
scope :public_announcement, lambda { human_code_match(:publishing_date_role, "PublicAnnouncementDate") }
|
132
166
|
end
|
133
167
|
|
134
168
|
class ContentDate < BaseDate
|
135
|
-
element "Date", :ignore
|
136
|
-
element "DateFormat", :ignore
|
137
169
|
element "ContentDateRole", :subset, :shortcut => :role
|
138
170
|
|
139
171
|
scope :last_updated, lambda { human_code_match(:content_date_role, "LastUpdated") }
|
140
172
|
end
|
141
173
|
|
142
174
|
class ContributorDate < BaseDate
|
143
|
-
element "Date", :ignore
|
144
|
-
element "DateFormat", :ignore
|
145
175
|
element "ContributorDateRole", :subset, :shortcut => :role
|
146
176
|
end
|
147
177
|
end
|