pipa-xmlnuts 0.2.3 → 0.2.4
Sign up to get free protection for your applications and to get access to all the features.
- 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: []
|