elibri_onix 0.1.23 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. data/Gemfile +1 -0
  2. data/Gemfile.lock +3 -5
  3. data/elibri_onix.gemspec +2 -1
  4. data/lib/elibri_onix.rb +3 -2
  5. data/lib/elibri_onix/external_id.rb +15 -2
  6. data/lib/elibri_onix/external_timestamp.rb +5 -1
  7. data/lib/elibri_onix/nokogiri_patch.rb +17 -0
  8. data/lib/elibri_onix/onix_3_0/audience_range.rb +14 -8
  9. data/lib/elibri_onix/onix_3_0/collection.rb +10 -9
  10. data/lib/elibri_onix/onix_3_0/contributor.rb +21 -18
  11. data/lib/elibri_onix/onix_3_0/extent.rb +18 -11
  12. data/lib/elibri_onix/onix_3_0/header.rb +7 -6
  13. data/lib/elibri_onix/onix_3_0/imprint.rb +6 -5
  14. data/lib/elibri_onix/onix_3_0/language.rb +16 -9
  15. data/lib/elibri_onix/onix_3_0/measure.rb +17 -9
  16. data/lib/elibri_onix/onix_3_0/onix_message.rb +14 -30
  17. data/lib/elibri_onix/onix_3_0/price.rb +19 -17
  18. data/lib/elibri_onix/onix_3_0/product.rb +118 -77
  19. data/lib/elibri_onix/onix_3_0/product_identifier.rb +9 -7
  20. data/lib/elibri_onix/onix_3_0/publisher.rb +19 -9
  21. data/lib/elibri_onix/onix_3_0/publishing_date.rb +10 -9
  22. data/lib/elibri_onix/onix_3_0/related_product.rb +10 -15
  23. data/lib/elibri_onix/onix_3_0/sales_restriction.rb +11 -8
  24. data/lib/elibri_onix/onix_3_0/sender.rb +9 -8
  25. data/lib/elibri_onix/onix_3_0/stock_quantity_coded.rb +8 -11
  26. data/lib/elibri_onix/onix_3_0/subject.rb +19 -13
  27. data/lib/elibri_onix/onix_3_0/supplier.rb +15 -12
  28. data/lib/elibri_onix/onix_3_0/supplier_identifier.rb +9 -8
  29. data/lib/elibri_onix/onix_3_0/supply_detail.rb +16 -15
  30. data/lib/elibri_onix/onix_3_0/supporting_resource.rb +15 -15
  31. data/lib/elibri_onix/onix_3_0/text_content.rb +18 -15
  32. data/lib/elibri_onix/onix_3_0/title_detail.rb +17 -11
  33. data/lib/elibri_onix/onix_3_0/title_element.rb +10 -9
  34. data/lib/elibri_onix/version.rb +1 -1
  35. data/test/elibri_contributors_test.rb +1 -1
  36. data/test/elibri_onix_release_3_0_onix_message_test.rb +2 -2
  37. data/test/elibri_supporting_resources_test.rb +1 -1
  38. data/test/elibri_texts_test.rb +4 -4
  39. data/test/helper.rb +2 -1
  40. metadata +252 -295
@@ -3,16 +3,8 @@ module Elibri
3
3
  module ONIX
4
4
  module Release_3_0
5
5
 
6
- class ONIXMessage
7
- include ROXML
8
- #include Inspector
9
-
10
- xml_name 'ONIXMessage'
11
- xml_accessor :release, :from => "@release"
12
- xml_accessor :elibri_dialect, :from => "elibri:Dialect"
13
-
14
- xml_accessor :products, :as => [Product]
15
- xml_accessor :header, :as => Header
6
+ class ONIXMessage
7
+ attr_accessor :release, :elibri_dialect, :products, :header, :to_xml
16
8
 
17
9
  ATTRIBUTES = [
18
10
  :release, :elibri_dialect, :header
@@ -21,28 +13,20 @@ module Elibri
21
13
  RELATIONS = [
22
14
  :products
23
15
  ]
24
-
16
+
25
17
  def self.from_xml(data, *initialization_args)
26
- xml = XML::Node.from(data)
27
-
28
- new(*initialization_args).tap do |inst|
29
- inst.roxml_references = roxml_attrs.map {|attr| attr.to_ref(inst) }
18
+ Kernel.warn "[DEPRECATION] `from_xml` is deprecated. Please use `new` instead."
19
+ self.new(data, *initialization_args)
20
+ end
30
21
 
31
- inst.roxml_references.each do |ref|
32
- value = ref.value_in(xml)
33
- if ref.is_a? ROXML::XMLObjectRef
34
- Array(value).each do |obj|
35
- obj.instance_variable_set(:@elibri_dialect, inst.elibri_dialect)
36
- end
37
- end
38
- inst.respond_to?(ref.opts.setter) \
39
- ? inst.send(ref.opts.setter, value) \
40
- : inst.instance_variable_set(ref.opts.instance_variable_name, value)
41
- end
42
- inst.send(:after_parse) if inst.respond_to?(:after_parse, true)
43
- end
44
- rescue ArgumentError => e
45
- raise e, e.message + " for class #{self}"
22
+ def initialize(data, *initialization_args)
23
+ @to_xml = data.to_s
24
+ xml = Nokogiri::XML(data) unless xml.is_a?(Nokogiri::XML::Document)
25
+ onix_message = xml.children.first
26
+ @release = onix_message['release']
27
+ @elibri_dialect = onix_message.at_xpath('elibri:Dialect').try(:text)
28
+ @header = Header.new(onix_message.at_xpath('xmlns:Header')) if onix_message.at_xpath('xmlns:Header')
29
+ @products = onix_message.xpath('xmlns:Product').map { |product_node| Product.new(product_node) }
46
30
  end
47
31
 
48
32
 
@@ -7,10 +7,6 @@ module Elibri
7
7
  module Release_3_0
8
8
 
9
9
  class Price
10
- include ROXML
11
- include Inspector
12
-
13
- xml_name 'Price'
14
10
 
15
11
  ATTRIBUTES = [
16
12
  :type, :minimum_order_quantity, :amount, :currency_code, :printed_on_product,
@@ -18,25 +14,31 @@ module Elibri
18
14
  ]
19
15
 
20
16
  RELATIONS = []
21
-
22
- xml_accessor :type, :from => 'PriceType', :as => Fixnum
23
- xml_accessor :minimum_order_quantity, :from => 'MinimumOrderQuantity', :as => Fixnum
24
- xml_accessor :amount, :from => 'PriceAmount', :as => BigDecimal
25
- xml_accessor :currency_code, :from => 'CurrencyCode'
26
- xml_accessor :printed_on_product, :from => 'PrintedOnProduct', :as => Fixnum
27
- xml_accessor :position_on_product, :from => 'PositionOnProduct', :as => Fixnum
28
-
29
- xml_accessor :tax_type, :in => 'Tax', :from => 'TaxType', :as => Fixnum
30
- xml_accessor :tax_rate_percent, :in => 'Tax', :from => 'TaxRatePercent', :as => BigDecimal
31
-
17
+
18
+ attr_accessor :type, :minimum_order_quantity, :amount, :currency_code, :printed_on_product,
19
+ :position_on_product, :tax_type, :tax_rate_percent, :to_xml
20
+
21
+ def initialize(data)
22
+ @to_xml = data.to_s
23
+ @type = data.at_xpath('xmlns:PriceType').try(:text).try(:to_i)
24
+ @minimum_order_quantity = data.at_xpath('xmlns:MinimumOrderQuantity').try(:text).try(:to_i)
25
+ @amount = BigDecimal.new(data.at_xpath('xmlns:PriceAmount').try(:text))
26
+ @currency_code = data.at_xpath('xmlns:CurrencyCode').try(:text)
27
+ @printed_on_product = data.at_xpath('xmlns:PrintedOnProduct').try(:text).try(:to_i)
28
+ @position_on_product = data.at_xpath('xmlns:PositionOnProduct').try(:text).try(:to_i)
29
+ if data.at_xpath('xmlns:Tax')
30
+ @tax_type = data.at_xpath('xmlns:Tax').at_xpath('xmlns:TaxType').try(:text).try(:to_i)
31
+ @tax_rate_percent = BigDecimal.new(data.at_xpath('xmlns:Tax').at_xpath('xmlns:TaxRatePercent').try(:text)) if data.at_xpath('xmlns:Tax').at_xpath('xmlns:TaxRatePercent')
32
+ end
33
+ end
32
34
 
33
35
  def printed_on_product?
34
- printed_on_product == 2
36
+ @printed_on_product == 2
35
37
  end
36
38
 
37
39
 
38
40
  def vat
39
- tax_type == 1 ? tax_rate_percent : nil
41
+ @tax_type == 1 ? @tax_rate_percent : nil
40
42
  end
41
43
 
42
44
  end
@@ -30,31 +30,99 @@ module Elibri
30
30
  :ghostwriters, :scenarists, :originators, :illustrators, :photographers, :author_of_prefaces, :drawers,
31
31
  :cover_designers, :inked_or_colored_bys, :editors, :revisors, :translators, :editor_in_chiefs, :read_bys
32
32
  ]
33
-
34
-
35
- include ROXML
36
-
37
-
38
33
 
39
34
  attr_accessor :elibri_dialect, :height, :width, :thickness, :weight, :ean, :isbn13, :number_of_pages, :duration,
40
35
  :file_size, :publisher_name, :publisher_id, :imprint_name, :current_state, :reading_age_from, :reading_age_to,
41
36
  :table_of_contents, :description, :reviews, :excerpts, :series, :title, :subtitle, :collection_title,
42
37
  :collection_part, :full_title, :original_title, :trade_title, :short_description,
43
38
  :elibri_product_category1_id, :elibri_product_category2_id, :preview_exists
44
-
45
-
46
- xml_name 'Product'
47
- xml_accessor :record_reference, :from => 'RecordReference'
48
- xml_accessor :notification_type, :from => 'NotificationType'
49
- xml_accessor :deletion_text, :from => 'DeletionText'
50
-
51
- # Load attributes specific for dialect 3.0.1
52
- xml_accessor :cover_type_from_3_0_1, :from => 'elibri:CoverType'
53
- xml_accessor :cover_price_from_3_0_1, :from => 'elibri:CoverPrice', :as => BigDecimal
54
- xml_accessor :vat_from_3_0_1, :from => 'elibri:Vat', :as => Fixnum
55
- xml_accessor :pkwiu_from_3_0_1, :from => 'elibri:PKWiU'
56
- xml_accessor :preview_exists_from_3_0_1, :from => "elibri:preview_exists"
57
-
39
+
40
+
41
+ #from xml_accessor
42
+ attr_accessor :record_reference, :notification_type, :deletion_text
43
+
44
+ # Load attributes specific for dialect 3.0.1
45
+ attr_accessor :cover_type_from_3_0_1, :cover_price_from_3_0_1, :vat_from_3_0_1, :pkwiu_from_3_0_1, :preview_exists_from_3_0_1,
46
+ :product_composition, :product_form, :measures, :title_details, :collections, :contributors, :no_contributor,
47
+ :languages, :extents, :subjects, :audience_ranges, :edition_statement, :number_of_illustrations, :text_contents,
48
+ :supporting_resources, :imprint, :publisher, :publishing_status, :publishing_date, :sales_restrictions,
49
+ :identifiers, :related_products, :supply_details, :to_xml
50
+
51
+
52
+ def initialize(data)
53
+ @to_xml = data.to_s
54
+ #initialize variables that need to be array
55
+ ##descriptive_details
56
+ @text_contents = []
57
+ @supporting_resources = []
58
+ ##collateral_details
59
+ @measures = []
60
+ @title_details = []
61
+ @collections = []
62
+ @contributors = []
63
+ @languages = []
64
+ @extents = []
65
+ @subjects = []
66
+ @audience_ranges = []
67
+ ##publishing_details
68
+ @sales_restrictions = []
69
+
70
+ #moving to parsing attributes
71
+
72
+ @elibri_dialect = data.at_xpath('//elibri:Dialect').try(:text)
73
+ @record_reference = data.at_xpath('xmlns:RecordReference').try(:text)
74
+ @notification_type = data.at_xpath('xmlns:NotificationType').try(:text)
75
+ @deletion_text = data.at_xpath('xmlns:DeletionText').try(:text)
76
+ @cover_type_from_3_0_1 = data.at_xpath('elibri:CoverType').try(:text)
77
+ @cover_price_from_3_0_1 = BigDecimal.new(data.at_xpath('elibri:CoverPrice').try(:text)) if data.at_xpath('elibri:CoverPrice')
78
+ @vat_from_3_0_1 = data.at_xpath('elibri:Vat').try(:text).try(:to_i)
79
+ @pkwiu_from_3_0_1 = data.at_xpath('elibri:PKWiU').try(:text)
80
+ @preview_exists_from_3_0_1 = data.at_xpath('elibri:preview_exists').try(:text)
81
+ @identifiers = data.xpath('xmlns:ProductIdentifier').map { |ident_data| ProductIdentifier.new(ident_data) }
82
+ begin
83
+ @related_products = data.at_xpath('xmlns:RelatedMaterial').xpath('xmlns:RelatedProduct').map { |related_data| RelatedProduct.new(related_data) }
84
+ rescue
85
+ @related_products = []
86
+ end
87
+ begin
88
+ @supply_details = data.at_xpath('xmlns:ProductSupply').xpath('xmlns:SupplyDetail').map { |supply_data| SupplyDetail.new(supply_data) }
89
+ rescue
90
+ @supply_details = []
91
+ end
92
+ descriptive_details_setup(data.at_xpath('xmlns:DescriptiveDetail')) if data.at_xpath('xmlns:DescriptiveDetail')
93
+ collateral_details_setup(data.at_xpath('xmlns:CollateralDetail')) if data.at_xpath('xmlns:CollateralDetail')
94
+ publishing_details_setup(data.at_xpath('xmlns:PublishingDetail')) if data.at_xpath('xmlns:PublishingDetail')
95
+ after_parse
96
+ end
97
+
98
+ def descriptive_details_setup(data)
99
+ @product_composition = data.at_xpath('xmlns:ProductComposition').try(:text)
100
+ @product_form = data.at_xpath('xmlns:ProductForm').try(:text)
101
+ @measures = data.xpath('xmlns:Measure').map { |measure_data| Measure.new(measure_data) }
102
+ @title_details = data.xpath('xmlns:TitleDetail').map { |title_data| TitleDetail.new(title_data) }
103
+ @collections = data.xpath('xmlns:Collection').map { |collection_data| Collection.new(collection_data) }
104
+ @contributors = data.xpath('xmlns:Contributor').map { |contributor_data| Contributor.new(contributor_data) }
105
+ @no_contributor = data.at_xpath('xmlns:NoContributor').try(:text)
106
+ @languages = data.xpath('xmlns:Language').map { |language_data| Language.new(language_data) }
107
+ @extents = data.xpath('xmlns:Extent').map { |extent_data| Extent.new(extent_data) }
108
+ @subjects = data.xpath('xmlns:Subject').map { |subject_data| Subject.new(subject_data) }
109
+ @audience_ranges = data.xpath('xmlns:AudienceRange').map { |audience_data| AudienceRange.new(audience_data) }
110
+ @edition_statement = data.at_xpath('xmlns:EditionStatement').try(:text)
111
+ @number_of_illustrations = data.at_xpath('xmlns:NumberOfIllustrations').try(:text).try(:to_i)
112
+ end
113
+
114
+ def collateral_details_setup(data)
115
+ @text_contents = data.xpath('xmlns:TextContent').map { |text_detail| TextContent.new(text_detail) }
116
+ @supporting_resources = data.xpath('xmlns:SupportingResource').map { |supporting_data| SupportingResource.new(supporting_data) }
117
+ end
118
+
119
+ def publishing_details_setup(data)
120
+ @imprint = Imprint.new(data.at_xpath('xmlns:Imprint')) if data.at_xpath('xmlns:Imprint')
121
+ @publisher = Publisher.new(data.at_xpath('xmlns:Publisher')) if data.at_xpath('xmlns:Publisher')
122
+ @publishing_status = data.at_xpath('xmlns:PublishingStatus').try(:text)
123
+ @publishing_date = PublishingDate.new(data.at_xpath('xmlns:PublishingDate')) if data.at_xpath('xmlns:PublishingDate')
124
+ @sales_restrictions = data.xpath('xmlns:SalesRestriction').map { |restriction_data| SalesRestriction.new(restriction_data) }
125
+ end
58
126
 
59
127
  # Attributes in namespace elibri:* are specific for dialect >= 3.0.1.
60
128
  # If dialect is less than 3.0.1, returns nil.
@@ -70,53 +138,26 @@ module Elibri
70
138
  EVAL_END
71
139
  end
72
140
 
73
- xml_accessor :identifiers, :as => [ProductIdentifier]
74
- xml_accessor :related_products, :as => [RelatedProduct], :in => 'RelatedMaterial'
75
- xml_accessor :supply_details, :as => [SupplyDetail], :in => 'ProductSupply'
76
-
77
- xml_accessor :product_composition, :in => 'DescriptiveDetail', :from => 'ProductComposition'
78
- xml_accessor :product_form, :in => 'DescriptiveDetail', :from => 'ProductForm'
79
- xml_accessor :measures, :in => 'DescriptiveDetail', :as => [Measure]
80
- xml_accessor :title_details, :in => 'DescriptiveDetail', :as => [TitleDetail]
81
- xml_accessor :collections, :in => 'DescriptiveDetail', :as => [Collection]
82
- xml_accessor :contributors, :in => 'DescriptiveDetail', :as => [Contributor]
83
- xml_accessor :no_contributor, :in => 'DescriptiveDetail', :from => 'NoContributor'
84
- xml_accessor :languages, :in => 'DescriptiveDetail', :as => [Language]
85
- xml_accessor :extents, :in => 'DescriptiveDetail', :as => [Extent]
86
- xml_accessor :subjects, :in => 'DescriptiveDetail', :as => [Subject]
87
- xml_accessor :audience_ranges, :in => 'DescriptiveDetail', :as => [AudienceRange]
88
- xml_accessor :edition_statement, :in => 'DescriptiveDetail', :from => 'EditionStatement'
89
- xml_accessor :number_of_illustrations, :in => 'DescriptiveDetail', :from => 'NumberOfIllustrations', :as => Fixnum
90
-
91
- xml_accessor :text_contents, :in => 'CollateralDetail', :as => [TextContent]
92
- xml_accessor :supporting_resources, :in => 'CollateralDetail', :as => [SupportingResource]
93
-
94
- xml_accessor :imprint, :in => 'PublishingDetail', :as => Imprint
95
- xml_accessor :publisher, :in => 'PublishingDetail', :as => Publisher
96
- xml_accessor :publishing_status, :in => 'PublishingDetail', :from => 'PublishingStatus'
97
- xml_accessor :publishing_date, :in => 'PublishingDetail', :as => PublishingDate
98
- xml_accessor :sales_restrictions, :in => 'PublishingDetail', :as => [SalesRestriction]
99
-
100
141
  def sales_restrictions?
101
- sales_restrictions.size > 0
142
+ @sales_restrictions.size > 0
102
143
  end
103
144
 
104
145
  def no_contributor?
105
- no_contributor == ""
146
+ @no_contributor == ""
106
147
  end
107
148
 
108
149
  def unnamed_persons?
109
- contributors.size == 1 && contributors[0].unnamed_persons.present?
150
+ @contributors.size == 1 && contributors[0].unnamed_persons.present?
110
151
  end
111
152
 
112
153
  def authors
113
- unnamed_persons? ? ["praca zbiorowa"] : contributors.find_all { |c| c.role_name == "author" }.map(&:person_name)
154
+ unnamed_persons? ? ["praca zbiorowa"] : @contributors.find_all { |c| c.role_name == "author" }.map(&:person_name)
114
155
  end
115
156
 
116
157
  [:ghostwriter, :scenarist, :originator, :illustrator, :photographer, :author_of_preface, :drawer, :cover_designer,
117
158
  :inked_or_colored_by, :editor, :revisor, :translator, :editor_in_chief, :read_by].each do |role|
118
159
  define_method "#{role}s" do
119
- contributors.find_all { |c| c.role_name == role.to_s }.map(&:person_name)
160
+ @contributors.find_all { |c| c.role_name == role.to_s }.map(&:person_name)
120
161
  end
121
162
  end
122
163
 
@@ -131,11 +172,11 @@ module Elibri
131
172
  end
132
173
 
133
174
  def front_cover
134
- supporting_resources.find { |resource| resource.content_type_name == "front_cover" }
175
+ @supporting_resources.find { |resource| resource.content_type_name == "front_cover" }
135
176
  end
136
177
 
137
178
  def series_names
138
- series.map { |series| series[0] }
179
+ @series.map { |series| series[0] }
139
180
  end
140
181
 
141
182
  def premiere
@@ -143,7 +184,7 @@ module Elibri
143
184
  end
144
185
 
145
186
  def proprietary_identifiers
146
- identifiers.find_all { |i| i.identifier_type == "proprietary" }.inject({}) { |res, ident| res[ident.type_name] = ident.value; res }
187
+ @identifiers.find_all { |i| i.identifier_type == "proprietary" }.inject({}) { |res, ident| res[ident.type_name] = ident.value; res }
147
188
  end
148
189
 
149
190
  #I don't want to see roxml_references in output - it's faar to big output
@@ -186,7 +227,7 @@ module Elibri
186
227
  private
187
228
 
188
229
  def find_title(code)
189
- title_details.find {|title_detail| title_detail.type == code}
230
+ @title_details.find {|title_detail| title_detail.type == code}
190
231
  end
191
232
 
192
233
  def after_parse
@@ -194,23 +235,23 @@ private
194
235
  instance_variable_set("@#{mn}", measures.find { |m| m.type_name == mn }.try(:measurement))
195
236
  end
196
237
 
197
- @ean = identifiers.find { |identifier| identifier.identifier_type == "ean" }.try(:value)
198
- @isbn13 = identifiers.find { |identifier| identifier.identifier_type == "isbn13" }.try(:value)
199
- @number_of_pages = extents.find {|extent| extent.type_name == "page_count" }.try(:value)
200
- @duration = extents.find {|extent| extent.type_name == "duration" }.try(:value)
201
- @file_size = extents.find {|extent| extent.type_name == "file_size" }.try(:value)
202
- @publisher_name = publisher.name if publisher
203
- @publisher_id = publisher.id if publisher
204
- @imprint_name = imprint.name if imprint
205
-
206
- @reading_age_from = audience_ranges.find {|ar| (ar.qualifier == "18") && (ar.precision == "03")}.try(:value)
207
- @reading_age_to = audience_ranges.find {|ar| (ar.qualifier == "18") && (ar.precision == "04")}.try(:value)
208
- @table_of_contents = text_contents.find { |t| t.type_name == "table_of_contents" }
209
- @description = text_contents.find { |t| t.type_name == "main_description" }
210
- @short_description = text_contents.find { |t| t.type_name == "short_description" }
211
- @reviews = text_contents.find_all { |t| t.type_name == "review" }
212
- @excerpts = text_contents.find_all { |t| t.type_name == "excerpt" }
213
- @series = collections.map { |c| [c.title_detail.elements[0].title, c.title_detail.elements[0].part_number] }
238
+ @ean = @identifiers.find { |identifier| identifier.identifier_type == "ean" }.try(:value)
239
+
240
+ @number_of_pages = @extents.find {|extent| extent.type_name == "page_count" }.try(:value)
241
+ @duration = @extents.find {|extent| extent.type_name == "duration" }.try(:value)
242
+ @file_size = @extents.find {|extent| extent.type_name == "file_size" }.try(:value)
243
+ @publisher_name = @publisher.name if publisher
244
+ @publisher_id = @publisher.eid if publisher
245
+ @imprint_name = @imprint.name if imprint
246
+ @isbn13 = @identifiers.find { |identifier| identifier.identifier_type == "isbn13" }.try(:value)
247
+ @reading_age_from = @audience_ranges.find {|ar| (ar.qualifier == "18") && (ar.precision == "03")}.try(:value)
248
+ @reading_age_to = @audience_ranges.find {|ar| (ar.qualifier == "18") && (ar.precision == "04")}.try(:value)
249
+ @table_of_contents = @text_contents.find { |t| t.type_name == "table_of_contents" }
250
+ @description = @text_contents.find { |t| t.type_name == "main_description" }
251
+ @short_description = @text_contents.find { |t| t.type_name == "short_description" }
252
+ @reviews = @text_contents.find_all { |t| t.type_name == "review" }
253
+ @excerpts = @text_contents.find_all { |t| t.type_name == "excerpt" }
254
+ @series = @collections.map { |c| [c.title_detail.elements[0].title, c.title_detail.elements[0].part_number] }
214
255
  distinctive_title = find_title(Elibri::ONIX::Dict::Release_3_0::TitleType::DISTINCTIVE_TITLE)
215
256
  if distinctive_title
216
257
  @title = distinctive_title.product_level.try(:title)
@@ -230,17 +271,17 @@ private
230
271
  end
231
272
 
232
273
  def compute_state!
233
- if notification_type == "01"
274
+ if @notification_type == "01"
234
275
  @current_state = :announced
235
- elsif notification_type == "02"
276
+ elsif @notification_type == "02"
236
277
  @current_state = :preorder
237
278
  else
238
- if publishing_status == "04"
279
+ if @publishing_status == "04"
239
280
  @current_state = :published
240
- elsif publishing_status == "07"
281
+ elsif @publishing_status == "07"
241
282
  @current_state = :out_of_print
242
283
  else
243
- raise "cannot determine the state of the product #{record_reference}"
284
+ raise "cannot determine the state of the product #{@record_reference}"
244
285
  end
245
286
  end
246
287
  end
@@ -4,13 +4,8 @@ module Elibri
4
4
  module Release_3_0
5
5
 
6
6
  class ProductIdentifier
7
- include ROXML
8
- include Inspector
9
7
 
10
- xml_name 'ProductIdentifier'
11
- xml_accessor :type, :from => 'ProductIDType'
12
- xml_accessor :type_name, :from => 'IDTypeName'
13
- xml_accessor :value, :from => 'IDValue'
8
+ attr_accessor :type, :type_name, :value, :to_xml
14
9
 
15
10
  ATTRIBUTES = [
16
11
  :type, :type_name, :value, :identifier_type
@@ -19,9 +14,16 @@ module Elibri
19
14
  RELATIONS = [
20
15
  :inspect_include_fields
21
16
  ]
17
+
18
+ def initialize(data)
19
+ @to_xml = data.to_s
20
+ @type = data.at_xpath('xmlns:ProductIDType').try(:text)
21
+ @type_name = data.at_xpath('xmlns:IDTypeName').try(:text)
22
+ @value = data.at_xpath('xmlns:IDValue').try(:text)
23
+ end
22
24
 
23
25
  def identifier_type
24
- Elibri::ONIX::Dict::Release_3_0::ProductIDType.find_by_onix_code(type).const_name.downcase
26
+ Elibri::ONIX::Dict::Release_3_0::ProductIDType.find_by_onix_code(@type).const_name.downcase
25
27
  end
26
28
 
27
29
  def inspect_include_fields
@@ -6,21 +6,31 @@ module Elibri
6
6
  module Release_3_0
7
7
 
8
8
  class Publisher
9
- include ROXML
10
- include Inspector
11
-
12
- xml_name 'Publisher'
13
9
 
14
10
  ATTRIBUTES = [
15
- :role, :name, :id
11
+ :role, :name, :eid
16
12
  ]
17
13
 
18
14
  RELATIONS = []
19
15
 
20
- #występuje w tej chwili tylko 01 - główny wydawca
21
- xml_accessor :role, :from => 'PublishingRole'
22
- xml_accessor :name, :from => 'PublisherName'
23
- xml_accessor :id, :from => 'IDValue', :in => 'PublisherIdentifier', :as => Fixnum
16
+ #role występuje w tej chwili tylko 01 - główny wydawca
17
+
18
+ attr_accessor :role, :name, :eid, :to_xml
19
+
20
+ def initialize(data)
21
+ @to_xml = data.to_s
22
+ @role = data.at_xpath('xmlns:PublishingRole').try(:text)
23
+ @name = data.at_xpath('xmlns:PublisherName').try(:text)
24
+ if data.at_xpath('xmlns:PublisherIdentifier')
25
+ @eid = data.at_xpath('xmlns:PublisherIdentifier').at_xpath('xmlns:IDValue').try(:text).try(:to_i)
26
+ end
27
+ end
28
+
29
+ def id
30
+ Kernel.warn "[DEPRECATION] `id` is deprecated. Please use `eid` instead."
31
+ @eid
32
+ end
33
+
24
34
  end
25
35
 
26
36
  end