elibri_onix 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (42) hide show
  1. data/.document +5 -0
  2. data/Gemfile +14 -0
  3. data/Gemfile.lock +48 -0
  4. data/LICENSE.txt +20 -0
  5. data/README.rdoc +19 -0
  6. data/Rakefile +55 -0
  7. data/VERSION +1 -0
  8. data/elibri_onix.gemspec +104 -0
  9. data/lib/elibri_onix.rb +16 -0
  10. data/lib/elibri_onix/onix_3_0/audience_range.rb +20 -0
  11. data/lib/elibri_onix/onix_3_0/collection.rb +23 -0
  12. data/lib/elibri_onix/onix_3_0/contributor.rb +27 -0
  13. data/lib/elibri_onix/onix_3_0/extent.rb +18 -0
  14. data/lib/elibri_onix/onix_3_0/header.rb +18 -0
  15. data/lib/elibri_onix/onix_3_0/imprint.rb +18 -0
  16. data/lib/elibri_onix/onix_3_0/language.rb +19 -0
  17. data/lib/elibri_onix/onix_3_0/measure.rb +18 -0
  18. data/lib/elibri_onix/onix_3_0/onix_message.rb +18 -0
  19. data/lib/elibri_onix/onix_3_0/price.rb +40 -0
  20. data/lib/elibri_onix/onix_3_0/product.rb +144 -0
  21. data/lib/elibri_onix/onix_3_0/product_identifier.rb +17 -0
  22. data/lib/elibri_onix/onix_3_0/publisher.rb +20 -0
  23. data/lib/elibri_onix/onix_3_0/publishing_date.rb +21 -0
  24. data/lib/elibri_onix/onix_3_0/related_product.rb +35 -0
  25. data/lib/elibri_onix/onix_3_0/sales_restriction.rb +21 -0
  26. data/lib/elibri_onix/onix_3_0/sender.rb +17 -0
  27. data/lib/elibri_onix/onix_3_0/stock_quantity_coded.rb +21 -0
  28. data/lib/elibri_onix/onix_3_0/subject.rb +28 -0
  29. data/lib/elibri_onix/onix_3_0/supplier.rb +29 -0
  30. data/lib/elibri_onix/onix_3_0/supplier_identifier.rb +22 -0
  31. data/lib/elibri_onix/onix_3_0/supply_detail.rb +34 -0
  32. data/lib/elibri_onix/onix_3_0/supporting_resource.rb +25 -0
  33. data/lib/elibri_onix/onix_3_0/text_content.rb +21 -0
  34. data/lib/elibri_onix/onix_3_0/title_detail.rb +42 -0
  35. data/lib/elibri_onix/onix_3_0/title_element.rb +28 -0
  36. data/lib/elibri_onix/releases.rb +10 -0
  37. data/lib/elibri_onix/version.rb +13 -0
  38. data/test/elibri_onix_release_3_0_onix_message_test.rb +178 -0
  39. data/test/elibri_onix_test.rb +10 -0
  40. data/test/fixtures/all_possible_tags.xml +442 -0
  41. data/test/helper.rb +20 -0
  42. metadata +241 -0
@@ -0,0 +1,18 @@
1
+
2
+
3
+ module Elibri
4
+ module ONIX
5
+ module Release_3_0
6
+
7
+ class Measure
8
+ include ROXML
9
+
10
+ xml_name 'Measure'
11
+ xml_accessor :type, :from => 'MeasureType', :as => Fixnum
12
+ xml_accessor :measurement, :from => 'Measurement', :as => BigDecimal
13
+ xml_accessor :unit, :from => 'MeasureUnitCode'
14
+ end
15
+
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,18 @@
1
+
2
+ module Elibri
3
+ module ONIX
4
+ module Release_3_0
5
+
6
+ class ONIXMessage
7
+ include ROXML
8
+
9
+ xml_name 'ONIXMessage'
10
+ xml_accessor :release, :from => "@release"
11
+
12
+ xml_accessor :products, :as => [Product]
13
+ xml_accessor :header, :as => Header
14
+ end
15
+
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,40 @@
1
+
2
+
3
+
4
+
5
+ module Elibri
6
+ module ONIX
7
+ module Release_3_0
8
+
9
+ class Price
10
+ include ROXML
11
+
12
+ xml_name 'Price'
13
+
14
+ xml_accessor :type, :from => 'PriceType', :as => Fixnum
15
+ xml_accessor :minimum_order_quantity, :from => 'MinimumOrderQuantity', :as => Fixnum
16
+ xml_accessor :amount, :from => 'PriceAmount', :as => BigDecimal
17
+ xml_accessor :currency_code, :from => 'CurrencyCode'
18
+ xml_accessor :printed_on_product, :from => 'PrintedOnProduct', :as => Fixnum
19
+ xml_accessor :position_on_product, :from => 'PositionOnProduct', :as => Fixnum
20
+
21
+ with_options :in => 'Tax' do |tax|
22
+ tax.xml_accessor :tax_type, :from => 'TaxType', :as => Fixnum
23
+ tax.xml_accessor :tax_rate_percent, :from => 'TaxRatePercent', :as => BigDecimal
24
+ end
25
+
26
+
27
+ def printed_on_product?
28
+ printed_on_product == 2
29
+ end
30
+
31
+
32
+ def vat
33
+ tax_type == 1 ? tax_rate_percent : nil
34
+ end
35
+
36
+ end
37
+
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,144 @@
1
+
2
+ module Elibri
3
+ module ONIX
4
+ module Release_3_0
5
+
6
+ class Product
7
+ include ROXML
8
+
9
+ xml_name 'Product'
10
+ xml_accessor :record_reference, :from => 'RecordReference'
11
+ xml_accessor :notification_type, :from => 'NotificationType', :as => Fixnum
12
+ xml_accessor :deletion_text, :from => 'DeletionText'
13
+
14
+ xml_accessor :cover_type, :from => 'elibri:CoverType'
15
+ xml_accessor :cover_price, :from => 'elibri:CoverPrice', :as => BigDecimal
16
+ xml_accessor :vat, :from => 'elibri:Vat', :as => Fixnum
17
+ xml_accessor :pkwiu, :from => 'elibri:PKWiU'
18
+
19
+ xml_accessor :identifiers, :as => [ProductIdentifier]
20
+ xml_accessor :related_products, :as => [RelatedProduct], :in => 'RelatedMaterial'
21
+ xml_accessor :supply_details, :as => [SupplyDetail], :in => 'ProductSupply'
22
+
23
+ with_options :in => 'DescriptiveDetail' do |descriptive_detail|
24
+ descriptive_detail.xml_accessor :product_composition, :from => 'ProductComposition', :as => Fixnum
25
+ descriptive_detail.xml_accessor :product_form, :from => 'ProductForm'
26
+ descriptive_detail.xml_accessor :measures, :as => [Measure]
27
+ descriptive_detail.xml_accessor :title_details, :as => [TitleDetail]
28
+ descriptive_detail.xml_accessor :collections, :as => [Collection]
29
+ descriptive_detail.xml_accessor :contributors, :as => [Contributor]
30
+ descriptive_detail.xml_accessor :languages, :as => [Language]
31
+ descriptive_detail.xml_accessor :extents, :as => [Extent]
32
+ descriptive_detail.xml_accessor :subjects, :as => [Subject]
33
+ descriptive_detail.xml_accessor :audience_ranges, :as => [AudienceRange]
34
+ descriptive_detail.xml_accessor :edition_statement, :from => 'EditionStatement'
35
+ descriptive_detail.xml_accessor :number_of_illustrations, :from => 'NumberOfIllustrations', :as => Fixnum
36
+ end
37
+
38
+ with_options :in => 'CollateralDetail' do |collateral_detail|
39
+ collateral_detail.xml_accessor :text_contents, :as => [TextContent]
40
+ collateral_detail.xml_accessor :supporting_resources, :as => [SupportingResource]
41
+ end
42
+
43
+ with_options :in => 'PublishingDetail' do |publishing_detail|
44
+ publishing_detail.xml_accessor :imprint, :as => Imprint
45
+ publishing_detail.xml_accessor :publisher, :as => Publisher
46
+ publishing_detail.xml_accessor :publishing_status, :from => 'PublishingStatus', :as => Fixnum
47
+ publishing_detail.xml_accessor :publishing_date, :as => PublishingDate
48
+ publishing_detail.xml_accessor :sales_restrictions, :as => [SalesRestriction]
49
+ end
50
+
51
+
52
+ def isbn13
53
+ identifiers.find {|identifier| identifier.type == 15}.try(:value)
54
+ end
55
+
56
+
57
+ def ean13
58
+ identifiers.find {|identifier| identifier.type == 3}.try(:value)
59
+ end
60
+
61
+
62
+ %w{height width thickness weight}.each do |method_name|
63
+ define_method(method_name) do
64
+ send(method_name + '_measure').try(:measurement)
65
+ end
66
+
67
+ define_method(method_name + '_unit') do
68
+ send(method_name + '_measure').try(:unit)
69
+ end
70
+ end
71
+
72
+
73
+ def proprietary_identifiers
74
+ Hash.new.tap do |hash|
75
+ identifiers.each do |identifier|
76
+ hash[identifier.type_name] = identifier.value if identifier.type == 1
77
+ end
78
+ end
79
+ end
80
+
81
+
82
+ def full_title
83
+ title_details.find {|title_detail| title_detail.type == 1}.try(:full_title)
84
+ end
85
+
86
+
87
+ def original_title
88
+ title_details.find {|title_detail| title_detail.type == 3}.try(:full_title)
89
+ end
90
+
91
+
92
+ def trade_title
93
+ title_details.find {|title_detail| title_detail.type == 10}.try(:full_title)
94
+ end
95
+
96
+
97
+ def number_of_pages
98
+ extents.find {|extent| extent.type == 0}.try(:value)
99
+ end
100
+
101
+
102
+ def reading_age_from
103
+ age_from = audience_ranges.find {|audience_range| (audience_range.qualifier == 18) && (audience_range.precision == 3)}.try(:value)
104
+ age_from.present? ? age_from.to_i : nil
105
+ end
106
+
107
+
108
+ def reading_age_to
109
+ age_to = audience_ranges.find {|audience_range| (audience_range.qualifier == 18) && (audience_range.precision == 4)}.try(:value)
110
+ age_to.present? ? age_to.to_i : nil
111
+ end
112
+
113
+
114
+ def imprint_name
115
+ imprint.try(:name)
116
+ end
117
+
118
+
119
+ private
120
+
121
+ def height_measure
122
+ measures.find {|measure| measure.type == 1}
123
+ end
124
+
125
+
126
+ def width_measure
127
+ measures.find {|measure| measure.type == 2}
128
+ end
129
+
130
+
131
+ def thickness_measure
132
+ measures.find {|measure| measure.type == 3}
133
+ end
134
+
135
+
136
+ def weight_measure
137
+ measures.find {|measure| measure.type == 8}
138
+ end
139
+
140
+ end
141
+
142
+ end
143
+ end
144
+ end
@@ -0,0 +1,17 @@
1
+
2
+ module Elibri
3
+ module ONIX
4
+ module Release_3_0
5
+
6
+ class ProductIdentifier
7
+ include ROXML
8
+
9
+ xml_name 'ProductIdentifier'
10
+ xml_accessor :type, :as => Fixnum, :from => 'ProductIDType'
11
+ xml_accessor :type_name, :from => 'IDTypeName'
12
+ xml_accessor :value, :from => 'IDValue'
13
+ end
14
+
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,20 @@
1
+
2
+
3
+
4
+ module Elibri
5
+ module ONIX
6
+ module Release_3_0
7
+
8
+ class Publisher
9
+ include ROXML
10
+
11
+ xml_name 'Publisher'
12
+
13
+ xml_accessor :role, :from => 'PublishingRole', :as => Fixnum
14
+ xml_accessor :name, :from => 'PublisherName'
15
+
16
+ end
17
+
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,21 @@
1
+
2
+
3
+
4
+ module Elibri
5
+ module ONIX
6
+ module Release_3_0
7
+
8
+ class PublishingDate
9
+ include ROXML
10
+
11
+ xml_name 'PublishingDate'
12
+
13
+ xml_accessor :role, :from => 'PublishingDateRole', :as => Fixnum
14
+ xml_accessor :format, :from => 'DateFormat', :as => Fixnum
15
+ xml_accessor :date, :from => 'Date'
16
+
17
+ end
18
+
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,35 @@
1
+
2
+
3
+
4
+
5
+ module Elibri
6
+ module ONIX
7
+ module Release_3_0
8
+
9
+ class RelatedProduct
10
+ include ROXML
11
+
12
+ xml_name 'RelatedProduct'
13
+
14
+ xml_accessor :relation_code, :from => 'ProductRelationCode', :as => Fixnum
15
+ xml_accessor :identifiers, :as => [ProductIdentifier]
16
+
17
+
18
+ def isbn13
19
+ identifiers.find {|identifier| identifier.type == 15}.try(:value)
20
+ end
21
+
22
+
23
+ def proprietary_identifiers
24
+ Hash.new.tap do |hash|
25
+ identifiers.each do |identifier|
26
+ hash[identifier.type_name] = identifier.value if identifier.type == 1
27
+ end
28
+ end
29
+ end
30
+
31
+ end
32
+
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,21 @@
1
+
2
+
3
+
4
+ module Elibri
5
+ module ONIX
6
+ module Release_3_0
7
+
8
+ class SalesRestriction
9
+ include ROXML
10
+
11
+ xml_name 'SalesRestriction'
12
+
13
+ xml_accessor :type, :from => 'SalesRestrictionType', :as => Fixnum
14
+ xml_accessor :outlet_name, :from => 'SalesOutletName', :in => 'SalesOutlet'
15
+ xml_accessor :end_date, :from => 'EndDate', :as => Date
16
+
17
+ end
18
+
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,17 @@
1
+
2
+ module Elibri
3
+ module ONIX
4
+ module Release_3_0
5
+
6
+ class Sender
7
+ include ROXML
8
+ xml_name 'Sender'
9
+
10
+ xml_accessor :sender_name, :from => 'SenderName'
11
+ xml_accessor :contact_name, :from => 'ContactName'
12
+ xml_accessor :email_address, :from => 'EmailAddress'
13
+ end
14
+
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,21 @@
1
+
2
+
3
+
4
+
5
+ module Elibri
6
+ module ONIX
7
+ module Release_3_0
8
+
9
+ class StockQuantityCoded
10
+ include ROXML
11
+
12
+ xml_name 'StockQuantityCoded'
13
+
14
+ xml_accessor :code_type, :from => 'StockQuantityCodeType', :as => Fixnum
15
+ xml_accessor :code, :from => 'StockQuantityCode'
16
+
17
+ end
18
+
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,28 @@
1
+
2
+
3
+ module Elibri
4
+ module ONIX
5
+ module Release_3_0
6
+
7
+ class Subject
8
+ include ROXML
9
+
10
+ xml_name 'Subject'
11
+ xml_accessor :scheme_identifier, :from => 'SubjectSchemeIdentifier', :as => Fixnum
12
+ xml_accessor :scheme_name, :from => 'SubjectSchemeName'
13
+ xml_accessor :scheme_version, :from => 'SubjectSchemeVersion'
14
+ xml_accessor :code, :from => 'SubjectCode'
15
+ xml_accessor :heading_text, :from => 'SubjectHeadingText'
16
+
17
+ xml_accessor :main_subject, :from => 'MainSubject'
18
+
19
+
20
+ def main_subject?
21
+ main_subject == ''
22
+ end
23
+
24
+ end
25
+
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,29 @@
1
+
2
+
3
+
4
+ module Elibri
5
+ module ONIX
6
+ module Release_3_0
7
+
8
+ class Supplier
9
+ include ROXML
10
+
11
+ xml_name 'Supplier'
12
+
13
+ xml_accessor :role, :from => 'SupplierRole', :as => Fixnum
14
+ xml_accessor :identifiers, :as => [SupplierIdentifier]
15
+ xml_accessor :name, :from => 'SupplierName'
16
+ xml_accessor :telephone_number, :from => 'TelephoneNumber'
17
+ xml_accessor :email_address, :from => 'EmailAddress'
18
+ xml_accessor :website, :from => 'WebsiteLink', :in => 'Website'
19
+
20
+
21
+ def nip
22
+ identifiers.find {|identifier| (identifier.type == 2) && (identifier.type_name == 'NIP')}.try(:value)
23
+ end
24
+
25
+ end
26
+
27
+ end
28
+ end
29
+ end