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,20 @@
1
+ module ONIX
2
+ class DiscountCoded < SubsetDSL
3
+ element "DiscountCodeType", :text
4
+ element "DiscountCodeTypeName", :text
5
+ element "DiscountCode", :text
6
+
7
+ # shortcuts
8
+ def code_type
9
+ @discount_code_type
10
+ end
11
+
12
+ def code_type_name
13
+ @discount_code_type_name
14
+ end
15
+
16
+ def code
17
+ @discount_code
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,135 @@
1
+ require 'onix/code'
2
+ require 'onix/identifier'
3
+ require 'onix/website'
4
+
5
+ module ONIX
6
+ module EntityHelper
7
+ end
8
+ class Entity < SubsetDSL
9
+ # entity name
10
+ attr_accessor :name
11
+ # entity role
12
+ attr_accessor :role
13
+ # entity Identifier list
14
+ attr_accessor :identifiers
15
+
16
+ include GlnMethods
17
+ include EntityHelper
18
+
19
+ def initialize
20
+ super
21
+ @identifiers = []
22
+ end
23
+
24
+ def self.role_tag
25
+ "#{self.prefix}Role"
26
+ end
27
+
28
+ def self.name_tag
29
+ "#{self.prefix}Name"
30
+ end
31
+
32
+ def self.identifier_tag
33
+ "#{self.prefix}Identifier"
34
+ end
35
+
36
+ def parse(n)
37
+ super
38
+ n.children.each do |t|
39
+ case t
40
+ when tag_match(self.class.name_tag)
41
+ @name=t.text
42
+ when tag_match(self.class.role_tag)
43
+ if self.class.role_class
44
+ @role=self.class.role_class.parse(t)
45
+ end
46
+ when tag_match(self.class.identifier_tag)
47
+ if self.class.identifier_class
48
+ @identifiers << self.class.identifier_class.parse(t)
49
+ end
50
+ end
51
+ end
52
+ end
53
+
54
+ def self.prefix
55
+ end
56
+
57
+ def self.identifier_class
58
+ nil
59
+ end
60
+
61
+ def self.role_class
62
+ nil
63
+ end
64
+ end
65
+
66
+ class Agent < Entity
67
+ def self.prefix
68
+ "Agent"
69
+ end
70
+
71
+ def self.identifier_class
72
+ AgentIdentifier
73
+ end
74
+
75
+ def self.role_class
76
+ AgentRole
77
+ end
78
+ end
79
+
80
+ class Imprint < Entity
81
+ def self.prefix
82
+ "Imprint"
83
+ end
84
+
85
+ def self.identifier_class
86
+ ImprintIdentifier
87
+ end
88
+
89
+ def self.role_class
90
+ nil
91
+ end
92
+ end
93
+
94
+ class Supplier < Entity
95
+ elements "Website", :subset
96
+
97
+ def self.prefix
98
+ "Supplier"
99
+ end
100
+
101
+ def self.identifier_class
102
+ SupplierIdentifier
103
+ end
104
+
105
+ def self.role_class
106
+ SupplierRole
107
+ end
108
+ end
109
+
110
+ class Publisher < Entity
111
+ elements "Website", :subset
112
+
113
+ def initialize
114
+ super
115
+ @websites = []
116
+ end
117
+
118
+ def self.prefix
119
+ "Publisher"
120
+ end
121
+
122
+ def self.role_tag
123
+ "PublishingRole"
124
+ end
125
+
126
+ def self.identifier_class
127
+ PublisherIdentifier
128
+ end
129
+
130
+ def self.role_class
131
+ PublishingRole
132
+ end
133
+ end
134
+
135
+ end
data/lib/onix/error.rb ADDED
@@ -0,0 +1,6 @@
1
+ module ONIX
2
+ class SubsetUnsupported < StandardError
3
+ end
4
+ class ExpectsOneButHasSeveral < StandardError
5
+ end
6
+ end
@@ -0,0 +1,66 @@
1
+ module ONIX
2
+ class Helper
3
+ # convert arbitrary arg to File/String
4
+ def self.arg_to_data(arg)
5
+ data=""
6
+ case arg
7
+ when String
8
+ if File.file?(arg)
9
+ data=File.read(arg)
10
+ else
11
+ data=arg
12
+ end
13
+ when File, Tempfile
14
+ data=arg.read
15
+ end
16
+ data
17
+ end
18
+
19
+ # traverse each product as xml string
20
+ def self.each_xml_product(arg, &block)
21
+ data=self.arg_to_data(arg)
22
+ Nokogiri::XML::Reader(data).each do |node|
23
+ if node.name == 'Product' and node.node_type == Nokogiri::XML::Reader::TYPE_ELEMENT
24
+ yield(node.outer_xml)
25
+ end
26
+ end
27
+ end
28
+
29
+ # traverse each product as xml string with added ONIXMessage
30
+ def self.each_xml_product_as_full_message(arg, &block)
31
+ self.each_xml_product(arg) do |p|
32
+ yield("<ONIXMessage>\n"+p+"\n</ONIXMessage>\n")
33
+ end
34
+ end
35
+
36
+ def self.text_at(n,xpath)
37
+ if n.at_xpath(xpath)
38
+ n.at_xpath(xpath).text.strip
39
+ else
40
+ nil
41
+ end
42
+ end
43
+
44
+ def self.mandatory_text_at(n,xpath)
45
+ self.text_at(n,xpath)
46
+ end
47
+
48
+ def self.strip_html(html)
49
+ html.gsub(/&nbsp;/," ").gsub(/<[^>]*(>+|\s*\z)/m, '')
50
+ end
51
+
52
+ def self.to_date(date_format,date_str_f)
53
+ case date_format
54
+ when "00"
55
+ Date.strptime(date_str_f, "%Y%m%d")
56
+ when "01"
57
+ Date.strptime(date_str_f, "%Y%m")
58
+ when "14"
59
+ Time.strptime(date_str_f, "%Y%m%dT%H%M%S")
60
+ else
61
+ nil
62
+ end
63
+ end
64
+
65
+ end
66
+ end
@@ -0,0 +1,158 @@
1
+ module ONIX
2
+ class Identifier < SubsetDSL
3
+ element "IDValue", :text
4
+ element "IDTypeName", :text
5
+
6
+ def value
7
+ @id_value
8
+ end
9
+
10
+ def name
11
+ @id_type_name
12
+ end
13
+
14
+ def type
15
+ nil
16
+ end
17
+
18
+ def uniq_id
19
+ "#{type.code}-#{value}"
20
+ end
21
+ end
22
+
23
+ class SenderIdentifier < Identifier
24
+ element "SenderIDType", :subset
25
+ def type
26
+ @sender_id_type
27
+ end
28
+ end
29
+
30
+ class AddresseeIdentifier < Identifier
31
+ element "AddresseeIDType", :subset
32
+ def type
33
+ @addressee_id_type
34
+ end
35
+ end
36
+
37
+ class AgentIdentifier < Identifier
38
+ element "AgentIDType", :subset
39
+ def type
40
+ @agent_id_type
41
+ end
42
+ end
43
+
44
+ class ImprintIdentifier < Identifier
45
+ element "ImprintIDType", :subset
46
+ def type
47
+ @imprint_id_type
48
+ end
49
+ end
50
+
51
+ class PublisherIdentifier < Identifier
52
+ element "PublisherIDType", :subset
53
+ def type
54
+ @publisher_id_type
55
+ end
56
+ end
57
+
58
+ class SupplierIdentifier < Identifier
59
+ element "SupplierIDType", :subset
60
+ def type
61
+ @supplier_id_type
62
+ end
63
+ end
64
+
65
+ class NameIdentifier < Identifier
66
+ element "NameIDType", :subset
67
+ def type
68
+ @name_id_type
69
+ end
70
+ end
71
+
72
+ class CollectionIdentifier < Identifier
73
+ element "CollectionIDType", :subset
74
+ def type
75
+ @collection_id_type
76
+ end
77
+ end
78
+
79
+ class ProductIdentifier < Identifier
80
+ element "ProductIDType", :subset
81
+ def type
82
+ @product_id_type
83
+ end
84
+ end
85
+
86
+ class SalesOutletIdentifier < Identifier
87
+ element "SalesOutletIDType", :subset
88
+ def type
89
+ @sales_outlet_id_type
90
+ end
91
+ end
92
+
93
+ class WorkIdentifier < Identifier
94
+ element "WorkIDType", :subset
95
+ def type
96
+ @work_id_type
97
+ end
98
+ end
99
+
100
+ module EanMethods
101
+ # EAN string identifier from identifiers
102
+ def ean
103
+ if ean_identifier
104
+ ean_identifier.value
105
+ else
106
+ nil
107
+ end
108
+ end
109
+
110
+ private
111
+ def ean_identifier
112
+ self.identifiers.select { |id| id.type.human=="Gtin13" }.first || self.identifiers.select { |id| id.type.human=="Isbn13" }.first
113
+ end
114
+ end
115
+
116
+ module IsbnMethods
117
+ # ISBN-13 string identifier from identifiers
118
+ def isbn13
119
+ if isbn13_identifier
120
+ isbn13_identifier.value
121
+ else
122
+ nil
123
+ end
124
+ end
125
+
126
+ private
127
+ def isbn13_identifier
128
+ self.identifiers.select{|id| id.type.human=="Isbn13"}.first
129
+ end
130
+ end
131
+
132
+ module GlnMethods
133
+ # GLN string identifier from identifiers
134
+ def gln
135
+ if gln_identifier
136
+ if gln_identifier.value =~ /\d{13}/
137
+ gln_identifier.value
138
+ else
139
+ puts "Invalid GLN #{gln_identifier.value}"
140
+ nil
141
+ end
142
+ else
143
+ nil
144
+ end
145
+ end
146
+
147
+ # private
148
+ def gln_identifier
149
+ self.identifiers.select { |id| id.type.human=="Gln" }.first
150
+ end
151
+ end
152
+
153
+ module ProprietaryIdMethods
154
+ def proprietary_ids
155
+ self.identifiers.select { |id| id.type.human=="Proprietary" }
156
+ end
157
+ end
158
+ end