model_xml 1.0.5 → 1.0.9
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.
- data/README.md +2 -0
- data/lib/model_xml/generator.rb +17 -7
- data/model_xml.gemspec +2 -1
- data/test/test_model_xml.rb +25 -10
- metadata +20 -4
data/README.md
CHANGED
@@ -29,6 +29,8 @@ Then user.to_xml gives:
|
|
29
29
|
<dob>1970-12-23</dob>
|
30
30
|
</user>
|
31
31
|
|
32
|
+
Just like ActiveRecord's to_xml method, the :only, :except, and :skip_instruct options are supported.
|
33
|
+
|
32
34
|
Note that (unlike ActiveRecords's to_xml) the field names can be any method in your object, not just database columns - eg
|
33
35
|
|
34
36
|
class User < ActiveRecord::Base
|
data/lib/model_xml/generator.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
require 'rubygems'
|
2
2
|
require 'builder'
|
3
3
|
require 'nokogiri'
|
4
|
+
require 'facets/string/snakecase'
|
4
5
|
require 'model_xml/block_parser'
|
5
6
|
|
6
7
|
module ModelXML
|
@@ -73,11 +74,14 @@ module ModelXML
|
|
73
74
|
field_list = generate_field_list(options)
|
74
75
|
|
75
76
|
xml = options.delete(:builder) || Builder::XmlMarkup.new(:indent => 2)
|
77
|
+
exceptions_list = options.delete(:except) || []
|
78
|
+
limit_list = options.delete(:only)
|
79
|
+
|
76
80
|
unless options[:skip_instruct]
|
77
81
|
xml.instruct!
|
78
82
|
end
|
79
83
|
|
80
|
-
xml.tag! object.class.to_s.
|
84
|
+
xml.tag! object.class.to_s.snakecase do
|
81
85
|
|
82
86
|
field_list.each do |field|
|
83
87
|
|
@@ -96,13 +100,19 @@ module ModelXML
|
|
96
100
|
raise "ModelXML unable to parse #{field.inspect}"
|
97
101
|
end
|
98
102
|
|
99
|
-
#
|
100
|
-
if
|
101
|
-
|
102
|
-
|
103
|
-
# otherwise create the tag normally
|
103
|
+
# ignore the tag if it is on the exclude list, or if a limit list is provided and it is not on it
|
104
|
+
if exceptions_list.include?(tag) || (limit_list && !limit_list.include?(tag))
|
105
|
+
# do nothing
|
104
106
|
else
|
105
|
-
|
107
|
+
|
108
|
+
# if the content responds to to_xml, call it passing the current builder
|
109
|
+
if content.respond_to?(:to_xml)
|
110
|
+
content.to_xml(options.merge(:builder => xml, :skip_instruct => true, :root => tag.to_s))
|
111
|
+
|
112
|
+
# otherwise create the tag normally
|
113
|
+
else
|
114
|
+
xml.tag! tag, content
|
115
|
+
end
|
106
116
|
end
|
107
117
|
end
|
108
118
|
end
|
data/model_xml.gemspec
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
2
|
s.name = "model_xml"
|
3
|
-
s.version = '1.0.
|
3
|
+
s.version = '1.0.9'
|
4
4
|
s.authors = "Rob Anderson"
|
5
5
|
s.email = "rob.anderson@paymentcardsolutions.co.uk"
|
6
6
|
s.summary = "Ruby object to xml converter"
|
@@ -8,6 +8,7 @@ Gem::Specification.new do |s|
|
|
8
8
|
s.homepage = "https://github.com/rob-anderson/model_xml"
|
9
9
|
|
10
10
|
s.add_dependency 'builder', '>= 2.1.2'
|
11
|
+
s.add_dependency 'facets', '>= 2.9.3'
|
11
12
|
|
12
13
|
s.files = `git ls-files`.split("\n")
|
13
14
|
s.require_path = "lib"
|
data/test/test_model_xml.rb
CHANGED
@@ -32,9 +32,9 @@ class ModelXMLTest < Test::Unit::TestCase
|
|
32
32
|
assert_equal [[:foo]], TestStruct.model_xml_generator.field_sets
|
33
33
|
|
34
34
|
res = '<?xml version="1.0" encoding="UTF-8"?>
|
35
|
-
<
|
35
|
+
<test_struct>
|
36
36
|
<foo>1</foo>
|
37
|
-
</
|
37
|
+
</test_struct>
|
38
38
|
'
|
39
39
|
assert_equal res, @t.to_xml
|
40
40
|
end
|
@@ -51,10 +51,10 @@ class ModelXMLTest < Test::Unit::TestCase
|
|
51
51
|
assert_equal [[:foo, :bar]], TestStruct.model_xml_generator.field_sets
|
52
52
|
|
53
53
|
res = '<?xml version="1.0" encoding="UTF-8"?>
|
54
|
-
<
|
54
|
+
<test_struct>
|
55
55
|
<foo>1</foo>
|
56
56
|
<bar>2</bar>
|
57
|
-
</
|
57
|
+
</test_struct>
|
58
58
|
'
|
59
59
|
assert_equal res, @t.to_xml
|
60
60
|
end
|
@@ -70,11 +70,11 @@ class ModelXMLTest < Test::Unit::TestCase
|
|
70
70
|
end
|
71
71
|
|
72
72
|
res = '<?xml version="1.0" encoding="UTF-8"?>
|
73
|
-
<
|
73
|
+
<test_struct>
|
74
74
|
<foo>1</foo>
|
75
75
|
<bar>2</bar>
|
76
76
|
<foobar>3</foobar>
|
77
|
-
</
|
77
|
+
</test_struct>
|
78
78
|
'
|
79
79
|
assert_equal res, @t.to_xml
|
80
80
|
end
|
@@ -85,10 +85,10 @@ class ModelXMLTest < Test::Unit::TestCase
|
|
85
85
|
model_xml :foo, :bar
|
86
86
|
end
|
87
87
|
|
88
|
-
res = '<
|
88
|
+
res = '<test_struct>
|
89
89
|
<foo>1</foo>
|
90
90
|
<bar>2</bar>
|
91
|
-
</
|
91
|
+
</test_struct>
|
92
92
|
'
|
93
93
|
assert_equal res, @t.to_xml(:skip_instruct => true)
|
94
94
|
|
@@ -117,13 +117,28 @@ class ModelXMLTest < Test::Unit::TestCase
|
|
117
117
|
end
|
118
118
|
|
119
119
|
res = '<?xml version="1.0" encoding="UTF-8"?>
|
120
|
-
<
|
120
|
+
<test_struct>
|
121
121
|
<id>foo</id>
|
122
|
-
</
|
122
|
+
</test_struct>
|
123
123
|
'
|
124
124
|
assert_equal res, @t.to_xml
|
125
125
|
end
|
126
126
|
|
127
|
+
def test_except_and_include_options
|
128
|
+
TestStruct.instance_eval do
|
129
|
+
model_xml_reset!
|
130
|
+
model_xml :foo, :bar
|
131
|
+
end
|
132
|
+
|
133
|
+
res = '<?xml version="1.0" encoding="UTF-8"?>
|
134
|
+
<test_struct>
|
135
|
+
<foo>1</foo>
|
136
|
+
</test_struct>
|
137
|
+
'
|
138
|
+
assert_equal res, @t.to_xml(:except => [:bar])
|
139
|
+
assert_equal res, @t.to_xml(:only => [:foo])
|
140
|
+
|
141
|
+
end
|
127
142
|
|
128
143
|
|
129
144
|
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: model_xml
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 5
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 1
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
version: 1.0.
|
9
|
+
- 9
|
10
|
+
version: 1.0.9
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Rob Anderson
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2012-04-
|
18
|
+
date: 2012-04-18 00:00:00 Z
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
21
21
|
name: builder
|
@@ -33,6 +33,22 @@ dependencies:
|
|
33
33
|
version: 2.1.2
|
34
34
|
type: :runtime
|
35
35
|
version_requirements: *id001
|
36
|
+
- !ruby/object:Gem::Dependency
|
37
|
+
name: facets
|
38
|
+
prerelease: false
|
39
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
40
|
+
none: false
|
41
|
+
requirements:
|
42
|
+
- - ">="
|
43
|
+
- !ruby/object:Gem::Version
|
44
|
+
hash: 45
|
45
|
+
segments:
|
46
|
+
- 2
|
47
|
+
- 9
|
48
|
+
- 3
|
49
|
+
version: 2.9.3
|
50
|
+
type: :runtime
|
51
|
+
version_requirements: *id002
|
36
52
|
description: Simple replacement for ActiveRecord's default to_xml
|
37
53
|
email: rob.anderson@paymentcardsolutions.co.uk
|
38
54
|
executables: []
|