im_onix 1.0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (346) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +39 -0
  3. data/bin/html_codelist_to_yml.rb +46 -0
  4. data/bin/onix3_to_onix2.rb +192 -0
  5. data/bin/onix3_to_onix3.rb +401 -0
  6. data/bin/onix_bench.rb +15 -0
  7. data/bin/onix_pp.rb +216 -0
  8. data/bin/onix_split.rb +72 -0
  9. data/data/codelists/codelist-1.yml +12 -0
  10. data/data/codelists/codelist-10.yml +51 -0
  11. data/data/codelists/codelist-100.yml +8 -0
  12. data/data/codelists/codelist-101.yml +7 -0
  13. data/data/codelists/codelist-102.yml +5 -0
  14. data/data/codelists/codelist-11.yml +13 -0
  15. data/data/codelists/codelist-12.yml +15 -0
  16. data/data/codelists/codelist-121.yml +162 -0
  17. data/data/codelists/codelist-13.yml +10 -0
  18. data/data/codelists/codelist-138.yml +8 -0
  19. data/data/codelists/codelist-139.yml +102 -0
  20. data/data/codelists/codelist-14.yml +6 -0
  21. data/data/codelists/codelist-140.yml +9 -0
  22. data/data/codelists/codelist-141.yml +12 -0
  23. data/data/codelists/codelist-142.yml +14 -0
  24. data/data/codelists/codelist-143.yml +9 -0
  25. data/data/codelists/codelist-144.yml +10 -0
  26. data/data/codelists/codelist-145.yml +9 -0
  27. data/data/codelists/codelist-146.yml +5 -0
  28. data/data/codelists/codelist-147.yml +16 -0
  29. data/data/codelists/codelist-148.yml +6 -0
  30. data/data/codelists/codelist-149.yml +7 -0
  31. data/data/codelists/codelist-15.yml +15 -0
  32. data/data/codelists/codelist-150.yml +128 -0
  33. data/data/codelists/codelist-151.yml +10 -0
  34. data/data/codelists/codelist-152.yml +4 -0
  35. data/data/codelists/codelist-153.yml +19 -0
  36. data/data/codelists/codelist-154.yml +11 -0
  37. data/data/codelists/codelist-155.yml +10 -0
  38. data/data/codelists/codelist-156.yml +6 -0
  39. data/data/codelists/codelist-157.yml +6 -0
  40. data/data/codelists/codelist-158.yml +32 -0
  41. data/data/codelists/codelist-159.yml +8 -0
  42. data/data/codelists/codelist-16.yml +8 -0
  43. data/data/codelists/codelist-160.yml +6 -0
  44. data/data/codelists/codelist-161.yml +5 -0
  45. data/data/codelists/codelist-162.yml +9 -0
  46. data/data/codelists/codelist-163.yml +18 -0
  47. data/data/codelists/codelist-164.yml +7 -0
  48. data/data/codelists/codelist-165.yml +6 -0
  49. data/data/codelists/codelist-166.yml +6 -0
  50. data/data/codelists/codelist-167.yml +7 -0
  51. data/data/codelists/codelist-168.yml +4 -0
  52. data/data/codelists/codelist-169.yml +7 -0
  53. data/data/codelists/codelist-17.yml +95 -0
  54. data/data/codelists/codelist-170.yml +2 -0
  55. data/data/codelists/codelist-171.yml +4 -0
  56. data/data/codelists/codelist-172.yml +3 -0
  57. data/data/codelists/codelist-173.yml +5 -0
  58. data/data/codelists/codelist-174.yml +4 -0
  59. data/data/codelists/codelist-175.yml +217 -0
  60. data/data/codelists/codelist-176.yml +16 -0
  61. data/data/codelists/codelist-177.yml +4 -0
  62. data/data/codelists/codelist-178.yml +30 -0
  63. data/data/codelists/codelist-179.yml +4 -0
  64. data/data/codelists/codelist-18.yml +8 -0
  65. data/data/codelists/codelist-184.yml +10 -0
  66. data/data/codelists/codelist-19.yml +9 -0
  67. data/data/codelists/codelist-196.yml +22 -0
  68. data/data/codelists/codelist-197.yml +7 -0
  69. data/data/codelists/codelist-198.yml +4 -0
  70. data/data/codelists/codelist-2.yml +8 -0
  71. data/data/codelists/codelist-20.yml +2 -0
  72. data/data/codelists/codelist-203.yml +10 -0
  73. data/data/codelists/codelist-204.yml +6 -0
  74. data/data/codelists/codelist-21.yml +36 -0
  75. data/data/codelists/codelist-22.yml +11 -0
  76. data/data/codelists/codelist-23.yml +17 -0
  77. data/data/codelists/codelist-24.yml +13 -0
  78. data/data/codelists/codelist-25.yml +31 -0
  79. data/data/codelists/codelist-26.yml +94 -0
  80. data/data/codelists/codelist-27.yml +101 -0
  81. data/data/codelists/codelist-28.yml +10 -0
  82. data/data/codelists/codelist-29.yml +26 -0
  83. data/data/codelists/codelist-3.yml +13 -0
  84. data/data/codelists/codelist-30.yml +19 -0
  85. data/data/codelists/codelist-31.yml +5 -0
  86. data/data/codelists/codelist-32.yml +5 -0
  87. data/data/codelists/codelist-33.yml +44 -0
  88. data/data/codelists/codelist-34.yml +18 -0
  89. data/data/codelists/codelist-35.yml +8 -0
  90. data/data/codelists/codelist-36.yml +5 -0
  91. data/data/codelists/codelist-37.yml +8 -0
  92. data/data/codelists/codelist-38.yml +42 -0
  93. data/data/codelists/codelist-39.yml +21 -0
  94. data/data/codelists/codelist-40.yml +8 -0
  95. data/data/codelists/codelist-41.yml +8 -0
  96. data/data/codelists/codelist-42.yml +18 -0
  97. data/data/codelists/codelist-43.yml +8 -0
  98. data/data/codelists/codelist-44.yml +22 -0
  99. data/data/codelists/codelist-45.yml +15 -0
  100. data/data/codelists/codelist-46.yml +11 -0
  101. data/data/codelists/codelist-47.yml +6 -0
  102. data/data/codelists/codelist-48.yml +13 -0
  103. data/data/codelists/codelist-49.yml +87 -0
  104. data/data/codelists/codelist-5.yml +20 -0
  105. data/data/codelists/codelist-50.yml +10 -0
  106. data/data/codelists/codelist-51.yml +37 -0
  107. data/data/codelists/codelist-52.yml +3 -0
  108. data/data/codelists/codelist-53.yml +7 -0
  109. data/data/codelists/codelist-54.yml +25 -0
  110. data/data/codelists/codelist-55.yml +21 -0
  111. data/data/codelists/codelist-56.yml +4 -0
  112. data/data/codelists/codelist-57.yml +7 -0
  113. data/data/codelists/codelist-58.yml +27 -0
  114. data/data/codelists/codelist-59.yml +12 -0
  115. data/data/codelists/codelist-6.yml +78 -0
  116. data/data/codelists/codelist-60.yml +4 -0
  117. data/data/codelists/codelist-61.yml +5 -0
  118. data/data/codelists/codelist-62.yml +7 -0
  119. data/data/codelists/codelist-63.yml +2 -0
  120. data/data/codelists/codelist-64.yml +18 -0
  121. data/data/codelists/codelist-65.yml +31 -0
  122. data/data/codelists/codelist-66.yml +6 -0
  123. data/data/codelists/codelist-67.yml +4 -0
  124. data/data/codelists/codelist-68.yml +19 -0
  125. data/data/codelists/codelist-69.yml +6 -0
  126. data/data/codelists/codelist-7.yml +128 -0
  127. data/data/codelists/codelist-70.yml +4 -0
  128. data/data/codelists/codelist-71.yml +13 -0
  129. data/data/codelists/codelist-72.yml +9 -0
  130. data/data/codelists/codelist-73.yml +43 -0
  131. data/data/codelists/codelist-74.yml +491 -0
  132. data/data/codelists/codelist-75.yml +4 -0
  133. data/data/codelists/codelist-76.yml +14 -0
  134. data/data/codelists/codelist-77.yml +21 -0
  135. data/data/codelists/codelist-78.yml +179 -0
  136. data/data/codelists/codelist-79.yml +25 -0
  137. data/data/codelists/codelist-8.yml +9 -0
  138. data/data/codelists/codelist-80.yml +23 -0
  139. data/data/codelists/codelist-81.yml +41 -0
  140. data/data/codelists/codelist-82.yml +19 -0
  141. data/data/codelists/codelist-83.yml +71 -0
  142. data/data/codelists/codelist-84.yml +12 -0
  143. data/data/codelists/codelist-85.yml +25 -0
  144. data/data/codelists/codelist-86.yml +7 -0
  145. data/data/codelists/codelist-87.yml +8 -0
  146. data/data/codelists/codelist-88.yml +2 -0
  147. data/data/codelists/codelist-89.yml +3 -0
  148. data/data/codelists/codelist-9.yml +11 -0
  149. data/data/codelists/codelist-90.yml +13 -0
  150. data/data/codelists/codelist-91.yml +254 -0
  151. data/data/codelists/codelist-92.yml +11 -0
  152. data/data/codelists/codelist-93.yml +15 -0
  153. data/data/codelists/codelist-94.yml +5 -0
  154. data/data/codelists/codelist-95.yml +5 -0
  155. data/data/codelists/codelist-96.yml +193 -0
  156. data/data/codelists/codelist-97.yml +3 -0
  157. data/data/codelists/codelist-98.yml +23 -0
  158. data/data/codelists/codelist-99.yml +26 -0
  159. data/data/onix21/codelists/codelist-1.yml +14 -0
  160. data/data/onix21/codelists/codelist-10.yml +52 -0
  161. data/data/onix21/codelists/codelist-100.yml +8 -0
  162. data/data/onix21/codelists/codelist-101.yml +7 -0
  163. data/data/onix21/codelists/codelist-102.yml +5 -0
  164. data/data/onix21/codelists/codelist-11.yml +13 -0
  165. data/data/onix21/codelists/codelist-12.yml +16 -0
  166. data/data/onix21/codelists/codelist-121.yml +162 -0
  167. data/data/onix21/codelists/codelist-13.yml +11 -0
  168. data/data/onix21/codelists/codelist-138.yml +8 -0
  169. data/data/onix21/codelists/codelist-139.yml +109 -0
  170. data/data/onix21/codelists/codelist-14.yml +6 -0
  171. data/data/onix21/codelists/codelist-140.yml +9 -0
  172. data/data/onix21/codelists/codelist-141.yml +12 -0
  173. data/data/onix21/codelists/codelist-142.yml +14 -0
  174. data/data/onix21/codelists/codelist-143.yml +9 -0
  175. data/data/onix21/codelists/codelist-144.yml +8 -0
  176. data/data/onix21/codelists/codelist-145.yml +10 -0
  177. data/data/onix21/codelists/codelist-146.yml +5 -0
  178. data/data/onix21/codelists/codelist-147.yml +16 -0
  179. data/data/onix21/codelists/codelist-148.yml +6 -0
  180. data/data/onix21/codelists/codelist-149.yml +8 -0
  181. data/data/onix21/codelists/codelist-15.yml +16 -0
  182. data/data/onix21/codelists/codelist-150.yml +133 -0
  183. data/data/onix21/codelists/codelist-151.yml +10 -0
  184. data/data/onix21/codelists/codelist-152.yml +4 -0
  185. data/data/onix21/codelists/codelist-153.yml +22 -0
  186. data/data/onix21/codelists/codelist-154.yml +11 -0
  187. data/data/onix21/codelists/codelist-155.yml +10 -0
  188. data/data/onix21/codelists/codelist-156.yml +6 -0
  189. data/data/onix21/codelists/codelist-157.yml +6 -0
  190. data/data/onix21/codelists/codelist-158.yml +35 -0
  191. data/data/onix21/codelists/codelist-159.yml +8 -0
  192. data/data/onix21/codelists/codelist-16.yml +8 -0
  193. data/data/onix21/codelists/codelist-160.yml +7 -0
  194. data/data/onix21/codelists/codelist-161.yml +5 -0
  195. data/data/onix21/codelists/codelist-162.yml +9 -0
  196. data/data/onix21/codelists/codelist-163.yml +18 -0
  197. data/data/onix21/codelists/codelist-164.yml +7 -0
  198. data/data/onix21/codelists/codelist-165.yml +6 -0
  199. data/data/onix21/codelists/codelist-166.yml +6 -0
  200. data/data/onix21/codelists/codelist-167.yml +11 -0
  201. data/data/onix21/codelists/codelist-168.yml +4 -0
  202. data/data/onix21/codelists/codelist-169.yml +7 -0
  203. data/data/onix21/codelists/codelist-17.yml +98 -0
  204. data/data/onix21/codelists/codelist-170.yml +6 -0
  205. data/data/onix21/codelists/codelist-171.yml +4 -0
  206. data/data/onix21/codelists/codelist-172.yml +3 -0
  207. data/data/onix21/codelists/codelist-173.yml +5 -0
  208. data/data/onix21/codelists/codelist-174.yml +4 -0
  209. data/data/onix21/codelists/codelist-175.yml +230 -0
  210. data/data/onix21/codelists/codelist-176.yml +16 -0
  211. data/data/onix21/codelists/codelist-177.yml +4 -0
  212. data/data/onix21/codelists/codelist-178.yml +30 -0
  213. data/data/onix21/codelists/codelist-179.yml +5 -0
  214. data/data/onix21/codelists/codelist-18.yml +8 -0
  215. data/data/onix21/codelists/codelist-184.yml +10 -0
  216. data/data/onix21/codelists/codelist-19.yml +9 -0
  217. data/data/onix21/codelists/codelist-196.yml +22 -0
  218. data/data/onix21/codelists/codelist-197.yml +7 -0
  219. data/data/onix21/codelists/codelist-198.yml +8 -0
  220. data/data/onix21/codelists/codelist-2.yml +8 -0
  221. data/data/onix21/codelists/codelist-20.yml +2 -0
  222. data/data/onix21/codelists/codelist-203.yml +10 -0
  223. data/data/onix21/codelists/codelist-204.yml +7 -0
  224. data/data/onix21/codelists/codelist-21.yml +36 -0
  225. data/data/onix21/codelists/codelist-215.yml +9 -0
  226. data/data/onix21/codelists/codelist-216.yml +11 -0
  227. data/data/onix21/codelists/codelist-217.yml +3 -0
  228. data/data/onix21/codelists/codelist-218.yml +5 -0
  229. data/data/onix21/codelists/codelist-219.yml +5 -0
  230. data/data/onix21/codelists/codelist-22.yml +11 -0
  231. data/data/onix21/codelists/codelist-220.yml +7 -0
  232. data/data/onix21/codelists/codelist-23.yml +17 -0
  233. data/data/onix21/codelists/codelist-24.yml +14 -0
  234. data/data/onix21/codelists/codelist-25.yml +31 -0
  235. data/data/onix21/codelists/codelist-26.yml +100 -0
  236. data/data/onix21/codelists/codelist-27.yml +107 -0
  237. data/data/onix21/codelists/codelist-28.yml +10 -0
  238. data/data/onix21/codelists/codelist-29.yml +30 -0
  239. data/data/onix21/codelists/codelist-3.yml +13 -0
  240. data/data/onix21/codelists/codelist-30.yml +20 -0
  241. data/data/onix21/codelists/codelist-31.yml +5 -0
  242. data/data/onix21/codelists/codelist-32.yml +10 -0
  243. data/data/onix21/codelists/codelist-33.yml +46 -0
  244. data/data/onix21/codelists/codelist-34.yml +18 -0
  245. data/data/onix21/codelists/codelist-35.yml +8 -0
  246. data/data/onix21/codelists/codelist-36.yml +5 -0
  247. data/data/onix21/codelists/codelist-37.yml +8 -0
  248. data/data/onix21/codelists/codelist-38.yml +42 -0
  249. data/data/onix21/codelists/codelist-39.yml +21 -0
  250. data/data/onix21/codelists/codelist-40.yml +8 -0
  251. data/data/onix21/codelists/codelist-41.yml +9 -0
  252. data/data/onix21/codelists/codelist-42.yml +18 -0
  253. data/data/onix21/codelists/codelist-43.yml +9 -0
  254. data/data/onix21/codelists/codelist-44.yml +27 -0
  255. data/data/onix21/codelists/codelist-45.yml +20 -0
  256. data/data/onix21/codelists/codelist-46.yml +11 -0
  257. data/data/onix21/codelists/codelist-47.yml +6 -0
  258. data/data/onix21/codelists/codelist-48.yml +13 -0
  259. data/data/onix21/codelists/codelist-49.yml +281 -0
  260. data/data/onix21/codelists/codelist-5.yml +20 -0
  261. data/data/onix21/codelists/codelist-50.yml +10 -0
  262. data/data/onix21/codelists/codelist-51.yml +37 -0
  263. data/data/onix21/codelists/codelist-52.yml +3 -0
  264. data/data/onix21/codelists/codelist-53.yml +7 -0
  265. data/data/onix21/codelists/codelist-54.yml +25 -0
  266. data/data/onix21/codelists/codelist-55.yml +21 -0
  267. data/data/onix21/codelists/codelist-56.yml +4 -0
  268. data/data/onix21/codelists/codelist-57.yml +7 -0
  269. data/data/onix21/codelists/codelist-58.yml +27 -0
  270. data/data/onix21/codelists/codelist-59.yml +12 -0
  271. data/data/onix21/codelists/codelist-6.yml +78 -0
  272. data/data/onix21/codelists/codelist-60.yml +4 -0
  273. data/data/onix21/codelists/codelist-61.yml +5 -0
  274. data/data/onix21/codelists/codelist-62.yml +7 -0
  275. data/data/onix21/codelists/codelist-63.yml +2 -0
  276. data/data/onix21/codelists/codelist-64.yml +18 -0
  277. data/data/onix21/codelists/codelist-65.yml +31 -0
  278. data/data/onix21/codelists/codelist-66.yml +6 -0
  279. data/data/onix21/codelists/codelist-67.yml +4 -0
  280. data/data/onix21/codelists/codelist-68.yml +19 -0
  281. data/data/onix21/codelists/codelist-69.yml +6 -0
  282. data/data/onix21/codelists/codelist-7.yml +132 -0
  283. data/data/onix21/codelists/codelist-70.yml +4 -0
  284. data/data/onix21/codelists/codelist-71.yml +14 -0
  285. data/data/onix21/codelists/codelist-72.yml +9 -0
  286. data/data/onix21/codelists/codelist-73.yml +43 -0
  287. data/data/onix21/codelists/codelist-74.yml +492 -0
  288. data/data/onix21/codelists/codelist-75.yml +4 -0
  289. data/data/onix21/codelists/codelist-76.yml +14 -0
  290. data/data/onix21/codelists/codelist-77.yml +21 -0
  291. data/data/onix21/codelists/codelist-78.yml +191 -0
  292. data/data/onix21/codelists/codelist-79.yml +26 -0
  293. data/data/onix21/codelists/codelist-8.yml +9 -0
  294. data/data/onix21/codelists/codelist-80.yml +23 -0
  295. data/data/onix21/codelists/codelist-81.yml +41 -0
  296. data/data/onix21/codelists/codelist-82.yml +19 -0
  297. data/data/onix21/codelists/codelist-83.yml +72 -0
  298. data/data/onix21/codelists/codelist-84.yml +12 -0
  299. data/data/onix21/codelists/codelist-85.yml +25 -0
  300. data/data/onix21/codelists/codelist-86.yml +7 -0
  301. data/data/onix21/codelists/codelist-87.yml +8 -0
  302. data/data/onix21/codelists/codelist-88.yml +2 -0
  303. data/data/onix21/codelists/codelist-89.yml +3 -0
  304. data/data/onix21/codelists/codelist-9.yml +13 -0
  305. data/data/onix21/codelists/codelist-90.yml +13 -0
  306. data/data/onix21/codelists/codelist-91.yml +254 -0
  307. data/data/onix21/codelists/codelist-92.yml +11 -0
  308. data/data/onix21/codelists/codelist-93.yml +15 -0
  309. data/data/onix21/codelists/codelist-94.yml +5 -0
  310. data/data/onix21/codelists/codelist-95.yml +5 -0
  311. data/data/onix21/codelists/codelist-96.yml +194 -0
  312. data/data/onix21/codelists/codelist-97.yml +3 -0
  313. data/data/onix21/codelists/codelist-98.yml +25 -0
  314. data/data/onix21/codelists/codelist-99.yml +26 -0
  315. data/data/onix21/shortnames.yml +431 -0
  316. data/data/shortnames.yml +395 -0
  317. data/lib/im_onix.rb +2 -0
  318. data/lib/onix/code.rb +543 -0
  319. data/lib/onix/collateral_detail.rb +94 -0
  320. data/lib/onix/contributor.rb +87 -0
  321. data/lib/onix/date.rb +183 -0
  322. data/lib/onix/descriptive_detail.rb +552 -0
  323. data/lib/onix/discount_coded.rb +20 -0
  324. data/lib/onix/entity.rb +135 -0
  325. data/lib/onix/error.rb +6 -0
  326. data/lib/onix/helper.rb +66 -0
  327. data/lib/onix/identifier.rb +158 -0
  328. data/lib/onix/onix21.rb +604 -0
  329. data/lib/onix/onix_message.rb +187 -0
  330. data/lib/onix/price.rb +74 -0
  331. data/lib/onix/product.rb +846 -0
  332. data/lib/onix/product_supply.rb +89 -0
  333. data/lib/onix/publishing_detail.rb +86 -0
  334. data/lib/onix/related_material.rb +30 -0
  335. data/lib/onix/related_product.rb +45 -0
  336. data/lib/onix/related_work.rb +24 -0
  337. data/lib/onix/sales_outlet.rb +14 -0
  338. data/lib/onix/sales_restriction.rb +37 -0
  339. data/lib/onix/sales_rights.rb +12 -0
  340. data/lib/onix/subject.rb +35 -0
  341. data/lib/onix/subset.rb +334 -0
  342. data/lib/onix/supporting_resource.rb +192 -0
  343. data/lib/onix/tax.rb +23 -0
  344. data/lib/onix/territory.rb +56 -0
  345. data/lib/onix/website.rb +21 -0
  346. metadata +477 -0
@@ -0,0 +1,604 @@
1
+ module ONIX
2
+ module ONIX21
3
+ class ShortToRef
4
+ def self.names
5
+ @shortnames||=YAML.load(File.open(File.dirname(__FILE__) + "/../../data/onix21/shortnames.yml"))
6
+ end
7
+ end
8
+
9
+ class RefToShort
10
+ def self.names
11
+ @refnames||=ShortToRef.names.invert
12
+ end
13
+ end
14
+
15
+ class SubsetDSL < ONIX::SubsetDSL
16
+ def self.short_to_ref(name)
17
+ ONIX::ONIX21::ShortToRef.names[name]
18
+ end
19
+ def self.ref_to_short(name)
20
+ ONIX::ONIX21::RefToShort.names[name]
21
+ end
22
+
23
+ def self.get_class(name)
24
+ if ONIX::ONIX21.const_defined?(name,false)
25
+ ONIX::ONIX21.const_get(name)
26
+ else
27
+ ONIX.const_get(name)
28
+ end
29
+ end
30
+ end
31
+
32
+ # ONIX 2.1 codes
33
+
34
+ class CodeFromYaml < Code
35
+ def self.hash
36
+ @hash||=YAML.load(File.open(File.dirname(__FILE__) + "/../../data/onix21/codelists/codelist-#{self.code_ident}.yml"))[:codelist]
37
+ end
38
+
39
+ def self.list
40
+ self.hash.to_a.map{|h| h.first}
41
+ end
42
+
43
+ def self.code_ident
44
+ nil
45
+ end
46
+ end
47
+
48
+ class EpubType < CodeFromYaml
49
+ private
50
+ def self.code_ident
51
+ 10
52
+ end
53
+ end
54
+
55
+ class TextTypeCode < CodeFromYaml
56
+ private
57
+ def self.code_ident
58
+ 33
59
+ end
60
+ end
61
+
62
+ class MediaFileTypeCode < CodeFromYaml
63
+ private
64
+ def self.code_ident
65
+ 38
66
+ end
67
+ end
68
+
69
+ class MediaFileFormatCode < CodeFromYaml
70
+ private
71
+ def self.code_ident
72
+ 36
73
+ end
74
+ end
75
+
76
+ class MediaFileLinkTypeCode < CodeFromYaml
77
+ private
78
+ def self.code_ident
79
+ 37
80
+ end
81
+ end
82
+
83
+ # ONIX 2.1 subset
84
+
85
+ class Title < SubsetDSL
86
+ element "TitleType", :subset
87
+ element "TitleText", :text
88
+ element "TitlePrefix", :text
89
+ element "TitleWithoutPrefix", :text
90
+ element "AbbreviatedLength", :integer
91
+ element "Subtitle", :text
92
+
93
+ def type
94
+ @title_type
95
+ end
96
+
97
+ def title
98
+ @title_text
99
+ end
100
+ end
101
+
102
+ class OtherText < SubsetDSL
103
+ element "TextTypeCode", :subset
104
+ element "TextFormat", :text
105
+ element "Text", :text
106
+
107
+ def type
108
+ @text_type_code
109
+ end
110
+ end
111
+
112
+ class MediaFile < SubsetDSL
113
+ element "MediaFileTypeCode", :subset
114
+ element "MediaFileFormatCode", :subset
115
+ element "MediaFileLinkTypeCode", :subset
116
+ element "MediaFileLink", :text
117
+
118
+ def type
119
+ @media_file_type_code
120
+ end
121
+
122
+ def format
123
+ @media_file_format_code
124
+ end
125
+
126
+ def link_type
127
+ @media_file_link_type_code
128
+ end
129
+
130
+ def link
131
+ @media_file_link
132
+ end
133
+ end
134
+
135
+ class Territory
136
+ attr_accessor :countries
137
+
138
+ def initialize(countries)
139
+ @countries=countries
140
+ end
141
+
142
+ def +v
143
+ Territory.new((@countries + v.countries).uniq)
144
+ end
145
+
146
+ def -v
147
+ Territory.new((@countries - v.countries).uniq)
148
+ end
149
+ end
150
+
151
+ class Price < SubsetDSL
152
+ element "PriceTypeCode", :subset, :klass => "PriceType"
153
+ element "PriceAmount", :float, {:parse_lambda => lambda { |v| (v*100).round }}
154
+ element "PriceQualifier", :subset
155
+ element "DiscountCoded", :subset
156
+ element "CurrencyCode", :text
157
+ elements "CountryCode", :text
158
+ element "PriceEffectiveFrom", :text
159
+ element "PriceEffectiveUntil", :text
160
+
161
+ def amount
162
+ @price_amount
163
+ end
164
+
165
+ def currency
166
+ @currency_code
167
+ end
168
+
169
+ def qualifier
170
+ @price_qualifier
171
+ end
172
+
173
+ def including_tax?
174
+ if @price_type_code.human =~/IncludingTax/
175
+ true
176
+ else
177
+ false
178
+ end
179
+ end
180
+
181
+ def from_date
182
+ if @price_effective_from
183
+ Date.strptime(@price_effective_from,"%Y%m%d")
184
+ end
185
+ end
186
+
187
+ def until_date
188
+ if @price_effective_until
189
+ Date.strptime(@price_effective_until,"%Y%m%d")
190
+ end
191
+ end
192
+
193
+ def territory
194
+ Territory.new(@country_codes)
195
+ end
196
+
197
+ def tax
198
+ nil
199
+ end
200
+ end
201
+
202
+
203
+ class Supplier
204
+ attr_accessor :name
205
+ attr_accessor :role
206
+
207
+ def initialize(name,role)
208
+ @name = name
209
+ @role = role
210
+ end
211
+
212
+ def identifiers
213
+ []
214
+ end
215
+
216
+ def websites
217
+ []
218
+ end
219
+ end
220
+
221
+ class SupplyDetail < SubsetDSL
222
+ element "SupplierName", :text
223
+ element "TelephoneNumber", :text
224
+ element "SupplierRole", :text
225
+
226
+ element "AvailabilityCode", :text
227
+ element "ProductAvailability", :text
228
+ element "OnSaleDate", :text, {:parse_lambda => lambda { |v| Date.strptime(v, "%Y%m%d") }}
229
+ elements "Price", :subset
230
+
231
+ def availability_date
232
+ @on_sale_date
233
+ end
234
+
235
+ def available?
236
+ @product_availability=="20" or @availability_code == "IP"
237
+ end
238
+
239
+ def suppliers
240
+ [Supplier.new(self.supplier_name,self.supplier_role)]
241
+ end
242
+ end
243
+
244
+ class SalesRights < SubsetDSL
245
+ element "SalesRightsType", :text
246
+ element "RightsCountry", :text
247
+
248
+ def not_for_sale?
249
+ ["03","04","05","06"].include?(@sales_rights_type)
250
+ end
251
+
252
+ def territory
253
+ Territory.new(@rights_country.split(" "))
254
+ end
255
+ end
256
+
257
+ class NotForSale < SubsetDSL
258
+ element "RightsCountry", :text
259
+
260
+ def territory
261
+ Territory.new(@rights_country.split(" "))
262
+ end
263
+ end
264
+
265
+ class RelatedProduct < SubsetDSL
266
+ include EanMethods
267
+ include ProprietaryIdMethods
268
+
269
+ element "RelationCode", :text
270
+ elements "ProductIdentifier", :subset
271
+
272
+ def product=v
273
+ end
274
+
275
+ def identifiers
276
+ @product_identifiers
277
+ end
278
+
279
+ def code
280
+ @relation_code
281
+ end
282
+ end
283
+
284
+ class MainSubject < SubsetDSL
285
+ element "SubjectCode", :text
286
+ element "SubjectHeadingText", :text
287
+ element "MainSubjectSchemeIdentifier", :subset, :klass=>"SubjectSchemeIdentifier"
288
+ element "SubjectSchemeName", :text
289
+ element "SubjectSchemeVersion", :text
290
+
291
+ # shortcuts
292
+ def code
293
+ @subject_code
294
+ end
295
+
296
+ def heading_text
297
+ @subject_heading_text
298
+ end
299
+
300
+ def scheme_identifier
301
+ @main_subject_scheme_identifier
302
+ end
303
+
304
+ def scheme_name
305
+ @subject_scheme_name
306
+ end
307
+
308
+ def scheme_version
309
+ @subject_scheme_version
310
+ end
311
+ end
312
+
313
+ class Product < SubsetDSL
314
+ include EanMethods
315
+ include ProprietaryIdMethods
316
+
317
+ element "RecordReference", :text
318
+ elements "ProductIdentifier", :subset
319
+ element "NotificationType", :subset
320
+ element "RecordSourceName", :text
321
+ elements "Title", :subset
322
+ elements "ProductSupply", :subset
323
+
324
+ elements "Contributor", :subset
325
+ element "ContributorStatement", :text
326
+
327
+ elements "Extent", :subset
328
+ elements "Language", :subset
329
+ elements "MediaFile", :subset
330
+
331
+ element "NumberOfPages", :text
332
+
333
+ elements "Publisher", :subset
334
+ elements "Imprint", :subset
335
+
336
+ element "ProductForm", :text
337
+
338
+ elements "OtherText", :subset
339
+
340
+ elements "SalesRights", :subset, {:pluralize => false}
341
+ elements "NotForSale", :subset
342
+
343
+ element "BASICMainSubject", :text
344
+ elements "MainSubject", :subset
345
+ elements "Subject", :subset
346
+
347
+ element "PublishingStatus", :text
348
+ element "PublicationDate", :text, {:parse_lambda => lambda { |v| Date.strptime(v, "%Y%m%d") }}
349
+
350
+ elements "RelatedProduct", :subset
351
+
352
+ elements "SupplyDetail", :subset
353
+
354
+ element "EpubType", :subset
355
+ element "EpubTypeDescription", :text
356
+ element "EpubFormat", :text
357
+ element "EpubTypeNote", :text
358
+
359
+ element "EditionNumber", :integer
360
+ element "NoEdition", :ignore
361
+ element "NoSeries", :ignore
362
+
363
+ # shortcuts
364
+ def identifiers
365
+ @product_identifiers
366
+ end
367
+
368
+ # default LanguageCode from ONIXMessage
369
+ attr_accessor :default_language_of_text
370
+ # default code from ONIXMessage
371
+ attr_accessor :default_currency_code
372
+
373
+ def title
374
+ product_title.title
375
+ end
376
+
377
+ # :category: High level
378
+ # product subtitle string
379
+ def subtitle
380
+ product_title.subtitle
381
+ end
382
+
383
+ def product_title
384
+ @titles.select { |td| td.type.human=~/DistinctiveTitle/ }.first
385
+ end
386
+
387
+ def bisac_categories_codes
388
+ cats=[]
389
+ if @basic_main_subject
390
+ cats << @basic_main_subject
391
+ end
392
+ cats+=(@main_subjects + @subjects).select { |s| s.scheme_identifier.human=="BisacSubjectHeading" }.map{|s| s.code}
393
+ cats
394
+ end
395
+
396
+ def clil_categories_codes
397
+ (@main_subjects + @subjects).select { |s| s.scheme_identifier.human=="Clil" }.map{|s| s.code}
398
+ end
399
+
400
+ def keywords
401
+ kws=(@main_subjects + @subjects).select { |s| s.scheme_identifier.human=="Keywords" }.map { |kw| kw.heading_text }.compact
402
+ kws.map { |kw| kw.split(/;|,|\n/) }.flatten.map { |kw| kw.strip }
403
+ end
404
+
405
+ # doesn't apply
406
+ def onix_outlets_values
407
+ []
408
+ end
409
+
410
+ # product LanguageCode of text
411
+ def language_of_text
412
+ lang=nil
413
+ l=@languages.select { |l| l.role.human=="LanguageOfText" }.first
414
+ if l
415
+ lang=l.code
416
+ end
417
+ lang || @default_language_of_text
418
+ end
419
+
420
+ def language_code_of_text
421
+ if self.language_of_text
422
+ self.language_of_text.code
423
+ end
424
+ end
425
+
426
+ def language_name_of_text
427
+ if self.language_of_text
428
+ self.language_of_text.human
429
+ end
430
+ end
431
+
432
+ def publisher_name
433
+ if @publishers.first
434
+ @publishers.first.name
435
+ end
436
+ end
437
+
438
+ def imprint_name
439
+ if @imprints.first
440
+ @imprints.first.name
441
+ end
442
+ end
443
+
444
+ # doesn't apply
445
+ def sold_separately?
446
+ true
447
+ end
448
+
449
+ def description
450
+ desc_contents=@other_texts.select{|tc| tc.type.human=="MainDescription"} + @other_texts.select{|tc| tc.type.human=="LongDescription"} + @other_texts.select{|tc| tc.type.human=="ShortDescriptionannotation"}
451
+ if desc_contents.length > 0
452
+ desc_contents.first.text
453
+ else
454
+ nil
455
+ end
456
+ end
457
+
458
+ def raw_description
459
+ if self.description
460
+ Helper.strip_html(self.description).gsub(/\s+/, " ").strip
461
+ else
462
+ nil
463
+ end
464
+ end
465
+
466
+ def product_supplies
467
+ [self]
468
+ end
469
+
470
+ def countries
471
+ territory=Territory.new(CountryCode.list)
472
+ @sales_rights.each do |sr|
473
+ if sr.not_for_sale?
474
+ territory=territory-sr.territory
475
+ else
476
+ territory=territory+sr.territory
477
+ end
478
+ end
479
+
480
+ @not_for_sales.each do |sr|
481
+ territory=territory-sr.territory
482
+ end
483
+
484
+ territory.countries
485
+ end
486
+
487
+ def availability_date
488
+ nil
489
+ end
490
+
491
+ def embargo_date
492
+ nil
493
+ end
494
+
495
+ def preorder_embargo_date
496
+ nil
497
+ end
498
+
499
+ def public_announcement_date
500
+ nil
501
+ end
502
+
503
+ include ProductSuppliesExtractor
504
+
505
+ def related
506
+ @related_products
507
+ end
508
+
509
+ # doesn't apply
510
+ def parts
511
+ []
512
+ end
513
+
514
+ # doesn't apply
515
+ def bundle?
516
+ false
517
+ end
518
+
519
+ def digital?
520
+ @product_form=="DG"
521
+ end
522
+
523
+ def available?
524
+ @supply_details.select { |sd| sd.available? }.length > 0
525
+ end
526
+
527
+ def available_for_country?(country)
528
+ self.supplies_for_country(country).select{|s| s[:available]}.length > 0 and self.available?
529
+ end
530
+
531
+ def pages
532
+ if @number_of_pages
533
+ @number_of_pages.to_i
534
+ end
535
+ end
536
+
537
+ def edition_number
538
+ @edition_number
539
+ end
540
+
541
+ def distributor_name
542
+ nil
543
+ end
544
+
545
+ def frontcover_url
546
+ fc=@media_files.select { |mf| mf.media_file_type_code.human=="ImageFrontCover" && mf.media_file_link_type_code.human=="Url"}
547
+ if fc.length > 0
548
+ fc.first.link
549
+ else
550
+ nil
551
+ end
552
+ end
553
+
554
+ # TODO
555
+ def publisher_collection_title
556
+ nil
557
+ end
558
+
559
+ def file_format
560
+ @epub_type.human
561
+ end
562
+
563
+ def file_description
564
+ @epub_type_description
565
+ end
566
+
567
+ def raw_file_description
568
+ file_description
569
+ end
570
+
571
+ # doesn't apply
572
+ def filesize
573
+ nil
574
+ end
575
+
576
+ # doesn't apply
577
+ def protection_type
578
+ nil
579
+ end
580
+
581
+ def epub_sample_url
582
+ nil
583
+ end
584
+
585
+ def print_product
586
+ @related_products.select { |rp| rp.code=="13" }.first
587
+ end
588
+
589
+ # DEPRECATED see print_product instead
590
+ def paper_linking
591
+ self.print_product
592
+ end
593
+
594
+ def publisher_gln
595
+ nil
596
+ end
597
+
598
+ def method_missing(method)
599
+ raise "WARN #{method} not found"
600
+ end
601
+
602
+ end
603
+ end
604
+ end