xml-mapping_extensions 0.3.4 → 0.3.5
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 +5 -0
- data/Rakefile +6 -7
- data/lib/xml/mapping_extensions/date_node.rb +2 -2
- data/lib/xml/mapping_extensions/node_base.rb +5 -2
- data/lib/xml/mapping_extensions/version.rb +1 -1
- data/spec/unit/xml/mapping_extensions/date_node_spec.rb +61 -0
- data/spec/unit/xml/mapping_extensions/node_base_spec.rb +27 -14
- data/xml-mapping_extensions.gemspec +1 -0
- metadata +16 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1f632745c95852e892e50841d1dae290012d7941
|
4
|
+
data.tar.gz: 308acdeaa42233881b291b2adce912641e50a993
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3280dae9565abd98b0a8800ae66d217097ded31f275dde511b5c652760ad54f27462940b92b7ab539cb1550755af34773879e0fe10b38c866d97e0d290ddb140
|
7
|
+
data.tar.gz: 0885775aa138a6dacf348f572f9843a97994c036abeab239a36d75816ef19719af29803e54ff57889078d752f47dce67fbeb590e0c40e8c700ea1e14d858794e
|
data/CHANGES.md
CHANGED
@@ -1,3 +1,8 @@
|
|
1
|
+
## 0.3.5 (28 April 2016)
|
2
|
+
|
3
|
+
- `DateNode`: Fix issues with `Date.xmlschema` misbehaving in a Rails / ActiveSupport environment
|
4
|
+
- `NodeBase`: Improve parsing error reporting, so that we get the node owner and attribute and the offending value
|
5
|
+
|
1
6
|
## 0.3.4 (27 January 2016)
|
2
7
|
|
3
8
|
- Make gemspec smart enough to handle SSH checkouts
|
data/Rakefile
CHANGED
@@ -12,14 +12,13 @@ namespace :spec do
|
|
12
12
|
task.pattern = 'unit/**/*_spec.rb'
|
13
13
|
end
|
14
14
|
|
15
|
-
desc 'Run all
|
16
|
-
RSpec::Core::RakeTask.new(:
|
17
|
-
|
18
|
-
task.
|
19
|
-
task.pattern = 'acceptance/**/*_spec.rb'
|
15
|
+
desc 'Run all unit tests with ActiveSupport required'
|
16
|
+
RSpec::Core::RakeTask.new(:active_support_unit) do |task|
|
17
|
+
task.rspec_opts = %w(--color --format documentation --order default --require active_support/all)
|
18
|
+
task.pattern = 'unit/**/*_spec.rb'
|
20
19
|
end
|
21
20
|
|
22
|
-
task all: [:unit, :
|
21
|
+
task all: [:unit, :active_support_unit]
|
23
22
|
end
|
24
23
|
|
25
24
|
desc 'Run all tests'
|
@@ -53,4 +52,4 @@ end
|
|
53
52
|
# Defaults
|
54
53
|
|
55
54
|
desc 'Run unit tests, check test coverage, run acceptance tests, check code style'
|
56
|
-
task default: [:coverage, 'spec:
|
55
|
+
task default: [:coverage, 'spec:active_support_unit', :rubocop]
|
@@ -28,8 +28,8 @@ module XML
|
|
28
28
|
# @return [String] the value as an XML Schema date string, without
|
29
29
|
# time zone information unless {#zulu} is set
|
30
30
|
def to_xml_text(value)
|
31
|
-
text = value.xmlschema
|
32
|
-
zulu ? "#{text}Z" : text
|
31
|
+
text = value.iso8601 # use iso8601 instead of xmlschema in case of ActiveSupport shenanigans
|
32
|
+
(zulu && !text.end_with?('Z')) ? "#{text}Z" : text
|
33
33
|
end
|
34
34
|
end
|
35
35
|
::XML::Mapping.add_node_class DateNode
|
@@ -25,6 +25,9 @@ module XML
|
|
25
25
|
def extract_attr_value(xml)
|
26
26
|
xml_text = default_when_xpath_err { @path.first(xml).text }
|
27
27
|
to_value(xml_text) if xml_text
|
28
|
+
rescue => e
|
29
|
+
bad_value = xml_text ? "'#{xml_text}'" : 'nil'
|
30
|
+
raise e, "#{@owner}.#{@attrname}: Can't parse #{bad_value} as #{self.class}: #{e.message}"
|
28
31
|
end
|
29
32
|
|
30
33
|
# Implements `::XML::Mapping::SingleAttributeNode#set_attr_value`.
|
@@ -37,9 +40,9 @@ module XML
|
|
37
40
|
end
|
38
41
|
|
39
42
|
# Override this method to convert XML text to an object value
|
40
|
-
# @param
|
43
|
+
# @param xml_text [String] The XML string to parse
|
41
44
|
# @return [Object] The object value
|
42
|
-
def to_value(
|
45
|
+
def to_value(xml_text) # rubocop:disable Lint/UnusedMethodArgument
|
43
46
|
fail NoMethodError, "#{self.class} should override #to_value to convert an XML string to an object value"
|
44
47
|
end
|
45
48
|
|
@@ -63,6 +63,67 @@ module XML
|
|
63
63
|
expect(actual).to eq(expected)
|
64
64
|
end
|
65
65
|
|
66
|
+
describe 'works with Date.today' do
|
67
|
+
it 'as plain date' do
|
68
|
+
date = Date.today
|
69
|
+
expected = format('%04d-%02d-%02d', date.year, date.month, date.day)
|
70
|
+
actual = to_text(date)
|
71
|
+
expect(actual).to eq(expected)
|
72
|
+
end
|
73
|
+
|
74
|
+
it 'as "zulu" date' do
|
75
|
+
date = Date.today
|
76
|
+
expected = format('%04d-%02d-%02dZ', date.year, date.month, date.day)
|
77
|
+
actual = to_zulu_text(date)
|
78
|
+
expect(actual).to eq(expected)
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
if Date.respond_to?(:current)
|
83
|
+
describe 'works with Date.current' do
|
84
|
+
it 'as plain date' do
|
85
|
+
date = Date.current
|
86
|
+
expected = format('%04d-%02d-%02d', date.year, date.month, date.day)
|
87
|
+
actual = to_text(date)
|
88
|
+
expect(actual).to eq(expected)
|
89
|
+
end
|
90
|
+
|
91
|
+
it 'as "zulu" date' do
|
92
|
+
date = Date.current
|
93
|
+
expected = format('%04d-%02d-%02dZ', date.year, date.month, date.day)
|
94
|
+
actual = to_zulu_text(date)
|
95
|
+
expect(actual).to eq(expected)
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
if Time.respond_to?(:zone)
|
101
|
+
describe 'works with Time.zone' do
|
102
|
+
before(:each) do
|
103
|
+
@old_zone = Time.zone
|
104
|
+
Time.zone = 'UTC'
|
105
|
+
end
|
106
|
+
after(:each) do
|
107
|
+
Time.zone = @old_zone
|
108
|
+
end
|
109
|
+
|
110
|
+
it 'as plain date' do
|
111
|
+
date = Time.zone.today
|
112
|
+
expected = format('%04d-%02d-%02d', date.year, date.month, date.day)
|
113
|
+
actual = to_text(date)
|
114
|
+
expect(actual).to eq(expected)
|
115
|
+
end
|
116
|
+
|
117
|
+
it 'as "zulu" date' do
|
118
|
+
date = Time.zone.today
|
119
|
+
expected = format('%04d-%02d-%02dZ', date.year, date.month, date.day)
|
120
|
+
actual = to_zulu_text(date)
|
121
|
+
expect(actual).to eq(expected)
|
122
|
+
end
|
123
|
+
|
124
|
+
end
|
125
|
+
end
|
126
|
+
|
66
127
|
end
|
67
128
|
end
|
68
129
|
end
|
@@ -3,11 +3,7 @@ require 'spec_helper'
|
|
3
3
|
module XML
|
4
4
|
module MappingExtensions
|
5
5
|
|
6
|
-
class
|
7
|
-
include ::XML::Mapping
|
8
|
-
end
|
9
|
-
|
10
|
-
class LaTeXRationalNode < NodeBase
|
6
|
+
class LatexRationalNode < NodeBase
|
11
7
|
def to_value(xml_text)
|
12
8
|
match_data = /\\frac\{([0-9.]+)\}\{([0-9.]+)\}/.match(xml_text)
|
13
9
|
Rational("#{match_data[1]}/#{match_data[2]}")
|
@@ -17,37 +13,54 @@ module XML
|
|
17
13
|
"\\frac{#{value.numerator}}{#{value.denominator}}"
|
18
14
|
end
|
19
15
|
end
|
16
|
+
::XML::Mapping.add_node_class LatexRationalNode
|
20
17
|
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
18
|
+
class SomeElem
|
19
|
+
include ::XML::Mapping
|
20
|
+
|
21
|
+
latex_rational_node :rational, '@rational'
|
22
|
+
end
|
25
23
|
|
24
|
+
describe NodeBase do
|
26
25
|
describe '#extract_attr_value' do
|
27
26
|
it 'forwards to #to_value' do
|
28
|
-
|
29
|
-
|
27
|
+
xml = REXML::Document.new('<some_elem rational="\frac{1}{2}"/>').root
|
28
|
+
mapping = SomeElem.load_from_xml(xml)
|
29
|
+
|
30
|
+
expect(mapping.rational).to eq(Rational('1/2'))
|
31
|
+
end
|
32
|
+
|
33
|
+
it 'produces useful error messages' do
|
34
|
+
xml = REXML::Document.new('<some_elem rational="elvis"/>').root
|
35
|
+
expect { SomeElem.load_from_xml(xml) }.to raise_error do |e|
|
36
|
+
expect(e.message).to match(/SomeElem.rational.*'elvis'/)
|
37
|
+
end
|
30
38
|
end
|
31
39
|
end
|
32
40
|
|
33
41
|
describe '#set_attr_value' do
|
34
42
|
it 'forwards to #to_xml_text' do
|
35
|
-
node =
|
43
|
+
node = LatexRationalNode.new(SomeElem, :rational, 'rational')
|
36
44
|
expect(node.to_xml_text(Rational('1/2'))).to eq('\frac{1}{2}')
|
37
45
|
end
|
38
46
|
end
|
39
47
|
|
40
48
|
describe '#xml_text' do
|
41
49
|
it 'should be abstract' do
|
42
|
-
|
50
|
+
node = NodeBase.allocate
|
51
|
+
expect { node.to_value('some text') }.to raise_error do |e|
|
52
|
+
expect(e).to be_a(NoMethodError)
|
53
|
+
expect(e.message).to include('should override #to_value')
|
54
|
+
end
|
43
55
|
end
|
44
56
|
end
|
45
57
|
|
46
58
|
describe '#to_xml_text' do
|
47
59
|
it 'should call to_s by default' do
|
60
|
+
node = NodeBase.allocate
|
48
61
|
values = ['elvis', 123, Object.new]
|
49
62
|
values.each do |v|
|
50
|
-
expect(
|
63
|
+
expect(node.to_xml_text(v)).to eq(v.to_s)
|
51
64
|
end
|
52
65
|
end
|
53
66
|
end
|
@@ -27,6 +27,7 @@ Gem::Specification.new do |spec|
|
|
27
27
|
spec.add_dependency 'typesafe_enum', '~> 0.1', '>= 0.1.5'
|
28
28
|
spec.add_dependency 'xml-mapping', '~> 0.10'
|
29
29
|
|
30
|
+
spec.add_development_dependency 'activesupport', '~> 4.2' # for testing
|
30
31
|
spec.add_development_dependency 'equivalent-xml', '~> 0.6.0'
|
31
32
|
spec.add_development_dependency 'rake', '~> 10.4'
|
32
33
|
spec.add_development_dependency 'rspec', '~> 3.2'
|
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.3.
|
4
|
+
version: 0.3.5
|
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-04-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: mime-types
|
@@ -58,6 +58,20 @@ dependencies:
|
|
58
58
|
- - "~>"
|
59
59
|
- !ruby/object:Gem::Version
|
60
60
|
version: '0.10'
|
61
|
+
- !ruby/object:Gem::Dependency
|
62
|
+
name: activesupport
|
63
|
+
requirement: !ruby/object:Gem::Requirement
|
64
|
+
requirements:
|
65
|
+
- - "~>"
|
66
|
+
- !ruby/object:Gem::Version
|
67
|
+
version: '4.2'
|
68
|
+
type: :development
|
69
|
+
prerelease: false
|
70
|
+
version_requirements: !ruby/object:Gem::Requirement
|
71
|
+
requirements:
|
72
|
+
- - "~>"
|
73
|
+
- !ruby/object:Gem::Version
|
74
|
+
version: '4.2'
|
61
75
|
- !ruby/object:Gem::Dependency
|
62
76
|
name: equivalent-xml
|
63
77
|
requirement: !ruby/object:Gem::Requirement
|