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.
- data/Gemfile +1 -0
- data/Gemfile.lock +3 -5
- data/elibri_onix.gemspec +2 -1
- data/lib/elibri_onix.rb +3 -2
- data/lib/elibri_onix/external_id.rb +15 -2
- data/lib/elibri_onix/external_timestamp.rb +5 -1
- data/lib/elibri_onix/nokogiri_patch.rb +17 -0
- data/lib/elibri_onix/onix_3_0/audience_range.rb +14 -8
- data/lib/elibri_onix/onix_3_0/collection.rb +10 -9
- data/lib/elibri_onix/onix_3_0/contributor.rb +21 -18
- data/lib/elibri_onix/onix_3_0/extent.rb +18 -11
- data/lib/elibri_onix/onix_3_0/header.rb +7 -6
- data/lib/elibri_onix/onix_3_0/imprint.rb +6 -5
- data/lib/elibri_onix/onix_3_0/language.rb +16 -9
- data/lib/elibri_onix/onix_3_0/measure.rb +17 -9
- data/lib/elibri_onix/onix_3_0/onix_message.rb +14 -30
- data/lib/elibri_onix/onix_3_0/price.rb +19 -17
- data/lib/elibri_onix/onix_3_0/product.rb +118 -77
- data/lib/elibri_onix/onix_3_0/product_identifier.rb +9 -7
- data/lib/elibri_onix/onix_3_0/publisher.rb +19 -9
- data/lib/elibri_onix/onix_3_0/publishing_date.rb +10 -9
- data/lib/elibri_onix/onix_3_0/related_product.rb +10 -15
- data/lib/elibri_onix/onix_3_0/sales_restriction.rb +11 -8
- data/lib/elibri_onix/onix_3_0/sender.rb +9 -8
- data/lib/elibri_onix/onix_3_0/stock_quantity_coded.rb +8 -11
- data/lib/elibri_onix/onix_3_0/subject.rb +19 -13
- data/lib/elibri_onix/onix_3_0/supplier.rb +15 -12
- data/lib/elibri_onix/onix_3_0/supplier_identifier.rb +9 -8
- data/lib/elibri_onix/onix_3_0/supply_detail.rb +16 -15
- data/lib/elibri_onix/onix_3_0/supporting_resource.rb +15 -15
- data/lib/elibri_onix/onix_3_0/text_content.rb +18 -15
- data/lib/elibri_onix/onix_3_0/title_detail.rb +17 -11
- data/lib/elibri_onix/onix_3_0/title_element.rb +10 -9
- data/lib/elibri_onix/version.rb +1 -1
- data/test/elibri_contributors_test.rb +1 -1
- data/test/elibri_onix_release_3_0_onix_message_test.rb +2 -2
- data/test/elibri_supporting_resources_test.rb +1 -1
- data/test/elibri_texts_test.rb +4 -4
- data/test/helper.rb +2 -1
- metadata +252 -295
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,11 +1,11 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
elibri_onix (0.
|
4
|
+
elibri_onix (0.2.0)
|
5
5
|
activesupport (>= 2.3.5)
|
6
6
|
elibri_onix_dict (>= 0.0.5)
|
7
7
|
i18n
|
8
|
-
|
8
|
+
nokogiri
|
9
9
|
|
10
10
|
GEM
|
11
11
|
remote: https://rubygems.org/
|
@@ -23,6 +23,7 @@ GEM
|
|
23
23
|
metaclass (~> 0.0.1)
|
24
24
|
multi_json (1.3.5)
|
25
25
|
nokogiri (1.5.2)
|
26
|
+
nokogiri (1.5.2-java)
|
26
27
|
pry (0.9.9.6)
|
27
28
|
coderay (~> 1.0.5)
|
28
29
|
method_source (~> 0.7.1)
|
@@ -33,9 +34,6 @@ GEM
|
|
33
34
|
slop (>= 2.4.4, < 3)
|
34
35
|
spoon (~> 0.0)
|
35
36
|
rake (0.9.2.2)
|
36
|
-
roxml (3.1.3)
|
37
|
-
activesupport (>= 2.1.0)
|
38
|
-
nokogiri (>= 1.3.3)
|
39
37
|
slop (2.4.4)
|
40
38
|
spoon (0.0.1)
|
41
39
|
|
data/elibri_onix.gemspec
CHANGED
@@ -24,7 +24,7 @@ Gem::Specification.new do |gem|
|
|
24
24
|
]
|
25
25
|
|
26
26
|
gem.add_runtime_dependency 'activesupport', '>= 2.3.5'
|
27
|
-
gem.add_runtime_dependency '
|
27
|
+
gem.add_runtime_dependency 'nokogiri'
|
28
28
|
gem.add_runtime_dependency 'i18n'
|
29
29
|
gem.add_runtime_dependency 'elibri_onix_dict', '>= 0.0.5'
|
30
30
|
|
@@ -33,6 +33,7 @@ Gem::Specification.new do |gem|
|
|
33
33
|
gem.add_development_dependency "minitest", ">= 0"
|
34
34
|
gem.add_development_dependency "bundler", ">= 1.0.0"
|
35
35
|
gem.add_development_dependency "rake"
|
36
|
+
# gem.add_development_dependency "ruby-debug"
|
36
37
|
#gem.add_development_dependency "rcov", ">= 0"
|
37
38
|
|
38
39
|
end
|
data/lib/elibri_onix.rb
CHANGED
@@ -1,16 +1,17 @@
|
|
1
1
|
|
2
2
|
require 'bigdecimal'
|
3
|
+
require 'date'
|
3
4
|
# Old ActiveSupport needs 'thread' to see Mutex:
|
4
5
|
require 'thread'
|
5
6
|
require 'active_support'
|
6
7
|
require 'active_support/core_ext'
|
7
|
-
require '
|
8
|
+
require 'nokogiri'
|
8
9
|
require 'elibri_onix/version'
|
9
10
|
require 'elibri_onix/inspector'
|
10
11
|
require 'elibri_onix/external_id'
|
11
12
|
require 'elibri_onix/external_timestamp'
|
12
13
|
require 'elibri_onix/releases'
|
13
|
-
|
14
|
+
require 'elibri_onix/nokogiri_patch'
|
14
15
|
require 'elibri_onix_dict'
|
15
16
|
|
16
17
|
$KCODE = "UTF-8"
|
@@ -1,11 +1,24 @@
|
|
1
1
|
module ExternalId
|
2
2
|
|
3
|
+
# def self.included(base)
|
4
|
+
# base.xml_accessor :id_before_type_cast, :from => "@sourcename"
|
5
|
+
# end
|
6
|
+
|
3
7
|
def self.included(base)
|
4
|
-
base.
|
8
|
+
base.send(:attr_accessor, :id_before_type_cast)
|
9
|
+
end
|
10
|
+
|
11
|
+
def set_eid(data)
|
12
|
+
@id_before_type_cast = data.attr('sourcename')
|
5
13
|
end
|
6
14
|
|
15
|
+
def eid
|
16
|
+
@id_before_type_cast.split(":")[1].to_i
|
17
|
+
end
|
18
|
+
|
7
19
|
def id
|
8
|
-
|
20
|
+
Kernel.warn "[DEPRECATION] `id` is deprecated. Please use `eid` instead."
|
21
|
+
eid
|
9
22
|
end
|
10
23
|
|
11
24
|
end
|
@@ -1,7 +1,11 @@
|
|
1
1
|
module ExternalTimestamp
|
2
2
|
|
3
3
|
def self.included(base)
|
4
|
-
base.
|
4
|
+
base.send(:attr_accessor, :datestamp_before_type_cast) #, :from => "@datestamp"
|
5
|
+
end
|
6
|
+
|
7
|
+
def set_datestamp(data)
|
8
|
+
@datestamp_before_type_cast = data.attr('datestamp')
|
5
9
|
end
|
6
10
|
|
7
11
|
def datestamp
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module Nokogiri
|
2
|
+
module XML
|
3
|
+
class Node
|
4
|
+
alias_method :orig_xpath, :xpath
|
5
|
+
|
6
|
+
def xpath *paths
|
7
|
+
unless Nokogiri.uses_libxml?
|
8
|
+
paths.each do |path|
|
9
|
+
path.gsub!(/xmlns:/, ' :') if path.is_a?(String)
|
10
|
+
end
|
11
|
+
end
|
12
|
+
orig_xpath *paths
|
13
|
+
end
|
14
|
+
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -4,23 +4,29 @@ module Elibri
|
|
4
4
|
module Release_3_0
|
5
5
|
|
6
6
|
class AudienceRange
|
7
|
-
include ROXML
|
8
|
-
include Inspector
|
9
|
-
|
10
|
-
xml_name 'AudienceRange'
|
11
7
|
|
12
8
|
ATTRIBUTES = [
|
13
9
|
:qualifier, :precision, :value
|
14
10
|
]
|
15
11
|
|
16
12
|
RELATIONS = []
|
13
|
+
|
14
|
+
attr_accessor :qualifier, :precision, :value, :to_xml
|
17
15
|
|
18
|
-
|
19
|
-
|
20
|
-
|
16
|
+
def initialize(data)
|
17
|
+
@old_xml = data.to_s
|
18
|
+
@qualifier = data.at_xpath('xmlns:AudienceRangeQualifier').try(:text)
|
19
|
+
@precision = data.at_xpath('xmlns:AudienceRangePrecision').try(:text)
|
20
|
+
@value = data.at_xpath('xmlns:AudienceRangeValue').try(:text).try(:to_i)
|
21
|
+
end
|
21
22
|
|
23
|
+
def eid
|
24
|
+
"#{@qualifier}-#{@precision}-#{@value}"
|
25
|
+
end
|
26
|
+
|
22
27
|
def id
|
23
|
-
"
|
28
|
+
Kernel.warn "[DEPRECATION] `id` is deprecated. Please use `eid` instead."
|
29
|
+
eid
|
24
30
|
end
|
25
31
|
|
26
32
|
end
|
@@ -4,10 +4,6 @@ module Elibri
|
|
4
4
|
module Release_3_0
|
5
5
|
|
6
6
|
class Collection
|
7
|
-
include ROXML
|
8
|
-
include Inspector
|
9
|
-
|
10
|
-
xml_name 'Collection'
|
11
7
|
|
12
8
|
ATTRIBUTES = [
|
13
9
|
:type, :title_detail, :full_title, :type_name
|
@@ -16,17 +12,22 @@ module Elibri
|
|
16
12
|
RELATIONS = [
|
17
13
|
:elements, :inspect_include_fields
|
18
14
|
]
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
15
|
+
|
16
|
+
attr_accessor :type, :elements, :title_detail, :to_xml
|
17
|
+
|
18
|
+
def initialize(data)
|
19
|
+
@to_xml = data.to_s
|
20
|
+
@type = data.at_xpath('xmlns:CollectionType').try(:text)
|
21
|
+
@elements = data.xpath('xmlns:TitleElement').map { |element_data| TitleElement.new(element_data) }
|
22
|
+
@title_detail = TitleDetail.new(data.at_xpath('xmlns:TitleDetail')) if data.at_xpath('xmlns:TitleDetail')
|
23
|
+
end
|
23
24
|
|
24
25
|
def full_title
|
25
26
|
title_detail.try(:full_title)
|
26
27
|
end
|
27
28
|
|
28
29
|
def type_name
|
29
|
-
Elibri::ONIX::Dict::Release_3_0::CollectionType.find_by_onix_code(type).const_name.downcase
|
30
|
+
Elibri::ONIX::Dict::Release_3_0::CollectionType.find_by_onix_code(@type).const_name.downcase
|
30
31
|
end
|
31
32
|
|
32
33
|
def inspect_include_fields
|
@@ -4,8 +4,6 @@ module Elibri
|
|
4
4
|
module Release_3_0
|
5
5
|
|
6
6
|
class Contributor
|
7
|
-
include ROXML
|
8
|
-
include Inspector
|
9
7
|
include ExternalId
|
10
8
|
include ExternalTimestamp
|
11
9
|
|
@@ -19,24 +17,29 @@ module Elibri
|
|
19
17
|
[
|
20
18
|
:inspect_include_fields
|
21
19
|
]
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
20
|
+
|
21
|
+
attr_accessor :number, :role, :person_name, :from_language, :titles_before_names, :names_before_key, :prefix_to_key,
|
22
|
+
:key_names, :names_after_key, :biographical_note, :unnamed_persons, :to_xml
|
23
|
+
|
24
|
+
def initialize(data)
|
25
|
+
@to_xml = data.to_s
|
26
|
+
@number = data.at_xpath('xmlns:SequenceNumber').try(:text).try(:to_i)
|
27
|
+
@role = data.at_xpath('xmlns:ContributorRole').try(:text)
|
28
|
+
@person_name = data.at_xpath('xmlns:PersonName').try(:text)
|
29
|
+
@from_language = data.at_xpath('xmlns:FromLanguage').try(:text)
|
30
|
+
@titles_before_names = data.at_xpath('xmlns:TitlesBeforeNames').try(:text)
|
31
|
+
@names_before_key = data.at_xpath('xmlns:NamesBeforeKey').try(:text)
|
32
|
+
@prefix_to_key = data.at_xpath('xmlns:PrefixToKey').try(:text)
|
33
|
+
@key_names = data.at_xpath('xmlns:KeyNames').try(:text)
|
34
|
+
@names_after_key = data.at_xpath('xmlns:NamesAfterKey').try(:text)
|
35
|
+
@biographical_note = data.at_xpath('xmlns:BiographicalNote').try(:text)
|
36
|
+
@unnamed_persons = data.at_xpath('xmlns:UnnamedPersons').try(:text)
|
37
|
+
set_eid(data)
|
38
|
+
set_datestamp(data)
|
39
|
+
end
|
37
40
|
|
38
41
|
def role_name
|
39
|
-
Elibri::ONIX::Dict::Release_3_0::ContributorRole.find_by_onix_code(
|
42
|
+
Elibri::ONIX::Dict::Release_3_0::ContributorRole.find_by_onix_code(@role).const_name.downcase
|
40
43
|
end
|
41
44
|
|
42
45
|
def inspect_include_fields
|
@@ -5,14 +5,7 @@ module Elibri
|
|
5
5
|
module Release_3_0
|
6
6
|
|
7
7
|
class Extent
|
8
|
-
|
9
|
-
include Inspector
|
10
|
-
|
11
|
-
xml_name 'Extent'
|
12
|
-
xml_accessor :type, :from => 'ExtentType'
|
13
|
-
xml_accessor :value, :from => 'ExtentValue', :as => Fixnum
|
14
|
-
xml_accessor :unit, :from => 'ExtentUnit'
|
15
|
-
|
8
|
+
|
16
9
|
ATTRIBUTES = [
|
17
10
|
:type, :value, :unit, :type_name, :unit_name
|
18
11
|
]
|
@@ -20,17 +13,31 @@ module Elibri
|
|
20
13
|
RELATIONS = [
|
21
14
|
:inspect_include_fields
|
22
15
|
]
|
16
|
+
|
17
|
+
attr_accessor :type, :value, :unit, :to_xml
|
18
|
+
|
19
|
+
def initialize(data)
|
20
|
+
@to_xml = data.to_s
|
21
|
+
@type = data.xpath('xmlns:ExtentType').try(:text)
|
22
|
+
@value = data.xpath('xmlns:ExtentValue').try(:text).try(:to_i)
|
23
|
+
@unit = data.xpath('xmlns:ExtentUnit').try(:text)
|
24
|
+
end
|
23
25
|
|
26
|
+
def eid
|
27
|
+
@type.to_i
|
28
|
+
end
|
29
|
+
|
24
30
|
def id
|
25
|
-
|
31
|
+
Kernel.warn "[DEPRECATION] `id` is deprecated. Please use `eid` instead."
|
32
|
+
eid
|
26
33
|
end
|
27
34
|
|
28
35
|
def type_name
|
29
|
-
Elibri::ONIX::Dict::Release_3_0::ExtentType.find_by_onix_code(type).const_name.downcase
|
36
|
+
Elibri::ONIX::Dict::Release_3_0::ExtentType.find_by_onix_code(@type).const_name.downcase
|
30
37
|
end
|
31
38
|
|
32
39
|
def unit_name
|
33
|
-
Elibri::ONIX::Dict::Release_3_0::ExtentUnit.find_by_onix_code(unit).const_name.downcase
|
40
|
+
Elibri::ONIX::Dict::Release_3_0::ExtentUnit.find_by_onix_code(@unit).const_name.downcase
|
34
41
|
end
|
35
42
|
|
36
43
|
def inspect_include_fields
|
@@ -5,13 +5,8 @@ module Elibri
|
|
5
5
|
module Release_3_0
|
6
6
|
|
7
7
|
class Header
|
8
|
-
include ROXML
|
9
|
-
include Inspector
|
10
8
|
|
11
|
-
|
12
|
-
xml_accessor :sent_date_time, :as => Date, :from => 'SentDateTime'
|
13
|
-
|
14
|
-
xml_accessor :sender, :as => Sender
|
9
|
+
attr_accessor :sent_date_time, :sender, :to_xml
|
15
10
|
|
16
11
|
ATTRIBUTES = [
|
17
12
|
:sent_date_time, :sender
|
@@ -19,6 +14,12 @@ module Elibri
|
|
19
14
|
|
20
15
|
RELATIONS = []
|
21
16
|
|
17
|
+
def initialize(data)
|
18
|
+
@to_xml = data.to_s
|
19
|
+
@sent_date_time = Date.parse(data.xpath('xmlns:SentDateTime').try(:text)) if data.xpath('xmlns:SentDateTime')
|
20
|
+
@sender = Sender.new(data.at_xpath('xmlns:Sender')) if data.at_xpath('xmlns:Sender')
|
21
|
+
end
|
22
|
+
|
22
23
|
end
|
23
24
|
|
24
25
|
end
|
@@ -5,10 +5,6 @@ module Elibri
|
|
5
5
|
module Release_3_0
|
6
6
|
|
7
7
|
class Imprint
|
8
|
-
include ROXML
|
9
|
-
include Inspector
|
10
|
-
|
11
|
-
xml_name 'Imprint'
|
12
8
|
|
13
9
|
ATTRIBUTES = [
|
14
10
|
:name
|
@@ -16,7 +12,12 @@ module Elibri
|
|
16
12
|
|
17
13
|
RELATIONS = []
|
18
14
|
|
19
|
-
|
15
|
+
attr_accessor :name, :to_xml
|
16
|
+
|
17
|
+
def initialize(data)
|
18
|
+
@to_xml = data.to_s
|
19
|
+
@name = data.at_xpath('xmlns:ImprintName').try(:text)
|
20
|
+
end
|
20
21
|
|
21
22
|
end
|
22
23
|
|
@@ -5,12 +5,6 @@ module Elibri
|
|
5
5
|
module Release_3_0
|
6
6
|
|
7
7
|
class Language
|
8
|
-
include ROXML
|
9
|
-
include Inspector
|
10
|
-
xml_name 'Language'
|
11
|
-
|
12
|
-
xml_accessor :role, :from => 'LanguageRole'
|
13
|
-
xml_accessor :code, :from => 'LanguageCode'
|
14
8
|
|
15
9
|
ATTRIBUTES = [
|
16
10
|
:role, :code, :role_name, :language
|
@@ -19,21 +13,34 @@ module Elibri
|
|
19
13
|
RELATIONS = [
|
20
14
|
:inspect_include_fields
|
21
15
|
]
|
16
|
+
|
17
|
+
attr_accessor :role, :code, :to_xml
|
18
|
+
|
19
|
+
def initialize(data)
|
20
|
+
@to_xml = data.to_s
|
21
|
+
@role = data.at_xpath('xmlns:LanguageRole').try(:text)
|
22
|
+
@code = data.at_xpath('xmlns:LanguageCode').try(:text)
|
23
|
+
end
|
22
24
|
|
23
25
|
def role_name
|
24
|
-
Elibri::ONIX::Dict::Release_3_0::LanguageRole.find_by_onix_code(
|
26
|
+
Elibri::ONIX::Dict::Release_3_0::LanguageRole.find_by_onix_code(@role).const_name.downcase
|
25
27
|
end
|
26
28
|
|
27
29
|
def language
|
28
|
-
Elibri::ONIX::Dict::Release_3_0::LanguageCode.find_by_onix_code(
|
30
|
+
Elibri::ONIX::Dict::Release_3_0::LanguageCode.find_by_onix_code(@code).name(:pl).downcase
|
29
31
|
end
|
30
32
|
|
31
33
|
def inspect_include_fields
|
32
34
|
[:role_name, :language]
|
33
35
|
end
|
34
36
|
|
37
|
+
def eid
|
38
|
+
"#{@role}-#{@code}"
|
39
|
+
end
|
40
|
+
|
35
41
|
def id
|
36
|
-
"
|
42
|
+
Kernel.warn "[DEPRECATION] `id` is deprecated. Please use `eid` instead."
|
43
|
+
eid
|
37
44
|
end
|
38
45
|
|
39
46
|
end
|
@@ -5,13 +5,6 @@ module Elibri
|
|
5
5
|
module Release_3_0
|
6
6
|
|
7
7
|
class Measure
|
8
|
-
include ROXML
|
9
|
-
include Inspector
|
10
|
-
|
11
|
-
xml_name 'Measure'
|
12
|
-
xml_accessor :type, :from => 'MeasureType'
|
13
|
-
xml_accessor :measurement, :from => 'Measurement', :as => Fixnum
|
14
|
-
xml_accessor :unit, :from => 'MeasureUnitCode'
|
15
8
|
|
16
9
|
ATTRIBUTES = [
|
17
10
|
:type, :measurement, :unit, :type_name
|
@@ -20,17 +13,32 @@ module Elibri
|
|
20
13
|
RELATIONS = [
|
21
14
|
:inspect_include_fields
|
22
15
|
]
|
16
|
+
|
17
|
+
attr_accessor :type, :measurement, :unit, :type_name, :to_xml
|
18
|
+
|
19
|
+
def initialize(data)
|
20
|
+
@to_xml = data.to_s
|
21
|
+
@type = data.at_xpath('xmlns:MeasureType').try(:text)
|
22
|
+
@measurement = data.at_xpath('xmlns:Measurement').try(:text).try(:to_i)
|
23
|
+
@unit = data.at_xpath('xmlns:MeasureUnitCode').try(:text)
|
24
|
+
|
25
|
+
end
|
23
26
|
|
24
27
|
def type_name
|
25
|
-
Elibri::ONIX::Dict::Release_3_0::MeasureType.find_by_onix_code(type).const_name.downcase
|
28
|
+
Elibri::ONIX::Dict::Release_3_0::MeasureType.find_by_onix_code(@type).const_name.downcase
|
26
29
|
end
|
27
30
|
|
28
31
|
def inspect_include_fields
|
29
32
|
[:type_name]
|
30
33
|
end
|
31
34
|
|
35
|
+
def eid
|
36
|
+
@type.to_i
|
37
|
+
end
|
38
|
+
|
32
39
|
def id
|
33
|
-
|
40
|
+
Kernel.warn "[DEPRECATION] `id` is deprecated. Please use `eid` instead."
|
41
|
+
eid
|
34
42
|
end
|
35
43
|
|
36
44
|
end
|