xml-mapping_extensions 0.4.5 → 0.4.6
Sign up to get free protection for your applications and to get access to all the features.
- 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
|