elibri_onix 0.4.4 → 0.5.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/FIELDS.rdoc +2 -2
- data/lib/elibri_onix.rb +0 -1
- data/lib/elibri_onix/external_id.rb +0 -10
- data/lib/elibri_onix/onix_3_0/audience_range.rb +3 -12
- data/lib/elibri_onix/onix_3_0/collection.rb +0 -0
- data/lib/elibri_onix/onix_3_0/contributor.rb +11 -11
- data/lib/elibri_onix/onix_3_0/excerpt_info.rb +29 -10
- data/lib/elibri_onix/onix_3_0/extent.rb +3 -12
- data/lib/elibri_onix/onix_3_0/file_info.rb +0 -5
- data/lib/elibri_onix/onix_3_0/header.rb +2 -2
- data/lib/elibri_onix/onix_3_0/imprint.rb +1 -1
- data/lib/elibri_onix/onix_3_0/language.rb +2 -13
- data/lib/elibri_onix/onix_3_0/measure.rb +3 -12
- data/lib/elibri_onix/onix_3_0/onix_message.rb +4 -16
- data/lib/elibri_onix/onix_3_0/price.rb +11 -11
- data/lib/elibri_onix/onix_3_0/product.rb +137 -69
- data/lib/elibri_onix/onix_3_0/product_identifier.rb +3 -3
- data/lib/elibri_onix/onix_3_0/publisher.rb +4 -11
- data/lib/elibri_onix/onix_3_0/publishing_date.rb +3 -3
- data/lib/elibri_onix/onix_3_0/related_product.rb +2 -2
- data/lib/elibri_onix/onix_3_0/sales_restriction.rb +4 -4
- data/lib/elibri_onix/onix_3_0/sender.rb +3 -3
- data/lib/elibri_onix/onix_3_0/stock_quantity_coded.rb +2 -2
- data/lib/elibri_onix/onix_3_0/supplier.rb +7 -7
- data/lib/elibri_onix/onix_3_0/supplier_identifier.rb +3 -3
- data/lib/elibri_onix/onix_3_0/supply_detail.rb +15 -10
- data/lib/elibri_onix/onix_3_0/supporting_resource.rb +6 -5
- data/lib/elibri_onix/onix_3_0/text_content.rb +6 -6
- data/lib/elibri_onix/onix_3_0/thema_subject.rb +33 -0
- data/lib/elibri_onix/onix_3_0/title_detail.rb +2 -11
- data/lib/elibri_onix/onix_3_0/title_element.rb +4 -4
- data/lib/elibri_onix/releases.rb +2 -2
- data/lib/elibri_onix/version.rb +1 -1
- data/test/cover_test.rb +18 -0
- data/test/elibri_audiobook_test.rb +33 -0
- data/test/elibri_extensions_test.rb +9 -0
- data/test/elibri_onix_release_3_0_onix_message_test.rb +4 -18
- data/test/elibri_subjects_test.rb +30 -0
- data/test/elibri_supporting_resources_test.rb +4 -2
- data/test/fixtures/all_possible_tags.xml +1 -1
- data/test/fixtures/onix_audiobook_example.xml +261 -0
- data/test/fixtures/onix_removed_elibri_extensions.xml +81 -0
- data/test/fixtures/onix_subjects_example.xml +110 -0
- data/test/fixtures/onix_supporting_resources_example.xml +15 -5
- metadata +9 -6
- data/lib/elibri_onix/nokogiri_patch.rb +0 -17
- data/lib/elibri_onix/onix_3_0/subject.rb +0 -50
- data/test/elibri_categories_test.rb +0 -18
- data/test/fixtures/onix_categories_example.xml +0 -59
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2cdd498f6472afd58950a7d29d6e105b8ebda1c30d4cb79459c1ef398a6b6cd4
|
4
|
+
data.tar.gz: a371442b7450ded0b5b174fa78a34395cad1ac40f30e9f94675949be90aecabd
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b27daea722145431c90f22c88c42c084846563889159e57b6b28bd2441f2f09bb4eb9e4910eb98c1ff7b366957023c1a85f7bb97bc1fd72eda15b850594e9be1
|
7
|
+
data.tar.gz: a0b0e1900efaba5ab42637c9a073ce4d7b0e5187b6d56f774b7f53440a0fabac82a6edeaf085dca225d6319a2d6746b14b1526ff40f714809bbfb0f24a8527ad
|
data/FIELDS.rdoc
CHANGED
@@ -59,7 +59,7 @@ inspect_include_fields
|
|
59
59
|
|
60
60
|
== ONIXMessage
|
61
61
|
=== Attributes
|
62
|
-
release,
|
62
|
+
release, header
|
63
63
|
=== Relations
|
64
64
|
products
|
65
65
|
|
@@ -70,7 +70,7 @@ type, minimum_order_quantity, amount, currency_code, printed_on_product, positio
|
|
70
70
|
|
71
71
|
== Product
|
72
72
|
=== Attributes
|
73
|
-
|
73
|
+
height, width, thickness, weight, ean, isbn13, number_of_pages, duration, file_size, publisher_name, publisher_id, imprint_name, current_state, reading_age_from, reading_age_to, table_of_contents, description, reviews, excerpts, series, title, subtitle, collection_title, collection_part, full_title, original_title, trade_title, parsed_publishing_date, record_reference, deletion_text, cover_type, cover_price, vat, pkwiu, additional_info, product_composition, publisher, product_form, no_contributor, edition_statement, number_of_illustrations, publishing_status, publishing_date, premiere, front_cover, series_names, city_of_publication, preview_exists, short_description, sale_restricted_to_poland, technical_protection_onix_code, unlimited_licence, hyphenated_isbn, preorder_embargo_date
|
74
74
|
=== Relations
|
75
75
|
contributors, related_products, languages, measures, supply_details, measures, title_details, collections, extents, subjects, audience_ranges, text_contents, supporting_resources, sales_restrictions, authors, ghostwriters, scenarists, originators, illustrators, photographers, author_of_prefaces, drawers, cover_designers, inked_or_colored_bys, editors, revisors, translators, editor_in_chiefs, read_bys
|
76
76
|
|
data/lib/elibri_onix.rb
CHANGED
@@ -1,9 +1,5 @@
|
|
1
1
|
module ExternalId
|
2
2
|
|
3
|
-
# def self.included(base)
|
4
|
-
# base.xml_accessor :id_before_type_cast, :from => "@sourcename"
|
5
|
-
# end
|
6
|
-
|
7
3
|
def self.included(base)
|
8
4
|
base.send(:attr_accessor, :id_before_type_cast)
|
9
5
|
end
|
@@ -19,10 +15,4 @@ module ExternalId
|
|
19
15
|
nil
|
20
16
|
end
|
21
17
|
end
|
22
|
-
|
23
|
-
def id
|
24
|
-
Kernel.warn "[DEPRECATION] `id` is deprecated. Please use `eid` instead."
|
25
|
-
eid
|
26
|
-
end
|
27
|
-
|
28
18
|
end
|
@@ -21,18 +21,9 @@ module Elibri
|
|
21
21
|
|
22
22
|
def initialize(data)
|
23
23
|
@old_xml = data.to_s
|
24
|
-
@qualifier = data.
|
25
|
-
@precision = data.
|
26
|
-
@value = data.
|
27
|
-
end
|
28
|
-
|
29
|
-
def eid
|
30
|
-
"#{@qualifier}-#{@precision}-#{@value}"
|
31
|
-
end
|
32
|
-
|
33
|
-
def id
|
34
|
-
Kernel.warn "[DEPRECATION] `id` is deprecated. Please use `eid` instead."
|
35
|
-
eid
|
24
|
+
@qualifier = data.at_css('AudienceRangeQualifier').try(:text)
|
25
|
+
@precision = data.at_css('AudienceRangePrecision').try(:text)
|
26
|
+
@value = data.at_css('AudienceRangeValue').try(:text).try(:to_i)
|
36
27
|
end
|
37
28
|
|
38
29
|
end
|
Binary file
|
@@ -72,17 +72,17 @@ module Elibri
|
|
72
72
|
|
73
73
|
def initialize(data)
|
74
74
|
@to_xml = data.to_s
|
75
|
-
@number = data.
|
76
|
-
@role = data.
|
77
|
-
@person_name = data.
|
78
|
-
@from_language = data.
|
79
|
-
@titles_before_names = data.
|
80
|
-
@names_before_key = data.
|
81
|
-
@prefix_to_key = data.
|
82
|
-
@key_names = data.
|
83
|
-
@names_after_key = data.
|
84
|
-
@biographical_note = data.
|
85
|
-
@unnamed_persons = data.
|
75
|
+
@number = data.at_css('SequenceNumber').try(:text).try(:to_i)
|
76
|
+
@role = data.at_css('ContributorRole').try(:text)
|
77
|
+
@person_name = data.at_css('PersonName').try(:text)
|
78
|
+
@from_language = data.at_css('FromLanguage').try(:text)
|
79
|
+
@titles_before_names = data.at_css('TitlesBeforeNames').try(:text)
|
80
|
+
@names_before_key = data.at_css('NamesBeforeKey').try(:text)
|
81
|
+
@prefix_to_key = data.at_css('PrefixToKey').try(:text)
|
82
|
+
@key_names = data.at_css('KeyNames').try(:text)
|
83
|
+
@names_after_key = data.at_css('NamesAfterKey').try(:text)
|
84
|
+
@biographical_note = data.at_css('BiographicalNote').try(:text)
|
85
|
+
@unnamed_persons = data.at_css('UnnamedPersons').try(:text)
|
86
86
|
set_eid(data)
|
87
87
|
set_datestamp(data)
|
88
88
|
end
|
@@ -20,17 +20,36 @@ module Elibri
|
|
20
20
|
|
21
21
|
def initialize(data)
|
22
22
|
@to_xml = data.to_s
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
23
|
+
if data.name == "excerpt"
|
24
|
+
@file_type = data.attributes['file_type'].value
|
25
|
+
@file_size = data.attributes['file_size'].value.to_i
|
26
|
+
@md5 = data.attributes['md5'].value
|
27
|
+
@updated_at = Time.parse(data.attributes['updated_at'].value)
|
28
|
+
@link = data.text
|
29
|
+
@eid = data.attributes['id'].value.to_i
|
30
|
+
elsif data.name == "ResourceVersion"
|
31
|
+
|
32
|
+
last_updated_node = data.css("ContentDate").find { |date|
|
33
|
+
date.css("ContentDateRole").first.inner_text == Elibri::ONIX::Dict::Release_3_0::ContentDateRole::LAST_UPDATED }
|
30
34
|
|
31
|
-
|
32
|
-
|
33
|
-
|
35
|
+
if last_updated_node
|
36
|
+
@updated_at = Time.parse(last_updated_node.css("Date").first.inner_text)
|
37
|
+
end
|
38
|
+
@link = data.css("ResourceLink").first.text
|
39
|
+
@eid = @link.split("/")[4].to_i
|
40
|
+
@file_type = @link.split(".").last + "_excerpt"
|
41
|
+
data.css("ResourceVersionFeature").each do |feature|
|
42
|
+
feature_type = feature.css("ResourceVersionFeatureType").first.inner_text
|
43
|
+
feature_value = feature.css("FeatureValue").first.inner_text
|
44
|
+
if feature_type == Elibri::ONIX::Dict::Release_3_0::ResourceVersionFeatureType::MD5_HASH_VALUE
|
45
|
+
@md5 = feature_value
|
46
|
+
elsif feature_type == Elibri::ONIX::Dict::Release_3_0::ResourceVersionFeatureType::SIZE_IN_BYTES
|
47
|
+
@file_size = feature_value.to_i
|
48
|
+
end
|
49
|
+
end
|
50
|
+
else
|
51
|
+
raise ArgumentError, "Unknow element for ExcerptInfo: #{data.name}"
|
52
|
+
end
|
34
53
|
end
|
35
54
|
|
36
55
|
def inspect_include_fields
|
@@ -22,18 +22,9 @@ module Elibri
|
|
22
22
|
|
23
23
|
def initialize(data)
|
24
24
|
@to_xml = data.to_s
|
25
|
-
@type = data.
|
26
|
-
@value = data.
|
27
|
-
@unit = data.
|
28
|
-
end
|
29
|
-
|
30
|
-
def eid
|
31
|
-
@type.to_i
|
32
|
-
end
|
33
|
-
|
34
|
-
def id
|
35
|
-
Kernel.warn "[DEPRECATION] `id` is deprecated. Please use `eid` instead."
|
36
|
-
eid
|
25
|
+
@type = data.css('ExtentType').try(:text)
|
26
|
+
@value = data.css('ExtentValue').try(:text).try(:to_i)
|
27
|
+
@unit = data.css('ExtentUnit').try(:text)
|
37
28
|
end
|
38
29
|
|
39
30
|
def type_name
|
@@ -32,8 +32,8 @@ module Elibri
|
|
32
32
|
|
33
33
|
def initialize(data)
|
34
34
|
@to_xml = data.to_s
|
35
|
-
@sent_date_time = Date.parse(data.
|
36
|
-
@sender = Sender.new(data.
|
35
|
+
@sent_date_time = Date.parse(data.css('SentDateTime').try(:text)) if data.css('SentDateTime')
|
36
|
+
@sender = Sender.new(data.at_css('Sender')) if data.at_css('Sender')
|
37
37
|
end
|
38
38
|
|
39
39
|
end
|
@@ -36,8 +36,8 @@ module Elibri
|
|
36
36
|
|
37
37
|
def initialize(data)
|
38
38
|
@to_xml = data.to_s
|
39
|
-
@role = data.
|
40
|
-
@code = data.
|
39
|
+
@role = data.at_css('LanguageRole').try(:text)
|
40
|
+
@code = data.at_css('LanguageCode').try(:text)
|
41
41
|
end
|
42
42
|
|
43
43
|
#określenie roli jako string, np. language_of_text
|
@@ -53,18 +53,7 @@ module Elibri
|
|
53
53
|
def inspect_include_fields
|
54
54
|
[:role_name, :language]
|
55
55
|
end
|
56
|
-
|
57
|
-
def eid
|
58
|
-
"#{@role}-#{@code}"
|
59
|
-
end
|
60
|
-
|
61
|
-
def id
|
62
|
-
Kernel.warn "[DEPRECATION] `id` is deprecated. Please use `eid` instead."
|
63
|
-
eid
|
64
|
-
end
|
65
|
-
|
66
56
|
end
|
67
|
-
|
68
57
|
end
|
69
58
|
end
|
70
59
|
end
|
@@ -20,9 +20,9 @@ module Elibri
|
|
20
20
|
|
21
21
|
def initialize(data)
|
22
22
|
@to_xml = data.to_s
|
23
|
-
@type = data.
|
24
|
-
@measurement = data.
|
25
|
-
@unit = data.
|
23
|
+
@type = data.at_css('MeasureType').try(:text)
|
24
|
+
@measurement = data.at_css('Measurement').try(:text).try(:to_i)
|
25
|
+
@unit = data.at_css('MeasureUnitCode').try(:text)
|
26
26
|
|
27
27
|
end
|
28
28
|
|
@@ -34,15 +34,6 @@ module Elibri
|
|
34
34
|
[:type_name]
|
35
35
|
end
|
36
36
|
|
37
|
-
# def eid
|
38
|
-
# @type.to_i
|
39
|
-
# end
|
40
|
-
|
41
|
-
def id
|
42
|
-
Kernel.warn "[DEPRECATION] `id` is deprecated. Please use `eid` instead."
|
43
|
-
eid
|
44
|
-
end
|
45
|
-
|
46
37
|
end
|
47
38
|
|
48
39
|
end
|
@@ -16,9 +16,6 @@ module Elibri
|
|
16
16
|
#ONIX version number
|
17
17
|
attr_accessor :release
|
18
18
|
|
19
|
-
#:nodoc:
|
20
|
-
attr_accessor :elibri_dialect
|
21
|
-
|
22
19
|
#returned message header - Elibri::ONIX::Release_3_0::Header
|
23
20
|
attr_accessor :header
|
24
21
|
|
@@ -26,7 +23,7 @@ module Elibri
|
|
26
23
|
|
27
24
|
#:nodoc:
|
28
25
|
ATTRIBUTES = [
|
29
|
-
:release, :
|
26
|
+
:release, :header
|
30
27
|
]
|
31
28
|
|
32
29
|
#:nodoc:
|
@@ -35,26 +32,17 @@ module Elibri
|
|
35
32
|
]
|
36
33
|
|
37
34
|
def inspect_include_fields
|
38
|
-
[:header, :
|
35
|
+
[:header, :release, :products]
|
39
36
|
end
|
40
37
|
|
41
|
-
|
42
|
-
def self.from_xml(data, *initialization_args)
|
43
|
-
Kernel.warn "[DEPRECATION] `from_xml` is deprecated. Please use `new` instead."
|
44
|
-
self.new(data, *initialization_args)
|
45
|
-
end
|
46
|
-
|
47
38
|
def initialize(xml, *initialization_args)
|
48
39
|
@to_xml = xml.to_s
|
49
40
|
xml = Nokogiri::XML(xml) unless xml.is_a?(Nokogiri::XML::Document)
|
50
41
|
onix_message = xml.children.first
|
51
42
|
@release = onix_message['release']
|
52
|
-
@
|
53
|
-
@
|
54
|
-
@products = onix_message.xpath('xmlns:Product').map { |product_node| Product.new(product_node) }
|
43
|
+
@header = Header.new(onix_message.at_css('Header')) if onix_message.at_css('Header')
|
44
|
+
@products = onix_message.css('Product').map { |product_node| Product.new(product_node) }
|
55
45
|
end
|
56
|
-
|
57
|
-
|
58
46
|
end
|
59
47
|
|
60
48
|
end
|
@@ -25,25 +25,25 @@ module Elibri
|
|
25
25
|
|
26
26
|
def initialize(data)
|
27
27
|
@to_xml = data.to_s
|
28
|
-
@type = data.
|
29
|
-
@minimum_order_quantity = data.
|
30
|
-
@amount = BigDecimal(data.
|
31
|
-
@currency_code = data.
|
32
|
-
@printed_on_product = data.
|
33
|
-
@position_on_product = data.
|
34
|
-
if data.
|
35
|
-
@tax_type = data.
|
36
|
-
@tax_rate_percent =
|
28
|
+
@type = data.at_css('PriceType').try(:text)
|
29
|
+
@minimum_order_quantity = data.at_css('MinimumOrderQuantity').try(:text).try(:to_i)
|
30
|
+
@amount = BigDecimal(data.at_css('PriceAmount').try(:text))
|
31
|
+
@currency_code = data.at_css('CurrencyCode').try(:text)
|
32
|
+
@printed_on_product = data.at_css('PrintedOnProduct').try(:text)
|
33
|
+
@position_on_product = data.at_css('PositionOnProduct').try(:text)
|
34
|
+
if data.at_css('Tax')
|
35
|
+
@tax_type = data.at_css('Tax').at_css('TaxType').try(:text)
|
36
|
+
@tax_rate_percent = data.at_css('Tax').at_css('TaxRatePercent').text.to_i if data.at_css('Tax').at_css('TaxRatePercent')
|
37
37
|
end
|
38
38
|
end
|
39
39
|
|
40
40
|
def printed_on_product?
|
41
|
-
@printed_on_product ==
|
41
|
+
@printed_on_product == "02"
|
42
42
|
end
|
43
43
|
|
44
44
|
|
45
45
|
def vat
|
46
|
-
@tax_type ==
|
46
|
+
@tax_type == Elibri::ONIX::Dict::Release_3_0::TaxType::VAT ? @tax_rate_percent : nil
|
47
47
|
end
|
48
48
|
|
49
49
|
end
|
@@ -11,15 +11,15 @@ module Elibri
|
|
11
11
|
#:nodoc:
|
12
12
|
ATTRIBUTES =
|
13
13
|
[
|
14
|
-
:
|
14
|
+
:height, :width, :thickness, :weight, :ean, :isbn13, :number_of_pages, :duration,
|
15
15
|
:file_size, :publisher_name, :publisher_id, :imprint_name, :current_state, :reading_age_from, :reading_age_to,
|
16
16
|
:table_of_contents, :description, :reviews, :excerpts, :series, :title, :subtitle, :collection_title,
|
17
17
|
:collection_part, :full_title, :original_title, :trade_title, :parsed_publishing_date, :record_reference,
|
18
18
|
:deletion_text, :cover_type, :cover_price, :vat, :pkwiu, :additional_info, :product_composition,
|
19
19
|
:publisher, :product_form, :no_contributor, :edition_statement, :number_of_illustrations, :publishing_status,
|
20
20
|
:publishing_date, :premiere, :front_cover, :series_names, :city_of_publication,
|
21
|
-
:
|
22
|
-
:technical_protection_onix_code, :unlimited_licence, :hyphenated_isbn, :preorder_embargo_date
|
21
|
+
:preview_exists, :short_description, :sale_restricted_to_poland,
|
22
|
+
:technical_protection_onix_code, :unlimited_licence, :hyphenated_isbn, :preorder_embargo_date, :additional_trade_information
|
23
23
|
]
|
24
24
|
|
25
25
|
#:nodoc:
|
@@ -27,7 +27,7 @@ module Elibri
|
|
27
27
|
[
|
28
28
|
:contributors, #IMPORTANT
|
29
29
|
:related_products, :languages, :measures, :supply_details, :measures, :title_details,
|
30
|
-
:collections, :extents, :
|
30
|
+
:collections, :extents, :thema_subjects, :audience_ranges,
|
31
31
|
:text_contents, #IMPORTANT
|
32
32
|
:supporting_resources, #for example: cover
|
33
33
|
:sales_restrictions, :authors,
|
@@ -115,12 +115,6 @@ module Elibri
|
|
115
115
|
#krótki opis, jeśli wydawca takowy zamieści, instancja TextContent
|
116
116
|
attr_reader :short_description
|
117
117
|
|
118
|
-
#id kategorii elibri (1)
|
119
|
-
attr_reader :elibri_product_category1_id
|
120
|
-
|
121
|
-
#id kategorii elibri (2)
|
122
|
-
attr_reader :elibri_product_category2_id
|
123
|
-
|
124
118
|
#data końca licencji, jeśli licencja nie jest bezterminowa, w formacie YYYYMMDD
|
125
119
|
attr_reader :licence_limited_to_before_type_cast
|
126
120
|
|
@@ -190,10 +184,12 @@ module Elibri
|
|
190
184
|
#isbn z kreskami
|
191
185
|
attr_reader :hyphenated_isbn
|
192
186
|
|
187
|
+
#dodatkowa informacja handlowa
|
188
|
+
attr_reader :additional_trade_information
|
189
|
+
|
193
190
|
#:nodoc:
|
194
191
|
attr_reader :text_contents
|
195
192
|
attr_reader :file_size
|
196
|
-
attr_reader :elibri_dialect
|
197
193
|
attr_reader :reviews
|
198
194
|
attr_reader :excerpts
|
199
195
|
attr_reader :trade_title
|
@@ -207,7 +203,7 @@ module Elibri
|
|
207
203
|
attr_reader :title_details
|
208
204
|
attr_reader :collections
|
209
205
|
attr_reader :extents
|
210
|
-
attr_reader :
|
206
|
+
attr_reader :thema_subjects
|
211
207
|
attr_reader :audience_ranges
|
212
208
|
attr_reader :supply_details
|
213
209
|
attr_reader :identifiers
|
@@ -234,45 +230,70 @@ module Elibri
|
|
234
230
|
@contributors = []
|
235
231
|
@languages = []
|
236
232
|
@extents = []
|
237
|
-
@
|
233
|
+
@thema_subjects = []
|
238
234
|
@audience_ranges = []
|
239
235
|
##publishing_details
|
240
236
|
@sales_restrictions = []
|
241
|
-
|
237
|
+
@excerpt_infos = []
|
238
|
+
@cover_type = nil
|
242
239
|
#moving to parsing attributes
|
243
240
|
|
244
|
-
@
|
245
|
-
@
|
246
|
-
@
|
247
|
-
|
248
|
-
|
249
|
-
|
250
|
-
|
251
|
-
|
252
|
-
|
253
|
-
|
254
|
-
|
255
|
-
|
256
|
-
@
|
257
|
-
@identifiers = data.xpath('xmlns:ProductIdentifier').map { |ident_data| ProductIdentifier.new(ident_data) }
|
241
|
+
@record_reference = data.at_css('RecordReference').try(:text)
|
242
|
+
@notification_type = data.at_css('NotificationType').try(:text)
|
243
|
+
@deletion_text = data.at_css('DeletionText').try(:text)
|
244
|
+
|
245
|
+
if data.namespaces.values.any? { |uri| uri =~ /elibri/ }
|
246
|
+
@cover_type = data.at_xpath('elibri:CoverType').try(:text)
|
247
|
+
@pkwiu = data.at_xpath('elibri:PKWiU').try(:text)
|
248
|
+
@hyphenated_isbn = data.at_xpath('elibri:HyphenatedISBN').try(:text)
|
249
|
+
@pdw_exclusiveness = data.at_xpath('elibri:PDWExclusiveness').try(:text)
|
250
|
+
@additional_info = data.at_xpath('elibri:AdditionalInfo').try(:text)
|
251
|
+
end
|
252
|
+
|
253
|
+
@identifiers = data.children.find_all { |node| node.name == 'ProductIdentifier' }.map { |ident_data| ProductIdentifier.new(ident_data) }
|
258
254
|
begin
|
259
|
-
@related_products = data.
|
255
|
+
@related_products = data.at_css('RelatedMaterial').css('RelatedProduct').map { |related_data| RelatedProduct.new(related_data) }
|
260
256
|
rescue
|
261
257
|
@related_products = []
|
262
258
|
end
|
263
259
|
begin
|
264
|
-
@supply_details = data.
|
260
|
+
@supply_details = data.at_css('ProductSupply').css('SupplyDetail').map { |supply_data| SupplyDetail.new(supply_data) }
|
265
261
|
rescue
|
266
262
|
@supply_details = []
|
267
263
|
end
|
268
|
-
|
269
|
-
|
270
|
-
|
264
|
+
|
265
|
+
if data.namespaces.values.any? { |uri| uri =~ /elibri/ } && (data.at_xpath('elibri:Vat') || data.at_xpath('elibri:CoverPrice'))
|
266
|
+
@cover_price = BigDecimal(data.at_xpath('elibri:CoverPrice').try(:text)) if data.at_xpath('elibri:CoverPrice')
|
267
|
+
@vat = data.at_xpath('elibri:Vat').try(:text).try(:to_i)
|
268
|
+
else
|
269
|
+
price_sd = @supply_details.find { |sd| sd.supplier.role == Elibri::ONIX::Dict::Release_3_0::SupplierRole::PUB_TO_RET }
|
270
|
+
if price_sd && price_sd.price && price_sd.price && price_sd.price.type == Elibri::ONIX::Dict::Release_3_0::PriceTypeCode::RRP_WITH_TAX
|
271
|
+
@vat = price_sd.price.tax_rate_percent.to_i
|
272
|
+
@cover_price = price_sd.price.amount
|
273
|
+
@additional_trade_information = price_sd.additional_trade_information
|
274
|
+
end
|
275
|
+
end
|
276
|
+
|
277
|
+
descriptive_details_setup(data.at_css('DescriptiveDetail')) if data.at_css('DescriptiveDetail')
|
278
|
+
collateral_details_setup(data.at_css('CollateralDetail')) if data.at_css('CollateralDetail')
|
279
|
+
|
280
|
+
if data.namespaces.values.any? { |uri| uri =~ /elibri/ } && data.at_xpath('elibri:preview_exists')
|
281
|
+
@preview_exists = (data.at_xpath('elibri:preview_exists').text == "true")
|
282
|
+
else
|
283
|
+
@preview_exists = @supporting_resources.find { |sr| sr.content_type_name == "widget" && sr.link =~ /p.elibri.com.pl/ }.present?
|
284
|
+
end
|
285
|
+
|
286
|
+
|
287
|
+
publishing_details_setup(data.at_css('PublishingDetail')) if data.at_css('PublishingDetail')
|
271
288
|
licence_information_setup(data)
|
272
289
|
begin
|
273
290
|
@excerpt_infos = data.at_xpath("elibri:excerpts").xpath("elibri:excerpt").map { |node| ExcerptInfo.new(node) }
|
274
291
|
rescue
|
275
|
-
|
292
|
+
demo = @supporting_resources.find { |sr| sr.content_type_name == "sample_content" }
|
293
|
+
if demo
|
294
|
+
@excerpt_infos = demo.data.css("ResourceVersion").map { |node| ExcerptInfo.new(node) }
|
295
|
+
end
|
296
|
+
|
276
297
|
end
|
277
298
|
begin
|
278
299
|
@file_infos = data.at_xpath("elibri:masters").xpath("elibri:master").map { |node| FileInfo.new(node) }
|
@@ -282,69 +303,118 @@ module Elibri
|
|
282
303
|
after_parse
|
283
304
|
end
|
284
305
|
|
306
|
+
def self.determine_cover_type(product_form, product_form_detail)
|
307
|
+
if product_form == "BG"
|
308
|
+
"skórzana"
|
309
|
+
elsif product_form == "BF"
|
310
|
+
"gąbka"
|
311
|
+
elsif product_form == "BC"
|
312
|
+
if product_form_detail == "B504"
|
313
|
+
"miękka ze skrzydełkami"
|
314
|
+
elsif product_form_detail == "B412"
|
315
|
+
"zintegrowana"
|
316
|
+
else
|
317
|
+
"miękka"
|
318
|
+
end
|
319
|
+
elsif product_form == "BB"
|
320
|
+
if product_form_detail == "B501"
|
321
|
+
"twarda z obwolutą"
|
322
|
+
elsif product_form_detail == "B415"
|
323
|
+
"twarda lakierowana"
|
324
|
+
elsif product_form_detail == "B413"
|
325
|
+
"plastikowa"
|
326
|
+
else
|
327
|
+
"twarda"
|
328
|
+
end
|
329
|
+
end
|
330
|
+
end
|
331
|
+
|
285
332
|
def licence_information_setup(data)
|
286
|
-
if data.at_xpath("elibri:SaleNotRestricted")
|
287
|
-
|
288
|
-
|
289
|
-
|
290
|
-
|
291
|
-
|
333
|
+
if data.namespaces.values.any? { |uri| uri =~ /elibri/ } && (data.at_xpath("elibri:SaleNotRestricted") || data.at_xpath("elibri:SaleRestrictedTo"))
|
334
|
+
if data.at_xpath("elibri:SaleNotRestricted")
|
335
|
+
@unlimited_licence = true
|
336
|
+
elsif date = data.at_xpath("elibri:SaleRestrictedTo").try(:text)
|
337
|
+
@unlimited_licence = false
|
338
|
+
@licence_limited_to_before_type_cast = date
|
339
|
+
@licence_limited_to = Date.new(date[0...4].to_i, date[4...6].to_i, date[6...8].to_i)
|
340
|
+
end
|
341
|
+
else
|
342
|
+
daten = data.css('PublishingDate').find { |d| d.at_css("PublishingDateRole").text == Elibri::ONIX::Dict::Release_3_0::PublishingDateRole::OUT_OF_PRINT_DATE }
|
343
|
+
if daten
|
344
|
+
|
345
|
+
date = daten.at_css('Date').text
|
346
|
+
@licence_limited_to_before_type_cast = date
|
347
|
+
@licence_limited_to = Date.new(date[0...4].to_i, date[4...6].to_i, date[6...8].to_i)
|
348
|
+
@unlimited_licence = false
|
349
|
+
else
|
350
|
+
@unlimited_licence = true
|
351
|
+
end
|
352
|
+
|
292
353
|
end
|
293
354
|
end
|
294
355
|
|
295
356
|
def descriptive_details_setup(data)
|
296
|
-
@product_composition = data.
|
297
|
-
@product_form = data.
|
357
|
+
@product_composition = data.at_css('ProductComposition').try(:text)
|
358
|
+
@product_form = data.at_css('ProductForm').text
|
359
|
+
if @product_form.starts_with?("B") && !@cover_type
|
360
|
+
@cover_type = self.class.determine_cover_type(@product_form, data.at_css('ProductFormDetail').try(:text))
|
361
|
+
end
|
298
362
|
if Elibri::ONIX::Dict::Release_3_0::ProductFormCode::find_by_onix_code(@product_form)
|
299
363
|
@product_form_name = Elibri::ONIX::Dict::Release_3_0::ProductFormCode::find_by_onix_code(@product_form).name(:en).downcase
|
300
364
|
end
|
301
|
-
|
302
|
-
|
303
|
-
|
304
|
-
|
305
|
-
@
|
306
|
-
@
|
307
|
-
@
|
308
|
-
@
|
309
|
-
@
|
310
|
-
|
311
|
-
|
365
|
+
if classification = data.css('ProductClassification').find { |cl|
|
366
|
+
cl.at_css('ProductClassificationType').text == Elibri::ONIX::Dict::Release_3_0::ProductClassificationType::PKWIU }
|
367
|
+
@pkwiu = classification.at_css('ProductClassificationCode').text
|
368
|
+
end
|
369
|
+
@measures = data.css('Measure').map { |measure_data| Measure.new(measure_data) }
|
370
|
+
@title_details = data.children.find_all { |node| node.name == 'TitleDetail' }.map { |title_data| TitleDetail.new(title_data) }
|
371
|
+
@collections = data.css('Collection').map { |collection_data| Collection.new(collection_data) }
|
372
|
+
@contributors = data.css('Contributor').map { |contributor_data| Contributor.new(contributor_data) }
|
373
|
+
@no_contributor = !!data.at_css('NoContributor')
|
374
|
+
@languages = data.css('Language').map { |language_data| Language.new(language_data) }
|
375
|
+
@extents = data.css('Extent').map { |extent_data| Extent.new(extent_data) }
|
376
|
+
@thema_subjects = data.css('Subject').find_all { |sd|
|
377
|
+
%w{93 94 95 96 97 98 99}.include?(sd.at_css('SubjectSchemeIdentifier').try(:text)) }.map { |sd| ThemaSubject.new(sd) }
|
378
|
+
@audience_ranges = data.css('AudienceRange').map { |audience_data| AudienceRange.new(audience_data) }
|
379
|
+
|
380
|
+
simplified_product_form = @product_form.starts_with?("B") ? "BA" : @product_form
|
381
|
+
if Elibri::ONIX::Dict::Release_3_0::ProductFormCode::find_by_onix_code(simplified_product_form).digital?
|
312
382
|
@digital_formats = []
|
313
|
-
data.
|
383
|
+
data.css("ProductFormDetail").each do |format|
|
314
384
|
@digital_formats << Elibri::ONIX::Dict::Release_3_0::ProductFormDetail::find_by_onix_code(format.text).name.upcase.gsub("MOBIPOCKET", "MOBI")
|
315
385
|
end
|
316
386
|
end
|
317
387
|
|
318
388
|
#zabezpiecznie pliku
|
319
|
-
if protection = data.
|
389
|
+
if protection = data.at_css("EpubTechnicalProtection").try(:text)
|
320
390
|
@technical_protection = Elibri::ONIX::Dict::Release_3_0::EpubTechnicalProtection::find_by_onix_code(protection).name
|
321
391
|
@technical_protection_onix_code = protection
|
322
392
|
end
|
323
393
|
|
324
|
-
@edition_statement = data.
|
325
|
-
@number_of_illustrations = data.
|
394
|
+
@edition_statement = data.at_css('EditionStatement').try(:text)
|
395
|
+
@number_of_illustrations = data.at_css('NumberOfIllustrations').try(:text).try(:to_i)
|
326
396
|
end
|
327
397
|
|
328
398
|
def collateral_details_setup(data)
|
329
|
-
@text_contents = data.
|
330
|
-
@supporting_resources = data.
|
399
|
+
@text_contents = data.css('TextContent').map { |text_detail| TextContent.new(text_detail) }
|
400
|
+
@supporting_resources = data.css('SupportingResource').map { |supporting_data| SupportingResource.new(supporting_data) }
|
331
401
|
end
|
332
402
|
|
333
403
|
def publishing_details_setup(data)
|
334
|
-
@imprint = Imprint.new(data.
|
335
|
-
@publisher = Publisher.new(data.
|
336
|
-
@publishing_status = data.
|
337
|
-
@city_of_publication = data.
|
338
|
-
publication_dates = data.
|
404
|
+
@imprint = Imprint.new(data.at_css('Imprint')) if data.at_css('Imprint')
|
405
|
+
@publisher = Publisher.new(data.at_css('Publisher')) if data.at_css('Publisher')
|
406
|
+
@publishing_status = data.at_css('PublishingStatus').try(:text)
|
407
|
+
@city_of_publication = data.at_css("CityOfPublication").try(:text)
|
408
|
+
publication_dates = data.css('PublishingDate').map do |node|
|
339
409
|
PublishingDate.new(node)
|
340
410
|
end
|
341
411
|
@publishing_date = publication_dates.find { |date| date.role == Elibri::ONIX::Dict::Release_3_0::PublishingDateRole::PUBLICATION_DATE }
|
342
412
|
preorder_embargo_date_as_object = publication_dates.find { |date| date.role == Elibri::ONIX::Dict::Release_3_0::PublishingDateRole::PREORDER_EMBARGO_DATE }
|
343
413
|
@preorder_embargo_date = Date.new(*preorder_embargo_date_as_object.parsed) if preorder_embargo_date_as_object
|
344
414
|
|
345
|
-
@sales_restrictions = data.
|
415
|
+
@sales_restrictions = data.css('SalesRestriction').map { |restriction_data| SalesRestriction.new(restriction_data) }
|
346
416
|
#ograniczenia terytorialne
|
347
|
-
if data.
|
417
|
+
if data.at_css("CountriesIncluded").try(:text) == "PL"
|
348
418
|
@sale_restricted_to_poland = true
|
349
419
|
else
|
350
420
|
@sale_restricted_to_poland = false
|
@@ -456,6 +526,7 @@ module Elibri
|
|
456
526
|
@publisher_id = @publisher.eid if publisher
|
457
527
|
@imprint_name = @imprint.name if imprint
|
458
528
|
@isbn13 = @identifiers.find { |identifier| identifier.identifier_type == "isbn13" }.try(:value)
|
529
|
+
@hyphenated_isbn ||= @isbn13
|
459
530
|
@reading_age_from = @audience_ranges.find {|ar| (ar.qualifier == "18") && (ar.precision == "03")}.try(:value).try(:to_i)
|
460
531
|
@reading_age_to = @audience_ranges.find {|ar| (ar.qualifier == "18") && (ar.precision == "04")}.try(:value).try(:to_i)
|
461
532
|
@table_of_contents = @text_contents.find { |t| t.type_name == "table_of_contents" }
|
@@ -475,9 +546,6 @@ module Elibri
|
|
475
546
|
@original_title = find_title(Elibri::ONIX::Dict::Release_3_0::TitleType::ORIGINAL_TITLE).try(:full_title)
|
476
547
|
@trade_title = find_title(Elibri::ONIX::Dict::Release_3_0::TitleType::DISTRIBUTORS_TITLE).try(:full_title)
|
477
548
|
|
478
|
-
@elibri_product_category1_id = subjects[0].code if subjects[0]
|
479
|
-
@elibri_product_category2_id = subjects[1].code if subjects[1]
|
480
|
-
|
481
549
|
compute_state!
|
482
550
|
end
|
483
551
|
|