xml-mapping_extensions 0.4.5 → 0.4.6
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 +4 -4
- data/CHANGES.md +7 -1
- data/lib/xml/mapping_extensions/typesafe_enum_node.rb +7 -4
- data/lib/xml/mapping_extensions/version.rb +1 -1
- data/lib/xml/mapping_extensions.rb +22 -1
- data/spec/unit/xml/mapping_extensions/mapping_extensions_spec.rb +32 -0
- data/spec/unit/xml/mapping_extensions/typesafe_enum_node_spec.rb +5 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c4e7ef0d9b37dd1ecc3569d5aeadb75a9da079b1
|
4
|
+
data.tar.gz: 59a93fa0fa398f3ea4d493c7751f93e3ae34c9de
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: de2478465f7e44829e949505834d290274466d43d643bab3f8cef180fe35e7db1fd3c4ad0a1a07a022b818c5e5d84fb15f108c8a01eb1e58157dc27abaeec8a9
|
7
|
+
data.tar.gz: 19a67e611dfaf5ae7a8b509598faaa0c84546f0f5a98a3f27058f26cef646c278642b8e39a73a844eaa9a3eaf798698ac95bda6158737816fab92d7a0ba52234
|
data/CHANGES.md
CHANGED
@@ -1,3 +1,9 @@
|
|
1
|
+
## 0.4.6 (15 August 2016)
|
2
|
+
|
3
|
+
- `TypesafeEnumNode.to_value()` now raises `ArgumentError` if the argument is not a valid value for the node's
|
4
|
+
enum type.
|
5
|
+
- Added `#write_to_file` to simplify writing a root element to a file.
|
6
|
+
|
1
7
|
## 0.4.5 (14 July 2016)
|
2
8
|
|
3
9
|
- Make `#fallback_mapping` preserve the order of the fallback mapping instead of appending all fallback
|
@@ -5,7 +11,7 @@
|
|
5
11
|
|
6
12
|
## 0.4.4 (12 July 2016)
|
7
13
|
|
8
|
-
- Add
|
14
|
+
- Add `#fallback_mapping`
|
9
15
|
|
10
16
|
## 0.4.3 (11 July 2016)
|
11
17
|
|
@@ -21,17 +21,20 @@ module XML
|
|
21
21
|
end
|
22
22
|
|
23
23
|
# Converts an enum value or value string to an enum instance
|
24
|
-
# @param xml_text the enum value or value string
|
25
|
-
# @return [TypesafeEnum::Base] an instance of the enum class declared in the initializer
|
24
|
+
# @param xml_text [String, nil] the enum value or value string
|
25
|
+
# @return [TypesafeEnum::Base, nil] an instance of the enum class declared in the initializer,
|
26
|
+
# or nil if `xml_text` is nil
|
26
27
|
def to_value(xml_text)
|
28
|
+
return nil unless xml_text
|
27
29
|
enum_instance = @enum_class.find_by_value(xml_text)
|
28
30
|
enum_instance = @enum_class.find_by_value_str(xml_text) unless enum_instance
|
31
|
+
fail ArgumentError, "No instance of enum class #{@enum_class.name} found for value '#{xml_text}'" unless enum_instance
|
29
32
|
enum_instance
|
30
33
|
end
|
31
34
|
|
32
35
|
# Converts an enum value or value string to an enum instance
|
33
|
-
# @param enum_instance [TypesafeEnum::Base] an instance of the enum class declared in the initializer
|
34
|
-
# @return [String] the enum value as a string
|
36
|
+
# @param enum_instance [TypesafeEnum::Base, nil] an instance of the enum class declared in the initializer
|
37
|
+
# @return [String, nil] the enum value as a string, or nil if `enum_instance` is nil
|
35
38
|
def to_xml_text(enum_instance)
|
36
39
|
enum_instance.value.to_s if enum_instance
|
37
40
|
end
|
@@ -34,7 +34,7 @@ module XML
|
|
34
34
|
|
35
35
|
module Mapping
|
36
36
|
|
37
|
-
# Writes this mapped object as
|
37
|
+
# Writes this mapped object as a pretty-printed XML string.
|
38
38
|
#
|
39
39
|
# @param options [Hash] the options to be passed to
|
40
40
|
# [XML::Mapping#save_to_xml](http://multi-io.github.io/xml-mapping/XML/Mapping.html#method-i-save_to_xml)
|
@@ -48,6 +48,27 @@ module XML
|
|
48
48
|
io.string
|
49
49
|
end
|
50
50
|
|
51
|
+
# Writes this mapped object to the specified file, as an XML document (including declaration).
|
52
|
+
#
|
53
|
+
# @param path [String] The path of the file to write to
|
54
|
+
# @param indent [Integer] The indentation level. Defaults to -1 (no indenting). Note
|
55
|
+
# that this parameter will be ignored if `pretty` is present.
|
56
|
+
# @param pretty [Boolean] Whether to pretty-print the output. Defaults to `false`. Note
|
57
|
+
# that this option overrides `indent`.
|
58
|
+
# @param options [Hash] the options to be passed to
|
59
|
+
# [XML::Mapping#save_to_xml](http://multi-io.github.io/xml-mapping/XML/Mapping.html#method-i-save_to_xml)
|
60
|
+
def write_to_file(path, indent: -1, pretty: false, options: { mapping: :_default })
|
61
|
+
doc = REXML::Document.new
|
62
|
+
doc << REXML::XMLDecl.new
|
63
|
+
doc.elements[1] = save_to_xml(options)
|
64
|
+
File.open(path, 'w') do |f|
|
65
|
+
return doc.write(f, indent) unless pretty
|
66
|
+
formatter = REXML::Formatters::Pretty.new
|
67
|
+
formatter.compact = true
|
68
|
+
formatter.write(doc, f)
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
51
72
|
# Additional accessors needed for `#fallback_mapping`.
|
52
73
|
class Node
|
53
74
|
attr_reader :attrname
|
@@ -1,5 +1,6 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
require 'tempfile'
|
3
|
+
require 'tmpdir'
|
3
4
|
|
4
5
|
module XML
|
5
6
|
module Mapping
|
@@ -61,6 +62,37 @@ module XML
|
|
61
62
|
end
|
62
63
|
end
|
63
64
|
|
65
|
+
describe '#write_to_file' do
|
66
|
+
|
67
|
+
before(:each) do
|
68
|
+
@obj = MXSpecObject.new
|
69
|
+
@obj.attribute = 123
|
70
|
+
@obj.text = 'element text'
|
71
|
+
@obj.children = ['child 1', 'child 2']
|
72
|
+
@expected = REXML::Document.new(@obj.write_xml)
|
73
|
+
end
|
74
|
+
|
75
|
+
it 'writes to a file' do
|
76
|
+
Dir.mktmpdir do |tmp|
|
77
|
+
outfile = "#{tmp}/mxspec.xml"
|
78
|
+
@obj.write_to_file(outfile, indent: 4)
|
79
|
+
outxml = File.read(outfile)
|
80
|
+
puts("'#{outxml}'")
|
81
|
+
expect(outxml).to be_xml(@expected)
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
it 'pretty-prints to a file' do
|
86
|
+
Dir.mktmpdir do |tmp|
|
87
|
+
outfile = "#{tmp}/mxspec.xml"
|
88
|
+
@obj.write_to_file(outfile, pretty: true)
|
89
|
+
outxml = File.read(outfile)
|
90
|
+
puts("'#{outxml}'")
|
91
|
+
expect(outxml).to be_xml(@expected)
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
64
96
|
describe '#parse_xml' do
|
65
97
|
|
66
98
|
before(:each) do
|
@@ -69,10 +69,14 @@ module XML
|
|
69
69
|
end
|
70
70
|
end
|
71
71
|
|
72
|
-
it 'parses a
|
72
|
+
it 'parses a nil value as nil' do
|
73
73
|
expect(to_my_string_enum(nil)).to be_nil
|
74
74
|
end
|
75
75
|
|
76
|
+
it 'raises ArgumentError for an invalid value' do
|
77
|
+
expect { to_my_string_enum('elvis') }.to raise_error(ArgumentError)
|
78
|
+
end
|
79
|
+
|
76
80
|
it 'doesn\'t set an attribute for a nil value' do
|
77
81
|
expect(string_enum_to_text(nil)).to be_nil
|
78
82
|
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.
|
4
|
+
version: 0.4.6
|
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-
|
11
|
+
date: 2016-08-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: mime-types
|