xmlmapper 0.7.1 → 0.8.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/CHANGELOG.md +11 -0
- data/README.md +2 -2
- data/lib/xmlmapper.rb +28 -1
- data/lib/xmlmapper/text_node.rb +5 -1
- data/lib/xmlmapper/version.rb +1 -1
- data/spec/fixtures/text_node_with_comment.xml +2 -0
- data/spec/to_xml_with_namespaces_spec.rb +31 -3
- data/spec/xmlmapper_spec.rb +17 -1
- metadata +13 -10
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: cb7a9048f9c5776bd95d515a304c9eb10874458681f2e271fc0e9be7ee2779d7
|
4
|
+
data.tar.gz: e529bfda1112b716a8941d0a43437c5178451473219e3a407aee9c3fbb1a1f1a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 490ea2b98896969d34d5a8f91fb8dbc254b46d8d2d36cd740eabdf0dececfd986307ed615df7bbede06f570cb5ca43472e0305bdfc53d692f26f80405dcfd267
|
7
|
+
data.tar.gz: f77dc1661532920e0f8db940ccb22d6b2ed268987a12ad01bb3293691127212399481f21db2dbe72851103e39b07752ba03fbf08b58d4c872efb4b18a6ce8564
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,14 @@
|
|
1
|
+
## 0.8.1 / 2021-08-13
|
2
|
+
|
3
|
+
* Version 0.8.0 fixed a bug with newer versions of nokogiri, however due to the way this fix works it breaks compatability with
|
4
|
+
older versions so we now added `'nokogiri', '~> 1.11'` as dependency
|
5
|
+
* Update gemspec
|
6
|
+
|
7
|
+
## 0.8.0 / 2021-08-12
|
8
|
+
|
9
|
+
### WARNING: COMPATABILITY (see 0.8.1)
|
10
|
+
* [Fix](https://github.com/digidentity/xmlmapper/pull/2) missing namespace when adding a child
|
11
|
+
|
1
12
|
## 0.7.0
|
2
13
|
|
3
14
|
* Set xml_value with a non canonicalized version
|
data/README.md
CHANGED
@@ -1,7 +1,7 @@
|
|
1
|
-
|
1
|
+
XmlMapper
|
2
2
|
===========
|
3
3
|
|
4
|
-
|
4
|
+
XmlMapper allows you to parse XML data and convert it quickly and easily into ruby data structures.
|
5
5
|
|
6
6
|
This project is a fork of the great work done first by
|
7
7
|
[jnunemaker](https://github.com/jnunemaker/happymapper).
|
data/lib/xmlmapper.rb
CHANGED
@@ -687,7 +687,34 @@ module XmlMapper
|
|
687
687
|
# an empty element will be written to the xml
|
688
688
|
#
|
689
689
|
if value.nil? && element.options[:single] && element.options[:state_when_nil]
|
690
|
-
|
690
|
+
#
|
691
|
+
# NOTE
|
692
|
+
# In JRuby 9.0.4.0+ and Nokogiri version 1.6.8 or with Nokogiri version >= 1.12.0 (libxml >= 2.9.12),
|
693
|
+
# the Nokogiri::XML::Builder::NodeBuilder does not retain the XML namespace prefix for an element
|
694
|
+
# when adding an element to a parent node.
|
695
|
+
#
|
696
|
+
# The namespace prefix must be specified when adding the node to its parent.
|
697
|
+
# This issue manifests when setting an element's :state_when_nil' option to true.
|
698
|
+
#
|
699
|
+
# This workaround is intended for XML element prefixes that originate from a
|
700
|
+
# single namespace defined in 'registered_namespaces'. If there are
|
701
|
+
# multiple namespaces defined in the 'registered_namespaces' array,
|
702
|
+
# then the first namespace is selected.
|
703
|
+
#
|
704
|
+
# Possible related open issues in Nokogiri:
|
705
|
+
# 1. Nokogiri under jruby fails to create namespaces named the same as a sibling
|
706
|
+
# https://github.com/sparklemotion/nokogiri/issues/1247
|
707
|
+
# 2. Attribute loses namespace when node moved
|
708
|
+
# https://github.com/sparklemotion/nokogiri/issues/1278
|
709
|
+
# 3. Adding namespace-less node to namespaced parent attaches the parent namespace to the child
|
710
|
+
# https://github.com/sparklemotion/nokogiri/issues/425
|
711
|
+
#
|
712
|
+
if (RUBY_ENGINE == 'jruby' || Nokogiri.uses_libxml?('>= 2.9.12')) && !registered_namespaces.empty?
|
713
|
+
ns = registered_namespaces.keys.first.to_sym
|
714
|
+
xml[ns].send("#{tag}_","")
|
715
|
+
else
|
716
|
+
xml.send("#{tag}_","")
|
717
|
+
end
|
691
718
|
end
|
692
719
|
|
693
720
|
#
|
data/lib/xmlmapper/text_node.rb
CHANGED
data/lib/xmlmapper/version.rb
CHANGED
@@ -138,8 +138,15 @@ describe "Saving #to_xml", "with xml namespaces" do
|
|
138
138
|
end
|
139
139
|
|
140
140
|
context "when an element has a 'state_when_nil' parameter" do
|
141
|
+
let(:element) { subject.xpath('address:description').first }
|
142
|
+
|
141
143
|
it "saves an empty element" do
|
142
|
-
expect(
|
144
|
+
expect(element.text).to eq ""
|
145
|
+
end
|
146
|
+
|
147
|
+
it "the empty element has the correct namespace prefix from the array of registered namespaces" do
|
148
|
+
ns_scopes = element.namespace_scopes
|
149
|
+
expect(ns_scopes.select { |ns| ns == element.namespace }.first.prefix).to eq "address"
|
143
150
|
end
|
144
151
|
end
|
145
152
|
|
@@ -194,10 +201,27 @@ describe "Saving #to_xml", "with xml namespaces" do
|
|
194
201
|
end
|
195
202
|
end
|
196
203
|
|
204
|
+
# NOTE While the original implementation of the test below is correct, the order of XML namespaces
|
205
|
+
# in the XML generated by 'to_xml' differs under JRuby and MRI. In terms of information content,
|
206
|
+
# the XML produced under both platforms are identical. However, the difference in namespace ordering
|
207
|
+
# will produce different XML documents and consequently XML digests. The test below and various tests
|
208
|
+
# in the 'libsaml' gem will compare XML documents and digests of XML documents generated by 'to_xml' which,
|
209
|
+
# while informationally correct, have different values. Unfortunately, the cause of this behavior has
|
210
|
+
# not been identified. In the meantime, it is important to explictly call out this behavior.
|
211
|
+
|
197
212
|
context 'namespace supplied by element declaration trumps namespace ' \
|
198
213
|
'specified by element class' do
|
199
214
|
|
200
|
-
let(:
|
215
|
+
let(:expected_xml_jruby) do
|
216
|
+
<<-XML.gsub(/^\s*\|/, '')
|
217
|
+
|<?xml version="1.0"?>
|
218
|
+
|<coffeemachine xmlns:beverage="http://beverages.org/Beverage/0.1" xmlns:coffee="http://coffee.org/Coffee/0.1">
|
219
|
+
| <beverage:beverage name="coffee"/>
|
220
|
+
|</coffeemachine>
|
221
|
+
XML
|
222
|
+
end
|
223
|
+
|
224
|
+
let(:expected_xml_mri) do
|
201
225
|
<<-XML.gsub(/^\s*\|/, '')
|
202
226
|
|<?xml version="1.0"?>
|
203
227
|
|<coffeemachine xmlns:coffee="http://coffee.org/Coffee/0.1" xmlns:beverage="http://beverages.org/Beverage/0.1">
|
@@ -224,7 +248,11 @@ describe "Saving #to_xml", "with xml namespaces" do
|
|
224
248
|
it 'uses the element declaration namespace on the element' do
|
225
249
|
machine = CoffeeMachine.new
|
226
250
|
machine.beverage = Beverage.new.tap {|obj| obj.name = 'coffee'}
|
227
|
-
|
251
|
+
if RUBY_ENGINE == 'jruby'
|
252
|
+
machine.to_xml.should be == expected_xml_jruby
|
253
|
+
else
|
254
|
+
machine.to_xml.should be == expected_xml_mri
|
255
|
+
end
|
228
256
|
end
|
229
257
|
end
|
230
258
|
|
data/spec/xmlmapper_spec.rb
CHANGED
@@ -554,7 +554,6 @@ end
|
|
554
554
|
class DefaultNamespaceCombi
|
555
555
|
include XmlMapper
|
556
556
|
|
557
|
-
|
558
557
|
register_namespace 'bk', "urn:loc.gov:books"
|
559
558
|
register_namespace 'isbn', "urn:ISBN:0-395-36341-6"
|
560
559
|
register_namespace 'p', "urn:loc.gov:people"
|
@@ -567,6 +566,14 @@ class DefaultNamespaceCombi
|
|
567
566
|
element :author, String, :namespace => 'p', :tag => "author"
|
568
567
|
end
|
569
568
|
|
569
|
+
class TextNodeWithComment
|
570
|
+
include XmlMapper
|
571
|
+
|
572
|
+
tag 'textnode'
|
573
|
+
|
574
|
+
content :value, String
|
575
|
+
end
|
576
|
+
|
570
577
|
describe XmlMapper do
|
571
578
|
|
572
579
|
describe "being included into another class" do
|
@@ -1134,4 +1141,13 @@ describe XmlMapper do
|
|
1134
1141
|
end
|
1135
1142
|
end
|
1136
1143
|
|
1144
|
+
context 'text_node with comments' do
|
1145
|
+
it 'returns the full text in the node' do
|
1146
|
+
xml = fixture_file('text_node_with_comment.xml')
|
1147
|
+
text_node = TextNodeWithComment.parse(xml, single: true)
|
1148
|
+
|
1149
|
+
expect(text_node.value).to eq "With Comment"
|
1150
|
+
end
|
1151
|
+
end
|
1152
|
+
|
1137
1153
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: xmlmapper
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.8.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Damien Le Berrigaud
|
@@ -10,10 +10,12 @@ authors:
|
|
10
10
|
- Roland Swingler
|
11
11
|
- Etienne Vallette d'Osia
|
12
12
|
- Franklin Webber
|
13
|
+
- Benoist Claassen
|
14
|
+
- Johnny Dongelmans
|
13
15
|
autorequire:
|
14
16
|
bindir: bin
|
15
17
|
cert_chain: []
|
16
|
-
date:
|
18
|
+
date: 2021-08-14 00:00:00.000000000 Z
|
17
19
|
dependencies:
|
18
20
|
- !ruby/object:Gem::Dependency
|
19
21
|
name: nokogiri
|
@@ -21,14 +23,14 @@ dependencies:
|
|
21
23
|
requirements:
|
22
24
|
- - "~>"
|
23
25
|
- !ruby/object:Gem::Version
|
24
|
-
version: '1.
|
26
|
+
version: '1.11'
|
25
27
|
type: :runtime
|
26
28
|
prerelease: false
|
27
29
|
version_requirements: !ruby/object:Gem::Requirement
|
28
30
|
requirements:
|
29
31
|
- - "~>"
|
30
32
|
- !ruby/object:Gem::Version
|
31
|
-
version: '1.
|
33
|
+
version: '1.11'
|
32
34
|
- !ruby/object:Gem::Dependency
|
33
35
|
name: rspec
|
34
36
|
requirement: !ruby/object:Gem::Requirement
|
@@ -45,7 +47,7 @@ dependencies:
|
|
45
47
|
version: '2.8'
|
46
48
|
description: Object to XML Mapping Library, using Nokogiri (fork from John Nunemaker's
|
47
49
|
Happymapper)
|
48
|
-
email:
|
50
|
+
email: jdongelmans@digidentity.com
|
49
51
|
executables: []
|
50
52
|
extensions: []
|
51
53
|
extra_rdoc_files:
|
@@ -90,6 +92,7 @@ files:
|
|
90
92
|
- spec/fixtures/set_config_options.xml
|
91
93
|
- spec/fixtures/statuses.xml
|
92
94
|
- spec/fixtures/subclass_namespace.xml
|
95
|
+
- spec/fixtures/text_node_with_comment.xml
|
93
96
|
- spec/fixtures/unformatted_address.xml
|
94
97
|
- spec/fixtures/wrapper.xml
|
95
98
|
- spec/has_many_empty_array_spec.rb
|
@@ -109,7 +112,7 @@ files:
|
|
109
112
|
- spec/xmlmapper_parse_spec.rb
|
110
113
|
- spec/xmlmapper_spec.rb
|
111
114
|
- spec/xpath_spec.rb
|
112
|
-
homepage:
|
115
|
+
homepage: https://github.com/digidentity/xmlmapper
|
113
116
|
licenses:
|
114
117
|
- MIT
|
115
118
|
metadata: {}
|
@@ -121,17 +124,16 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
121
124
|
requirements:
|
122
125
|
- - ">="
|
123
126
|
- !ruby/object:Gem::Version
|
124
|
-
version:
|
127
|
+
version: 2.5.0
|
125
128
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
126
129
|
requirements:
|
127
130
|
- - ">="
|
128
131
|
- !ruby/object:Gem::Version
|
129
132
|
version: '0'
|
130
133
|
requirements: []
|
131
|
-
|
132
|
-
rubygems_version: 2.5.1
|
134
|
+
rubygems_version: 3.1.4
|
133
135
|
signing_key:
|
134
|
-
specification_version:
|
136
|
+
specification_version: 4
|
135
137
|
summary: Provides a simple way to map XML to Ruby Objects and back again.
|
136
138
|
test_files:
|
137
139
|
- spec/attribute_default_value_spec.rb
|
@@ -162,6 +164,7 @@ test_files:
|
|
162
164
|
- spec/fixtures/set_config_options.xml
|
163
165
|
- spec/fixtures/statuses.xml
|
164
166
|
- spec/fixtures/subclass_namespace.xml
|
167
|
+
- spec/fixtures/text_node_with_comment.xml
|
165
168
|
- spec/fixtures/unformatted_address.xml
|
166
169
|
- spec/fixtures/wrapper.xml
|
167
170
|
- spec/has_many_empty_array_spec.rb
|