im_onix 1.1.1 → 1.2.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (303) hide show
  1. checksums.yaml +4 -4
  2. data/bin/html_codelist_to_yml.rb +10 -6
  3. data/bin/onix_bench.rb +9 -4
  4. data/bin/onix_pp.rb +26 -26
  5. data/bin/onix_serialize.rb +12 -16
  6. data/data/codelists/codelist-1.yml +4 -5
  7. data/data/codelists/codelist-10.yml +13 -11
  8. data/data/codelists/codelist-100.yml +1 -0
  9. data/data/codelists/codelist-102.yml +3 -2
  10. data/data/codelists/codelist-11.yml +2 -2
  11. data/data/codelists/codelist-12.yml +8 -3
  12. data/data/codelists/codelist-121.yml +46 -17
  13. data/data/codelists/codelist-13.yml +3 -0
  14. data/data/codelists/codelist-139.yml +83 -9
  15. data/data/codelists/codelist-141.yml +4 -4
  16. data/data/codelists/codelist-142.yml +2 -2
  17. data/data/codelists/codelist-143.yml +11 -0
  18. data/data/codelists/codelist-144.yml +2 -2
  19. data/data/codelists/codelist-145.yml +4 -1
  20. data/data/codelists/codelist-147.yml +18 -2
  21. data/data/codelists/codelist-149.yml +1 -0
  22. data/data/codelists/codelist-15.yml +2 -1
  23. data/data/codelists/codelist-150.yml +46 -26
  24. data/data/codelists/codelist-151.yml +4 -1
  25. data/data/codelists/codelist-153.yml +19 -4
  26. data/data/codelists/codelist-154.yml +4 -2
  27. data/data/codelists/codelist-155.yml +3 -1
  28. data/data/codelists/codelist-156.yml +1 -0
  29. data/data/codelists/codelist-158.yml +18 -0
  30. data/data/codelists/codelist-159.yml +1 -1
  31. data/data/codelists/codelist-16.yml +3 -0
  32. data/data/codelists/codelist-160.yml +2 -0
  33. data/data/codelists/codelist-162.yml +2 -0
  34. data/data/codelists/codelist-163.yml +8 -3
  35. data/data/codelists/codelist-165.yml +3 -0
  36. data/data/codelists/codelist-166.yml +7 -2
  37. data/data/codelists/codelist-167.yml +6 -0
  38. data/data/codelists/codelist-168.yml +1 -0
  39. data/data/codelists/codelist-169.yml +2 -2
  40. data/data/codelists/codelist-17.yml +20 -2
  41. data/data/codelists/codelist-170.yml +5 -1
  42. data/data/codelists/codelist-171.yml +1 -0
  43. data/data/codelists/codelist-173.yml +1 -1
  44. data/data/codelists/codelist-175.yml +113 -35
  45. data/data/codelists/codelist-176.yml +2 -2
  46. data/data/codelists/codelist-177.yml +1 -0
  47. data/data/codelists/codelist-178.yml +6 -0
  48. data/data/codelists/codelist-179.yml +1 -0
  49. data/data/codelists/codelist-18.yml +3 -1
  50. data/data/codelists/codelist-184.yml +1 -0
  51. data/data/codelists/codelist-19.yml +5 -4
  52. data/data/codelists/codelist-196.yml +16 -4
  53. data/data/codelists/codelist-197.yml +2 -0
  54. data/data/codelists/codelist-198.yml +7 -0
  55. data/data/codelists/codelist-2.yml +6 -6
  56. data/data/codelists/codelist-20.yml +10 -1
  57. data/data/codelists/codelist-203.yml +1 -1
  58. data/data/codelists/codelist-204.yml +4 -0
  59. data/data/codelists/codelist-21.yml +24 -19
  60. data/data/codelists/codelist-215.yml +9 -0
  61. data/data/codelists/codelist-216.yml +11 -0
  62. data/data/codelists/codelist-217.yml +9 -0
  63. data/data/codelists/codelist-218.yml +5 -0
  64. data/data/codelists/codelist-219.yml +5 -0
  65. data/data/codelists/codelist-22.yml +5 -4
  66. data/data/codelists/codelist-220.yml +10 -0
  67. data/data/codelists/codelist-221.yml +6 -0
  68. data/data/codelists/codelist-222.yml +4 -0
  69. data/data/codelists/codelist-223.yml +4 -0
  70. data/data/codelists/codelist-224.yml +8 -0
  71. data/data/codelists/codelist-225.yml +4 -0
  72. data/data/codelists/codelist-226.yml +7 -0
  73. data/data/codelists/codelist-227.yml +21 -0
  74. data/data/codelists/codelist-228.yml +3 -0
  75. data/data/codelists/codelist-229.yml +5 -0
  76. data/data/codelists/codelist-23.yml +5 -3
  77. data/data/codelists/codelist-230.yml +8 -0
  78. data/data/codelists/codelist-238.yml +23 -0
  79. data/data/codelists/codelist-239.yml +4 -0
  80. data/data/codelists/codelist-24.yml +3 -0
  81. data/data/codelists/codelist-240.yml +6 -0
  82. data/data/codelists/codelist-241.yml +9 -0
  83. data/data/codelists/codelist-242.yml +24 -0
  84. data/data/codelists/codelist-243.yml +9 -0
  85. data/data/codelists/codelist-244.yml +3 -0
  86. data/data/codelists/codelist-245.yml +5 -0
  87. data/data/codelists/codelist-246.yml +4 -0
  88. data/data/codelists/codelist-247.yml +4 -0
  89. data/data/codelists/codelist-25.yml +4 -2
  90. data/data/codelists/codelist-26.yml +28 -18
  91. data/data/codelists/codelist-27.yml +35 -19
  92. data/data/codelists/codelist-28.yml +2 -1
  93. data/data/codelists/codelist-29.yml +8 -3
  94. data/data/codelists/codelist-3.yml +5 -2
  95. data/data/codelists/codelist-30.yml +6 -2
  96. data/data/codelists/codelist-32.yml +7 -0
  97. data/data/codelists/codelist-33.yml +6 -2
  98. data/data/codelists/codelist-34.yml +0 -11
  99. data/data/codelists/codelist-38.yml +1 -1
  100. data/data/codelists/codelist-39.yml +2 -2
  101. data/data/codelists/codelist-41.yml +4 -3
  102. data/data/codelists/codelist-42.yml +0 -12
  103. data/data/codelists/codelist-43.yml +3 -1
  104. data/data/codelists/codelist-44.yml +16 -3
  105. data/data/codelists/codelist-45.yml +8 -3
  106. data/data/codelists/codelist-46.yml +4 -4
  107. data/data/codelists/codelist-48.yml +20 -2
  108. data/data/codelists/codelist-49.yml +268 -1
  109. data/data/codelists/codelist-5.yml +6 -3
  110. data/data/codelists/codelist-51.yml +11 -5
  111. data/data/codelists/codelist-55.yml +2 -2
  112. data/data/codelists/codelist-57.yml +1 -0
  113. data/data/codelists/codelist-58.yml +14 -12
  114. data/data/codelists/codelist-59.yml +10 -1
  115. data/data/codelists/codelist-6.yml +39 -39
  116. data/data/codelists/codelist-60.yml +1 -1
  117. data/data/codelists/codelist-62.yml +2 -1
  118. data/data/codelists/codelist-64.yml +3 -2
  119. data/data/codelists/codelist-65.yml +1 -0
  120. data/data/codelists/codelist-68.yml +2 -2
  121. data/data/codelists/codelist-69.yml +2 -2
  122. data/data/codelists/codelist-7.yml +21 -17
  123. data/data/codelists/codelist-71.yml +16 -6
  124. data/data/codelists/codelist-73.yml +7 -5
  125. data/data/codelists/codelist-74.yml +59 -31
  126. data/data/codelists/codelist-75.yml +1 -1
  127. data/data/codelists/codelist-76.yml +3 -3
  128. data/data/codelists/codelist-78.yml +52 -26
  129. data/data/codelists/codelist-79.yml +16 -7
  130. data/data/codelists/codelist-8.yml +3 -3
  131. data/data/codelists/codelist-80.yml +6 -5
  132. data/data/codelists/codelist-81.yml +8 -5
  133. data/data/codelists/codelist-83.yml +3 -2
  134. data/data/codelists/codelist-85.yml +1 -1
  135. data/data/codelists/codelist-9.yml +7 -3
  136. data/data/codelists/codelist-90.yml +2 -2
  137. data/data/codelists/codelist-91.yml +11 -11
  138. data/data/codelists/codelist-92.yml +1 -1
  139. data/data/codelists/codelist-93.yml +9 -6
  140. data/data/codelists/codelist-96.yml +45 -40
  141. data/data/codelists/codelist-98.yml +6 -3
  142. data/data/codelists/codelist-99.yml +8 -5
  143. data/data/onix21/codelists/codelist-1.yml +2 -2
  144. data/data/onix21/codelists/codelist-10.yml +12 -12
  145. data/data/onix21/codelists/codelist-11.yml +2 -2
  146. data/data/onix21/codelists/codelist-12.yml +3 -3
  147. data/data/onix21/codelists/codelist-121.yml +9 -9
  148. data/data/onix21/codelists/codelist-13.yml +1 -1
  149. data/data/onix21/codelists/codelist-139.yml +6 -6
  150. data/data/onix21/codelists/codelist-141.yml +4 -4
  151. data/data/onix21/codelists/codelist-142.yml +2 -2
  152. data/data/onix21/codelists/codelist-145.yml +2 -2
  153. data/data/onix21/codelists/codelist-147.yml +2 -2
  154. data/data/onix21/codelists/codelist-148.yml +1 -1
  155. data/data/onix21/codelists/codelist-149.yml +1 -1
  156. data/data/onix21/codelists/codelist-15.yml +1 -1
  157. data/data/onix21/codelists/codelist-150.yml +23 -23
  158. data/data/onix21/codelists/codelist-151.yml +1 -1
  159. data/data/onix21/codelists/codelist-153.yml +3 -3
  160. data/data/onix21/codelists/codelist-154.yml +2 -2
  161. data/data/onix21/codelists/codelist-155.yml +1 -1
  162. data/data/onix21/codelists/codelist-158.yml +2 -2
  163. data/data/onix21/codelists/codelist-159.yml +1 -1
  164. data/data/onix21/codelists/codelist-163.yml +2 -2
  165. data/data/onix21/codelists/codelist-166.yml +1 -1
  166. data/data/onix21/codelists/codelist-169.yml +2 -2
  167. data/data/onix21/codelists/codelist-17.yml +2 -2
  168. data/data/onix21/codelists/codelist-173.yml +1 -1
  169. data/data/onix21/codelists/codelist-175.yml +23 -23
  170. data/data/onix21/codelists/codelist-176.yml +2 -2
  171. data/data/onix21/codelists/codelist-18.yml +1 -1
  172. data/data/onix21/codelists/codelist-196.yml +4 -4
  173. data/data/onix21/codelists/codelist-2.yml +6 -6
  174. data/data/onix21/codelists/codelist-203.yml +1 -1
  175. data/data/onix21/codelists/codelist-21.yml +1 -1
  176. data/data/onix21/codelists/codelist-216.yml +2 -2
  177. data/data/onix21/codelists/codelist-218.yml +1 -1
  178. data/data/onix21/codelists/codelist-22.yml +3 -3
  179. data/data/onix21/codelists/codelist-23.yml +2 -2
  180. data/data/onix21/codelists/codelist-25.yml +2 -2
  181. data/data/onix21/codelists/codelist-26.yml +18 -18
  182. data/data/onix21/codelists/codelist-27.yml +18 -18
  183. data/data/onix21/codelists/codelist-28.yml +1 -1
  184. data/data/onix21/codelists/codelist-29.yml +3 -3
  185. data/data/onix21/codelists/codelist-3.yml +2 -2
  186. data/data/onix21/codelists/codelist-30.yml +1 -1
  187. data/data/onix21/codelists/codelist-32.yml +1 -1
  188. data/data/onix21/codelists/codelist-33.yml +2 -2
  189. data/data/onix21/codelists/codelist-34.yml +2 -2
  190. data/data/onix21/codelists/codelist-38.yml +1 -1
  191. data/data/onix21/codelists/codelist-39.yml +2 -2
  192. data/data/onix21/codelists/codelist-41.yml +3 -3
  193. data/data/onix21/codelists/codelist-43.yml +1 -1
  194. data/data/onix21/codelists/codelist-44.yml +2 -2
  195. data/data/onix21/codelists/codelist-45.yml +4 -4
  196. data/data/onix21/codelists/codelist-46.yml +3 -3
  197. data/data/onix21/codelists/codelist-48.yml +2 -2
  198. data/data/onix21/codelists/codelist-49.yml +12 -12
  199. data/data/onix21/codelists/codelist-5.yml +3 -3
  200. data/data/onix21/codelists/codelist-51.yml +3 -3
  201. data/data/onix21/codelists/codelist-55.yml +2 -2
  202. data/data/onix21/codelists/codelist-58.yml +10 -10
  203. data/data/onix21/codelists/codelist-59.yml +2 -2
  204. data/data/onix21/codelists/codelist-6.yml +36 -36
  205. data/data/onix21/codelists/codelist-60.yml +1 -1
  206. data/data/onix21/codelists/codelist-62.yml +1 -1
  207. data/data/onix21/codelists/codelist-64.yml +2 -2
  208. data/data/onix21/codelists/codelist-68.yml +2 -2
  209. data/data/onix21/codelists/codelist-69.yml +2 -2
  210. data/data/onix21/codelists/codelist-7.yml +17 -17
  211. data/data/onix21/codelists/codelist-71.yml +2 -2
  212. data/data/onix21/codelists/codelist-73.yml +5 -5
  213. data/data/onix21/codelists/codelist-74.yml +28 -28
  214. data/data/onix21/codelists/codelist-75.yml +1 -1
  215. data/data/onix21/codelists/codelist-76.yml +3 -3
  216. data/data/onix21/codelists/codelist-78.yml +24 -24
  217. data/data/onix21/codelists/codelist-79.yml +6 -6
  218. data/data/onix21/codelists/codelist-8.yml +3 -3
  219. data/data/onix21/codelists/codelist-80.yml +5 -5
  220. data/data/onix21/codelists/codelist-81.yml +4 -4
  221. data/data/onix21/codelists/codelist-83.yml +2 -2
  222. data/data/onix21/codelists/codelist-85.yml +1 -1
  223. data/data/onix21/codelists/codelist-9.yml +3 -3
  224. data/data/onix21/codelists/codelist-90.yml +2 -2
  225. data/data/onix21/codelists/codelist-91.yml +6 -6
  226. data/data/onix21/codelists/codelist-92.yml +1 -1
  227. data/data/onix21/codelists/codelist-93.yml +6 -6
  228. data/data/onix21/codelists/codelist-96.yml +1 -1
  229. data/data/onix21/codelists/codelist-98.yml +2 -2
  230. data/data/onix21/codelists/codelist-99.yml +4 -4
  231. data/im_onix.gemspec +1 -1
  232. data/lib/onix/addressee.rb +4 -3
  233. data/lib/onix/ancillary_content.rb +7 -0
  234. data/lib/onix/audience.rb +7 -0
  235. data/lib/onix/audience_range.rb +9 -0
  236. data/lib/onix/builder.rb +181 -0
  237. data/lib/onix/cited_content.rb +15 -0
  238. data/lib/onix/code.rb +285 -6
  239. data/lib/onix/collateral_detail.rb +9 -13
  240. data/lib/onix/collection.rb +11 -4
  241. data/lib/onix/collection_sequence.rb +3 -3
  242. data/lib/onix/comparison_product_price.rb +17 -0
  243. data/lib/onix/complexity.rb +6 -0
  244. data/lib/onix/content_detail.rb +7 -0
  245. data/lib/onix/content_item.rb +32 -0
  246. data/lib/onix/contributor.rb +42 -34
  247. data/lib/onix/contributor_place.rb +12 -0
  248. data/lib/onix/copyright_statement.rb +7 -0
  249. data/lib/onix/date.rb +77 -47
  250. data/lib/onix/descriptive_detail.rb +56 -25
  251. data/lib/onix/discount.rb +9 -0
  252. data/lib/onix/discount_coded.rb +3 -3
  253. data/lib/onix/entity.rb +16 -36
  254. data/lib/onix/epub_license.rb +8 -0
  255. data/lib/onix/epub_license_expression.rb +7 -0
  256. data/lib/onix/epub_usage_constraint.rb +5 -3
  257. data/lib/onix/epub_usage_limit.rb +2 -2
  258. data/lib/onix/error.rb +2 -0
  259. data/lib/onix/extent.rb +4 -3
  260. data/lib/onix/header.rb +17 -0
  261. data/lib/onix/identifier.rb +29 -13
  262. data/lib/onix/language.rb +5 -2
  263. data/lib/onix/market.rb +2 -1
  264. data/lib/onix/market_publishing_detail.rb +13 -3
  265. data/lib/onix/measure.rb +7 -0
  266. data/lib/onix/onix_message.rb +36 -48
  267. data/lib/onix/page_run.rb +6 -0
  268. data/lib/onix/price.rb +33 -9
  269. data/lib/onix/prize.rb +11 -0
  270. data/lib/onix/product.rb +31 -11
  271. data/lib/onix/product_classification.rb +8 -0
  272. data/lib/onix/product_contact.rb +11 -0
  273. data/lib/onix/product_part.rb +18 -8
  274. data/lib/onix/product_supply.rb +3 -3
  275. data/lib/onix/professional_affiliation.rb +6 -0
  276. data/lib/onix/publishing_detail.rb +16 -9
  277. data/lib/onix/related_material.rb +2 -2
  278. data/lib/onix/related_product.rb +8 -4
  279. data/lib/onix/related_work.rb +2 -2
  280. data/lib/onix/resource_feature.rb +9 -0
  281. data/lib/onix/resource_version.rb +82 -0
  282. data/lib/onix/resource_version_feature.rb +22 -0
  283. data/lib/onix/returns_conditions.rb +8 -0
  284. data/lib/onix/review_rating.rb +7 -0
  285. data/lib/onix/sales_outlet.rb +10 -2
  286. data/lib/onix/sales_restriction.rb +6 -16
  287. data/lib/onix/sales_rights.rb +6 -3
  288. data/lib/onix/sender.rb +4 -4
  289. data/lib/onix/serializer.rb +130 -86
  290. data/lib/onix/subject.rb +10 -6
  291. data/lib/onix/subset.rb +125 -24
  292. data/lib/onix/supplier_own_coding.rb +7 -0
  293. data/lib/onix/supply_contact.rb +9 -0
  294. data/lib/onix/supply_detail.rb +20 -5
  295. data/lib/onix/supporting_resource.rb +8 -113
  296. data/lib/onix/tax.rb +11 -5
  297. data/lib/onix/territory.rb +4 -4
  298. data/lib/onix/text_content.rb +13 -0
  299. data/lib/onix/text_item.rb +12 -0
  300. data/lib/onix/title_detail.rb +3 -3
  301. data/lib/onix/title_element.rb +15 -13
  302. data/lib/onix/website.rb +4 -3
  303. metadata +58 -2
@@ -4,6 +4,7 @@ require 'time'
4
4
  require 'onix/subset'
5
5
  require 'onix/helper'
6
6
  require 'onix/code'
7
+ require 'onix/header'
7
8
  require 'onix/sender'
8
9
  require 'onix/addressee'
9
10
  require 'onix/product'
@@ -11,11 +12,22 @@ require 'onix/product'
11
12
  require 'onix/onix21'
12
13
 
13
14
  module ONIX
14
- class ONIXMessage < Subset
15
- attr_accessor :sender, :adressee, :sent_date_time,
16
- :default_language_of_text, :default_currency_code,
17
- :products,
18
- :release
15
+ class ONIXMessage < SubsetDSL
16
+ extend Forwardable
17
+ attr_accessor :release
18
+
19
+ element "Header", :subset, :cardinality => 1
20
+ elements "Product", :subset, :cardinality => 0..n
21
+
22
+ def_delegator :header, :sender
23
+ def_delegator :header, :addressee
24
+ def_delegator :header, :default_language_of_text
25
+ def_delegator :header, :default_currency_code
26
+ def_delegator :header, :sent_date_time
27
+
28
+ def header
29
+ @header || Header.new
30
+ end
19
31
 
20
32
  def initialize
21
33
  @products = []
@@ -53,6 +65,8 @@ module ONIX
53
65
  product.identifiers.each do |ident|
54
66
  @vault[ident.uniq_id] = product
55
67
  end
68
+ product.default_language_of_text = self.default_language_of_text if @header
69
+ product.default_currency_code = self.default_currency_code if @header
56
70
  end
57
71
 
58
72
  @products.each do |product|
@@ -117,57 +131,31 @@ module ONIX
117
131
  end
118
132
  end
119
133
 
134
+ def product_klass
135
+ self.version >= 300 ? Product : ONIX21::Product
136
+ end
137
+
138
+ def get_class(name)
139
+ if name == "Product"
140
+ self.product_klass
141
+ else
142
+ super(name)
143
+ end
144
+ end
145
+
120
146
  # parse filename or file
121
147
  def parse(arg, force_encoding = nil, force_release = nil)
122
- xml = open(arg, force_encoding)
123
148
  @products = []
149
+ xml = open(arg, force_encoding)
124
150
  root = xml.root
125
151
  set_release_from_xml(root, force_release)
126
152
  case root
127
- when tag_match("ONIXMessage")
128
- root.elements.each do |e|
129
- case e
130
- when tag_match("Header")
131
- e.elements.each do |t|
132
- case t
133
- when tag_match("Sender")
134
- @sender = Sender.parse(t)
135
- when tag_match("Addressee")
136
- @addressee = Addressee.parse(t)
137
- when tag_match("SentDateTime")
138
- tm = t.text
139
- @sent_date_time = Time.strptime(tm, "%Y%m%dT%H%M%S") rescue Time.strptime(tm, "%Y%m%dT%H%M") rescue Time.strptime(tm, "%Y%m%d") rescue nil
140
- when tag_match("DefaultLanguageOfText")
141
- @default_language_of_text = LanguageCode.parse(t)
142
- when tag_match("DefaultCurrencyCode")
143
- @default_currency_code = t.text
144
- else
145
- unsupported(t)
146
- end
147
- end
148
- when tag_match("Product")
149
- product = nil
150
- if self.version >= 300
151
- product = Product.parse(e)
152
- else
153
- product = ONIX21::Product.parse(e)
154
- end
155
- product.default_language_of_text = @default_language_of_text
156
- product.default_currency_code = @default_currency_code
157
- @products << product
158
- end
159
- end
160
153
  when tag_match("Product")
161
- product = nil
162
- if self.version >= 300
163
- product = Product.parse(root)
164
- else
165
- product = ONIX21::Product.parse(root)
166
- end
167
- product.default_language_of_text = @default_language_of_text
168
- product.default_currency_code = @default_currency_code
169
- @products << product
154
+ @products << self.product_klass.parse(root)
155
+ else # ONIXMessage
156
+ super(root)
170
157
  end
158
+
171
159
  init_vault
172
160
  end
173
161
  end
@@ -0,0 +1,6 @@
1
+ module ONIX
2
+ class PageRun < SubsetDSL
3
+ element "FirstPageNumber", :text, :cardinality => 1
4
+ element "LastPageNumber", :text, :cardinality => 0..1
5
+ end
6
+ end
data/lib/onix/price.rb CHANGED
@@ -1,23 +1,47 @@
1
+ require 'onix/date'
1
2
  require 'onix/tax'
2
3
  require 'onix/discount_coded'
3
- require 'onix/date'
4
+ require 'onix/discount'
5
+ require 'onix/epub_license'
6
+ require 'onix/comparison_product_price'
4
7
 
5
8
  module ONIX
6
9
  class Price < SubsetDSL
7
- element "PriceType", :subset, :shortcut => :type
8
- element "PriceQualifier", :subset, :shortcut => :qualifier
9
- element "DiscountCoded", :subset, :shortcut => :discount
10
+ # elements "PriceIdentifier", :subset, :cardinality => 0..n
11
+ element "PriceType", :subset, :shortcut => :type, :cardinality => 0..1
12
+ element "PriceQualifier", :subset, :shortcut => :qualifier, :cardinality => 0..1
13
+ elements "EpubTechnicalProtection", :subset, :cardinality => 0..n
14
+ # elements "PriceConstraint", :subset, :cardinality => 0..n
15
+ element "EpubLicense", :subset, :cardinality => 0..1
16
+ element "PriceTypeDescription", :text, :cardinality => 0..n
17
+ # element "PricePer", :subset, :cardinality => 0..1
18
+ # elements "PriceCondition", :subset, :cardinality => 0..n
19
+ # element "MinimumOrderQuantity", :integer, :cardinality => 0..1
20
+ # elements "BatchBonus", :subset, :cardinality => 0..n
21
+ elements "DiscountCoded", :subset, :cardinality => 0..n
22
+ elements "Discount", :subset, :cardinality => 0..n
10
23
  element "PriceStatus", :subset
11
- elements "PriceDate", :subset, :shortcut => :dates
12
24
  element "PriceAmount", :float,
13
25
  {
14
26
  :shortcut => :amount,
15
27
  :parse_lambda => lambda { |v| (v * 100).round },
16
- :serialize_lambda => lambda { |v| v / 100.0 }
28
+ :serialize_lambda => lambda { |v| format("%.2f", v / 100.0) },
29
+ :cardinality => 0..1
17
30
  }
18
- element "Tax", :subset
19
- element "CurrencyCode", :text, :shortcut => :currency
20
- element "Territory", :subset
31
+ element "Tax", :subset, :cardinality => 0..n
32
+ element "TaxExempt", :bool, :cardinality => 0..1
33
+ element "UnpricedItemType", :subset, :cardinality => 0..1
34
+ element "CurrencyCode", :text, :shortcut => :currency, :cardinality => 0..1
35
+ element "Territory", :subset, :cardinality => 0..1
36
+ elements "ComparisonProductPrice", :subset, :cardinality => 0..n
37
+ elements "PriceDate", :subset, :shortcut => :dates, :cardinality => 0..n
38
+ element "PrintedOnProduct", :subset, :cardinality => 0..1
39
+ element "PositionOnProduct", :subset, :cardinality => 0..1
40
+
41
+ # FIXME discount_coded != discount
42
+ def discount
43
+ self.discount_codeds.first
44
+ end
21
45
 
22
46
  # @!group High level
23
47
 
data/lib/onix/prize.rb ADDED
@@ -0,0 +1,11 @@
1
+ module ONIX
2
+ class Prize < SubsetDSL
3
+ elements "PrizeName", :text, :cardinality => 1..n
4
+ element "PrizeYear", :text, :cardinality => 0..1
5
+ element "PrizeCountry", :subset, :klass => "CountryCode", :cardinality => 0..1
6
+ element "PrizeRegion", :subset, :klass => "RegionCode", :cardinality => 0..1
7
+ element "PrizeCode", :subset, :cardinality => 0..1
8
+ elements "PrizeStatement", :text, :cardinality => 0..n
9
+ elements "PrizeJury", :text, :cardinality => 0..n
10
+ end
11
+ end
data/lib/onix/product.rb CHANGED
@@ -2,12 +2,14 @@ require 'forwardable'
2
2
  require 'onix/helper'
3
3
  require 'onix/code'
4
4
  require 'onix/entity'
5
+ require 'onix/identifier'
5
6
  require 'onix/descriptive_detail'
6
7
  require 'onix/publishing_detail'
7
8
  require 'onix/collateral_detail'
8
9
  require 'onix/related_material'
9
10
  require 'onix/supporting_resource'
10
11
  require 'onix/product_supply'
12
+ require 'onix/content_detail'
11
13
  require 'onix/territory'
12
14
  require 'onix/error'
13
15
  require 'onix/product_supplies_extractor'
@@ -20,15 +22,21 @@ module ONIX
20
22
  include ProprietaryIdMethods
21
23
  include ProductSuppliesExtractor
22
24
 
23
- element "RecordReference", :text
24
- element "NotificationType", :subset
25
- element "RecordSourceName", :text
26
- elements "ProductIdentifier", :subset, :shortcut => :identifiers
27
- element "DescriptiveDetail", :subset
28
- element "CollateralDetail", :subset
29
- element "PublishingDetail", :subset
30
- element "RelatedMaterial", :subset
31
- elements "ProductSupply", :subset
25
+ element "RecordReference", :text, :cardinality => 1
26
+ element "NotificationType", :subset, :cardinality => 1
27
+ elements "DeletionText", :text, :cardinality => 0..n
28
+ element "RecordSourceType", :subset, :cardinality => 0..1
29
+ elements "RecordSourceIdentifier", :subset, :cardinality => 0..n
30
+ element "RecordSourceName", :text, :cardinality => 0..1
31
+ elements "ProductIdentifier", :subset, :shortcut => :identifiers, :cardinality => 0..n
32
+ # elements "Barcode", :subset, :cardinality => 0..n
33
+ element "DescriptiveDetail", :subset, :cardinality => 0..1
34
+ element "CollateralDetail", :subset, :cardinality => 0..1
35
+ # element "PromotionDetail", :subset, :cardinality => 0..1
36
+ element "ContentDetail", :subset, :cardinality => 0..1
37
+ element "PublishingDetail", :subset, :cardinality => 0..1
38
+ element "RelatedMaterial", :subset, :cardinality => 0..1
39
+ elements "ProductSupply", :subset, :cardinality => 0..n
32
40
 
33
41
  # default LanguageCode from ONIXMessage
34
42
  attr_accessor :default_language_of_text
@@ -91,6 +99,18 @@ module ONIX
91
99
  def_delegator :publishing_detail, :imprint
92
100
  def_delegator :publishing_detail, :publisher
93
101
 
102
+ def collateral_detail
103
+ @collateral_detail || CollateralDetail.new
104
+ end
105
+
106
+ def descriptive_detail
107
+ @descriptive_detail || DescriptiveDetail.new
108
+ end
109
+
110
+ def publishing_detail
111
+ @publishing_detail || PublishingDetail.new
112
+ end
113
+
94
114
  # product LanguageCode of text
95
115
  def language_of_text
96
116
  @descriptive_detail.language_of_text || @default_language_of_text
@@ -274,7 +294,7 @@ module ONIX
274
294
  def excerpts
275
295
  return [] unless @collateral_detail && @collateral_detail.supporting_resources
276
296
 
277
- @collateral_detail.supporting_resources.sample_content.human_code_match(:resource_mode, ["Text", "Multimode"]).map do |resource|
297
+ @collateral_detail.supporting_resources.sample_content.human_code_match(:resource_mode, ["Text", "MultiMode"]).map do |resource|
278
298
  {
279
299
  :url => resource.versions.last.links.first.strip,
280
300
  :form => resource.versions.last.form.human,
@@ -328,7 +348,7 @@ module ONIX
328
348
  (!sales_restriction.end_date or sales_restriction.end_date >= Date.today)
329
349
  }.map { |sale_right|
330
350
  sale_right.sales_outlets.select { |sale_outlet|
331
- sale_outlet.identifier and sale_outlet.identifier.type.human == "OnixSalesOutletIdCode" }.map { |sale_outlet|
351
+ sale_outlet.identifier and sale_outlet.identifier.type.human == "OnixRetailSalesOutletIdCode" }.map { |sale_outlet|
332
352
  sale_outlet.identifier.value
333
353
  }
334
354
  }
@@ -0,0 +1,8 @@
1
+ module ONIX
2
+ class ProductClassification < SubsetDSL
3
+ element "ProductClassificationType", :subset, :cardinality => 1
4
+ element "ProductClassificationTypeName", :text, :cardinality => 0..1
5
+ element "ProductClassificationCode", :text, :cardinality => 1
6
+ element "Percent", :text, :cardinality => 0..1
7
+ end
8
+ end
@@ -0,0 +1,11 @@
1
+ require 'onix/identifier'
2
+
3
+ module ONIX
4
+ class ProductContact < SubsetDSL
5
+ element "ProductContactRole", :subset, :cardinality => 1
6
+ elements "ProductContactIdentifier", :subset, :cardinality => 0..n
7
+ element "ProductContactName", :text, :cardinality => 0..1
8
+ element "ContactName", :text, :cardinality => 0..1
9
+ element "EmailAddress", :text, :cardinality => 0..1
10
+ end
11
+ end
@@ -4,17 +4,27 @@ module ONIX
4
4
  include EanMethods
5
5
  include ProprietaryIdMethods
6
6
 
7
- elements "ProductIdentifier", :subset, :shortcut => :identifiers
8
- element "ProductForm", :subset, :shortcut => :form
9
- element "ProductFormDescription", :text, :shortcut => :file_description
10
- elements "ProductFormDetail", :subset, :shortcut => :form_details
11
- elements "ProductContentType", :subset, :shortcut => :content_types
12
- element "NumberOfCopies", :integer
7
+ element "PrimaryPart", :bool, :cardinality => 0..1
8
+ elements "ProductIdentifier", :subset, :shortcut => :identifiers, :cardinality => 0..n
9
+ element "ProductForm", :subset, :shortcut => :form, :cardinality => 1
10
+ elements "ProductFormDetail", :subset, :shortcut => :form_details, :cardinality => 0..n
11
+ elements "ProductFormFeature", :subset, :cardinality => 0..n
12
+ # element "ProductPackaging", :subset, :cardinality => 0..1
13
+ elements "ProductFormDescription", :text, :shortcut => :file_description, :cardinality => 0..n
14
+ elements "ProductContentType", :subset, :shortcut => :content_types, :cardinality => 0..n
15
+ elements "Measure", :subset, :cardinality => 0..n
16
+ element "NumberOfItemsOfThisForm", :integer, :cardinality => 0..1
17
+ element "NumberOfCopies", :integer, :cardinality => 0..1
18
+ element "CountryOfManufacture", :subset, :cardinality => 0..1
13
19
 
14
20
  def file_formats
15
21
  @product_form_details.select { |fd| fd.code =~ /^E1.*/ }
16
22
  end
17
23
 
24
+ def product_form_description
25
+ product_form_descriptions.first
26
+ end
27
+
18
28
  # full Product if referenced in ONIXMessage
19
29
  attr_accessor :product
20
30
 
@@ -47,8 +57,8 @@ module ONIX
47
57
  # raw part file description string without HTML
48
58
  # @return [String]
49
59
  def raw_file_description
50
- if @product_form_description
51
- Helper.strip_html(@product_form_description).gsub(/\s+/, " ").strip
60
+ if product_form_description
61
+ Helper.strip_html(product_form_description).gsub(/\s+/, " ").strip
52
62
  end
53
63
  end
54
64
 
@@ -5,9 +5,9 @@ require 'onix/supply_detail'
5
5
 
6
6
  module ONIX
7
7
  class ProductSupply < SubsetDSL
8
- elements "Market", :subset
9
- element "MarketPublishingDetail", :subset
10
- elements "SupplyDetail", :subset
8
+ elements "Market", :subset, :cardinality => 0..n
9
+ element "MarketPublishingDetail", :subset, :cardinality => 0..1
10
+ elements "SupplyDetail", :subset, :cardinality => 1..n
11
11
 
12
12
  # availability date from market
13
13
  # @return [Date]
@@ -0,0 +1,6 @@
1
+ module ONIX
2
+ class ProfessionalAffiliation < SubsetDSL
3
+ elements "ProfessionalPosition", :text, :cardinality => 0..n
4
+ element "Affiliation", :text, :cardinality => 0..1
5
+ end
6
+ end
@@ -1,16 +1,23 @@
1
+ require 'onix/product_contact'
1
2
  require 'onix/sales_rights'
3
+ require 'onix/copyright_statement'
2
4
  require 'onix/date'
5
+
3
6
  module ONIX
4
7
  class PublishingDetail < SubsetDSL
5
- elements "Imprint", :subset
6
- elements "Publisher", :subset
7
- element "CityOfPublication", :text, :shortcut => :city
8
- element "CountryOfPublication", :text, :shortcut => :country
9
- element "PublishingStatus", :subset, :shortcut => :status
10
- elements "PublishingDate", :subset
11
- elements "SalesRights", :subset, {:pluralize => false}
12
- element "ROWSalesRightsType", :subset, {:klass => "SalesRightsType"}
13
- element "SalesRestriction", :subset
8
+ elements "Imprint", :subset, :cardinality => 0..n
9
+ elements "Publisher", :subset, :cardinality => 0..n
10
+ element "CityOfPublication", :text, :shortcut => :city, :cardinality => 0..n
11
+ element "CountryOfPublication", :text, :shortcut => :country, :cardinality => 0..1
12
+ elements "ProductContact", :subset, :cardinality => 0..n
13
+ element "PublishingStatus", :subset, :shortcut => :status, :cardinality => 0..1
14
+ elements "PublishingStatusNote", :text, :cardinality => 0..n
15
+ elements "PublishingDate", :subset, :cardinality => 0..n
16
+ element "LatestReprintNumber", :integer, :cardinality => 0..1
17
+ elements "CopyrightStatement", :subset, :cardinality => 0..n
18
+ elements "SalesRights", :subset, :pluralize => false, :cardinality => 0..n
19
+ element "ROWSalesRightsType", :subset, :klass => "SalesRightsType", :cardinality => 0..1
20
+ element "SalesRestriction", :subset, :cardinality => 0..n
14
21
 
15
22
  # @!group High level
16
23
 
@@ -2,8 +2,8 @@ require 'onix/related_product'
2
2
  require 'onix/related_work'
3
3
  module ONIX
4
4
  class RelatedMaterial < SubsetDSL
5
- elements "RelatedWork", :subset
6
- elements "RelatedProduct", :subset
5
+ elements "RelatedWork", :subset, :cardinality => 0..n
6
+ elements "RelatedProduct", :subset, :cardinality => 0..n
7
7
 
8
8
  # @!group High level
9
9
 
@@ -3,14 +3,18 @@ module ONIX
3
3
  include EanMethods
4
4
  include ProprietaryIdMethods
5
5
 
6
- element "ProductRelationCode", :subset, :shortcut => :code
7
- elements "ProductIdentifier", :subset, :shortcut => :identifiers
8
- element "ProductForm", :subset, :shortcut => :form
9
- elements "ProductFormDetail", :subset, :shortcut => :form_details
6
+ elements "ProductRelationCode", :subset, :shortcut => :codes, :cardinality => 1..n
7
+ elements "ProductIdentifier", :subset, :shortcut => :identifiers, :cardinality => 1..n
8
+ element "ProductForm", :subset, :shortcut => :form, :cardinality => 0..1
9
+ elements "ProductFormDetail", :subset, :shortcut => :form_details, :cardinality => 0..n
10
10
 
11
11
  # full Product if referenced in ONIXMessage
12
12
  attr_accessor :product
13
13
 
14
+ def code
15
+ self.codes.first
16
+ end
17
+
14
18
  # @!group High level
15
19
  def file_format
16
20
  file_formats.first.human if file_formats.first
@@ -1,8 +1,8 @@
1
1
  module ONIX
2
2
  class RelatedWork < SubsetDSL
3
3
  include EanMethods
4
- element "WorkRelationCode", :subset, :shortcut => :code
5
- elements "WorkIdentifier", :subset, :shortcut => :identifiers
4
+ element "WorkRelationCode", :subset, :shortcut => :code, :cardinality => 0..n
5
+ elements "WorkIdentifier", :subset, :shortcut => :identifiers, :cardinality => 0..n
6
6
 
7
7
  # full Product if referenced in ONIXMessage
8
8
  attr_accessor :product