onix2 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/CHANGELOG +209 -0
- data/README.markdown +69 -0
- data/TODO +14 -0
- data/dtd/2.1r3/iso-amsa.ent +173 -0
- data/dtd/2.1r3/iso-amsb.ent +146 -0
- data/dtd/2.1r3/iso-amsc.ent +49 -0
- data/dtd/2.1r3/iso-amsn.ent +117 -0
- data/dtd/2.1r3/iso-amso.ent +77 -0
- data/dtd/2.1r3/iso-amsr.ent +205 -0
- data/dtd/2.1r3/iso-box.ent +67 -0
- data/dtd/2.1r3/iso-cyr1.ent +94 -0
- data/dtd/2.1r3/iso-cyr2.ent +53 -0
- data/dtd/2.1r3/iso-dia.ent +41 -0
- data/dtd/2.1r3/iso-grk3.ent +70 -0
- data/dtd/2.1r3/iso-lat1.ent +89 -0
- data/dtd/2.1r3/iso-lat2.ent +148 -0
- data/dtd/2.1r3/iso-mfrk.ent +79 -0
- data/dtd/2.1r3/iso-mopf.ent +53 -0
- data/dtd/2.1r3/iso-mscr.ent +79 -0
- data/dtd/2.1r3/iso-num.ent +103 -0
- data/dtd/2.1r3/iso-num.old.ent +103 -0
- data/dtd/2.1r3/iso-pub.ent +110 -0
- data/dtd/2.1r3/iso-tech.ent +183 -0
- data/dtd/2.1r3/onix-international.dtd +1012 -0
- data/dtd/2.1r3/onix-xhtml.elt +672 -0
- data/dtd/2.1r3/reference.elt +4758 -0
- data/dtd/2.1r3/xhtml-special.ent +79 -0
- data/dtd/2.1r3/xhtml-symbol.ent +242 -0
- data/lib/onix2.rb +85 -0
- data/lib/onix2/addressee_identifier.rb +29 -0
- data/lib/onix2/apa_product.rb +785 -0
- data/lib/onix2/audience_range.rb +37 -0
- data/lib/onix2/code_list_extractor.rb +69 -0
- data/lib/onix2/contributor.rb +55 -0
- data/lib/onix2/discount_coded.rb +29 -0
- data/lib/onix2/header.rb +68 -0
- data/lib/onix2/imprint.rb +31 -0
- data/lib/onix2/language.rb +29 -0
- data/lib/onix2/lists.rb +134 -0
- data/lib/onix2/market_representation.rb +38 -0
- data/lib/onix2/measure.rb +29 -0
- data/lib/onix2/media_file.rb +33 -0
- data/lib/onix2/other_text.rb +35 -0
- data/lib/onix2/price.rb +47 -0
- data/lib/onix2/product.rb +97 -0
- data/lib/onix2/product_identifier.rb +27 -0
- data/lib/onix2/publisher.rb +33 -0
- data/lib/onix2/reader.rb +157 -0
- data/lib/onix2/sales_restriction.rb +25 -0
- data/lib/onix2/sales_rights.rb +28 -0
- data/lib/onix2/sender_identifier.rb +29 -0
- data/lib/onix2/series.rb +28 -0
- data/lib/onix2/series_identifier.rb +27 -0
- data/lib/onix2/simple_product.rb +47 -0
- data/lib/onix2/stock.rb +29 -0
- data/lib/onix2/subject.rb +33 -0
- data/lib/onix2/supply_detail.rb +53 -0
- data/lib/onix2/title.rb +33 -0
- data/lib/onix2/version.rb +3 -0
- data/lib/onix2/website.rb +29 -0
- data/lib/onix2/writer.rb +86 -0
- data/spec/addressee_identifier_spec.rb +33 -0
- data/spec/apa_product_spec.rb +116 -0
- data/spec/audience_range_spec.rb +44 -0
- data/spec/contributor_spec.rb +38 -0
- data/spec/discount_coded_spec.rb +34 -0
- data/spec/header_spec.rb +153 -0
- data/spec/imprint_spec.rb +31 -0
- data/spec/language_spec.rb +38 -0
- data/spec/lists_spec.rb +33 -0
- data/spec/market_representation_spec.rb +33 -0
- data/spec/measure_spec.rb +38 -0
- data/spec/media_file_spec.rb +38 -0
- data/spec/other_text_spec.rb +33 -0
- data/spec/price_spec.rb +52 -0
- data/spec/product_identifier_spec.rb +34 -0
- data/spec/product_spec.rb +102 -0
- data/spec/publisher_spec.rb +33 -0
- data/spec/reader_spec.rb +155 -0
- data/spec/sales_restriction_spec.rb +27 -0
- data/spec/sender_identifier.rb +33 -0
- data/spec/series_identifier_spec.rb +33 -0
- data/spec/series_spec.rb +47 -0
- data/spec/spec_helper.rb +15 -0
- data/spec/stock_spec.rb +39 -0
- data/spec/subject_spec.rb +34 -0
- data/spec/supply_detail_spec.rb +97 -0
- data/spec/title_spec.rb +38 -0
- data/spec/website_spec.rb +33 -0
- data/spec/writer_spec.rb +78 -0
- data/support/codes/001.tsv +10 -0
- data/support/codes/002.tsv +5 -0
- data/support/codes/003.tsv +7 -0
- data/support/codes/005.tsv +13 -0
- data/support/codes/006.tsv +76 -0
- data/support/codes/007.tsv +123 -0
- data/support/codes/008.tsv +7 -0
- data/support/codes/009.tsv +7 -0
- data/support/codes/010.tsv +34 -0
- data/support/codes/011.tsv +11 -0
- data/support/codes/012.tsv +11 -0
- data/support/codes/013.tsv +7 -0
- data/support/codes/014.tsv +4 -0
- data/support/codes/015.tsv +13 -0
- data/support/codes/016.tsv +6 -0
- data/support/codes/017.tsv +90 -0
- data/support/codes/018.tsv +3 -0
- data/support/codes/019.tsv +7 -0
- data/support/codes/020.tsv +0 -0
- data/support/codes/021.tsv +31 -0
- data/support/codes/022.tsv +9 -0
- data/support/codes/023.tsv +9 -0
- data/support/codes/024.tsv +11 -0
- data/support/codes/025.tsv +29 -0
- data/support/codes/026.tsv +75 -0
- data/support/codes/027.tsv +75 -0
- data/support/codes/028.tsv +8 -0
- data/support/codes/029.tsv +16 -0
- data/support/codes/030.tsv +15 -0
- data/support/codes/031.tsv +3 -0
- data/support/codes/032.tsv +2 -0
- data/support/codes/033.tsv +36 -0
- data/support/codes/034.tsv +14 -0
- data/support/codes/035.tsv +6 -0
- data/support/codes/036.tsv +3 -0
- data/support/codes/037.tsv +6 -0
- data/support/codes/038.tsv +36 -0
- data/support/codes/039.tsv +8 -0
- data/support/codes/040.tsv +6 -0
- data/support/codes/041.tsv +6 -0
- data/support/codes/042.tsv +16 -0
- data/support/codes/043.tsv +4 -0
- data/support/codes/044.tsv +13 -0
- data/support/codes/045.tsv +12 -0
- data/support/codes/046.tsv +3 -0
- data/support/codes/047.tsv +4 -0
- data/support/codes/048.tsv +11 -0
- data/support/codes/049.tsv +84 -0
- data/support/codes/050.tsv +8 -0
- data/support/codes/051.tsv +27 -0
- data/support/codes/052.tsv +1 -0
- data/support/codes/053.tsv +3 -0
- data/support/codes/054.tsv +23 -0
- data/support/codes/055.tsv +13 -0
- data/support/codes/056.tsv +2 -0
- data/support/codes/057.tsv +5 -0
- data/support/codes/058.tsv +21 -0
- data/support/codes/059.tsv +4 -0
- data/support/codes/060.tsv +2 -0
- data/support/codes/061.tsv +3 -0
- data/support/codes/062.tsv +5 -0
- data/support/codes/063.tsv +0 -0
- data/support/codes/064.tsv +13 -0
- data/support/codes/065.tsv +25 -0
- data/support/codes/066.tsv +4 -0
- data/support/codes/067.tsv +2 -0
- data/support/codes/068.tsv +15 -0
- data/support/codes/069.tsv +4 -0
- data/support/codes/070.tsv +2 -0
- data/support/codes/071.tsv +9 -0
- data/support/codes/072.tsv +7 -0
- data/support/codes/073.tsv +36 -0
- data/support/codes/074.tsv +489 -0
- data/support/codes/075.tsv +2 -0
- data/support/codes/076.tsv +12 -0
- data/support/codes/077.tsv +19 -0
- data/support/codes/078.tsv +148 -0
- data/support/codes/079.tsv +17 -0
- data/support/codes/080.tsv +19 -0
- data/support/codes/081.tsv +11 -0
- data/support/codes/082.tsv +17 -0
- data/support/codes/083.tsv +68 -0
- data/support/codes/084.tsv +10 -0
- data/support/codes/085.tsv +23 -0
- data/support/codes/086.tsv +5 -0
- data/support/codes/087.tsv +6 -0
- data/support/codes/088.tsv +0 -0
- data/support/codes/089.tsv +1 -0
- data/support/codes/090.tsv +11 -0
- data/support/codes/091.tsv +248 -0
- data/support/codes/092.tsv +7 -0
- data/support/codes/093.tsv +13 -0
- data/support/codes/094.tsv +3 -0
- data/support/codes/095.tsv +3 -0
- data/support/codes/096.tsv +185 -0
- data/support/codes/097.tsv +1 -0
- data/support/codes/098.tsv +21 -0
- data/support/codes/099.tsv +24 -0
- data/support/codes/100.tsv +4 -0
- data/support/codes/101.tsv +2 -0
- data/support/codes/102.tsv +3 -0
- data/support/codes/121.tsv +127 -0
- data/support/codes/138.tsv +6 -0
- data/support/codes/139.tsv +70 -0
- data/support/codes/140.tsv +7 -0
- data/support/codes/141.tsv +10 -0
- data/support/codes/142.tsv +12 -0
- data/support/codes/143.tsv +7 -0
- data/support/codes/144.tsv +4 -0
- data/support/codes/145.tsv +5 -0
- data/support/codes/146.tsv +3 -0
- data/support/codes/147.tsv +7 -0
- data/support/codes/148.tsv +3 -0
- data/support/codes/149.tsv +4 -0
- data/support/codes/150.tsv +124 -0
- data/support/codes/151.tsv +7 -0
- data/support/codes/152.tsv +2 -0
- data/support/codes/153.tsv +14 -0
- data/support/codes/154.tsv +9 -0
- data/support/codes/155.tsv +5 -0
- data/support/codes/156.tsv +4 -0
- data/support/codes/157.tsv +4 -0
- data/support/codes/158.tsv +24 -0
- data/support/codes/159.tsv +6 -0
- data/support/codes/160.tsv +0 -0
- data/support/codes/161.tsv +3 -0
- data/support/codes/162.tsv +3 -0
- data/support/codes/163.tsv +7 -0
- data/support/codes/164.tsv +2 -0
- data/support/codes/165.tsv +2 -0
- data/support/codes/166.tsv +2 -0
- data/support/codes/167.tsv +3 -0
- data/support/codes/168.tsv +2 -0
- data/support/codes/169.tsv +3 -0
- data/support/codes/170.tsv +0 -0
- data/support/codes/171.tsv +2 -0
- data/support/codes/172.tsv +1 -0
- data/support/codes/173.tsv +2 -0
- data/support/codes/174.tsv +2 -0
- data/support/codes/175.tsv +175 -0
- data/support/codes/176.tsv +12 -0
- data/support/codes/177.tsv +2 -0
- data/support/codes/178.tsv +17 -0
- data/support/entities.txt +1499 -0
- data/support/extract.rb +25 -0
- data/support/switch-onix-2.1-short-to-reference.xsl +24 -0
- data/support/switch-onix-tagnames-1.1.xsl +25 -0
- data/support/switch-onix-tagnames-2.0.xsl +37 -0
- metadata +440 -0
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
<!-- Special characters for HTML -->
|
|
2
|
+
|
|
3
|
+
<!-- Character entity set. Typical invocation:
|
|
4
|
+
<!ENTITY % HTMLspecial PUBLIC
|
|
5
|
+
"-//W3C//ENTITIES Special for XHTML//EN"
|
|
6
|
+
"http://www.w3.org/TR/xhtml1/DTD/xhtml-special.ent">
|
|
7
|
+
%HTMLspecial;
|
|
8
|
+
-->
|
|
9
|
+
|
|
10
|
+
<!-- Portions (C) International Organization for Standardization 1986:
|
|
11
|
+
Permission to copy in any form is granted for use with
|
|
12
|
+
conforming SGML systems and applications as defined in
|
|
13
|
+
ISO 8879, provided this notice is included in all copies.
|
|
14
|
+
-->
|
|
15
|
+
|
|
16
|
+
<!-- Relevant ISO entity set is given unless names are newly introduced.
|
|
17
|
+
New names (i.e., not in ISO 8879 list) do not clash with any
|
|
18
|
+
existing ISO 8879 entity names. ISO 10646 character numbers
|
|
19
|
+
are given for each character, in hex. values are decimal
|
|
20
|
+
conversions of the ISO 10646 values and refer to the document
|
|
21
|
+
character set. Names are Unicode names.
|
|
22
|
+
-->
|
|
23
|
+
|
|
24
|
+
<!-- C0 Controls and Basic Latin -->
|
|
25
|
+
<!ENTITY quot """> <!-- quotation mark = APL quote,
|
|
26
|
+
U+0022 ISOnum -->
|
|
27
|
+
<!ENTITY amp "&#38;"> <!-- ampersand, U+0026 ISOnum -->
|
|
28
|
+
<!ENTITY lt "&#60;"> <!-- less-than sign, U+003C ISOnum -->
|
|
29
|
+
<!ENTITY gt ">"> <!-- greater-than sign, U+003E ISOnum -->
|
|
30
|
+
<!ENTITY apos "'"> <!-- apostrophe mark, U+0027 ISOnum -->
|
|
31
|
+
|
|
32
|
+
<!-- Latin Extended-A -->
|
|
33
|
+
<!ENTITY OElig "Œ"> <!-- latin capital ligature OE,
|
|
34
|
+
U+0152 ISOlat2 -->
|
|
35
|
+
<!ENTITY oelig "œ"> <!-- latin small ligature oe, U+0153 ISOlat2 -->
|
|
36
|
+
<!-- ligature is a misnomer, this is a separate character in some languages -->
|
|
37
|
+
<!ENTITY Scaron "Š"> <!-- latin capital letter S with caron,
|
|
38
|
+
U+0160 ISOlat2 -->
|
|
39
|
+
<!ENTITY scaron "š"> <!-- latin small letter s with caron,
|
|
40
|
+
U+0161 ISOlat2 -->
|
|
41
|
+
<!ENTITY Yuml "Ÿ"> <!-- latin capital letter Y with diaeresis,
|
|
42
|
+
U+0178 ISOlat2 -->
|
|
43
|
+
|
|
44
|
+
<!-- Spacing Modifier Letters -->
|
|
45
|
+
<!ENTITY circ "ˆ"> <!-- modifier letter circumflex accent,
|
|
46
|
+
U+02C6 ISOpub -->
|
|
47
|
+
<!ENTITY tilde "˜"> <!-- small tilde, U+02DC ISOdia -->
|
|
48
|
+
|
|
49
|
+
<!-- General Punctuation -->
|
|
50
|
+
<!ENTITY ensp " "> <!-- en space, U+2002 ISOpub -->
|
|
51
|
+
<!ENTITY emsp " "> <!-- em space, U+2003 ISOpub -->
|
|
52
|
+
<!ENTITY thinsp " "> <!-- thin space, U+2009 ISOpub -->
|
|
53
|
+
<!ENTITY zwnj "‌"> <!-- zero width non-joiner,
|
|
54
|
+
U+200C NEW RFC 2070 -->
|
|
55
|
+
<!ENTITY zwj "‍"> <!-- zero width joiner, U+200D NEW RFC 2070 -->
|
|
56
|
+
<!ENTITY lrm "‎"> <!-- left-to-right mark, U+200E NEW RFC 2070 -->
|
|
57
|
+
<!ENTITY rlm "‏"> <!-- right-to-left mark, U+200F NEW RFC 2070 -->
|
|
58
|
+
<!ENTITY ndash "–"> <!-- en dash, U+2013 ISOpub -->
|
|
59
|
+
<!ENTITY mdash "—"> <!-- em dash, U+2014 ISOpub -->
|
|
60
|
+
<!ENTITY lsquo "‘"> <!-- left single quotation mark,
|
|
61
|
+
U+2018 ISOnum -->
|
|
62
|
+
<!ENTITY rsquo "’"> <!-- right single quotation mark,
|
|
63
|
+
U+2019 ISOnum -->
|
|
64
|
+
<!ENTITY sbquo "‚"> <!-- single low-9 quotation mark, U+201A NEW -->
|
|
65
|
+
<!ENTITY ldquo "“"> <!-- left double quotation mark,
|
|
66
|
+
U+201C ISOnum -->
|
|
67
|
+
<!ENTITY rdquo "”"> <!-- right double quotation mark,
|
|
68
|
+
U+201D ISOnum -->
|
|
69
|
+
<!ENTITY bdquo "„"> <!-- double low-9 quotation mark, U+201E NEW -->
|
|
70
|
+
<!ENTITY dagger "†"> <!-- dagger, U+2020 ISOpub -->
|
|
71
|
+
<!ENTITY Dagger "‡"> <!-- double dagger, U+2021 ISOpub -->
|
|
72
|
+
<!ENTITY permil "‰"> <!-- per mille sign, U+2030 ISOtech -->
|
|
73
|
+
<!ENTITY lsaquo "‹"> <!-- single left-pointing angle quotation mark,
|
|
74
|
+
U+2039 ISO proposed -->
|
|
75
|
+
<!-- lsaquo is proposed but not yet ISO standardized -->
|
|
76
|
+
<!ENTITY rsaquo "›"> <!-- single right-pointing angle quotation mark,
|
|
77
|
+
U+203A ISO proposed -->
|
|
78
|
+
<!-- rsaquo is proposed but not yet ISO standardized -->
|
|
79
|
+
<!ENTITY euro "€"> <!-- euro sign, U+20AC NEW -->
|
|
@@ -0,0 +1,242 @@
|
|
|
1
|
+
<!-- Mathematical, Greek and Symbolic characters for HTML -->
|
|
2
|
+
|
|
3
|
+
<!-- Character entity set. Typical invocation:
|
|
4
|
+
<!ENTITY % HTMLsymbol PUBLIC
|
|
5
|
+
"-//W3C//ENTITIES Symbols for XHTML//EN"
|
|
6
|
+
"http://www.w3.org/TR/xhtml1/DTD/xhtml-symbol.ent">
|
|
7
|
+
%HTMLsymbol;
|
|
8
|
+
-->
|
|
9
|
+
|
|
10
|
+
<!-- Portions (C) International Organization for Standardization 1986:
|
|
11
|
+
Permission to copy in any form is granted for use with
|
|
12
|
+
conforming SGML systems and applications as defined in
|
|
13
|
+
ISO 8879, provided this notice is included in all copies.
|
|
14
|
+
-->
|
|
15
|
+
|
|
16
|
+
<!-- Relevant ISO entity set is given unless names are newly introduced.
|
|
17
|
+
New names (i.e., not in ISO 8879 list) do not clash with any
|
|
18
|
+
existing ISO 8879 entity names. ISO 10646 character numbers
|
|
19
|
+
are given for each character, in hex. values are decimal
|
|
20
|
+
conversions of the ISO 10646 values and refer to the document
|
|
21
|
+
character set. Names are Unicode names.
|
|
22
|
+
-->
|
|
23
|
+
|
|
24
|
+
<!-- Latin Extended-B -->
|
|
25
|
+
<!ENTITY fnof "ƒ"> <!-- latin small f with hook = function
|
|
26
|
+
= florin, U+0192 ISOtech -->
|
|
27
|
+
|
|
28
|
+
<!-- Greek -->
|
|
29
|
+
<!ENTITY Alpha "Α"> <!-- greek capital letter alpha, U+0391 -->
|
|
30
|
+
<!ENTITY Beta "Β"> <!-- greek capital letter beta, U+0392 -->
|
|
31
|
+
<!ENTITY Gamma "Γ"> <!-- greek capital letter gamma,
|
|
32
|
+
U+0393 ISOgrk3 -->
|
|
33
|
+
<!ENTITY Delta "Δ"> <!-- greek capital letter delta,
|
|
34
|
+
U+0394 ISOgrk3 -->
|
|
35
|
+
<!ENTITY Epsilon "Ε"> <!-- greek capital letter epsilon, U+0395 -->
|
|
36
|
+
<!ENTITY Zeta "Ζ"> <!-- greek capital letter zeta, U+0396 -->
|
|
37
|
+
<!ENTITY Eta "Η"> <!-- greek capital letter eta, U+0397 -->
|
|
38
|
+
<!ENTITY Theta "Θ"> <!-- greek capital letter theta,
|
|
39
|
+
U+0398 ISOgrk3 -->
|
|
40
|
+
<!ENTITY Iota "Ι"> <!-- greek capital letter iota, U+0399 -->
|
|
41
|
+
<!ENTITY Kappa "Κ"> <!-- greek capital letter kappa, U+039A -->
|
|
42
|
+
<!ENTITY Lambda "Λ"> <!-- greek capital letter lambda,
|
|
43
|
+
U+039B ISOgrk3 -->
|
|
44
|
+
<!ENTITY Mu "Μ"> <!-- greek capital letter mu, U+039C -->
|
|
45
|
+
<!ENTITY Nu "Ν"> <!-- greek capital letter nu, U+039D -->
|
|
46
|
+
<!ENTITY Xi "Ξ"> <!-- greek capital letter xi, U+039E ISOgrk3 -->
|
|
47
|
+
<!ENTITY Omicron "Ο"> <!-- greek capital letter omicron, U+039F -->
|
|
48
|
+
<!ENTITY Pi "Π"> <!-- greek capital letter pi, U+03A0 ISOgrk3 -->
|
|
49
|
+
<!ENTITY Rho "Ρ"> <!-- greek capital letter rho, U+03A1 -->
|
|
50
|
+
<!-- there is no Sigmaf, and no U+03A2 character either -->
|
|
51
|
+
<!ENTITY Sigma "Σ"> <!-- greek capital letter sigma,
|
|
52
|
+
U+03A3 ISOgrk3 -->
|
|
53
|
+
<!ENTITY Tau "Τ"> <!-- greek capital letter tau, U+03A4 -->
|
|
54
|
+
<!ENTITY Upsilon "Υ"> <!-- greek capital letter upsilon,
|
|
55
|
+
U+03A5 ISOgrk3 -->
|
|
56
|
+
<!ENTITY Phi "Φ"> <!-- greek capital letter phi,
|
|
57
|
+
U+03A6 ISOgrk3 -->
|
|
58
|
+
<!ENTITY Chi "Χ"> <!-- greek capital letter chi, U+03A7 -->
|
|
59
|
+
<!ENTITY Psi "Ψ"> <!-- greek capital letter psi,
|
|
60
|
+
U+03A8 ISOgrk3 -->
|
|
61
|
+
<!ENTITY Omega "Ω"> <!-- greek capital letter omega,
|
|
62
|
+
U+03A9 ISOgrk3 -->
|
|
63
|
+
|
|
64
|
+
<!ENTITY alpha "α"> <!-- greek small letter alpha,
|
|
65
|
+
U+03B1 ISOgrk3 -->
|
|
66
|
+
<!ENTITY beta "β"> <!-- greek small letter beta, U+03B2 ISOgrk3 -->
|
|
67
|
+
<!ENTITY gamma "γ"> <!-- greek small letter gamma,
|
|
68
|
+
U+03B3 ISOgrk3 -->
|
|
69
|
+
<!ENTITY delta "δ"> <!-- greek small letter delta,
|
|
70
|
+
U+03B4 ISOgrk3 -->
|
|
71
|
+
<!ENTITY epsilon "ε"> <!-- greek small letter epsilon,
|
|
72
|
+
U+03B5 ISOgrk3 -->
|
|
73
|
+
<!ENTITY zeta "ζ"> <!-- greek small letter zeta, U+03B6 ISOgrk3 -->
|
|
74
|
+
<!ENTITY eta "η"> <!-- greek small letter eta, U+03B7 ISOgrk3 -->
|
|
75
|
+
<!ENTITY theta "θ"> <!-- greek small letter theta,
|
|
76
|
+
U+03B8 ISOgrk3 -->
|
|
77
|
+
<!ENTITY iota "ι"> <!-- greek small letter iota, U+03B9 ISOgrk3 -->
|
|
78
|
+
<!ENTITY kappa "κ"> <!-- greek small letter kappa,
|
|
79
|
+
U+03BA ISOgrk3 -->
|
|
80
|
+
<!ENTITY lambda "λ"> <!-- greek small letter lambda,
|
|
81
|
+
U+03BB ISOgrk3 -->
|
|
82
|
+
<!ENTITY mu "μ"> <!-- greek small letter mu, U+03BC ISOgrk3 -->
|
|
83
|
+
<!ENTITY nu "ν"> <!-- greek small letter nu, U+03BD ISOgrk3 -->
|
|
84
|
+
<!ENTITY xi "ξ"> <!-- greek small letter xi, U+03BE ISOgrk3 -->
|
|
85
|
+
<!ENTITY omicron "ο"> <!-- greek small letter omicron, U+03BF NEW -->
|
|
86
|
+
<!ENTITY pi "π"> <!-- greek small letter pi, U+03C0 ISOgrk3 -->
|
|
87
|
+
<!ENTITY rho "ρ"> <!-- greek small letter rho, U+03C1 ISOgrk3 -->
|
|
88
|
+
<!ENTITY sigmaf "ς"> <!-- greek small letter final sigma,
|
|
89
|
+
U+03C2 ISOgrk3 -->
|
|
90
|
+
<!ENTITY sigma "σ"> <!-- greek small letter sigma,
|
|
91
|
+
U+03C3 ISOgrk3 -->
|
|
92
|
+
<!ENTITY tau "τ"> <!-- greek small letter tau, U+03C4 ISOgrk3 -->
|
|
93
|
+
<!ENTITY upsilon "υ"> <!-- greek small letter upsilon,
|
|
94
|
+
U+03C5 ISOgrk3 -->
|
|
95
|
+
<!ENTITY phi "φ"> <!-- greek small letter phi, U+03C6 ISOgrk3 -->
|
|
96
|
+
<!ENTITY chi "χ"> <!-- greek small letter chi, U+03C7 ISOgrk3 -->
|
|
97
|
+
<!ENTITY psi "ψ"> <!-- greek small letter psi, U+03C8 ISOgrk3 -->
|
|
98
|
+
<!ENTITY omega "ω"> <!-- greek small letter omega,
|
|
99
|
+
U+03C9 ISOgrk3 -->
|
|
100
|
+
<!ENTITY thetasym "ϑ"> <!-- greek small letter theta symbol,
|
|
101
|
+
U+03D1 NEW -->
|
|
102
|
+
<!ENTITY upsih "ϒ"> <!-- greek upsilon with hook symbol,
|
|
103
|
+
U+03D2 NEW -->
|
|
104
|
+
<!ENTITY piv "ϖ"> <!-- greek pi symbol, U+03D6 ISOgrk3 -->
|
|
105
|
+
|
|
106
|
+
<!-- General Punctuation -->
|
|
107
|
+
<!ENTITY bull "•"> <!-- bullet = black small circle,
|
|
108
|
+
U+2022 ISOpub -->
|
|
109
|
+
<!-- bullet is NOT the same as bullet operator, U+2219 -->
|
|
110
|
+
<!ENTITY hellip "…"> <!-- horizontal ellipsis = three dot leader,
|
|
111
|
+
U+2026 ISOpub -->
|
|
112
|
+
<!ENTITY prime "′"> <!-- prime = minutes = feet, U+2032 ISOtech -->
|
|
113
|
+
<!ENTITY Prime "″"> <!-- double prime = seconds = inches,
|
|
114
|
+
U+2033 ISOtech -->
|
|
115
|
+
<!ENTITY oline "‾"> <!-- overline = spacing overscore,
|
|
116
|
+
U+203E NEW -->
|
|
117
|
+
<!ENTITY frasl "⁄"> <!-- fraction slash, U+2044 NEW -->
|
|
118
|
+
|
|
119
|
+
<!-- Letterlike Symbols -->
|
|
120
|
+
<!ENTITY weierp "℘"> <!-- script capital P = power set
|
|
121
|
+
= Weierstrass p, U+2118 ISOamso -->
|
|
122
|
+
<!ENTITY image "ℑ"> <!-- blackletter capital I = imaginary part,
|
|
123
|
+
U+2111 ISOamso -->
|
|
124
|
+
<!ENTITY real "ℜ"> <!-- blackletter capital R = real part symbol,
|
|
125
|
+
U+211C ISOamso -->
|
|
126
|
+
<!ENTITY trade "™"> <!-- trade mark sign, U+2122 ISOnum -->
|
|
127
|
+
<!ENTITY alefsym "ℵ"> <!-- alef symbol = first transfinite cardinal,
|
|
128
|
+
U+2135 NEW -->
|
|
129
|
+
<!-- alef symbol is NOT the same as hebrew letter alef,
|
|
130
|
+
U+05D0 although the same glyph could be used to depict both characters -->
|
|
131
|
+
|
|
132
|
+
<!-- Arrows -->
|
|
133
|
+
<!ENTITY larr "←"> <!-- leftwards arrow, U+2190 ISOnum -->
|
|
134
|
+
<!ENTITY uarr "↑"> <!-- upwards arrow, U+2191 ISOnum-->
|
|
135
|
+
<!ENTITY rarr "→"> <!-- rightwards arrow, U+2192 ISOnum -->
|
|
136
|
+
<!ENTITY darr "↓"> <!-- downwards arrow, U+2193 ISOnum -->
|
|
137
|
+
<!ENTITY harr "↔"> <!-- left right arrow, U+2194 ISOamsa -->
|
|
138
|
+
<!ENTITY crarr "↵"> <!-- downwards arrow with corner leftwards
|
|
139
|
+
= carriage return, U+21B5 NEW -->
|
|
140
|
+
<!ENTITY lArr "⇐"> <!-- leftwards double arrow, U+21D0 ISOtech -->
|
|
141
|
+
<!-- Unicode does not say that lArr is the same as the 'is implied by' arrow
|
|
142
|
+
but also does not have any other character for that function. So ? lArr can
|
|
143
|
+
be used for 'is implied by' as ISOtech suggests -->
|
|
144
|
+
<!ENTITY uArr "⇑"> <!-- upwards double arrow, U+21D1 ISOamsa -->
|
|
145
|
+
<!ENTITY rArr "⇒"> <!-- rightwards double arrow,
|
|
146
|
+
U+21D2 ISOtech -->
|
|
147
|
+
<!-- Unicode does not say this is the 'implies' character but does not have
|
|
148
|
+
another character with this function so ?
|
|
149
|
+
rArr can be used for 'implies' as ISOtech suggests -->
|
|
150
|
+
<!ENTITY dArr "⇓"> <!-- downwards double arrow, U+21D3 ISOamsa -->
|
|
151
|
+
<!ENTITY hArr "⇔"> <!-- left right double arrow,
|
|
152
|
+
U+21D4 ISOamsa -->
|
|
153
|
+
|
|
154
|
+
<!-- Mathematical Operators -->
|
|
155
|
+
<!ENTITY forall "∀"> <!-- for all, U+2200 ISOtech -->
|
|
156
|
+
<!ENTITY part "∂"> <!-- partial differential, U+2202 ISOtech -->
|
|
157
|
+
<!ENTITY exist "∃"> <!-- there exists, U+2203 ISOtech -->
|
|
158
|
+
<!ENTITY empty "∅"> <!-- empty set = null set = diameter,
|
|
159
|
+
U+2205 ISOamso -->
|
|
160
|
+
<!ENTITY nabla "∇"> <!-- nabla = backward difference,
|
|
161
|
+
U+2207 ISOtech -->
|
|
162
|
+
<!ENTITY isin "∈"> <!-- element of, U+2208 ISOtech -->
|
|
163
|
+
<!ENTITY notin "∉"> <!-- not an element of, U+2209 ISOtech -->
|
|
164
|
+
<!ENTITY ni "∋"> <!-- contains as member, U+220B ISOtech -->
|
|
165
|
+
<!-- should there be a more memorable name than 'ni'? -->
|
|
166
|
+
<!ENTITY prod "∏"> <!-- n-ary product = product sign,
|
|
167
|
+
U+220F ISOamsb -->
|
|
168
|
+
<!-- prod is NOT the same character as U+03A0 'greek capital letter pi' though
|
|
169
|
+
the same glyph might be used for both -->
|
|
170
|
+
<!ENTITY sum "∑"> <!-- n-ary sumation, U+2211 ISOamsb -->
|
|
171
|
+
<!-- sum is NOT the same character as U+03A3 'greek capital letter sigma'
|
|
172
|
+
though the same glyph might be used for both -->
|
|
173
|
+
<!ENTITY minus "−"> <!-- minus sign, U+2212 ISOtech -->
|
|
174
|
+
<!ENTITY lowast "∗"> <!-- asterisk operator, U+2217 ISOtech -->
|
|
175
|
+
<!ENTITY radic "√"> <!-- square root = radical sign,
|
|
176
|
+
U+221A ISOtech -->
|
|
177
|
+
<!ENTITY prop "∝"> <!-- proportional to, U+221D ISOtech -->
|
|
178
|
+
<!ENTITY infin "∞"> <!-- infinity, U+221E ISOtech -->
|
|
179
|
+
<!ENTITY ang "∠"> <!-- angle, U+2220 ISOamso -->
|
|
180
|
+
<!ENTITY and "∧"> <!-- logical and = wedge, U+2227 ISOtech -->
|
|
181
|
+
<!ENTITY or "∨"> <!-- logical or = vee, U+2228 ISOtech -->
|
|
182
|
+
<!ENTITY cap "∩"> <!-- intersection = cap, U+2229 ISOtech -->
|
|
183
|
+
<!ENTITY cup "∪"> <!-- union = cup, U+222A ISOtech -->
|
|
184
|
+
<!ENTITY int "∫"> <!-- integral, U+222B ISOtech -->
|
|
185
|
+
<!ENTITY there4 "∴"> <!-- therefore, U+2234 ISOtech -->
|
|
186
|
+
<!ENTITY sim "∼"> <!-- tilde operator = varies with = similar to,
|
|
187
|
+
U+223C ISOtech -->
|
|
188
|
+
<!-- tilde operator is NOT the same character as the tilde, U+007E,
|
|
189
|
+
although the same glyph might be used to represent both -->
|
|
190
|
+
<!ENTITY cong "≅"> <!-- approximately equal to, U+2245 ISOtech -->
|
|
191
|
+
<!ENTITY asymp "≈"> <!-- almost equal to = asymptotic to,
|
|
192
|
+
U+2248 ISOamsr -->
|
|
193
|
+
<!ENTITY ne "≠"> <!-- not equal to, U+2260 ISOtech -->
|
|
194
|
+
<!ENTITY equiv "≡"> <!-- identical to, U+2261 ISOtech -->
|
|
195
|
+
<!ENTITY le "≤"> <!-- less-than or equal to, U+2264 ISOtech -->
|
|
196
|
+
<!ENTITY ge "≥"> <!-- greater-than or equal to,
|
|
197
|
+
U+2265 ISOtech -->
|
|
198
|
+
<!ENTITY sub "⊂"> <!-- subset of, U+2282 ISOtech -->
|
|
199
|
+
<!ENTITY sup "⊃"> <!-- superset of, U+2283 ISOtech -->
|
|
200
|
+
<!-- note that nsup, 'not a superset of, U+2283' is not covered by the Symbol
|
|
201
|
+
font encoding and is not included. Should it be, for symmetry?
|
|
202
|
+
It is in ISOamsn -->
|
|
203
|
+
<!ENTITY nsub "⊄"> <!-- not a subset of, U+2284 ISOamsn -->
|
|
204
|
+
<!ENTITY sube "⊆"> <!-- subset of or equal to, U+2286 ISOtech -->
|
|
205
|
+
<!ENTITY supe "⊇"> <!-- superset of or equal to,
|
|
206
|
+
U+2287 ISOtech -->
|
|
207
|
+
<!ENTITY oplus "⊕"> <!-- circled plus = direct sum,
|
|
208
|
+
U+2295 ISOamsb -->
|
|
209
|
+
<!ENTITY otimes "⊗"> <!-- circled times = vector product,
|
|
210
|
+
U+2297 ISOamsb -->
|
|
211
|
+
<!ENTITY perp "⊥"> <!-- up tack = orthogonal to = perpendicular,
|
|
212
|
+
U+22A5 ISOtech -->
|
|
213
|
+
<!ENTITY sdot "⋅"> <!-- dot operator, U+22C5 ISOamsb -->
|
|
214
|
+
<!-- dot operator is NOT the same character as U+00B7 middle dot -->
|
|
215
|
+
|
|
216
|
+
<!-- Miscellaneous Technical -->
|
|
217
|
+
<!ENTITY lceil "⌈"> <!-- left ceiling = apl upstile,
|
|
218
|
+
U+2308 ISOamsc -->
|
|
219
|
+
<!ENTITY rceil "⌉"> <!-- right ceiling, U+2309 ISOamsc -->
|
|
220
|
+
<!ENTITY lfloor "⌊"> <!-- left floor = apl downstile,
|
|
221
|
+
U+230A ISOamsc -->
|
|
222
|
+
<!ENTITY rfloor "⌋"> <!-- right floor, U+230B ISOamsc -->
|
|
223
|
+
<!ENTITY lang "〈"> <!-- left-pointing angle bracket = bra,
|
|
224
|
+
U+2329 ISOtech -->
|
|
225
|
+
<!-- lang is NOT the same character as U+003C 'less than'
|
|
226
|
+
or U+2039 'single left-pointing angle quotation mark' -->
|
|
227
|
+
<!ENTITY rang "〉"> <!-- right-pointing angle bracket = ket,
|
|
228
|
+
U+232A ISOtech -->
|
|
229
|
+
<!-- rang is NOT the same character as U+003E 'greater than'
|
|
230
|
+
or U+203A 'single right-pointing angle quotation mark' -->
|
|
231
|
+
|
|
232
|
+
<!-- Geometric Shapes -->
|
|
233
|
+
<!ENTITY loz "◊"> <!-- lozenge, U+25CA ISOpub -->
|
|
234
|
+
|
|
235
|
+
<!-- Miscellaneous Symbols -->
|
|
236
|
+
<!ENTITY spades "♠"> <!-- black spade suit, U+2660 ISOpub -->
|
|
237
|
+
<!-- black here seems to mean filled as opposed to hollow -->
|
|
238
|
+
<!ENTITY clubs "♣"> <!-- black club suit = shamrock,
|
|
239
|
+
U+2663 ISOpub -->
|
|
240
|
+
<!ENTITY hearts "♥"> <!-- black heart suit = valentine,
|
|
241
|
+
U+2665 ISOpub -->
|
|
242
|
+
<!ENTITY diams "♦"> <!-- black diamond suit, U+2666 ISOpub -->
|
data/lib/onix2.rb
ADDED
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
# coding: utf-8
|
|
2
|
+
|
|
3
|
+
require 'active_support'
|
|
4
|
+
require 'bigdecimal'
|
|
5
|
+
require 'cgi'
|
|
6
|
+
require 'singleton'
|
|
7
|
+
require 'representable/xml'
|
|
8
|
+
require 'virtus'
|
|
9
|
+
|
|
10
|
+
module ONIX2
|
|
11
|
+
class Formatters
|
|
12
|
+
|
|
13
|
+
TWO_DIGITS = ->(value, *context) {
|
|
14
|
+
if value.is_a?(Array)
|
|
15
|
+
value.each_with_index do |val, index|
|
|
16
|
+
value[index] = ONIX2::Formatters::two_digits_format(val)
|
|
17
|
+
end
|
|
18
|
+
else
|
|
19
|
+
ONIX2::Formatters::two_digits_format(value)
|
|
20
|
+
end
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
def self.two_digits_format(value)
|
|
24
|
+
if value.nil?
|
|
25
|
+
nil
|
|
26
|
+
elsif value.to_i < 10
|
|
27
|
+
"%02i" % value
|
|
28
|
+
elsif value.to_i > 99
|
|
29
|
+
value.to_s[-2,2]
|
|
30
|
+
else
|
|
31
|
+
value.to_s
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
YYYYMMDD = ->(value, *context) { value.strftime("%Y%m%d") if value.respond_to? :strftime }
|
|
36
|
+
DECIMAL = ->(value, *context) {
|
|
37
|
+
case value
|
|
38
|
+
when nil then nil
|
|
39
|
+
when BigDecimal then value.to_s("F")
|
|
40
|
+
else value.to_s
|
|
41
|
+
end
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
# core files
|
|
47
|
+
# - ordering is important, classes need to be defined before any
|
|
48
|
+
# other class can use them
|
|
49
|
+
autoload :SenderIdentifier, "onix2/sender_identifier"
|
|
50
|
+
autoload :AddresseeIdentifier, "onix2/addressee_identifier"
|
|
51
|
+
autoload :Header, "onix2/header"
|
|
52
|
+
autoload :ProductIdentifier, "onix2/product_identifier"
|
|
53
|
+
autoload :SeriesIdentifier, "onix2/series_identifier"
|
|
54
|
+
autoload :Series, "onix2/series"
|
|
55
|
+
autoload :Title, "onix2/title"
|
|
56
|
+
autoload :Website, "onix2/website"
|
|
57
|
+
autoload :Contributor, "onix2/contributor"
|
|
58
|
+
autoload :Language, "onix2/language"
|
|
59
|
+
autoload :Subject, "onix2/subject"
|
|
60
|
+
autoload :AudienceRange, "onix2/audience_range"
|
|
61
|
+
autoload :Imprint, "onix2/imprint"
|
|
62
|
+
autoload :Publisher, "onix2/publisher"
|
|
63
|
+
autoload :OtherText, "onix2/other_text"
|
|
64
|
+
autoload :MediaFile, "onix2/media_file"
|
|
65
|
+
autoload :SalesRestriction, "onix2/sales_restriction"
|
|
66
|
+
autoload :Stock, "onix2/stock"
|
|
67
|
+
autoload :DiscountCoded, "onix2/discount_coded"
|
|
68
|
+
autoload :Price, "onix2/price"
|
|
69
|
+
autoload :SupplyDetail, "onix2/supply_detail"
|
|
70
|
+
autoload :MarketRepresentation, "onix2/market_representation"
|
|
71
|
+
autoload :Measure, "onix2/measure"
|
|
72
|
+
autoload :Product, "onix2/product"
|
|
73
|
+
autoload :Reader, "onix2/reader"
|
|
74
|
+
autoload :Writer, "onix2/writer"
|
|
75
|
+
autoload :SalesRights, "onix2/sales_rights"
|
|
76
|
+
|
|
77
|
+
# product wrappers
|
|
78
|
+
autoload :SimpleProduct, "onix2/simple_product"
|
|
79
|
+
autoload :APAProduct, "onix2/apa_product"
|
|
80
|
+
|
|
81
|
+
# misc
|
|
82
|
+
autoload :Lists, "onix2/lists"
|
|
83
|
+
autoload :CodeListExtractor, "onix2/code_list_extractor"
|
|
84
|
+
|
|
85
|
+
end
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# coding: utf-8
|
|
2
|
+
|
|
3
|
+
module ONIX2
|
|
4
|
+
class AddresseeIdentifier
|
|
5
|
+
include Virtus.model
|
|
6
|
+
|
|
7
|
+
attribute :addressee_id_type, Integer
|
|
8
|
+
attribute :id_type_name
|
|
9
|
+
attribute :id_value
|
|
10
|
+
|
|
11
|
+
def to_xml
|
|
12
|
+
AddresseeIdentifierRepresenter.new(self).to_xml
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def self.from_xml(data)
|
|
16
|
+
AddresseeIdentifierRepresenter.new(self.new).from_xml(data)
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
class AddresseeIdentifierRepresenter < Representable::Decorator
|
|
21
|
+
include Representable::XML
|
|
22
|
+
|
|
23
|
+
self.representation_wrap = :AddresseeIdentifier
|
|
24
|
+
|
|
25
|
+
property :addressee_id_type, as: "AddresseeIDType", render_filter: ::ONIX2::Formatters::TWO_DIGITS
|
|
26
|
+
property :id_type_name, as: "IDTypeName"
|
|
27
|
+
property :id_value, as: "IDValue"
|
|
28
|
+
end
|
|
29
|
+
end
|
|
@@ -0,0 +1,785 @@
|
|
|
1
|
+
# coding: utf-8
|
|
2
|
+
|
|
3
|
+
module ONIX2
|
|
4
|
+
class APAProduct < SimpleProduct
|
|
5
|
+
|
|
6
|
+
delegate :record_reference, :record_reference=
|
|
7
|
+
delegate :notification_type, :notification_type=
|
|
8
|
+
delegate :product_form, :product_form=
|
|
9
|
+
delegate :edition, :edition=
|
|
10
|
+
delegate :number_of_pages, :number_of_pages=
|
|
11
|
+
delegate :bic_main_subject, :bic_main_subject=
|
|
12
|
+
delegate :publishing_status, :publishing_status=
|
|
13
|
+
delegate :publication_date, :publication_date=
|
|
14
|
+
|
|
15
|
+
def measurement_system
|
|
16
|
+
@measurement_system ||= :metric
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def measurement_system=(value)
|
|
20
|
+
if value == :metric || value == :imperial
|
|
21
|
+
@measurement_system = value
|
|
22
|
+
else
|
|
23
|
+
raise ArgumentError, "#{value} is not a recognised measurement system"
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
# retrieve the current EAN
|
|
28
|
+
def ean
|
|
29
|
+
identifier(3).try(:id_value)
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
# set a new EAN
|
|
33
|
+
def ean=(isbn)
|
|
34
|
+
identifier_set(3, isbn)
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
# retrieve the proprietary ID
|
|
38
|
+
def proprietary_id
|
|
39
|
+
identifier(1).try(:id_value)
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
# set a new proprietary ID
|
|
43
|
+
def proprietary_id=(isbn)
|
|
44
|
+
identifier_set(1, isbn)
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
# retrieve the current ISBN 10
|
|
48
|
+
def isbn10
|
|
49
|
+
identifier(2).try(:id_value)
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
# set a new ISBN 10
|
|
53
|
+
def isbn10=(isbn)
|
|
54
|
+
identifier_set(2, isbn)
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
# retrieve the current ISBN 13
|
|
58
|
+
def isbn13
|
|
59
|
+
identifier(15).try(:id_value)
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
# set a new ISBN 13
|
|
63
|
+
def isbn13=(isbn)
|
|
64
|
+
identifier_set(15, isbn)
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
# retrieve the current title
|
|
68
|
+
def title
|
|
69
|
+
composite = product.titles.first
|
|
70
|
+
if composite.nil?
|
|
71
|
+
nil
|
|
72
|
+
else
|
|
73
|
+
composite.title_text || composite.title_without_prefix
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
# set a new title
|
|
78
|
+
def title=(str)
|
|
79
|
+
composite = product.titles.first
|
|
80
|
+
if composite.nil?
|
|
81
|
+
composite = ONIX2::Title.new
|
|
82
|
+
composite.title_type = 1
|
|
83
|
+
product.titles << composite
|
|
84
|
+
end
|
|
85
|
+
composite.title_text = str
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
# retrieve the current subtitle
|
|
89
|
+
def subtitle
|
|
90
|
+
composite = product.titles.first
|
|
91
|
+
if composite.nil?
|
|
92
|
+
nil
|
|
93
|
+
else
|
|
94
|
+
composite.subtitle
|
|
95
|
+
end
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
# set a new subtitle
|
|
99
|
+
def subtitle=(str)
|
|
100
|
+
composite = product.titles.first
|
|
101
|
+
if composite.nil?
|
|
102
|
+
composite = ONIX2::Title.new
|
|
103
|
+
composite.title_type = 1
|
|
104
|
+
product.titles << composite
|
|
105
|
+
end
|
|
106
|
+
composite.subtitle = str
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
def series
|
|
110
|
+
composite = product.series.first
|
|
111
|
+
composite.try(:title_of_series)
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
def series=(val)
|
|
115
|
+
composite = product.series.first
|
|
116
|
+
if composite.nil?
|
|
117
|
+
composite = ONIX2::Series.new
|
|
118
|
+
product.series << composite
|
|
119
|
+
end
|
|
120
|
+
composite.title_of_series = val.to_s
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
# retrieve the current publisher website for this particular product
|
|
124
|
+
def publisher_website
|
|
125
|
+
website(2).try(:website_link)
|
|
126
|
+
end
|
|
127
|
+
|
|
128
|
+
# set a new publisher website for this particular product
|
|
129
|
+
def publisher_website=(str)
|
|
130
|
+
website_set(2, str)
|
|
131
|
+
end
|
|
132
|
+
|
|
133
|
+
# retrieve the current supplier website for this particular product
|
|
134
|
+
def supplier_website
|
|
135
|
+
website(12).try(:website_link)
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
# set a new supplier website for this particular product
|
|
139
|
+
def supplier_website=(str)
|
|
140
|
+
website_set(12, str)
|
|
141
|
+
end
|
|
142
|
+
|
|
143
|
+
# retrieve an array of all contributors
|
|
144
|
+
def contributors
|
|
145
|
+
product.contributors.collect { |contrib| contrib.person_name_inverted || contrib.person_name}
|
|
146
|
+
end
|
|
147
|
+
|
|
148
|
+
# set a new contributor to this product
|
|
149
|
+
# str should be the contributors name inverted (Healy, James)
|
|
150
|
+
def add_contributor(str, role = "A01")
|
|
151
|
+
contrib = ::ONIX2::Contributor.new
|
|
152
|
+
contrib.sequence_number = product.contributors.size + 1
|
|
153
|
+
contrib.contributor_role = role
|
|
154
|
+
contrib.person_name_inverted = str
|
|
155
|
+
product.contributors << contrib
|
|
156
|
+
end
|
|
157
|
+
|
|
158
|
+
# return an array of BIC subjects for this title
|
|
159
|
+
# could be version 1 or version 2, most ONIX files don't
|
|
160
|
+
# specifiy
|
|
161
|
+
def bic_subjects
|
|
162
|
+
subjects = product.subjects.select { |sub| sub.subject_scheme_id.to_i == 12 }
|
|
163
|
+
subjects.collect { |sub| sub.subject_code}
|
|
164
|
+
end
|
|
165
|
+
|
|
166
|
+
# add a BIC subject code to the product
|
|
167
|
+
def add_bic_subject(code)
|
|
168
|
+
add_subject code, "12"
|
|
169
|
+
end
|
|
170
|
+
|
|
171
|
+
# return an array of BISAC subjects for this title
|
|
172
|
+
def bisac_subjects
|
|
173
|
+
subjects = product.subjects.select { |sub| sub.subject_scheme_id.to_i == 10 }
|
|
174
|
+
subjects.collect { |sub| sub.subject_code}
|
|
175
|
+
end
|
|
176
|
+
|
|
177
|
+
# add a BISAC subject code to the product
|
|
178
|
+
def add_bisac_subject(code)
|
|
179
|
+
add_subject code, "10"
|
|
180
|
+
end
|
|
181
|
+
|
|
182
|
+
# retrieve the url to the product cover image
|
|
183
|
+
def cover_url
|
|
184
|
+
media_file(4).try(:media_file_link)
|
|
185
|
+
end
|
|
186
|
+
|
|
187
|
+
# set the url to the product cover image
|
|
188
|
+
def cover_url=(url)
|
|
189
|
+
# 4 - cover image
|
|
190
|
+
# 1 - URI
|
|
191
|
+
media_file_set(4,1,url)
|
|
192
|
+
end
|
|
193
|
+
|
|
194
|
+
# retrieve the url to the high quality product cover image
|
|
195
|
+
def cover_url_hq
|
|
196
|
+
media_file(6).try(:media_file_link)
|
|
197
|
+
end
|
|
198
|
+
|
|
199
|
+
# set the url to the high quality product cover image
|
|
200
|
+
def cover_url_hq=(url)
|
|
201
|
+
# 6 - hq cover image
|
|
202
|
+
# 1 - URI
|
|
203
|
+
media_file_set(6,1,url)
|
|
204
|
+
end
|
|
205
|
+
|
|
206
|
+
# retrieve the url to the product thumbnail
|
|
207
|
+
def thumbnail_url
|
|
208
|
+
media_file(7).try(:media_file_link)
|
|
209
|
+
end
|
|
210
|
+
|
|
211
|
+
# set the url to the product cover image
|
|
212
|
+
def thumbnail_url=(url)
|
|
213
|
+
# 7 - thumbnail image
|
|
214
|
+
# 1 - URI
|
|
215
|
+
media_file_set(7,1,url)
|
|
216
|
+
end
|
|
217
|
+
|
|
218
|
+
# retrieve the main description
|
|
219
|
+
def main_description
|
|
220
|
+
other_text(1).try(:text)
|
|
221
|
+
end
|
|
222
|
+
|
|
223
|
+
# set the main description
|
|
224
|
+
def main_description=(t)
|
|
225
|
+
other_text_set(1,t)
|
|
226
|
+
end
|
|
227
|
+
|
|
228
|
+
# retrieve the short description
|
|
229
|
+
def short_description
|
|
230
|
+
other_text(2).try(:text)
|
|
231
|
+
end
|
|
232
|
+
|
|
233
|
+
# set the short description
|
|
234
|
+
def short_description=(t)
|
|
235
|
+
other_text_set(2,t)
|
|
236
|
+
end
|
|
237
|
+
|
|
238
|
+
# retrieve the long description
|
|
239
|
+
def long_description
|
|
240
|
+
other_text(3).try(:text)
|
|
241
|
+
end
|
|
242
|
+
|
|
243
|
+
# set the long description
|
|
244
|
+
def long_description=(t)
|
|
245
|
+
other_text_set(3,t)
|
|
246
|
+
end
|
|
247
|
+
|
|
248
|
+
# retrieve the imprint
|
|
249
|
+
def imprint
|
|
250
|
+
composite = product.imprints.first
|
|
251
|
+
composite ? composite.imprint_name : nil
|
|
252
|
+
end
|
|
253
|
+
|
|
254
|
+
# set a new imprint
|
|
255
|
+
def imprint=(str)
|
|
256
|
+
composite = product.imprints.first
|
|
257
|
+
if composite.nil?
|
|
258
|
+
composite = ONIX2::Imprint.new
|
|
259
|
+
product.imprints << composite
|
|
260
|
+
end
|
|
261
|
+
composite.imprint_name = str
|
|
262
|
+
end
|
|
263
|
+
|
|
264
|
+
# retrieve the publisher
|
|
265
|
+
def publisher
|
|
266
|
+
publisher_get(1).try(:publisher_name)
|
|
267
|
+
end
|
|
268
|
+
|
|
269
|
+
# set a new publisher
|
|
270
|
+
def publisher=(str)
|
|
271
|
+
publisher_set(1, str)
|
|
272
|
+
end
|
|
273
|
+
|
|
274
|
+
# retrieve the sales restriction type
|
|
275
|
+
def sales_restriction_type
|
|
276
|
+
composite = product.sales_restrictions.first
|
|
277
|
+
composite.nil? ? nil : composite.imprint_name
|
|
278
|
+
end
|
|
279
|
+
|
|
280
|
+
# set a new sales restriction type
|
|
281
|
+
def sales_restriction_type=(type)
|
|
282
|
+
composite = product.sales_restrictions.first
|
|
283
|
+
if composite.nil?
|
|
284
|
+
composite = ONIX2::SalesRestriction.new
|
|
285
|
+
product.sales_restrictions << composite
|
|
286
|
+
end
|
|
287
|
+
composite.sales_restriction_type = type
|
|
288
|
+
end
|
|
289
|
+
|
|
290
|
+
# retrieve the supplier name
|
|
291
|
+
def supplier_name
|
|
292
|
+
composite = product.supply_details.first
|
|
293
|
+
composite.nil? ? nil : composite.supplier_name
|
|
294
|
+
end
|
|
295
|
+
|
|
296
|
+
# set a new supplier name
|
|
297
|
+
def supplier_name=(str)
|
|
298
|
+
composite = find_or_create_supply_detail
|
|
299
|
+
composite.supplier_name = str
|
|
300
|
+
end
|
|
301
|
+
|
|
302
|
+
# retrieve the supplier phone number
|
|
303
|
+
def supplier_phone
|
|
304
|
+
composite = product.supply_details.first
|
|
305
|
+
composite.nil? ? nil : composite.telephone_number
|
|
306
|
+
end
|
|
307
|
+
|
|
308
|
+
# set a new supplier phone number
|
|
309
|
+
def supplier_phone=(str)
|
|
310
|
+
composite = find_or_create_supply_detail
|
|
311
|
+
composite.telephone_number = str
|
|
312
|
+
end
|
|
313
|
+
|
|
314
|
+
# retrieve the supplier fax number
|
|
315
|
+
def supplier_fax
|
|
316
|
+
composite = product.supply_details.first
|
|
317
|
+
composite.nil? ? nil : composite.fax_number
|
|
318
|
+
end
|
|
319
|
+
|
|
320
|
+
# set a new supplier fax number
|
|
321
|
+
def supplier_fax=(str)
|
|
322
|
+
composite = find_or_create_supply_detail
|
|
323
|
+
composite.fax_number = str
|
|
324
|
+
end
|
|
325
|
+
|
|
326
|
+
# retrieve the supplier email address
|
|
327
|
+
def supplier_email
|
|
328
|
+
composite = product.supply_details.first
|
|
329
|
+
composite.nil? ? nil : composite.email_address
|
|
330
|
+
end
|
|
331
|
+
|
|
332
|
+
# set a new supplier email address
|
|
333
|
+
def supplier_email=(str)
|
|
334
|
+
composite = find_or_create_supply_detail
|
|
335
|
+
composite.email_address = str
|
|
336
|
+
end
|
|
337
|
+
|
|
338
|
+
# retrieve the supply country code
|
|
339
|
+
def supply_country
|
|
340
|
+
composite = product.supply_details.first
|
|
341
|
+
composite.nil? ? nil : composite.supply_to_country
|
|
342
|
+
end
|
|
343
|
+
|
|
344
|
+
# set a new supply country code
|
|
345
|
+
def supply_country=(str)
|
|
346
|
+
composite = find_or_create_supply_detail
|
|
347
|
+
composite.supply_to_country = str
|
|
348
|
+
end
|
|
349
|
+
|
|
350
|
+
# retrieve the product availability code
|
|
351
|
+
def product_availability
|
|
352
|
+
composite = product.supply_details.first
|
|
353
|
+
composite.nil? ? nil : composite.product_availability
|
|
354
|
+
end
|
|
355
|
+
|
|
356
|
+
# set a new product availability
|
|
357
|
+
def product_availability=(num)
|
|
358
|
+
composite = find_or_create_supply_detail
|
|
359
|
+
composite.product_availability = num
|
|
360
|
+
end
|
|
361
|
+
|
|
362
|
+
# retrieve the number in stock
|
|
363
|
+
def on_hand
|
|
364
|
+
supply = find_or_create_supply_detail
|
|
365
|
+
composite = supply.stock.first
|
|
366
|
+
if composite.nil?
|
|
367
|
+
composite = ONIX2::Stock.new
|
|
368
|
+
supply.stock << composite
|
|
369
|
+
end
|
|
370
|
+
composite.on_hand
|
|
371
|
+
end
|
|
372
|
+
|
|
373
|
+
# set a new in stock quantity
|
|
374
|
+
def on_hand=(num)
|
|
375
|
+
supply = find_or_create_supply_detail
|
|
376
|
+
composite = supply.stock.first
|
|
377
|
+
if composite.nil?
|
|
378
|
+
composite = ONIX2::Stock.new
|
|
379
|
+
supply.stock << composite
|
|
380
|
+
end
|
|
381
|
+
composite.on_hand = num
|
|
382
|
+
end
|
|
383
|
+
|
|
384
|
+
# retrieve the number on order
|
|
385
|
+
def on_order
|
|
386
|
+
supply = find_or_create_supply_detail
|
|
387
|
+
composite = supply.stock.first
|
|
388
|
+
if composite.nil?
|
|
389
|
+
composite = ONIX2::Stock.new
|
|
390
|
+
supply.stock << composite
|
|
391
|
+
end
|
|
392
|
+
composite.on_order
|
|
393
|
+
end
|
|
394
|
+
|
|
395
|
+
# set a new on order quantity
|
|
396
|
+
def on_order=(num)
|
|
397
|
+
supply = find_or_create_supply_detail
|
|
398
|
+
composite = supply.stock.first
|
|
399
|
+
if composite.nil?
|
|
400
|
+
composite = ONIX2::Stock.new
|
|
401
|
+
supply.stock << composite
|
|
402
|
+
end
|
|
403
|
+
composite.on_order = num
|
|
404
|
+
end
|
|
405
|
+
|
|
406
|
+
# retrieve the supplier phone number
|
|
407
|
+
def pack_quantity
|
|
408
|
+
composite = product.supply_details.first
|
|
409
|
+
composite.nil? ? nil : composite.pack_quantity
|
|
410
|
+
end
|
|
411
|
+
|
|
412
|
+
# set a new supplier phone number
|
|
413
|
+
def pack_quantity=(val)
|
|
414
|
+
composite = find_or_create_supply_detail
|
|
415
|
+
composite.pack_quantity = val.to_i
|
|
416
|
+
end
|
|
417
|
+
|
|
418
|
+
# retrieve the rrp excluding any sales tax
|
|
419
|
+
def rrp_exc_sales_tax
|
|
420
|
+
price_get(1).try(:price_amount)
|
|
421
|
+
end
|
|
422
|
+
|
|
423
|
+
# set the rrp excluding any sales tax
|
|
424
|
+
def rrp_exc_sales_tax=(num)
|
|
425
|
+
price_set(1, num)
|
|
426
|
+
end
|
|
427
|
+
|
|
428
|
+
# retrieve the rrp including any sales tax
|
|
429
|
+
def rrp_inc_sales_tax
|
|
430
|
+
price_get(2).try(:price_amount)
|
|
431
|
+
end
|
|
432
|
+
|
|
433
|
+
# set the rrp including any sales tax
|
|
434
|
+
def rrp_inc_sales_tax=(num)
|
|
435
|
+
price_set(2, num)
|
|
436
|
+
end
|
|
437
|
+
|
|
438
|
+
# retrieve the nett price including any sales tax
|
|
439
|
+
def nett_inc_sales_tax
|
|
440
|
+
price_get(7).try(:price_amount)
|
|
441
|
+
end
|
|
442
|
+
|
|
443
|
+
# set the rrp including any sales tax
|
|
444
|
+
def nett_inc_sales_tax=(num)
|
|
445
|
+
price_set(7, num)
|
|
446
|
+
end
|
|
447
|
+
|
|
448
|
+
# retrieve the discount code that describes the rrp in this file
|
|
449
|
+
def proprietry_discount_code_for_rrp
|
|
450
|
+
price = price_get(2)
|
|
451
|
+
return nil if price.nil?
|
|
452
|
+
|
|
453
|
+
discount = price.discounts_coded.find { |disc| disc.discount_code_type == 2 }
|
|
454
|
+
discount.try(:discount_code)
|
|
455
|
+
end
|
|
456
|
+
|
|
457
|
+
# set the discount code that describes the rrp in this file
|
|
458
|
+
def proprietry_discount_code_for_rrp=(code)
|
|
459
|
+
price = price_get(2)
|
|
460
|
+
if price.nil?
|
|
461
|
+
self.rrp_inc_sales_tax = 0
|
|
462
|
+
price = price_get(2)
|
|
463
|
+
end
|
|
464
|
+
|
|
465
|
+
discount = price.discounts_coded.find { |disc| disc.discount_code_type == 2 }
|
|
466
|
+
|
|
467
|
+
if discount.nil?
|
|
468
|
+
discount = ONIX2::DiscountCoded.new
|
|
469
|
+
discount.discount_code_type = 2
|
|
470
|
+
price.discounts_coded << discount
|
|
471
|
+
end
|
|
472
|
+
discount.discount_code = code
|
|
473
|
+
end
|
|
474
|
+
|
|
475
|
+
# just get the first price we can find, regardless of the type.
|
|
476
|
+
# useful as a backup for reading files from that don't contain a type
|
|
477
|
+
def price
|
|
478
|
+
price_get(nil).try(:price_amount)
|
|
479
|
+
end
|
|
480
|
+
|
|
481
|
+
# retrieve the height of the product
|
|
482
|
+
#
|
|
483
|
+
# If APAProduct#measurement_system is metric, these will be in mm, otherwise they
|
|
484
|
+
# will be in inches.
|
|
485
|
+
#
|
|
486
|
+
def height
|
|
487
|
+
# TODO: auto unit conversion
|
|
488
|
+
measurement(1).try(:measurement)
|
|
489
|
+
end
|
|
490
|
+
|
|
491
|
+
# set the height of the book
|
|
492
|
+
#
|
|
493
|
+
# If APAProduct#measurement_system is metric, this should be in mm, otherwise it
|
|
494
|
+
# will be in inches.
|
|
495
|
+
#
|
|
496
|
+
def height=(value)
|
|
497
|
+
if measurement_system == :metric
|
|
498
|
+
measurement_set(1,value, "mm")
|
|
499
|
+
elsif measurement_system == :imperial
|
|
500
|
+
measurement_set(1,value, "in")
|
|
501
|
+
end
|
|
502
|
+
end
|
|
503
|
+
|
|
504
|
+
# retrieve the width of the product
|
|
505
|
+
#
|
|
506
|
+
# If APAProduct#measurement_system is metric, these will be in mm, otherwise they
|
|
507
|
+
# will be in inches.
|
|
508
|
+
#
|
|
509
|
+
def width
|
|
510
|
+
# TODO: auto unit conversion
|
|
511
|
+
measurement(2).try(:measurement)
|
|
512
|
+
end
|
|
513
|
+
|
|
514
|
+
# set the width of the product
|
|
515
|
+
#
|
|
516
|
+
# If APAProduct#measurement_system is metric, this should be in mm, otherwise it
|
|
517
|
+
# will be in inches.
|
|
518
|
+
#
|
|
519
|
+
def width=(value)
|
|
520
|
+
if measurement_system == :metric
|
|
521
|
+
measurement_set(2,value, "mm")
|
|
522
|
+
elsif measurement_system == :imperial
|
|
523
|
+
measurement_set(2,value, "in")
|
|
524
|
+
end
|
|
525
|
+
end
|
|
526
|
+
|
|
527
|
+
# retrieve the weight of the product
|
|
528
|
+
#
|
|
529
|
+
# If APAProduct#measurement_system is metric, these will be in grams, otherwise they
|
|
530
|
+
# will be in ounces.
|
|
531
|
+
#
|
|
532
|
+
def weight
|
|
533
|
+
# TODO: auto unit conversion
|
|
534
|
+
measurement(8).try(:measurement)
|
|
535
|
+
end
|
|
536
|
+
|
|
537
|
+
# set the weight of the product
|
|
538
|
+
#
|
|
539
|
+
# If APAProduct#measurement_system is metric, this should be in grams, otherwise it
|
|
540
|
+
# will be in ounces.
|
|
541
|
+
#
|
|
542
|
+
def weight=(value)
|
|
543
|
+
if measurement_system == :metric
|
|
544
|
+
measurement_set(8,value, "gr")
|
|
545
|
+
elsif measurement_system == :imperial
|
|
546
|
+
measurement_set(8,value, "oz")
|
|
547
|
+
end
|
|
548
|
+
end
|
|
549
|
+
|
|
550
|
+
# retrieve the thickness of the product
|
|
551
|
+
#
|
|
552
|
+
# If APAProduct#measurement_system is metric, these will be in mm, otherwise they
|
|
553
|
+
# will be in inches.
|
|
554
|
+
#
|
|
555
|
+
def thickness
|
|
556
|
+
# TODO: auto unit conversion
|
|
557
|
+
measurement(3).try(:measurement)
|
|
558
|
+
end
|
|
559
|
+
|
|
560
|
+
# set the thickness of the product
|
|
561
|
+
#
|
|
562
|
+
# If APAProduct#measurement_system is metric, this should be in mm, otherwise it
|
|
563
|
+
# will be in inches.
|
|
564
|
+
#
|
|
565
|
+
def thickness=(value)
|
|
566
|
+
if measurement_system == :metric
|
|
567
|
+
measurement_set(3,value, "mm")
|
|
568
|
+
elsif measurement_system == :imperial
|
|
569
|
+
measurement_set(3,value, "in")
|
|
570
|
+
end
|
|
571
|
+
end
|
|
572
|
+
|
|
573
|
+
def agent_name
|
|
574
|
+
reps = product.market_representations.first
|
|
575
|
+
return nil if reps.nil?
|
|
576
|
+
reps.agent_name
|
|
577
|
+
end
|
|
578
|
+
|
|
579
|
+
def agent_name=(value)
|
|
580
|
+
reps = product.market_representations.first
|
|
581
|
+
if reps.nil?
|
|
582
|
+
reps = ONIX2::MarketRepresentation.new
|
|
583
|
+
product.market_representations << reps
|
|
584
|
+
end
|
|
585
|
+
reps.agent_name = value.to_s
|
|
586
|
+
end
|
|
587
|
+
|
|
588
|
+
def market_country
|
|
589
|
+
reps = product.market_representations.first
|
|
590
|
+
return nil if reps.nil?
|
|
591
|
+
reps.market_country
|
|
592
|
+
end
|
|
593
|
+
|
|
594
|
+
def market_country=(value)
|
|
595
|
+
reps = product.market_representations.first
|
|
596
|
+
if reps.nil?
|
|
597
|
+
reps = ONIX2::MarketRepresentation.new
|
|
598
|
+
product.market_representations << reps
|
|
599
|
+
end
|
|
600
|
+
reps.market_country = value.to_s
|
|
601
|
+
end
|
|
602
|
+
|
|
603
|
+
def market_publishing_status
|
|
604
|
+
reps = product.market_representations.first
|
|
605
|
+
return nil if reps.nil?
|
|
606
|
+
reps.market_publishing_status
|
|
607
|
+
end
|
|
608
|
+
|
|
609
|
+
def market_publishing_status=(value)
|
|
610
|
+
reps = product.market_representations.first
|
|
611
|
+
if reps.nil?
|
|
612
|
+
reps = ONIX2::MarketRepresentation.new
|
|
613
|
+
product.market_representations << reps
|
|
614
|
+
end
|
|
615
|
+
reps.market_publishing_status = value.to_i
|
|
616
|
+
end
|
|
617
|
+
|
|
618
|
+
private
|
|
619
|
+
|
|
620
|
+
# add a new subject to this product
|
|
621
|
+
# str should be the subject code
|
|
622
|
+
# type should be the code for the subject scheme you're using. See ONIX codelist 27.
|
|
623
|
+
# 12 is BIC
|
|
624
|
+
def add_subject(str, type = "12")
|
|
625
|
+
subject = ::ONIX2::Subject.new
|
|
626
|
+
subject.subject_scheme_id = type.to_i
|
|
627
|
+
subject.subject_code = str
|
|
628
|
+
product.subjects << subject
|
|
629
|
+
end
|
|
630
|
+
|
|
631
|
+
def find_or_create_supply_detail
|
|
632
|
+
composite = product.supply_details.first
|
|
633
|
+
if composite.nil?
|
|
634
|
+
composite = ONIX2::SupplyDetail.new
|
|
635
|
+
product.supply_details << composite
|
|
636
|
+
end
|
|
637
|
+
composite
|
|
638
|
+
end
|
|
639
|
+
|
|
640
|
+
# retrieve the value of a particular ID
|
|
641
|
+
def identifier(type)
|
|
642
|
+
product.product_identifiers.find { |id| id.product_id_type == type }
|
|
643
|
+
end
|
|
644
|
+
|
|
645
|
+
# set the value of a particular ID
|
|
646
|
+
def identifier_set(type, value)
|
|
647
|
+
isbn_id = identifier(type)
|
|
648
|
+
|
|
649
|
+
# create a new isbn record if we need to
|
|
650
|
+
if isbn_id.nil?
|
|
651
|
+
isbn_id = ONIX2::ProductIdentifier.new
|
|
652
|
+
isbn_id.product_id_type = type
|
|
653
|
+
product.product_identifiers << isbn_id
|
|
654
|
+
end
|
|
655
|
+
|
|
656
|
+
isbn_id.id_value = value
|
|
657
|
+
end
|
|
658
|
+
|
|
659
|
+
# retrieve the value of a particular measurement
|
|
660
|
+
def measurement(type)
|
|
661
|
+
product.measurements.find { |m| m.measure_type_code == type }
|
|
662
|
+
end
|
|
663
|
+
|
|
664
|
+
# set the value of a particular measurement
|
|
665
|
+
def measurement_set(type, value, unit)
|
|
666
|
+
measure = measurement(type)
|
|
667
|
+
|
|
668
|
+
# create a new isbn record if we need to
|
|
669
|
+
if measure.nil?
|
|
670
|
+
measure = ONIX2::Measure.new
|
|
671
|
+
measure.measure_type_code = type
|
|
672
|
+
product.measurements << measure
|
|
673
|
+
end
|
|
674
|
+
|
|
675
|
+
# store the new value
|
|
676
|
+
measure.measurement = value
|
|
677
|
+
measure.measure_unit_code = unit.to_s
|
|
678
|
+
end
|
|
679
|
+
|
|
680
|
+
# retrieve the value of a particular media file
|
|
681
|
+
def media_file(type)
|
|
682
|
+
product.media_files.find { |m| m.media_file_type_code == type }
|
|
683
|
+
end
|
|
684
|
+
|
|
685
|
+
# set the value of a particular ID
|
|
686
|
+
def media_file_set(type, link_type, value)
|
|
687
|
+
media = media_file(type)
|
|
688
|
+
|
|
689
|
+
# create a new isbn record if we need to
|
|
690
|
+
if media.nil?
|
|
691
|
+
media = ONIX2::MediaFile.new
|
|
692
|
+
media.media_file_type_code = type
|
|
693
|
+
media.media_file_link_type_code = link_type
|
|
694
|
+
product.media_files << media
|
|
695
|
+
end
|
|
696
|
+
|
|
697
|
+
# store the new value
|
|
698
|
+
media.media_file_link = value.to_s
|
|
699
|
+
end
|
|
700
|
+
|
|
701
|
+
# retrieve the value of a particular price
|
|
702
|
+
def price_get(type)
|
|
703
|
+
supply = find_or_create_supply_detail
|
|
704
|
+
if type.nil?
|
|
705
|
+
supply.prices.first
|
|
706
|
+
else
|
|
707
|
+
supply.prices.find { |p| p.price_type_code == type }
|
|
708
|
+
end
|
|
709
|
+
end
|
|
710
|
+
|
|
711
|
+
# set the value of a particular price
|
|
712
|
+
def price_set(type, num)
|
|
713
|
+
p = price_get(type)
|
|
714
|
+
|
|
715
|
+
# create a new isbn record if we need to
|
|
716
|
+
if p.nil?
|
|
717
|
+
supply = find_or_create_supply_detail
|
|
718
|
+
p = ONIX2::Price.new
|
|
719
|
+
p.price_type_code = type
|
|
720
|
+
supply.prices << p
|
|
721
|
+
end
|
|
722
|
+
|
|
723
|
+
# store the new value
|
|
724
|
+
p.price_amount = num
|
|
725
|
+
end
|
|
726
|
+
|
|
727
|
+
# retrieve the value of a particular publisher
|
|
728
|
+
def publisher_get(type)
|
|
729
|
+
product.publishers.find { |pub| pub.publishing_role == type }
|
|
730
|
+
end
|
|
731
|
+
|
|
732
|
+
# set the value of a particular ID
|
|
733
|
+
def publisher_set(type, value)
|
|
734
|
+
pub = publisher_get(type)
|
|
735
|
+
|
|
736
|
+
# create a new isbn record if we need to
|
|
737
|
+
if pub.nil?
|
|
738
|
+
pub = ONIX2::Publisher.new
|
|
739
|
+
pub.publishing_role = type
|
|
740
|
+
product.publishers << pub
|
|
741
|
+
end
|
|
742
|
+
|
|
743
|
+
# store the new value
|
|
744
|
+
pub.publisher_name = value.to_s
|
|
745
|
+
end
|
|
746
|
+
|
|
747
|
+
# retrieve the value of a particular other text value
|
|
748
|
+
def other_text(type)
|
|
749
|
+
product.text.find { |t| t.text_type_code == type }
|
|
750
|
+
end
|
|
751
|
+
|
|
752
|
+
# set the value of a particular other text value
|
|
753
|
+
def other_text_set(type, value)
|
|
754
|
+
text = other_text(type)
|
|
755
|
+
|
|
756
|
+
if text.nil?
|
|
757
|
+
text = ONIX2::OtherText.new
|
|
758
|
+
text.text_type_code = type
|
|
759
|
+
product.text << text
|
|
760
|
+
end
|
|
761
|
+
|
|
762
|
+
# store the new value
|
|
763
|
+
text.text = value.to_s
|
|
764
|
+
end
|
|
765
|
+
|
|
766
|
+
# retrieve the value of a particular website
|
|
767
|
+
def website(type)
|
|
768
|
+
product.websites.find { |site| site.website_role == type }
|
|
769
|
+
end
|
|
770
|
+
|
|
771
|
+
# set the value of a particular website
|
|
772
|
+
def website_set(type, value)
|
|
773
|
+
site = website(type)
|
|
774
|
+
|
|
775
|
+
# create a new website record if we need to
|
|
776
|
+
if site.nil?
|
|
777
|
+
site = ONIX2::Website.new
|
|
778
|
+
site.website_role = type
|
|
779
|
+
product.websites << site
|
|
780
|
+
end
|
|
781
|
+
|
|
782
|
+
site.website_link = value.to_s
|
|
783
|
+
end
|
|
784
|
+
end
|
|
785
|
+
end
|