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 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: []