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 CHANGED
File without changes
data/README.rdoc CHANGED
@@ -1,30 +1,30 @@
1
- == Introduction
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
- == Features
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
- == Installation
11
+ === Installation
12
12
  gem install pipa-xmlnuts --source http://gems.github.com
13
13
 
14
- == Usage
14
+ === Usage
15
15
  Please see an example below.
16
16
  See also +XmlNuts::Nut+, +XmlNuts::Nut::ClassMethods+
17
17
 
18
- == TODO
18
+ === TODO
19
19
  - Inheritance
20
20
  - Mixins
21
21
  - More mappings?
22
22
  - More types?
23
23
 
24
- == Reporting bugs
25
- Please file bugs and feature requests at http://pipa.lighthouseapp.com/projects/21756-xmlnuts
24
+ === Bugs & such
25
+ Please report via Github issue tracking.
26
26
 
27
- == Example
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
File without changes
File without changes
@@ -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
- module NestedMixin #:nodoc:
68
- private
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 build(node, nut)
75
- nut && type.build_node(nut, backend.add_element(node, xmlname, xmlns, nil))
71
+ def add_element(node, value = nil)
72
+ backend.add_element(node, xmlname, xmlns, value)
76
73
  end
77
- end
78
74
 
79
- module ElementsMixin #:nodoc:
80
- private
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 setxml(node, values)
86
- values.each {|x| toxml(node, x) } if values
79
+ def parse(node)
80
+ type.parse_node(type.new, node)
87
81
  end
88
82
 
89
- def toxml(value, node)
90
- super(value)
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
- backend.each_element_with_value(node, xmlname, xmlns) {|e, v| return froxml(v) }
98
- nil
91
+ each_element(node) {|e| return froxml(value(e)) }
99
92
  end
100
93
 
101
94
  def setxml(node, value)
102
- backend.add_element(node, xmlname, xmlns, toxml(value))
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
- alias getxml parse
111
- alias setxml build
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
- include ElementsMixin
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
- alias froxml parse
135
- alias toxml build
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 destination'
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 each_element_with_value(context, name, ns)
60
+ def each_element(context, name, ns, &block)
61
61
  ns = context.namespace unless ns
62
- REXML::XPath.each(context, "ns:#{name}", 'ns' => ns) {|el| yield el, el.text }
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.3
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-01-06 00:00:00 -08:00
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: []