xml-mapping_extensions 0.3.7 → 0.4.0
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.
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 159f916e7e1a374d68857ce63626f37b763312e3
|
4
|
+
data.tar.gz: 50ffcf3d3606eec904e7ce9faaecccf90905ac39
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fdd87b9bb6d862300aac1b9bf993b9023f2704c6f788347868eb9eb89cd2a5911f92c321c4bba1af4a8520d3957f80b05678d7e75302b2b9e756bf61600d355a
|
7
|
+
data.tar.gz: fbc3c1cc7ba3627c21c6fe6cf2711031620f4638554a1d53d97e46c43547cb86426be36ef46eb4fb7bfbc5f78a1a341937a6342867710cc0a35bd93ad74f58c3
|
data/CHANGES.md
CHANGED
data/README.md
CHANGED
@@ -16,8 +16,8 @@ Additional mapping nodes and other utility code for working with
|
|
16
16
|
- [Example](#example)
|
17
17
|
- [Provided implementations](#provided-implementations)
|
18
18
|
- [Example](#example-1)
|
19
|
-
- [Reading
|
20
|
-
- [Writing
|
19
|
+
- [Reading](#reading)
|
20
|
+
- [Writing](#writing)
|
21
21
|
- [Namespaces](#namespaces)
|
22
22
|
|
23
23
|
|
@@ -123,7 +123,7 @@ class MyElem
|
|
123
123
|
end
|
124
124
|
```
|
125
125
|
|
126
|
-
#### Reading
|
126
|
+
#### Reading
|
127
127
|
|
128
128
|
```ruby
|
129
129
|
xml_str = '<my_elem>
|
@@ -156,7 +156,7 @@ Outputs
|
|
156
156
|
#<MIME::Type:0x007f864bdc4f78 @friendly={"en"=>"Text File"}, @system=nil, @obsolete=false, @registered=true, @use_instead=nil, @signature=false, @content_type="text/plain", @raw_media_type="text", @raw_sub_type="plain", @simplified="text/plain", @i18n_key="text.plain", @media_type="text", @sub_type="plain", @docs=[], @encoding="quoted-printable", @extensions=["txt", "asc", "c", "cc", "h", "hh", "cpp", "hpp", "dat", "hlp", "conf", "def", "doc", "in", "list", "log", "markdown", "md", "rst", "text", "textile"], @references=["IANA", "RFC2046", "RFC3676", "RFC5147"], @xrefs={"rfc"=>["rfc2046", "rfc3676", "rfc5147"]}>
|
157
157
|
```
|
158
158
|
|
159
|
-
#### Writing
|
159
|
+
#### Writing
|
160
160
|
|
161
161
|
```ruby
|
162
162
|
elem = MyElem.new
|
@@ -189,7 +189,24 @@ The `Namespace` class encapsulates an XML namespace:
|
|
189
189
|
namespace = Namespace.new(uri: 'http://example.org/px', schema_location: 'http://example.org/px.xsd')
|
190
190
|
```
|
191
191
|
|
192
|
-
|
192
|
+
The `Namespaced` module extends `XML::Mapping` to add a `namespace` attribute and write the namespace
|
193
|
+
out when saving to XML.
|
194
|
+
|
195
|
+
```ruby
|
196
|
+
class MyElem
|
197
|
+
include XML::MappingExtensions::Namespaced # instead of XML::Mapping
|
198
|
+
|
199
|
+
root_element_name 'my_elem'
|
200
|
+
|
201
|
+
date_node :plain_date, 'plain_date'
|
202
|
+
date_node :zulu_date, 'zulu_date', zulu: true
|
203
|
+
time_node :time, 'time'
|
204
|
+
uri_node :uri, 'uri'
|
205
|
+
mime_type_node :mime_type, 'mime_type'
|
206
|
+
end
|
207
|
+
```
|
208
|
+
|
209
|
+
Setting a namespace on a namespaced object will cause that namespace to be written out when the object is saved
|
193
210
|
to XML:
|
194
211
|
|
195
212
|
```ruby
|
@@ -20,8 +20,8 @@ module XML
|
|
20
20
|
# @param prefix [String, nil] the namespace prefix
|
21
21
|
# @param schema_location [String, nil] the schema location(s)
|
22
22
|
def initialize(uri:, prefix: nil, schema_location: nil)
|
23
|
-
@uri
|
24
|
-
@prefix
|
23
|
+
@uri = uri.to_s
|
24
|
+
@prefix = prefix
|
25
25
|
@schema_location = schema_location
|
26
26
|
end
|
27
27
|
|
@@ -63,6 +63,7 @@ module XML
|
|
63
63
|
def state
|
64
64
|
[uri, prefix, schema_location]
|
65
65
|
end
|
66
|
+
|
66
67
|
protected :state
|
67
68
|
|
68
69
|
def set_prefix_recursive(elem) # rubocop:disable Style/AccessorMethodName
|
@@ -71,35 +72,8 @@ module XML
|
|
71
72
|
elem.name = "#{prefix}:#{elem.name}"
|
72
73
|
elem.each_element { |e| set_prefix_recursive(e) }
|
73
74
|
end
|
74
|
-
private :set_prefix_recursive
|
75
|
-
end
|
76
|
-
end
|
77
|
-
|
78
|
-
# Patches `XML::Mapping` to add a namespace attribute and write the namespace
|
79
|
-
# out when saving to XML.
|
80
|
-
module NamespacedElement
|
81
|
-
|
82
|
-
# @return [Namespace, nil] the namespace, if any
|
83
|
-
attr_accessor :namespace
|
84
75
|
|
85
|
-
|
86
|
-
# on the generated element.
|
87
|
-
def pre_save(options = { mapping: :_default })
|
88
|
-
xml = super(options)
|
89
|
-
namespace.set_default_namespace(xml) if namespace
|
90
|
-
xml
|
91
|
-
end
|
92
|
-
|
93
|
-
# Overrides `XML::Mapping#save_to_xml` to set the XML namespace prefix on
|
94
|
-
# the generated element, and all its descendants that have that namespace.
|
95
|
-
def save_to_xml(options = { mapping: :_default })
|
96
|
-
xml = super(options)
|
97
|
-
namespace.set_prefix(xml) if namespace
|
98
|
-
xml
|
76
|
+
private :set_prefix_recursive
|
99
77
|
end
|
100
78
|
end
|
101
|
-
|
102
|
-
module Mapping
|
103
|
-
prepend NamespacedElement
|
104
|
-
end
|
105
79
|
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
require 'uri'
|
2
|
+
|
3
|
+
module XML
|
4
|
+
module MappingExtensions
|
5
|
+
# Extends `XML::Mapping` to add a `namespace` attribute and write the namespace
|
6
|
+
# out when saving to XML.
|
7
|
+
module Namespaced
|
8
|
+
|
9
|
+
def self.included(base)
|
10
|
+
base.extend(ClassMethods)
|
11
|
+
base.include(XML::Mapping)
|
12
|
+
base.include(InstanceMethods)
|
13
|
+
end
|
14
|
+
|
15
|
+
module ClassMethods
|
16
|
+
def namespace(ns = nil)
|
17
|
+
@namespace = ns if ns
|
18
|
+
@namespace
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def namespace
|
23
|
+
self.class.namespace
|
24
|
+
end
|
25
|
+
|
26
|
+
# Hack to make sure these don't get defined till after `XML::Mapping`'s include
|
27
|
+
# hooks have a chance to define their super methods
|
28
|
+
module InstanceMethods
|
29
|
+
# Overrides `XML::Mapping#pre_save` to set the XML namespace and schema location
|
30
|
+
# on the generated element.
|
31
|
+
def pre_save(options = {mapping: :_default})
|
32
|
+
xml = super(options)
|
33
|
+
namespace.set_default_namespace(xml) if namespace
|
34
|
+
xml
|
35
|
+
end
|
36
|
+
|
37
|
+
# Overrides `XML::Mapping#save_to_xml` to set the XML namespace prefix on
|
38
|
+
# the generated element, and all its descendants that have that namespace.
|
39
|
+
def save_to_xml(options = {mapping: :_default})
|
40
|
+
xml = super(options)
|
41
|
+
namespace.set_prefix(xml) if namespace
|
42
|
+
xml
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
require 'xml/mapping_extensions/namespace'
|
4
|
+
|
5
|
+
module XML
|
6
|
+
module MappingExtensions
|
7
|
+
|
8
|
+
UNPREFIXED = Namespace.new(uri: 'http://example.org/nse')
|
9
|
+
PREFIXED = Namespace.new(uri: 'http://example.org/nse', prefix: 'px')
|
10
|
+
|
11
|
+
# TODO: both versions with schema location
|
12
|
+
|
13
|
+
class Unprefixed
|
14
|
+
include Namespaced
|
15
|
+
namespace UNPREFIXED
|
16
|
+
root_element_name 'unprefixed'
|
17
|
+
text_node :attr, '@attr'
|
18
|
+
text_node :text, 'text()'
|
19
|
+
end
|
20
|
+
|
21
|
+
class Prefixed
|
22
|
+
include Namespaced
|
23
|
+
namespace PREFIXED
|
24
|
+
root_element_name 'prefixed'
|
25
|
+
text_node :attr, '@attr'
|
26
|
+
text_node :text, 'text()'
|
27
|
+
end
|
28
|
+
|
29
|
+
describe Namespaced do
|
30
|
+
describe '#save_to_xml' do
|
31
|
+
it 'writes XML with a default namespace' do
|
32
|
+
obj = Unprefixed.new
|
33
|
+
obj.attr = 'attr value'
|
34
|
+
obj.text = 'text value'
|
35
|
+
expected = '<unprefixed xmlns="http://example.org/nse" attr="attr value">text value</unprefixed>'
|
36
|
+
expect(obj.write_xml).to be_xml(expected)
|
37
|
+
end
|
38
|
+
it 'writes XML with a prefixed namespace' do
|
39
|
+
obj = Prefixed.new
|
40
|
+
obj.attr = 'attr value'
|
41
|
+
obj.text = 'text value'
|
42
|
+
expected = '<px:prefixed xmlns:px="http://example.org/nse" attr="attr value">text value</unprefixed>'
|
43
|
+
expect(obj.write_xml).to be_xml(expected)
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
describe '#parse_xml' do
|
48
|
+
it 'parses XML with a default namespace'
|
49
|
+
it 'parses XML with a prefixed namespace'
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: xml-mapping_extensions
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- David Moles
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-05-
|
11
|
+
date: 2016-05-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: mime-types
|
@@ -191,6 +191,7 @@ files:
|
|
191
191
|
- lib/xml/mapping_extensions/date_node.rb
|
192
192
|
- lib/xml/mapping_extensions/mime_type_node.rb
|
193
193
|
- lib/xml/mapping_extensions/namespace.rb
|
194
|
+
- lib/xml/mapping_extensions/namespaced.rb
|
194
195
|
- lib/xml/mapping_extensions/node_base.rb
|
195
196
|
- lib/xml/mapping_extensions/time_node.rb
|
196
197
|
- lib/xml/mapping_extensions/typesafe_enum_node.rb
|
@@ -204,6 +205,7 @@ files:
|
|
204
205
|
- spec/unit/xml/mapping_extensions/mapping_extensions_spec.rb
|
205
206
|
- spec/unit/xml/mapping_extensions/mime_type_node_spec.rb
|
206
207
|
- spec/unit/xml/mapping_extensions/namespace_spec.rb
|
208
|
+
- spec/unit/xml/mapping_extensions/namespaced_spec.rb
|
207
209
|
- spec/unit/xml/mapping_extensions/node_base_spec.rb
|
208
210
|
- spec/unit/xml/mapping_extensions/time_node_spec.rb
|
209
211
|
- spec/unit/xml/mapping_extensions/typesafe_enum_node_spec.rb
|
@@ -242,6 +244,7 @@ test_files:
|
|
242
244
|
- spec/unit/xml/mapping_extensions/mapping_extensions_spec.rb
|
243
245
|
- spec/unit/xml/mapping_extensions/mime_type_node_spec.rb
|
244
246
|
- spec/unit/xml/mapping_extensions/namespace_spec.rb
|
247
|
+
- spec/unit/xml/mapping_extensions/namespaced_spec.rb
|
245
248
|
- spec/unit/xml/mapping_extensions/node_base_spec.rb
|
246
249
|
- spec/unit/xml/mapping_extensions/time_node_spec.rb
|
247
250
|
- spec/unit/xml/mapping_extensions/typesafe_enum_node_spec.rb
|