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