elibri_onix 0.1.0 → 0.1.1
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 +1 -1
- data/Gemfile.lock +1 -1
- data/elibri_onix.gemspec +6 -5
- data/lib/elibri_onix.rb +1 -0
- data/lib/elibri_onix/onix_3_0/onix_message.rb +28 -0
- data/lib/elibri_onix/onix_3_0/product.rb +21 -4
- data/lib/elibri_onix/version.rb +1 -1
- data/test/elibri_onix_release_3_0_onix_message_test.rb +19 -1
- data/test/fixtures/all_possible_tags.xml +1 -1
- data/test/fixtures/old_dialect.xml +19 -0
- metadata +9 -8
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
data/elibri_onix.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{elibri_onix}
|
8
|
-
s.version = "0.1.
|
8
|
+
s.version = "0.1.1"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Marcin Urbanski"]
|
12
|
-
s.date = %q{2011-10-
|
12
|
+
s.date = %q{2011-10-07}
|
13
13
|
s.description = %q{EDItEUR ONIX format subset implementation used in Elibri publication system}
|
14
14
|
s.email = %q{marcin@urbanski.vdl.pl}
|
15
15
|
s.extra_rdoc_files = [
|
@@ -57,6 +57,7 @@ Gem::Specification.new do |s|
|
|
57
57
|
"test/elibri_onix_release_3_0_onix_message_test.rb",
|
58
58
|
"test/elibri_onix_test.rb",
|
59
59
|
"test/fixtures/all_possible_tags.xml",
|
60
|
+
"test/fixtures/old_dialect.xml",
|
60
61
|
"test/helper.rb"
|
61
62
|
]
|
62
63
|
s.homepage = %q{http://github.com/elibri/elibri_onix}
|
@@ -69,7 +70,7 @@ Gem::Specification.new do |s|
|
|
69
70
|
s.specification_version = 3
|
70
71
|
|
71
72
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
72
|
-
s.add_runtime_dependency(%q<roxml>, ["
|
73
|
+
s.add_runtime_dependency(%q<roxml>, ["= 3.1.6"])
|
73
74
|
s.add_runtime_dependency(%q<i18n>, [">= 0"])
|
74
75
|
s.add_runtime_dependency(%q<activesupport>, [">= 3.1.0"])
|
75
76
|
s.add_development_dependency(%q<pry>, [">= 0"])
|
@@ -79,7 +80,7 @@ Gem::Specification.new do |s|
|
|
79
80
|
s.add_development_dependency(%q<jeweler>, ["~> 1.6.2"])
|
80
81
|
s.add_development_dependency(%q<rcov>, [">= 0"])
|
81
82
|
else
|
82
|
-
s.add_dependency(%q<roxml>, ["
|
83
|
+
s.add_dependency(%q<roxml>, ["= 3.1.6"])
|
83
84
|
s.add_dependency(%q<i18n>, [">= 0"])
|
84
85
|
s.add_dependency(%q<activesupport>, [">= 3.1.0"])
|
85
86
|
s.add_dependency(%q<pry>, [">= 0"])
|
@@ -90,7 +91,7 @@ Gem::Specification.new do |s|
|
|
90
91
|
s.add_dependency(%q<rcov>, [">= 0"])
|
91
92
|
end
|
92
93
|
else
|
93
|
-
s.add_dependency(%q<roxml>, ["
|
94
|
+
s.add_dependency(%q<roxml>, ["= 3.1.6"])
|
94
95
|
s.add_dependency(%q<i18n>, [">= 0"])
|
95
96
|
s.add_dependency(%q<activesupport>, [">= 3.1.0"])
|
96
97
|
s.add_dependency(%q<pry>, [">= 0"])
|
data/lib/elibri_onix.rb
CHANGED
@@ -8,9 +8,37 @@ module Elibri
|
|
8
8
|
|
9
9
|
xml_name 'ONIXMessage'
|
10
10
|
xml_accessor :release, :from => "@release"
|
11
|
+
xml_accessor :elibri_dialect, :from => "@elibri:dialect"
|
11
12
|
|
12
13
|
xml_accessor :products, :as => [Product]
|
13
14
|
xml_accessor :header, :as => Header
|
15
|
+
|
16
|
+
|
17
|
+
|
18
|
+
def self.from_xml(data, *initialization_args)
|
19
|
+
xml = XML::Node.from(data)
|
20
|
+
|
21
|
+
new(*initialization_args).tap do |inst|
|
22
|
+
inst.roxml_references = roxml_attrs.map {|attr| attr.to_ref(inst) }
|
23
|
+
|
24
|
+
inst.roxml_references.each do |ref|
|
25
|
+
value = ref.value_in(xml)
|
26
|
+
if ref.is_a? ROXML::XMLObjectRef
|
27
|
+
Array(value).each do |obj|
|
28
|
+
obj.instance_variable_set(:@elibri_dialect, inst.elibri_dialect)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
inst.respond_to?(ref.opts.setter) \
|
32
|
+
? inst.send(ref.opts.setter, value) \
|
33
|
+
: inst.instance_variable_set(ref.opts.instance_variable_name, value)
|
34
|
+
end
|
35
|
+
inst.send(:after_parse) if inst.respond_to?(:after_parse, true)
|
36
|
+
end
|
37
|
+
rescue ArgumentError => e
|
38
|
+
raise e, e.message + " for class #{self}"
|
39
|
+
end
|
40
|
+
|
41
|
+
|
14
42
|
end
|
15
43
|
|
16
44
|
end
|
@@ -5,16 +5,33 @@ module Elibri
|
|
5
5
|
|
6
6
|
class Product
|
7
7
|
include ROXML
|
8
|
+
attr_accessor :elibri_dialect
|
8
9
|
|
9
10
|
xml_name 'Product'
|
10
11
|
xml_accessor :record_reference, :from => 'RecordReference'
|
11
12
|
xml_accessor :notification_type, :from => 'NotificationType', :as => Fixnum
|
12
13
|
xml_accessor :deletion_text, :from => 'DeletionText'
|
13
14
|
|
14
|
-
|
15
|
-
xml_accessor :
|
16
|
-
xml_accessor :
|
17
|
-
xml_accessor :
|
15
|
+
# Load attributes specific for dialect 3.0.1
|
16
|
+
xml_accessor :cover_type_from_3_0_1, :from => 'elibri:CoverType'
|
17
|
+
xml_accessor :cover_price_from_3_0_1, :from => 'elibri:CoverPrice', :as => BigDecimal
|
18
|
+
xml_accessor :vat_from_3_0_1, :from => 'elibri:Vat', :as => Fixnum
|
19
|
+
xml_accessor :pkwiu_from_3_0_1, :from => 'elibri:PKWiU'
|
20
|
+
|
21
|
+
# Attributes in namespace elibri:* are specific for dialect >= 3.0.1.
|
22
|
+
# If dialect is less than 3.0.1, returns nil.
|
23
|
+
%w{cover_type cover_price vat pkwiu}.each do |method_name|
|
24
|
+
module_eval(<<-EVAL_END, __FILE__, __LINE__ + 1)
|
25
|
+
def #{method_name} # def vat
|
26
|
+
if @elibri_dialect.to_s >= '3.0.1' # if @elibri_dialect.to_s >= '3.0.1'
|
27
|
+
#{method_name}_from_3_0_1 # vat_from_3_0_1
|
28
|
+
else # else
|
29
|
+
nil # nil
|
30
|
+
end # end
|
31
|
+
end # end
|
32
|
+
EVAL_END
|
33
|
+
end
|
34
|
+
|
18
35
|
|
19
36
|
xml_accessor :identifiers, :as => [ProductIdentifier]
|
20
37
|
xml_accessor :related_products, :as => [RelatedProduct], :in => 'RelatedMaterial'
|
data/lib/elibri_onix/version.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
require 'helper'
|
2
2
|
|
3
3
|
|
4
|
+
|
4
5
|
describe Elibri::ONIX::Release_3_0::ONIXMessage do
|
5
6
|
|
6
7
|
|
@@ -8,6 +9,8 @@ describe Elibri::ONIX::Release_3_0::ONIXMessage do
|
|
8
9
|
xml_string = File.read File.join(File.dirname(__FILE__), "..", "test", "fixtures", "all_possible_tags.xml")
|
9
10
|
|
10
11
|
onix = Elibri::ONIX::Release_3_0::ONIXMessage.from_xml(xml_string)
|
12
|
+
assert_equal '3.0', onix.release
|
13
|
+
assert_equal '3.0.1', onix.elibri_dialect
|
11
14
|
assert_equal 'Elibri.com.pl', onix.header.sender.sender_name
|
12
15
|
assert_equal 'Tomasz Meka', onix.header.sender.contact_name
|
13
16
|
assert_equal 'kontakt@elibri.com.pl', onix.header.sender.email_address
|
@@ -16,6 +19,7 @@ describe Elibri::ONIX::Release_3_0::ONIXMessage do
|
|
16
19
|
assert_equal 1, onix.products.size
|
17
20
|
|
18
21
|
product = onix.products.first
|
22
|
+
assert_equal '3.0.1', product.elibri_dialect
|
19
23
|
|
20
24
|
assert_equal 'miękka', product.cover_type
|
21
25
|
assert_equal 12.99, product.cover_price
|
@@ -171,8 +175,22 @@ describe Elibri::ONIX::Release_3_0::ONIXMessage do
|
|
171
175
|
product.supply_details[1].tap do |supply_detail|
|
172
176
|
assert_equal 'very few', supply_detail.quantity_code
|
173
177
|
end
|
174
|
-
|
175
178
|
end
|
176
179
|
|
177
180
|
|
181
|
+
it "should consider elibri_dialect attribute and ignore attributes unrecognized in specified dialect" do
|
182
|
+
xml_string = File.read File.join(File.dirname(__FILE__), "..", "test", "fixtures", "old_dialect.xml")
|
183
|
+
|
184
|
+
onix = Elibri::ONIX::Release_3_0::ONIXMessage.from_xml(xml_string)
|
185
|
+
assert_equal '3.0', onix.release
|
186
|
+
assert_equal '3.0.0', onix.elibri_dialect
|
187
|
+
|
188
|
+
product = onix.products.first
|
189
|
+
assert_equal '3.0.0', product.elibri_dialect
|
190
|
+
assert_nil product.cover_type
|
191
|
+
assert_nil product.cover_price
|
192
|
+
assert_nil product.vat
|
193
|
+
assert_nil product.pkwiu
|
194
|
+
end
|
195
|
+
|
178
196
|
end
|
@@ -1,5 +1,5 @@
|
|
1
1
|
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
-
<ONIXMessage release="3.0" xmlns:elibri="http://elibri.com.pl/ns/extensions" xmlns="http://www.editeur.org/onix/3.0/reference">
|
2
|
+
<ONIXMessage release="3.0" elibri:dialect="3.0.1" xmlns:elibri="http://elibri.com.pl/ns/extensions" xmlns="http://www.editeur.org/onix/3.0/reference">
|
3
3
|
<Header>
|
4
4
|
<Sender>
|
5
5
|
<SenderName>Elibri.com.pl</SenderName>
|
@@ -0,0 +1,19 @@
|
|
1
|
+
|
2
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
3
|
+
<ONIXMessage release="3.0" elibri:dialect="3.0.0" xmlns:elibri="http://elibri.com.pl/ns/extensions" xmlns="http://www.editeur.org/onix/3.0/reference">
|
4
|
+
<Header>
|
5
|
+
<Sender>
|
6
|
+
<SenderName>Elibri.com.pl</SenderName>
|
7
|
+
<ContactName>Tomasz Meka</ContactName>
|
8
|
+
<EmailAddress>kontakt@elibri.com.pl</EmailAddress>
|
9
|
+
</Sender>
|
10
|
+
<SentDateTime>20111005</SentDateTime>
|
11
|
+
</Header>
|
12
|
+
<Product>
|
13
|
+
<RecordReference>fdb8fa072be774d97a97</RecordReference>
|
14
|
+
<elibri:CoverType>miękka</elibri:CoverType>
|
15
|
+
<elibri:CoverPrice>12.99</elibri:CoverPrice>
|
16
|
+
<elibri:Vat>5</elibri:Vat>
|
17
|
+
<elibri:PKWiU>58.11.1</elibri:PKWiU>
|
18
|
+
</Product>
|
19
|
+
</ONIXMessage>
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: elibri_onix
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 25
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 1
|
9
|
-
-
|
10
|
-
version: 0.1.
|
9
|
+
- 1
|
10
|
+
version: 0.1.1
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Marcin Urbanski
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-10-
|
18
|
+
date: 2011-10-07 00:00:00 +02:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
@@ -23,14 +23,14 @@ dependencies:
|
|
23
23
|
requirement: &id001 !ruby/object:Gem::Requirement
|
24
24
|
none: false
|
25
25
|
requirements:
|
26
|
-
- - "
|
26
|
+
- - "="
|
27
27
|
- !ruby/object:Gem::Version
|
28
|
-
hash:
|
28
|
+
hash: 15
|
29
29
|
segments:
|
30
30
|
- 3
|
31
31
|
- 1
|
32
|
-
-
|
33
|
-
version: 3.1.
|
32
|
+
- 6
|
33
|
+
version: 3.1.6
|
34
34
|
name: roxml
|
35
35
|
version_requirements: *id001
|
36
36
|
prerelease: false
|
@@ -202,6 +202,7 @@ files:
|
|
202
202
|
- test/elibri_onix_release_3_0_onix_message_test.rb
|
203
203
|
- test/elibri_onix_test.rb
|
204
204
|
- test/fixtures/all_possible_tags.xml
|
205
|
+
- test/fixtures/old_dialect.xml
|
205
206
|
- test/helper.rb
|
206
207
|
has_rdoc: true
|
207
208
|
homepage: http://github.com/elibri/elibri_onix
|