pipa-xmlnuts 0.2.3 → 0.2.4
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/MIT-LICENSE +0 -0
- data/README.rdoc +8 -8
- data/Rakefile +0 -0
- data/lib/pipa-xmlnuts.rb +0 -0
- data/lib/xmlnuts/backend.rb +0 -0
- data/lib/xmlnuts/converters.rb +0 -0
- data/lib/xmlnuts/mappings.rb +45 -29
- data/lib/xmlnuts/nuts.rb +0 -0
- data/lib/xmlnuts/rexml.rb +7 -3
- data/lib/xmlnuts.rb +0 -0
- data/test/parsing_test.rb +9 -1
- metadata +13 -4
data/MIT-LICENSE
CHANGED
File without changes
|
data/README.rdoc
CHANGED
@@ -1,30 +1,30 @@
|
|
1
|
-
|
1
|
+
=== Introduction
|
2
2
|
XmlNuts is an library that allows for bidirectional mapping between Ruby objects and XML.
|
3
3
|
|
4
4
|
Released under the MIT license.
|
5
5
|
|
6
|
-
|
6
|
+
=== Features
|
7
7
|
- Type awareness (extensible).
|
8
8
|
- XML namespaces support.
|
9
9
|
- Pluggable backends to work with different XML APIs (REXML implemented so far).
|
10
10
|
|
11
|
-
|
11
|
+
=== Installation
|
12
12
|
gem install pipa-xmlnuts --source http://gems.github.com
|
13
13
|
|
14
|
-
|
14
|
+
=== Usage
|
15
15
|
Please see an example below.
|
16
16
|
See also +XmlNuts::Nut+, +XmlNuts::Nut::ClassMethods+
|
17
17
|
|
18
|
-
|
18
|
+
=== TODO
|
19
19
|
- Inheritance
|
20
20
|
- Mixins
|
21
21
|
- More mappings?
|
22
22
|
- More types?
|
23
23
|
|
24
|
-
|
25
|
-
Please
|
24
|
+
=== Bugs & such
|
25
|
+
Please report via Github issue tracking.
|
26
26
|
|
27
|
-
|
27
|
+
=== Example
|
28
28
|
class Cheezburger
|
29
29
|
include XmlNuts::Nut
|
30
30
|
|
data/Rakefile
CHANGED
File without changes
|
data/lib/pipa-xmlnuts.rb
CHANGED
File without changes
|
data/lib/xmlnuts/backend.rb
CHANGED
File without changes
|
data/lib/xmlnuts/converters.rb
CHANGED
File without changes
|
data/lib/xmlnuts/mappings.rb
CHANGED
@@ -62,53 +62,49 @@ module XmlNuts
|
|
62
62
|
def froxml(text)
|
63
63
|
@converter ? @converter.from_xml(text) : text
|
64
64
|
end
|
65
|
-
end
|
66
65
|
|
67
|
-
|
68
|
-
|
69
|
-
def parse(node)
|
70
|
-
backend.each_element_with_value(node, xmlname, xmlns) {|el, txt| return type.parse_node(type.new, el) }
|
66
|
+
def each_element(node, &block)
|
67
|
+
node && backend.each_element(node, xmlname, xmlns, &block)
|
71
68
|
nil
|
72
69
|
end
|
73
70
|
|
74
|
-
def
|
75
|
-
|
71
|
+
def add_element(node, value = nil)
|
72
|
+
backend.add_element(node, xmlname, xmlns, value)
|
76
73
|
end
|
77
|
-
end
|
78
74
|
|
79
|
-
|
80
|
-
|
81
|
-
def getxml(node)
|
82
|
-
node && backend.enum_for(:each_element_with_value, node, xmlname, xmlns).map {|el, v| froxml(v) }
|
75
|
+
def value(node)
|
76
|
+
backend.value(node)
|
83
77
|
end
|
84
78
|
|
85
|
-
def
|
86
|
-
|
79
|
+
def parse(node)
|
80
|
+
type.parse_node(type.new, node)
|
87
81
|
end
|
88
82
|
|
89
|
-
def
|
90
|
-
|
83
|
+
def build(node, nut, dest_node)
|
84
|
+
nut && type.build_node(nut, dest_node)
|
91
85
|
end
|
92
86
|
end
|
93
87
|
|
94
88
|
class ElementValue < MemberMapping
|
95
89
|
private
|
96
90
|
def getxml(node)
|
97
|
-
|
98
|
-
nil
|
91
|
+
each_element(node) {|e| return froxml(value(e)) }
|
99
92
|
end
|
100
93
|
|
101
94
|
def setxml(node, value)
|
102
|
-
|
95
|
+
add_element(node, toxml(value))
|
103
96
|
end
|
104
97
|
end
|
105
98
|
|
106
99
|
class Element < MemberMapping
|
107
|
-
include NestedMixin
|
108
|
-
|
109
100
|
private
|
110
|
-
|
111
|
-
|
101
|
+
def getxml(node)
|
102
|
+
each_element(node) {|e| return parse(e) }
|
103
|
+
end
|
104
|
+
|
105
|
+
def setxml(node, value)
|
106
|
+
build(node, value, add_element(node))
|
107
|
+
end
|
112
108
|
end
|
113
109
|
|
114
110
|
class Attribute < MemberMapping
|
@@ -123,16 +119,36 @@ module XmlNuts
|
|
123
119
|
end
|
124
120
|
|
125
121
|
class ElementValues < MemberMapping
|
126
|
-
|
122
|
+
private
|
123
|
+
def each_value(node)
|
124
|
+
each_element(node) {|x| yield froxml(value(x)) }
|
125
|
+
end
|
126
|
+
|
127
|
+
def getxml(node)
|
128
|
+
enum_for(:each_value, node).to_a
|
129
|
+
end
|
130
|
+
|
131
|
+
def setxml(node, values)
|
132
|
+
unless node
|
133
|
+
raise 'fuck'
|
134
|
+
end
|
135
|
+
values.each {|v| add_element(node, toxml(v)) } if values
|
136
|
+
end
|
127
137
|
end
|
128
138
|
|
129
139
|
class Elements < MemberMapping
|
130
|
-
include NestedMixin
|
131
|
-
include ElementsMixin
|
132
|
-
|
133
140
|
private
|
134
|
-
|
135
|
-
|
141
|
+
def each_object(node)
|
142
|
+
each_element(node) {|e| yield parse(e) }
|
143
|
+
end
|
144
|
+
|
145
|
+
def getxml(node)
|
146
|
+
enum_for(:each_object, node)
|
147
|
+
end
|
148
|
+
|
149
|
+
def setxml(node, elements)
|
150
|
+
elements.each {|e| build(node, e, add_element(node)) } if elements
|
151
|
+
end
|
136
152
|
end
|
137
153
|
end
|
138
154
|
end
|
data/lib/xmlnuts/nuts.rb
CHANGED
File without changes
|
data/lib/xmlnuts/rexml.rb
CHANGED
@@ -13,7 +13,7 @@ class XmlNuts::XmlBackend::REXMLBackend #:nodoc:
|
|
13
13
|
when String, IO
|
14
14
|
node = REXML::Document.new(source).root
|
15
15
|
else
|
16
|
-
raise ArgumentError, 'invalid
|
16
|
+
raise ArgumentError, 'invalid source'
|
17
17
|
end
|
18
18
|
node && yield(node)
|
19
19
|
end
|
@@ -57,9 +57,13 @@ class XmlNuts::XmlBackend::REXMLBackend #:nodoc:
|
|
57
57
|
namespaces.each {|prefix, uri| context.add_namespace(prefix.to_s, uri) }
|
58
58
|
end
|
59
59
|
|
60
|
-
def
|
60
|
+
def each_element(context, name, ns, &block)
|
61
61
|
ns = context.namespace unless ns
|
62
|
-
REXML::XPath.each(context, "ns:#{name}", 'ns' => ns
|
62
|
+
REXML::XPath.each(context, "ns:#{name}", 'ns' => ns, &block)
|
63
|
+
end
|
64
|
+
|
65
|
+
def value(node)
|
66
|
+
node.text
|
63
67
|
end
|
64
68
|
|
65
69
|
def attribute(context, name, ns)
|
data/lib/xmlnuts.rb
CHANGED
File without changes
|
data/test/parsing_test.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
#$:.unshift File.join(File.dirname(__FILE__),'..','lib')
|
2
2
|
|
3
|
+
require 'bigdecimal'
|
3
4
|
require 'test/unit'
|
4
5
|
require 'shoulda'
|
5
6
|
require 'lib/xmlnuts'
|
@@ -31,6 +32,9 @@ class Cat
|
|
31
32
|
end
|
32
33
|
|
33
34
|
element :cheezburger, Cheezburger
|
35
|
+
element :moar_cheezburgers do
|
36
|
+
elements :cheezburger, Cheezburger
|
37
|
+
end
|
34
38
|
end
|
35
39
|
|
36
40
|
class ParsingTest < Test::Unit::TestCase
|
@@ -55,6 +59,10 @@ class ParsingTest < Test::Unit::TestCase
|
|
55
59
|
<paw>three</paw>
|
56
60
|
<paw>four</paw>
|
57
61
|
<cheezburger price='2.05' weight='14.5547' />
|
62
|
+
<moar_cheezburgers>
|
63
|
+
<cheezburger price='19' weight='685.940' />
|
64
|
+
<cheezburger price='7.40' weight='9356.7' />
|
65
|
+
</moar_cheezburgers>
|
58
66
|
</kitteh>
|
59
67
|
EOS
|
60
68
|
@cat = Cat.parse(@xml_fragment)
|
@@ -77,7 +85,7 @@ class ParsingTest < Test::Unit::TestCase
|
|
77
85
|
assert_equal 2, @cat.ears
|
78
86
|
end
|
79
87
|
|
80
|
-
should 'have tail' do
|
88
|
+
should 'have a tail' do
|
81
89
|
assert @cat.has_tail
|
82
90
|
end
|
83
91
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pipa-xmlnuts
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Igor Gunko
|
@@ -9,10 +9,19 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-
|
12
|
+
date: 2009-04-23 00:00:00 -07:00
|
13
13
|
default_executable:
|
14
|
-
dependencies:
|
15
|
-
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: thoughtbot-shoulda
|
17
|
+
type: :development
|
18
|
+
version_requirement:
|
19
|
+
version_requirements: !ruby/object:Gem::Requirement
|
20
|
+
requirements:
|
21
|
+
- - ">="
|
22
|
+
- !ruby/object:Gem::Version
|
23
|
+
version: 2.0.6
|
24
|
+
version:
|
16
25
|
description: XmlNuts is an XML to Ruby and back again mapping library.
|
17
26
|
email: tekmon@gmail.com
|
18
27
|
executables: []
|