elibri_onix 0.1.5 → 0.1.6
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.
- data/Gemfile +2 -1
- data/Gemfile.lock +3 -1
- data/elibri_onix.gemspec +48 -5
- data/lib/elibri_onix.rb +3 -0
- data/lib/elibri_onix/inspector.rb +25 -0
- data/lib/elibri_onix/onix_3_0/audience_range.rb +4 -3
- data/lib/elibri_onix/onix_3_0/collection.rb +10 -1
- data/lib/elibri_onix/onix_3_0/contributor.rb +9 -0
- data/lib/elibri_onix/onix_3_0/extent.rb +17 -3
- data/lib/elibri_onix/onix_3_0/header.rb +1 -0
- data/lib/elibri_onix/onix_3_0/imprint.rb +1 -0
- data/lib/elibri_onix/onix_3_0/language.rb +14 -2
- data/lib/elibri_onix/onix_3_0/measure.rb +12 -2
- data/lib/elibri_onix/onix_3_0/onix_message.rb +2 -1
- data/lib/elibri_onix/onix_3_0/price.rb +1 -0
- data/lib/elibri_onix/onix_3_0/product.rb +97 -67
- data/lib/elibri_onix/onix_3_0/product_identifier.rb +10 -1
- data/lib/elibri_onix/onix_3_0/publisher.rb +3 -1
- data/lib/elibri_onix/onix_3_0/publishing_date.rb +11 -2
- data/lib/elibri_onix/onix_3_0/related_product.rb +1 -0
- data/lib/elibri_onix/onix_3_0/sales_restriction.rb +1 -0
- data/lib/elibri_onix/onix_3_0/sender.rb +2 -0
- data/lib/elibri_onix/onix_3_0/stock_quantity_coded.rb +1 -0
- data/lib/elibri_onix/onix_3_0/subject.rb +1 -0
- data/lib/elibri_onix/onix_3_0/supplier.rb +1 -0
- data/lib/elibri_onix/onix_3_0/supplier_identifier.rb +1 -0
- data/lib/elibri_onix/onix_3_0/supply_detail.rb +1 -0
- data/lib/elibri_onix/onix_3_0/supporting_resource.rb +24 -5
- data/lib/elibri_onix/onix_3_0/text_content.rb +15 -2
- data/lib/elibri_onix/onix_3_0/title_detail.rb +21 -9
- data/lib/elibri_onix/onix_3_0/title_element.rb +15 -4
- data/lib/elibri_onix/version.rb +1 -1
- data/test/elibri_audience_range_test.rb +14 -0
- data/test/elibri_contributors_test.rb +37 -0
- data/test/elibri_edition_test.rb +10 -0
- data/test/elibri_extensions_test.rb +14 -0
- data/test/elibri_extent_test.rb +15 -0
- data/test/elibri_languages_test.rb +14 -0
- data/test/elibri_measurement_test.rb +16 -0
- data/test/elibri_onix_release_3_0_onix_message_test.rb +19 -28
- data/test/elibri_product_form_test.rb +12 -0
- data/test/elibri_publisher_info_test.rb +12 -0
- data/test/elibri_publishing_status_test.rb +41 -0
- data/test/elibri_record_identifiers_test.rb +16 -0
- data/test/elibri_sale_restrictions_test.rb +11 -0
- data/test/elibri_series_memberships_test.rb +16 -0
- data/test/elibri_supporting_resources_test.rb +12 -0
- data/test/elibri_texts_test.rb +16 -0
- data/test/elibri_titles_test.rb +24 -0
- data/test/fixtures/old_dialect.xml +10 -0
- data/test/fixtures/onix_announced_product_example.xml +54 -0
- data/test/fixtures/onix_audience_range_example.xml +44 -0
- data/test/fixtures/onix_audiobook_extent_example.xml +39 -0
- data/test/fixtures/onix_collective_work_example.xml +38 -0
- data/test/fixtures/onix_contributors_example.xml +53 -0
- data/test/fixtures/onix_ebook_extent_example.xml +45 -0
- data/test/fixtures/onix_edition_example.xml +35 -0
- data/test/fixtures/onix_elibri_extensions_example.xml +38 -0
- data/test/fixtures/onix_languages_example.xml +42 -0
- data/test/fixtures/onix_measurement_example.xml +55 -0
- data/test/fixtures/onix_no_contributors_example.xml +35 -0
- data/test/fixtures/onix_out_of_print_product_example.xml +34 -0
- data/test/fixtures/onix_preorder_product_example.xml +39 -0
- data/test/fixtures/onix_product_form_example.xml +35 -0
- data/test/fixtures/onix_published_product_example.xml +39 -0
- data/test/fixtures/onix_publisher_info_example.xml +41 -0
- data/test/fixtures/onix_record_identifiers_example.xml +74 -0
- data/test/fixtures/onix_sale_restrictions_example.xml +46 -0
- data/test/fixtures/onix_series_memberships_example.xml +56 -0
- data/test/fixtures/onix_supporting_resources_example.xml +54 -0
- data/test/fixtures/onix_texts_example.xml +65 -0
- data/test/fixtures/onix_title_with_collection_example.xml +53 -0
- data/test/fixtures/onix_titles_example.xml +49 -0
- data/test/helper.rb +6 -0
- metadata +73 -17
@@ -5,11 +5,20 @@ module Elibri
|
|
5
5
|
|
6
6
|
class ProductIdentifier
|
7
7
|
include ROXML
|
8
|
+
include Inspector
|
8
9
|
|
9
10
|
xml_name 'ProductIdentifier'
|
10
|
-
xml_accessor :type, :
|
11
|
+
xml_accessor :type, :from => 'ProductIDType'
|
11
12
|
xml_accessor :type_name, :from => 'IDTypeName'
|
12
13
|
xml_accessor :value, :from => 'IDValue'
|
14
|
+
|
15
|
+
def identifier_type
|
16
|
+
Elibri::ONIX::Dict::Release_3_0::ProductIDType.find_by_onix_code(type).const_name.downcase
|
17
|
+
end
|
18
|
+
|
19
|
+
def inspect_include_fields
|
20
|
+
[:identifier_type]
|
21
|
+
end
|
13
22
|
end
|
14
23
|
|
15
24
|
end
|
@@ -7,10 +7,12 @@ module Elibri
|
|
7
7
|
|
8
8
|
class Publisher
|
9
9
|
include ROXML
|
10
|
+
include Inspector
|
10
11
|
|
11
12
|
xml_name 'Publisher'
|
12
13
|
|
13
|
-
|
14
|
+
#występuje w tej chwili tylko 01 - główny wydawca
|
15
|
+
xml_accessor :role, :from => 'PublishingRole'
|
14
16
|
xml_accessor :name, :from => 'PublisherName'
|
15
17
|
|
16
18
|
end
|
@@ -7,13 +7,22 @@ module Elibri
|
|
7
7
|
|
8
8
|
class PublishingDate
|
9
9
|
include ROXML
|
10
|
+
include Inspector
|
10
11
|
|
11
12
|
xml_name 'PublishingDate'
|
12
13
|
|
13
|
-
xml_accessor :role, :from => 'PublishingDateRole'
|
14
|
-
xml_accessor :format, :from => 'DateFormat'
|
14
|
+
xml_accessor :role, :from => 'PublishingDateRole'
|
15
|
+
xml_accessor :format, :from => 'DateFormat'
|
15
16
|
xml_accessor :date, :from => 'Date'
|
16
17
|
|
18
|
+
def parsed
|
19
|
+
case format
|
20
|
+
when '00' then [date[0...4].to_i, date[4...6].to_i, date[6...8].to_i]
|
21
|
+
when '01' then [date[0...4].to_i, date[4...6].to_i]
|
22
|
+
when '05' then [date[0...4].to_i]
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
17
26
|
end
|
18
27
|
|
19
28
|
end
|
@@ -6,18 +6,37 @@ module Elibri
|
|
6
6
|
|
7
7
|
class SupportingResource
|
8
8
|
include ROXML
|
9
|
+
include Inspector
|
9
10
|
|
10
11
|
xml_name 'SupportingResource'
|
11
12
|
|
12
|
-
xml_accessor :content_type, :from => 'ResourceContentType'
|
13
|
-
xml_accessor :audience, :from => 'ContentAudience'
|
14
|
-
xml_accessor :mode, :from => 'ResourceMode'
|
13
|
+
xml_accessor :content_type, :from => 'ResourceContentType'
|
14
|
+
#xml_accessor :audience, :from => 'ContentAudience' - always unrestricted
|
15
|
+
xml_accessor :mode, :from => 'ResourceMode'
|
15
16
|
|
16
|
-
xml_accessor :form, :in => 'ResourceVersion', :from => 'ResourceForm'
|
17
|
+
xml_accessor :form, :in => 'ResourceVersion', :from => 'ResourceForm'
|
17
18
|
xml_accessor :link, :in => 'ResourceVersion', :from => 'ResourceLink'
|
18
19
|
|
20
|
+
def content_type_name
|
21
|
+
Elibri::ONIX::Dict::Release_3_0::ResourceContentType.find_by_onix_code(content_type).const_name.downcase
|
22
|
+
end
|
23
|
+
|
24
|
+
#def audience_name
|
25
|
+
# Elibri::ONIX::Dict::Release_3_0::ContentAudience.find_by_onix_code(audience).const_name.downcase
|
26
|
+
#end
|
27
|
+
|
28
|
+
def mode_name
|
29
|
+
Elibri::ONIX::Dict::Release_3_0::ResourceMode.find_by_onix_code(mode).const_name.downcase
|
30
|
+
end
|
31
|
+
|
32
|
+
def form_name
|
33
|
+
Elibri::ONIX::Dict::Release_3_0::ResourceForm.find_by_onix_code(form).const_name.downcase
|
34
|
+
end
|
35
|
+
|
36
|
+
def inspect_include_fields
|
37
|
+
[:content_type_name, :mode_name, :form_name]
|
38
|
+
end
|
19
39
|
end
|
20
|
-
|
21
40
|
end
|
22
41
|
end
|
23
42
|
end
|
@@ -5,15 +5,28 @@ module Elibri
|
|
5
5
|
|
6
6
|
class TextContent
|
7
7
|
include ROXML
|
8
|
+
include Inspector
|
8
9
|
|
9
10
|
xml_name 'TextContent'
|
10
11
|
|
11
|
-
xml_accessor :type, :from => 'TextType'
|
12
|
-
xml_accessor :audience, :from => 'ContentAudience'
|
12
|
+
xml_accessor :type, :from => 'TextType'
|
13
|
+
#xml_accessor :audience, :from => 'ContentAudience' - always unrestricted
|
13
14
|
xml_accessor :author, :from => 'TextAuthor'
|
14
15
|
|
15
16
|
xml_accessor :text, :from => 'Text', :cdata => true
|
16
17
|
|
18
|
+
def type_name
|
19
|
+
Elibri::ONIX::Dict::Release_3_0::OtherTextType.find_by_onix_code(type).const_name.downcase
|
20
|
+
end
|
21
|
+
|
22
|
+
def inspect_include_fields
|
23
|
+
[:type_name]
|
24
|
+
end
|
25
|
+
|
26
|
+
private
|
27
|
+
def after_parse
|
28
|
+
@text = @text.strip if @text
|
29
|
+
end
|
17
30
|
end
|
18
31
|
|
19
32
|
end
|
@@ -6,12 +6,20 @@ module Elibri
|
|
6
6
|
|
7
7
|
class TitleDetail
|
8
8
|
include ROXML
|
9
|
+
include Inspector
|
9
10
|
|
10
11
|
xml_name 'TitleDetail'
|
11
12
|
|
12
|
-
xml_accessor :type, :from => 'TitleType'
|
13
|
+
xml_accessor :type, :from => 'TitleType'
|
13
14
|
xml_accessor :elements, :as => [TitleElement]
|
14
15
|
|
16
|
+
def type_name
|
17
|
+
Elibri::ONIX::Dict::Release_3_0::TitleType.find_by_onix_code(self.type).const_name.downcase
|
18
|
+
end
|
19
|
+
|
20
|
+
def inspect_include_fields
|
21
|
+
[:type_name]
|
22
|
+
end
|
15
23
|
|
16
24
|
def full_title
|
17
25
|
String.new.tap do |_full_title|
|
@@ -23,17 +31,21 @@ module Elibri
|
|
23
31
|
end
|
24
32
|
end
|
25
33
|
|
34
|
+
def product_level_title
|
35
|
+
product_level.try(:full_title)
|
36
|
+
end
|
26
37
|
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
elements.find {|element| element.level == 1}.try(:full_title)
|
31
|
-
end
|
38
|
+
def product_level
|
39
|
+
elements.find {|element| element.level == "01"}
|
40
|
+
end
|
32
41
|
|
42
|
+
def collection_level_title
|
43
|
+
collection_level.try(:full_title)
|
44
|
+
end
|
33
45
|
|
34
|
-
|
35
|
-
|
36
|
-
|
46
|
+
def collection_level
|
47
|
+
elements.find {|element| element.level == "02"}
|
48
|
+
end
|
37
49
|
|
38
50
|
end
|
39
51
|
|
@@ -5,19 +5,30 @@ module Elibri
|
|
5
5
|
|
6
6
|
class TitleElement
|
7
7
|
include ROXML
|
8
|
+
include Inspector
|
8
9
|
|
9
10
|
xml_name 'TitleElement'
|
10
11
|
|
11
|
-
xml_accessor :level, :from => 'TitleElementLevel'
|
12
|
+
xml_accessor :level, :from => 'TitleElementLevel'
|
12
13
|
xml_accessor :part_number, :from => 'PartNumber'
|
13
14
|
xml_accessor :title, :from => 'TitleText'
|
14
15
|
xml_accessor :subtitle, :from => 'Subtitle'
|
15
16
|
|
16
17
|
|
17
18
|
def full_title
|
18
|
-
String.new(self.title.to_s).tap do |_full_title|
|
19
|
-
_full_title
|
20
|
-
|
19
|
+
String.new(self.title.to_s.strip).tap do |_full_title|
|
20
|
+
if _full_title =~ /[\.!\?]$/ #czy kończy się ?!.
|
21
|
+
_full_title << " " + self.subtitle if self.subtitle.present?
|
22
|
+
else
|
23
|
+
_full_title << ". " + self.subtitle if self.subtitle.present?
|
24
|
+
end
|
25
|
+
if self.part_number.present?
|
26
|
+
if self.part_number.to_i.to_s == self.part_number
|
27
|
+
_full_title << " (##{self.part_number})"
|
28
|
+
else
|
29
|
+
_full_title << " (#{self.part_number})"
|
30
|
+
end
|
31
|
+
end
|
21
32
|
end
|
22
33
|
end
|
23
34
|
|
data/lib/elibri_onix/version.rb
CHANGED
@@ -0,0 +1,14 @@
|
|
1
|
+
require 'helper'
|
2
|
+
|
3
|
+
describe Elibri::ONIX::Release_3_0::ONIXMessage do
|
4
|
+
|
5
|
+
it "should be able to parse measurement attributes supported in Elibri" do
|
6
|
+
product = load_fixture("onix_audience_range_example.xml")
|
7
|
+
|
8
|
+
assert_equal 7, product.reading_age_from
|
9
|
+
assert_equal 10, product.reading_age_to
|
10
|
+
|
11
|
+
|
12
|
+
end
|
13
|
+
|
14
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
require 'helper'
|
2
|
+
|
3
|
+
describe Elibri::ONIX::Release_3_0::ONIXMessage do
|
4
|
+
|
5
|
+
it "should be able to parse measurement attributes supported in Elibri" do
|
6
|
+
product = load_fixture("onix_contributors_example.xml")
|
7
|
+
|
8
|
+
assert !product.no_contributor?
|
9
|
+
assert !product.unnamed_persons?
|
10
|
+
|
11
|
+
cont1 = product.contributors[0]
|
12
|
+
cont2 = product.contributors[1]
|
13
|
+
|
14
|
+
assert_equal "author", cont1.role_name
|
15
|
+
assert_equal "Św. Tomasz z Akwinu", cont1.person_name
|
16
|
+
assert cont1.biographical_note.present?
|
17
|
+
|
18
|
+
assert_equal "translator", cont2.role_name
|
19
|
+
assert_equal "prof. ks. Henryk von Hausswolff OP", cont2.person_name
|
20
|
+
|
21
|
+
#<Elibri::ONIX::Release_3_0::Contributor role_name: "author", number: 1, role: "A01", person_name: "Św. Tomasz z Akwinu", from_language: nil, titles_before_names: nil, names_before_key: "Św.", prefix_to_key: nil, key_names: "Tomasz z Akwinu", names_after_key: nil, biographical_note: "Tomasz z Akwinu, Akwinata, łac. Thoma de Aquino (u...", unnamed_persons: nil>,
|
22
|
+
# #<Elibri::ONIX::Release_3_0::Contributor role_name: "translator", number: 2, role: "B06", person_name: "prof. ks. Henryk von Hausswolff OP", from_language: "lat", titles_before_names: "prof. ks.", names_before_key: "Henryk", prefix_to_key: "von", key_names: "Hausswolff", names_after_key: "OP", biographical_note: nil, unnamed_persons: nil>]
|
23
|
+
#
|
24
|
+
|
25
|
+
product = load_fixture("onix_no_contributors_example.xml")
|
26
|
+
assert product.no_contributor?
|
27
|
+
assert !product.unnamed_persons?
|
28
|
+
|
29
|
+
|
30
|
+
product = load_fixture("onix_collective_work_example.xml")
|
31
|
+
assert !product.no_contributor?
|
32
|
+
assert product.unnamed_persons?
|
33
|
+
|
34
|
+
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
@@ -0,0 +1,10 @@
|
|
1
|
+
require 'helper'
|
2
|
+
|
3
|
+
describe Elibri::ONIX::Release_3_0::ONIXMessage do
|
4
|
+
|
5
|
+
it "should be able to parse measurement attributes supported in Elibri" do
|
6
|
+
product = load_fixture("onix_edition_example.xml")
|
7
|
+
assert_equal "wyd. 3, poprawione", product.edition_statement
|
8
|
+
end
|
9
|
+
|
10
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
require 'helper'
|
2
|
+
|
3
|
+
describe Elibri::ONIX::Release_3_0::ONIXMessage do
|
4
|
+
|
5
|
+
it "should be able to parse measurement attributes supported in Elibri" do
|
6
|
+
product = load_fixture("onix_elibri_extensions_example.xml")
|
7
|
+
|
8
|
+
assert_equal "miękka", product.cover_type
|
9
|
+
assert_equal 12.99, product.cover_price
|
10
|
+
assert_equal 5, product.vat
|
11
|
+
assert_equal "58.11.1", product.pkwiu
|
12
|
+
end
|
13
|
+
|
14
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require 'helper'
|
2
|
+
|
3
|
+
describe Elibri::ONIX::Release_3_0::ONIXMessage do
|
4
|
+
|
5
|
+
it "should be able to parse measurement attributes supported in Elibri" do
|
6
|
+
product = load_fixture("onix_ebook_extent_example.xml")
|
7
|
+
assert_equal 150, product.number_of_pages
|
8
|
+
assert_equal 12, product.number_of_illustrations
|
9
|
+
assert_equal 1, product.file_size
|
10
|
+
|
11
|
+
product = load_fixture("onix_audiobook_extent_example.xml")
|
12
|
+
assert_equal 340, product.duration
|
13
|
+
end
|
14
|
+
|
15
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
require 'helper'
|
2
|
+
|
3
|
+
describe Elibri::ONIX::Release_3_0::ONIXMessage do
|
4
|
+
|
5
|
+
it "should be able to parse measurement attributes supported in Elibri" do
|
6
|
+
product = load_fixture("onix_languages_example.xml")
|
7
|
+
assert_equal "polski", product.languages[0].language
|
8
|
+
assert_equal "language_of_text", product.languages[0].role_name
|
9
|
+
|
10
|
+
assert_equal "angielski", product.languages[1].language
|
11
|
+
assert_equal "language_of_abstracts", product.languages[1].role_name
|
12
|
+
end
|
13
|
+
|
14
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
require 'helper'
|
2
|
+
|
3
|
+
describe Elibri::ONIX::Release_3_0::ONIXMessage do
|
4
|
+
|
5
|
+
it "should be able to parse measurement attributes supported in Elibri" do
|
6
|
+
product = load_fixture("onix_measurement_example.xml")
|
7
|
+
|
8
|
+
assert_equal 4, product.measures.size
|
9
|
+
|
10
|
+
assert_equal 195, product.height
|
11
|
+
assert_equal 125, product.width
|
12
|
+
assert_equal 20, product.thickness
|
13
|
+
assert_equal 90, product.weight
|
14
|
+
end
|
15
|
+
|
16
|
+
end
|