elibri_onix 0.1.23 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
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