saxy 0.1.1 → 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -29,13 +29,15 @@ Assume the XML file:
29
29
  <name>Amazon</name>
30
30
  <products>
31
31
  <product>
32
- <uid>FFCF177</uid>
33
- <name>Kindle</name>
34
- <description>The world's best-selling e-reader.</description>
35
- <price>$109</price>
32
+ <name>Kindle - The world's best-selling e-reader.</name>
36
33
  <images>
37
34
  <thumb>http://amazon.com/kindle_thumb.jpg</thumb>
38
- <large>http://amazon.com/kindle.jpg</large>
35
+ </images>
36
+ </product>
37
+ <product>
38
+ <name>Kindle Touch - Simple-to-use touchscreen with built-in WIFI.</name>
39
+ <images>
40
+ <thumb>http://amazon.com/kindle_touch_thumb.jpg</thumb>
39
41
  </images>
40
42
  </product>
41
43
  </products>
@@ -46,15 +48,16 @@ You instantiate the parser by passing path to XML file and object-identyfing tag
46
48
  The following will parse the XML, find product definitions (inside `<product>` and `</product>` tags), build `OpenStruct`s and yield them inside the block:
47
49
 
48
50
  Saxy.parse("filename.xml", "product").each do |product|
49
- puts product.uid # => FFCF177
50
- puts product.name # => "Kindle"
51
- puts product.description # => "The world's best-selling e-reader."
52
- puts product.price # => "$109"
53
-
54
- # nested objects are build as well
55
- puts product.images.thumb # => "http://amazon.com/kindle_thumb.jpg"
51
+ puts product.name
52
+ puts product.images.thumb
56
53
  end
57
54
 
55
+ # =>
56
+ Kindle - The world's best-selling e-reader.
57
+ http://amazon.com/kindle_thumb.jpg
58
+ Kindle Touch - Simple-to-use touchscreen with built-in WIFI.
59
+ http://amazon.com/kindle_touch_thumb.jpg
60
+
58
61
  Saxy supports Enumerable, so you can use it's goodies to your comfort without building intermediate arrays:
59
62
 
60
63
  Saxy.parse("filename.xml", "product").map do |object|
@@ -65,6 +68,11 @@ You can also grab an Enumerator for external use (e.g. lazy evaluation, etc.):
65
68
 
66
69
  enumerator = Saxy.parse("filename.xml", "product").each
67
70
 
71
+ Multiple definitions of child objects are grouped in arrays:
72
+
73
+ webstore = Saxy.parse("filename.xml", "webstore").first
74
+ webstore.products.product.size # => 2
75
+
68
76
  ## Contributing
69
77
 
70
78
  1. Fork it
data/lib/saxy/element.rb CHANGED
@@ -11,7 +11,9 @@ module Saxy
11
11
  end
12
12
 
13
13
  def set_attribute(name, value)
14
- attributes[attribute_name(name)] = value
14
+ name = attribute_name(name)
15
+ attributes[name] ||= []
16
+ attributes[name] << value
15
17
  end
16
18
 
17
19
  def append_value(string)
@@ -22,7 +24,16 @@ module Saxy
22
24
  end
23
25
 
24
26
  def as_object
25
- attributes.any? ? OpenStruct.new(attributes) : value
27
+ if attributes.any?
28
+ object = OpenStruct.new
29
+ attributes.each do |name, value|
30
+ value = value.first if value.size == 1
31
+ object.send("#{name}=", value)
32
+ end
33
+ object
34
+ else
35
+ value
36
+ end
26
37
  end
27
38
 
28
39
  def attribute_name(name)
data/lib/saxy/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Saxy
2
- VERSION = "0.1.1"
2
+ VERSION = "0.1.2"
3
3
  end
@@ -31,4 +31,10 @@ describe Saxy::Element do
31
31
  element.set_attribute("FooBar", "baz")
32
32
  element.as_object.foo_bar.should == "baz"
33
33
  end
34
+
35
+ it "should create array if adding multiple attributtes with the same name" do
36
+ element.set_attribute("foo", "bar")
37
+ element.set_attribute("foo", "baz")
38
+ element.as_object.foo.should == ["bar", "baz"]
39
+ end
34
40
  end
data/spec/saxy_spec.rb CHANGED
@@ -24,6 +24,13 @@ describe Saxy do
24
24
  products[1].images.large.should == "http://amazon.com/kindle_touch.jpg"
25
25
  end
26
26
 
27
+ it "should group multiple definitions of child objects into arrays" do
28
+ webstore = Saxy.parse(fixture_file("webstore.xml"), "webstore").first
29
+
30
+ webstore.products.product.should be_instance_of Array
31
+ webstore.products.product.size.should == 2
32
+ end
33
+
27
34
  it "should return Enumerator when calling #parse without a block", :unless => RUBY_1_8 do
28
35
  Saxy.parse(fixture_file("webstore.xml"), "product").each.should be_instance_of Enumerator
29
36
  end
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: saxy
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.1.1
5
+ version: 0.1.2
6
6
  platform: ruby
7
7
  authors:
8
8
  - "Micha\xC5\x82 Szajbe"
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2012-08-17 00:00:00 Z
13
+ date: 2012-08-19 00:00:00 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: activesupport