xml-mapping 0.8 → 0.8.1
Sign up to get free protection for your applications and to get access to all the features.
- data/ChangeLog +128 -0
- data/Rakefile +1 -1
- data/examples/company_usage.intout +7 -7
- data/examples/order_signature_enhanced_usage.intout +3 -3
- data/examples/order_usage.intout +5 -5
- data/examples/time_augm.intout +4 -4
- data/examples/xpath_create_new.intout +1 -1
- data/examples/xpath_ensure_created.intout +2 -2
- data/lib/xml/mapping/base.rb +10 -2
- data/lib/xml/mapping/version.rb +1 -1
- data/test/company.rb +2 -0
- data/test/xml_mapping_test.rb +19 -0
- metadata +18 -15
data/ChangeLog
ADDED
@@ -0,0 +1,128 @@
|
|
1
|
+
2005-12-07 Olaf Klischat
|
2
|
+
|
3
|
+
* release 0.8.1
|
4
|
+
|
5
|
+
2005-12-07 Olaf Klischat
|
6
|
+
|
7
|
+
* ChangeLog file
|
8
|
+
|
9
|
+
2005/11/30 Olaf Klischat
|
10
|
+
|
11
|
+
* bugfix: clone default values to avoid external modifications
|
12
|
+
|
13
|
+
2005/07/07 Olaf Klischat
|
14
|
+
|
15
|
+
* release 0.8
|
16
|
+
|
17
|
+
2005/07/04 Olaf Klischat
|
18
|
+
|
19
|
+
* xml/xpath / XML::XPath -> xml/xxpath / XML::XXPath, license ->
|
20
|
+
Ruby's
|
21
|
+
|
22
|
+
2005/06/29 Olaf Klischat
|
23
|
+
|
24
|
+
* when creating elt[@attr='value'] path elements, add a new
|
25
|
+
element if one with @attr='value' already existed
|
26
|
+
|
27
|
+
2005/03/30 Olaf Klischat
|
28
|
+
|
29
|
+
* add_accessor: check for existing accessors.
|
30
|
+
|
31
|
+
2005/03/05 Olaf Klischat
|
32
|
+
|
33
|
+
* better support for inheritance among mapping
|
34
|
+
classes
|
35
|
+
|
36
|
+
2005/03/03 Olaf Klischat
|
37
|
+
|
38
|
+
* "polymorphic" nodes via root element
|
39
|
+
name. SubObjectBaseNode-based nodes es use node polymorphy when
|
40
|
+
no explicit node marshaller/unmarshaller has been sp ecified.
|
41
|
+
|
42
|
+
2005/02/28 Olaf Klischat
|
43
|
+
|
44
|
+
* mapping root elt name => mapping class;
|
45
|
+
XML::Mapping::load_object_from_* implemented
|
46
|
+
|
47
|
+
2005/02/13 Olaf Klischat
|
48
|
+
|
49
|
+
* IntNode renamed & generalized to NumericNode
|
50
|
+
|
51
|
+
2005/02/12 Olaf Klischat
|
52
|
+
|
53
|
+
* renaming *_rexml => *_xml
|
54
|
+
|
55
|
+
2005/01/27 Olaf Klischat
|
56
|
+
|
57
|
+
* special exception NoAttrValueSet for indicating absence of a
|
58
|
+
specific attribute in an XML source
|
59
|
+
|
60
|
+
2005/01/23 Olaf Klischat
|
61
|
+
|
62
|
+
* some more documentation, Node.obj_initializing, setting node
|
63
|
+
values to defaults on initialization
|
64
|
+
|
65
|
+
2005/01/10 Olaf Klischat
|
66
|
+
|
67
|
+
* root_element_name
|
68
|
+
|
69
|
+
2005/01/07 Olaf Klischat
|
70
|
+
|
71
|
+
* refactoring:
|
72
|
+
|
73
|
+
Made node types (classes) dynamically addable via
|
74
|
+
XML::Mapping.add_node_class, xml/mapping.rb moved to
|
75
|
+
xml/mapping/base.rb, node types moved to
|
76
|
+
xml/mapping/standard_nodes.rb, xml/mapping.rb now requires base
|
77
|
+
and standard_nodes and adds all standard node types to
|
78
|
+
XML::Mapping.
|
79
|
+
|
80
|
+
* additional node class SingleAttributeNode < Node for nodes that
|
81
|
+
map to a single attribute in their class (that's true for all
|
82
|
+
nodes we have so far). Call to add_attribute moved from "core"
|
83
|
+
to SingleAttributeNode.initialize.
|
84
|
+
|
85
|
+
* XML::Mapping: @nodes renamed to @xml_mapping_nodes to minimize
|
86
|
+
chance of name clashes.
|
87
|
+
|
88
|
+
2004/12/30 Olaf Klischat
|
89
|
+
|
90
|
+
* array node writing, hash node writing
|
91
|
+
|
92
|
+
|
93
|
+
2004/12/30 Olaf Klischat
|
94
|
+
|
95
|
+
* xpath: create_new flag, + convenience method
|
96
|
+
|
97
|
+
2004/12/21 Olaf Klischat
|
98
|
+
|
99
|
+
* node classes
|
100
|
+
|
101
|
+
2004/12/20 Olaf Klischat
|
102
|
+
|
103
|
+
* hash_node
|
104
|
+
|
105
|
+
2004/12/08 Olaf Klischat
|
106
|
+
|
107
|
+
* xpath: attribute nodes
|
108
|
+
|
109
|
+
* xml_mapping: retargeted from REXML::XPath to XML::XPath
|
110
|
+
|
111
|
+
2004/12/02 Olaf Klischat
|
112
|
+
|
113
|
+
* xpath: write accessors
|
114
|
+
|
115
|
+
2004/11/27 Olaf Klischat
|
116
|
+
|
117
|
+
* xpath: read access seems to work
|
118
|
+
|
119
|
+
2004/11/25 Olaf Klischat
|
120
|
+
|
121
|
+
* array_node
|
122
|
+
|
123
|
+
stone age Olaf Klischat
|
124
|
+
|
125
|
+
* see http://rubygarden.org/ruby?XmlMapping
|
126
|
+
|
127
|
+
|
128
|
+
|
data/Rakefile
CHANGED
@@ -168,7 +168,7 @@ spec = Gem::Specification.new do |s|
|
|
168
168
|
s.files += Dir.glob("{lib,examples,test}/**/*").delete_if do |item|
|
169
169
|
item.include?("CVS") || item =~ /~$/
|
170
170
|
end
|
171
|
-
s.files += %w{LICENSE Rakefile install.rb}
|
171
|
+
s.files += %w{LICENSE Rakefile ChangeLog install.rb}
|
172
172
|
s.extra_rdoc_files = FILES_RDOC_EXTRA
|
173
173
|
s.rdoc_options += %w{--include examples}
|
174
174
|
|
@@ -1,11 +1,11 @@
|
|
1
1
|
c = Company.load_from_file('company.xml')
|
2
|
-
=> #<Company:
|
2
|
+
=> #<Company:0x312dc8 @customers=[#<Customer:0x310bd8 @name="James Kirk", @id="jim">, #<Customer:0x310200 @name="Ernie", @id="ernie">, #<Customer:0x30f7f8 @name="Bert", @id="bert">], @address=#<Address:0x3123d8 @zip=10113, @city="Berlin">, @name="ACME inc.">
|
3
3
|
c.name
|
4
4
|
=> "ACME inc."
|
5
5
|
c.customers.size
|
6
6
|
=> 3
|
7
7
|
c.customers[1]
|
8
|
-
=> #<Customer:
|
8
|
+
=> #<Customer:0x310200 @name="Ernie", @id="ernie">
|
9
9
|
c.customers[1].name
|
10
10
|
=> "Ernie"
|
11
11
|
c.customers[0].name
|
@@ -13,7 +13,7 @@ c.customers[0].name
|
|
13
13
|
c.customers[0].name = 'James Tiberius Kirk'
|
14
14
|
=> "James Tiberius Kirk"
|
15
15
|
c.customers << Customer.new('cm','Cookie Monster')
|
16
|
-
=> [#<Customer:
|
16
|
+
=> [#<Customer:0x310bd8 @name="James Tiberius Kirk", @id="jim">, #<Customer:0x310200 @name="Ernie", @id="ernie">, #<Customer:0x30f7f8 @name="Bert", @id="bert">, #<Customer:0x30e118 @name="Cookie Monster", @id="cm">]
|
17
17
|
xml2 = c.save_to_xml
|
18
18
|
=> <company name='ACME inc.'> ... </>
|
19
19
|
xml2.write($stdout,2)
|
@@ -23,16 +23,16 @@ xml2.write($stdout,2)
|
|
23
23
|
<zip>10113</zip>
|
24
24
|
</address>
|
25
25
|
<customers>
|
26
|
-
<customer id='
|
26
|
+
<customer id='1607148'>
|
27
27
|
<name>James Tiberius Kirk</name>
|
28
28
|
</customer>
|
29
|
-
<customer id='
|
29
|
+
<customer id='1605888'>
|
30
30
|
<name>Ernie</name>
|
31
31
|
</customer>
|
32
|
-
<customer id='
|
32
|
+
<customer id='1604604'>
|
33
33
|
<name>Bert</name>
|
34
34
|
</customer>
|
35
|
-
<customer id='
|
35
|
+
<customer id='1601676'>
|
36
36
|
<name>Cookie Monster</name>
|
37
37
|
</customer>
|
38
38
|
</customers>
|
@@ -1,9 +1,9 @@
|
|
1
1
|
s=Signature.load_from_file("order_signature_enhanced.xml")
|
2
|
-
=> #<Signature:
|
2
|
+
=> #<Signature:0x1aed60 @signed_on=Sun Feb 13 00:00:00 MET 2005, @name="John Doe", @position="product manager">
|
3
3
|
s.signed_on
|
4
|
-
=> Sun Feb 13 00:00:00
|
4
|
+
=> Sun Feb 13 00:00:00 MET 2005
|
5
5
|
s.signed_on=Time.local(1976,12,18)
|
6
|
-
=> Sat Dec 18 00:00:00
|
6
|
+
=> Sat Dec 18 00:00:00 MET 1976
|
7
7
|
s.save_to_xml.write($stdout,2)
|
8
8
|
<signature>
|
9
9
|
<Name>John Doe</Name>
|
data/examples/order_usage.intout
CHANGED
@@ -1,10 +1,10 @@
|
|
1
1
|
####read access
|
2
2
|
o=Order.load_from_file("order.xml")
|
3
|
-
=> #<Order:
|
3
|
+
=> #<Order:0x404730 @items={"RF-3341"=>#<Item:0x3f7fb0 @unit_price=0.85, @quantity=30, @descr="Cookie">, "RF-0034"=>#<Item:0x3faa70 @unit_price=28.5, @quantity=5, @descr="Chocolate">, "RF-0001"=>#<Item:0x3fcfa8 @unit_price=8.95, @quantity=10, @descr="Stuffed Penguin">}, @signatures=[#<Signature:0x3f4878 @name="John Doe", @position="product manager">, #<Signature:0x3f38d0 @name="Jill Smith", @position="clerk">, #<Signature:0x3f23a0 @name="Miles O'Brien", @position="Some Employee">], @client=#<Client:0x403a70 @work_address=#<Address:0x3ffbb8 @street="98765, Fulton Street", @state="CA", @zip=94102, @city="San Francisco">, @name="Jean Smith", @home_address=#<Address:0x402450 @street="2000, Alameda de las Pulgas", @state="CA", @zip=94403, @city="San Mateo">>, @reference="12343-AHSHE-314159">
|
4
4
|
o.reference
|
5
5
|
=> "12343-AHSHE-314159"
|
6
6
|
o.client
|
7
|
-
=> #<Client:
|
7
|
+
=> #<Client:0x403a70 @work_address=#<Address:0x3ffbb8 @street="98765, Fulton Street", @state="CA", @zip=94102, @city="San Francisco">, @name="Jean Smith", @home_address=#<Address:0x402450 @street="2000, Alameda de las Pulgas", @state="CA", @zip=94403, @city="San Mateo">>
|
8
8
|
o.items.keys
|
9
9
|
=> ["RF-3341", "RF-0034", "RF-0001"]
|
10
10
|
o.items["RF-0034"].descr
|
@@ -12,7 +12,7 @@ o.items["RF-0034"].descr
|
|
12
12
|
o.items["RF-0034"].total_price
|
13
13
|
=> 142.5
|
14
14
|
o.signatures
|
15
|
-
=> [#<Signature:
|
15
|
+
=> [#<Signature:0x3f4878 @name="John Doe", @position="product manager">, #<Signature:0x3f38d0 @name="Jill Smith", @position="clerk">, #<Signature:0x3f23a0 @name="Miles O'Brien", @position="Some Employee">]
|
16
16
|
o.signatures[2].name
|
17
17
|
=> "Miles O'Brien"
|
18
18
|
o.signatures[2].position
|
@@ -92,13 +92,13 @@ xml.write($stdout,2)
|
|
92
92
|
</order>
|
93
93
|
####Starting a new order from scratch
|
94
94
|
o = Order.new
|
95
|
-
=> #<Order:
|
95
|
+
=> #<Order:0x3b5500 @signatures=[]>
|
96
96
|
## attributes with default values (here: signatures) are set
|
97
97
|
## automatically
|
98
98
|
|
99
99
|
xml=o.save_to_xml
|
100
100
|
XML::MappingError: no value, and no default value, for attribute: reference
|
101
|
-
from ../lib/xml/../xml/mapping/base.rb:
|
101
|
+
from ../lib/xml/../xml/mapping/base.rb:381:in `obj_to_xml'
|
102
102
|
from ../lib/xml/../xml/mapping/base.rb:157:in `fill_into_xml'
|
103
103
|
from ../lib/xml/../xml/mapping/base.rb:156:in `each'
|
104
104
|
from ../lib/xml/../xml/mapping/base.rb:156:in `fill_into_xml'
|
data/examples/time_augm.intout
CHANGED
@@ -15,9 +15,9 @@ nowxml=Time.now.save_to_xml
|
|
15
15
|
nowxml.write($stdout,2)
|
16
16
|
<time>
|
17
17
|
<year>2005</year>
|
18
|
-
<month>
|
18
|
+
<month>12</month>
|
19
19
|
<mday>7</mday>
|
20
|
-
<hours>
|
21
|
-
<minutes>
|
22
|
-
<seconds>
|
20
|
+
<hours>20</hours>
|
21
|
+
<minutes>52</minutes>
|
22
|
+
<seconds>4</seconds>
|
23
23
|
</time>
|
@@ -58,7 +58,7 @@ firstbazelt=XML::XXPath.new("/bar/baz").first(rootelt)
|
|
58
58
|
path2=XML::XXPath.new("@key2")
|
59
59
|
|
60
60
|
path2.create_new(firstbazelt)
|
61
|
-
=> #<XML::XXPath::Accessors::Attribute:
|
61
|
+
=> #<XML::XXPath::Accessors::Attribute:0x314bf8 @parent=<baz key2='[unset]' key='work'> ... </>, @name="key2">
|
62
62
|
d.write($stdout,2)
|
63
63
|
<foo>
|
64
64
|
<bar>
|
@@ -81,7 +81,7 @@ d.write($stdout,2)
|
|
81
81
|
### no change
|
82
82
|
|
83
83
|
XML::XXPath.new("/bar/baz[6]/@haha").first(rootelt,:ensure_created=>true)
|
84
|
-
=> #<XML::XXPath::Accessors::Attribute:
|
84
|
+
=> #<XML::XXPath::Accessors::Attribute:0x3223b0 @parent=<baz haha='[unset]'/>, @name="haha">
|
85
85
|
d.write($stdout,2)
|
86
86
|
<foo>
|
87
87
|
<bar>
|
@@ -97,7 +97,7 @@ d.write($stdout,2)
|
|
97
97
|
### for there to be a 6th "baz" element, there must be 1st..5th "baz" elements
|
98
98
|
|
99
99
|
XML::XXPath.new("/bar/baz[6]/@haha").first(rootelt,:ensure_created=>true)
|
100
|
-
=> #<XML::XXPath::Accessors::Attribute:
|
100
|
+
=> #<XML::XXPath::Accessors::Attribute:0x31f830 @parent=<baz haha='[unset]'/>, @name="haha">
|
101
101
|
d.write($stdout,2)
|
102
102
|
<foo>
|
103
103
|
<bar>
|
data/lib/xml/mapping/base.rb
CHANGED
@@ -350,7 +350,11 @@ module XML
|
|
350
350
|
unless @options.has_key? :default_value
|
351
351
|
raise XML::MappingError, "no value, and no default value: #{err}"
|
352
352
|
end
|
353
|
-
|
353
|
+
begin
|
354
|
+
obj.send :"#{@attrname}=", @options[:default_value].clone
|
355
|
+
rescue
|
356
|
+
obj.send :"#{@attrname}=", @options[:default_value]
|
357
|
+
end
|
354
358
|
end
|
355
359
|
end
|
356
360
|
|
@@ -386,7 +390,11 @@ module XML
|
|
386
390
|
end
|
387
391
|
def obj_initializing(obj) # :nodoc:
|
388
392
|
if @options.has_key? :default_value
|
389
|
-
|
393
|
+
begin
|
394
|
+
obj.send :"#{@attrname}=", @options[:default_value].clone
|
395
|
+
rescue
|
396
|
+
obj.send :"#{@attrname}=", @options[:default_value]
|
397
|
+
end
|
390
398
|
end
|
391
399
|
end
|
392
400
|
# utility method to be used by implementations of
|
data/lib/xml/mapping/version.rb
CHANGED
data/test/company.rb
CHANGED
data/test/xml_mapping_test.rb
CHANGED
@@ -165,6 +165,25 @@ class XmlMappingTest < Test::Unit::TestCase
|
|
165
165
|
end
|
166
166
|
|
167
167
|
|
168
|
+
def test_default_value_identity_on_initialize
|
169
|
+
c = Company.new
|
170
|
+
assert_equal ["default"], c.test_default_value_identity
|
171
|
+
c.test_default_value_identity << "foo"
|
172
|
+
|
173
|
+
c2 = Company.new
|
174
|
+
assert_equal ["default"], c2.test_default_value_identity
|
175
|
+
end
|
176
|
+
|
177
|
+
|
178
|
+
def test_default_value_identity_on_load
|
179
|
+
assert_equal ["default"], @c.test_default_value_identity
|
180
|
+
@c.test_default_value_identity << "bar"
|
181
|
+
|
182
|
+
c2 = Company.load_from_file(File.dirname(__FILE__) + "/fixtures/company1.xml")
|
183
|
+
assert_equal ["default"], c2.test_default_value_identity
|
184
|
+
end
|
185
|
+
|
186
|
+
|
168
187
|
def test_polymorphic_node
|
169
188
|
assert_equal 3, @c.stuff.size
|
170
189
|
assert_equal 'Saddam Hussein', @c.stuff[0].name
|
metadata
CHANGED
@@ -1,12 +1,11 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
|
-
rubygems_version: 0.8.
|
2
|
+
rubygems_version: 0.8.11
|
3
3
|
specification_version: 1
|
4
4
|
name: xml-mapping
|
5
5
|
version: !ruby/object:Gem::Version
|
6
|
-
version:
|
7
|
-
date: 2005-
|
8
|
-
summary: "An easy to use, extensible library for mapping Ruby objects to XML and back.
|
9
|
-
Includes an XPath interpreter."
|
6
|
+
version: 0.8.1
|
7
|
+
date: 2005-12-07 00:00:00 +01:00
|
8
|
+
summary: "An easy to use, extensible library for mapping Ruby objects to XML and back. Includes an XPath interpreter."
|
10
9
|
require_paths:
|
11
10
|
- lib
|
12
11
|
email: klischat@cs.tu-berlin.de
|
@@ -25,6 +24,8 @@ required_ruby_version: !ruby/object:Gem::Version::Requirement
|
|
25
24
|
version: 0.0.0
|
26
25
|
version:
|
27
26
|
platform: ruby
|
27
|
+
signing_key:
|
28
|
+
cert_chain:
|
28
29
|
authors:
|
29
30
|
- Olaf Klischat
|
30
31
|
files:
|
@@ -36,40 +37,41 @@ files:
|
|
36
37
|
- lib/xml/mapping
|
37
38
|
- lib/xml/mapping.rb
|
38
39
|
- lib/xml/xxpath.rb
|
39
|
-
- lib/xml/
|
40
|
+
- lib/xml/xxpath
|
40
41
|
- lib/xml/mapping/base.rb
|
42
|
+
- lib/xml/mapping/version.rb
|
41
43
|
- lib/xml/mapping/standard_nodes.rb
|
42
|
-
- examples/time_augm.intout
|
43
|
-
- examples/company.rb
|
44
44
|
- examples/company.xml
|
45
|
+
- examples/company.rb
|
46
|
+
- examples/order_signature_enhanced.rb
|
45
47
|
- examples/company_usage.intin.rb
|
46
48
|
- examples/order.rb
|
47
49
|
- examples/order.xml
|
48
|
-
- examples/
|
50
|
+
- examples/company_usage.intout
|
49
51
|
- examples/order_signature_enhanced.xml
|
50
|
-
- examples/order_signature_enhanced_usage.intin.rb
|
51
52
|
- examples/order_usage.intin.rb
|
52
|
-
- examples/time_augm.intin.rb
|
53
53
|
- examples/time_node.rb
|
54
|
+
- examples/order_signature_enhanced_usage.intin.rb
|
55
|
+
- examples/time_augm.intin.rb
|
54
56
|
- examples/xpath_create_new.intin.rb
|
55
57
|
- examples/xpath_docvsroot.intin.rb
|
56
58
|
- examples/xpath_ensure_created.intin.rb
|
57
59
|
- examples/xpath_pathological.intin.rb
|
58
60
|
- examples/xpath_usage.intin.rb
|
59
|
-
- examples/
|
61
|
+
- examples/order_usage.intout
|
62
|
+
- examples/time_augm.intout
|
60
63
|
- examples/xpath_usage.intout
|
61
64
|
- examples/xpath_ensure_created.intout
|
62
65
|
- examples/xpath_create_new.intout
|
63
66
|
- examples/xpath_pathological.intout
|
64
67
|
- examples/xpath_docvsroot.intout
|
65
68
|
- examples/order_signature_enhanced_usage.intout
|
66
|
-
- examples/order_usage.intout
|
67
|
-
- test/fixtures
|
68
69
|
- test/all_tests.rb
|
69
70
|
- test/company.rb
|
71
|
+
- test/tests_init.rb
|
72
|
+
- test/fixtures
|
70
73
|
- test/documents_folders.rb
|
71
74
|
- test/multiple_mappings.rb
|
72
|
-
- test/tests_init.rb
|
73
75
|
- test/xml_mapping_adv_test.rb
|
74
76
|
- test/xml_mapping_test.rb
|
75
77
|
- test/xpath_test.rb
|
@@ -79,6 +81,7 @@ files:
|
|
79
81
|
- test/fixtures/documents_folders2.xml
|
80
82
|
- LICENSE
|
81
83
|
- Rakefile
|
84
|
+
- ChangeLog
|
82
85
|
- install.rb
|
83
86
|
test_files:
|
84
87
|
- test/all_tests.rb
|