smacks-apricoteatsgorilla 0.3.3 → 0.3.6
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/README.rdoc +1 -1
- data/lib/apricoteatsgorilla.rb +23 -8
- data/test/apricoteatsgorilla/hash_to_xml_test.rb +52 -0
- data/test/apricoteatsgorilla/shortcut_method_test.rb +39 -0
- data/test/apricoteatsgorilla/soap_envelope_test.rb +33 -0
- data/test/apricoteatsgorilla/xml_to_hash_test.rb +70 -0
- data/{tests → test}/apricoteatsgorilla_test.rb +0 -0
- data/test/helper.rb +5 -0
- metadata +7 -2
data/README.rdoc
CHANGED
data/lib/apricoteatsgorilla.rb
CHANGED
@@ -7,20 +7,33 @@ require "hpricot"
|
|
7
7
|
# be used to build a SOAP request envelope. It is based on CobraVsMongoose but
|
8
8
|
# uses Hpricot instead of REXML and doesn't follow the BadgerFish convention.
|
9
9
|
#
|
10
|
-
# ===
|
10
|
+
# === xml_to_hash(xml, root_node = nil)
|
11
11
|
#
|
12
|
-
# xml = "
|
13
|
-
#
|
14
|
-
#
|
12
|
+
# xml = '<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
|
13
|
+
# <soap:Body>
|
14
|
+
# <ns2:authenticateResponse xmlns:ns2="http://v1_0.ws.example.com/">
|
15
|
+
# <return>
|
16
|
+
# <authValue>
|
17
|
+
# <token>secret</token>
|
18
|
+
# <client>example</client>
|
19
|
+
# </authValue>
|
20
|
+
# </return>
|
21
|
+
# </ns2:authenticateResponse>
|
22
|
+
# </soap:Body>
|
23
|
+
# </soap:Envelope>'
|
15
24
|
#
|
16
|
-
#
|
25
|
+
# ApricotEatsGorilla[xml, "//return"]
|
26
|
+
# # => { :auth_value => { :token => "secret", :client => "example" } }
|
27
|
+
#
|
28
|
+
# === hash_to_xml(hash)
|
17
29
|
#
|
18
30
|
# hash = { :apricot => { :eats => "Gorilla" } }
|
31
|
+
#
|
19
32
|
# ApricotEatsGorilla[hash]
|
20
33
|
# # => "<apricot><eats>Gorilla</eats></apricot>"
|
21
34
|
#
|
22
|
-
# ===
|
23
|
-
#
|
35
|
+
# === soap_envelope(namespaces = {})
|
36
|
+
#
|
24
37
|
# ApricotEatsGorilla.soap_envelope { "<authenticate>me</authenticate>" }
|
25
38
|
#
|
26
39
|
# # => '<env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/">
|
@@ -76,6 +89,8 @@ class ApricotEatsGorilla
|
|
76
89
|
xml = clean_xml(xml)
|
77
90
|
doc = Hpricot.XML(xml)
|
78
91
|
root = root_node ? doc.at(root_node) : doc.root
|
92
|
+
|
93
|
+
return nil if root.nil?
|
79
94
|
xml_node_to_hash(root)
|
80
95
|
end
|
81
96
|
|
@@ -164,7 +179,7 @@ class ApricotEatsGorilla
|
|
164
179
|
when nil
|
165
180
|
this_node[key] = value
|
166
181
|
else
|
167
|
-
this_node[key] = [current, value]
|
182
|
+
this_node[key] = [current.dup, value]
|
168
183
|
end
|
169
184
|
end
|
170
185
|
this_node
|
@@ -0,0 +1,52 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), "..", "helper")
|
2
|
+
|
3
|
+
class HashToXmlTest < Test::Unit::TestCase
|
4
|
+
|
5
|
+
context "Calling hash_to_xml" do
|
6
|
+
setup { ApricotEatsGorilla.sort_keys = true }
|
7
|
+
|
8
|
+
context "with a Hash consisting of a single key-value-pair" do
|
9
|
+
should "returns an XML String containing one node and a value" do
|
10
|
+
hash = { "apricot" => "eats gorilla" }
|
11
|
+
expected = "<apricot>eats gorilla</apricot>"
|
12
|
+
|
13
|
+
result = ApricotEatsGorilla.hash_to_xml(hash)
|
14
|
+
assert_equal expected, result
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
context "with a Hash containing another Hash" do
|
19
|
+
should "returns an XML String representing the given structure" do
|
20
|
+
hash = { "apricot" => { "eats" => "gorilla", "drinks" => "beer" } }
|
21
|
+
expected = "<apricot><drinks>beer</drinks><eats>gorilla</eats></apricot>"
|
22
|
+
|
23
|
+
result = ApricotEatsGorilla.hash_to_xml(hash)
|
24
|
+
assert_equal expected, result
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
context "with a Hash containing a Hash containing an Array" do
|
29
|
+
should "returns an XML String representing the given structure" do
|
30
|
+
hash = { "apricot" => { "eats" => [ "gorilla", "snake" ] } }
|
31
|
+
expected = "<apricot><eats>gorilla</eats><eats>snake</eats></apricot>"
|
32
|
+
|
33
|
+
result = ApricotEatsGorilla.hash_to_xml(hash)
|
34
|
+
assert_equal expected, result
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
context "with a Hash containing a Hash containing an Array containing a Hash" do
|
39
|
+
should "returns an XML String representing the given structure" do
|
40
|
+
hash = { "apricot" =>
|
41
|
+
{ "eats" => [ { "lotsOf" => "gorillas" }, { "justSome" => "snakes" } ]
|
42
|
+
} }
|
43
|
+
expected = "<apricot><eats><lotsOf>gorillas</lotsOf></eats>" <<
|
44
|
+
"<eats><justSome>snakes</justSome></eats></apricot>"
|
45
|
+
|
46
|
+
result = ApricotEatsGorilla.hash_to_xml(hash)
|
47
|
+
assert_equal expected, result
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), "..", "helper")
|
2
|
+
|
3
|
+
class ShortcutMethodTest < Test::Unit::TestCase
|
4
|
+
|
5
|
+
context "Calling []" do
|
6
|
+
setup { ApricotEatsGorilla.sort_keys = true }
|
7
|
+
|
8
|
+
context "with an XML String" do
|
9
|
+
should "return a Hash containing the XML content" do
|
10
|
+
xml = "<root><name>Jungle Julia</name></root>"
|
11
|
+
expected = { :name => "Jungle Julia" }
|
12
|
+
|
13
|
+
result = ApricotEatsGorilla[xml]
|
14
|
+
assert_equal expected, result
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
context "with an XML String and a custom root node" do
|
19
|
+
should "return a Hash containing the XML content starting at custom root" do
|
20
|
+
xml = "<root><something><name>Jungle Julia</name></something></root>"
|
21
|
+
expected = { :name => "Jungle Julia" }
|
22
|
+
|
23
|
+
result = ApricotEatsGorilla[xml, "//something"]
|
24
|
+
assert_equal expected, result
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
context "with a Hash" do
|
29
|
+
should "return an XML String containing the XML content" do
|
30
|
+
hash = { "apricot" => "eats gorilla" }
|
31
|
+
expected = "<apricot>eats gorilla</apricot>"
|
32
|
+
|
33
|
+
result = ApricotEatsGorilla[hash]
|
34
|
+
assert_equal expected, result
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), "..", "helper")
|
2
|
+
|
3
|
+
class SoapEnvelopeTest < Test::Unit::TestCase
|
4
|
+
|
5
|
+
context "Calling soap_envelope" do
|
6
|
+
setup { ApricotEatsGorilla.sort_keys = true }
|
7
|
+
|
8
|
+
context "without parameter and block" do
|
9
|
+
should "returns a SOAP envelope without body content" do
|
10
|
+
expected = '<env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/">' <<
|
11
|
+
'<env:Body></env:Body></env:Envelope>'
|
12
|
+
|
13
|
+
result = ApricotEatsGorilla.soap_envelope
|
14
|
+
assert_equal expected, result
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
context "with a Hash containing a custom namespace and a block" do
|
19
|
+
should "returns a SOAP envelope with custom namespace and body content" do
|
20
|
+
expected = '<env:Envelope ' <<
|
21
|
+
'xmlns:env="http://schemas.xmlsoap.org/soap/envelope/" ' <<
|
22
|
+
'xmlns:wsdl="http://example.com">' <<
|
23
|
+
'<env:Body><id>123</id></env:Body></env:Envelope>'
|
24
|
+
|
25
|
+
result = ApricotEatsGorilla.soap_envelope "wsdl" => "http://example.com" do
|
26
|
+
"<id>123</id>"
|
27
|
+
end
|
28
|
+
assert_equal expected, result
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
end
|
@@ -0,0 +1,70 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), "..", "helper")
|
2
|
+
|
3
|
+
class XmlToHashTest < Test::Unit::TestCase
|
4
|
+
|
5
|
+
context "Calling xml_to_hash" do
|
6
|
+
setup { ApricotEatsGorilla.sort_keys = true }
|
7
|
+
|
8
|
+
context "with a SOAP response example and a custom root node" do
|
9
|
+
should "return a Hash containing the XML content" do
|
10
|
+
xml = '<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
|
11
|
+
<soap:Body>
|
12
|
+
<ns2:authenticateResponse xmlns:ns2="http://v1_0.ws.example.com/">
|
13
|
+
<return>
|
14
|
+
<authValue>
|
15
|
+
<token>secret</token>
|
16
|
+
<client>example</client>
|
17
|
+
</authValue>
|
18
|
+
</return>
|
19
|
+
</ns2:authenticateResponse>
|
20
|
+
</soap:Body>
|
21
|
+
</soap:Envelope>'
|
22
|
+
expected = { :auth_value => { :token => "secret", :client => "example" } }
|
23
|
+
|
24
|
+
result = ApricotEatsGorilla.xml_to_hash(xml, "//return")
|
25
|
+
assert_equal expected, result
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
context "with XML containing 'true' and 'false' Strings" do
|
30
|
+
should "convert these Strings into actual Boolean objects" do
|
31
|
+
xml = "<root><yes>true</yes><no>false</no><text>something</text></root>"
|
32
|
+
expected = { :yes => true, :no => false, :text => "something" }
|
33
|
+
|
34
|
+
result = ApricotEatsGorilla.xml_to_hash(xml)
|
35
|
+
assert_equal expected, result
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
context "with XML containing empty element tags" do
|
40
|
+
should "convert empty element tags to nil" do
|
41
|
+
xml = "<contact><name>Jungle Julia</name><email /><phone/></contact>"
|
42
|
+
expected = { :name => "Jungle Julia", :email => nil, :phone => nil }
|
43
|
+
|
44
|
+
result = ApricotEatsGorilla.xml_to_hash(xml)
|
45
|
+
assert_equal expected, result
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
context "with XML containing nodes with attributes" do
|
50
|
+
should "return a Hash without tag attributes" do
|
51
|
+
xml = '<todo><paint subject="chair" color="#000000">black</paint></todo>'
|
52
|
+
expected = { :paint => "black" }
|
53
|
+
|
54
|
+
result = ApricotEatsGorilla.xml_to_hash(xml)
|
55
|
+
assert_equal expected, result
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
context "with XML containing nodes with the same name" do
|
60
|
+
should "group these nodes into an Array" do
|
61
|
+
xml = "<root><items>first</items><items>second</items></root>"
|
62
|
+
expected = { :items => [ "first", "second" ] }
|
63
|
+
|
64
|
+
result = ApricotEatsGorilla.xml_to_hash(xml)
|
65
|
+
assert_equal expected, result
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
end
|
File without changes
|
data/test/helper.rb
ADDED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: smacks-apricoteatsgorilla
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Daniel Harrington
|
@@ -61,4 +61,9 @@ signing_key:
|
|
61
61
|
specification_version: 2
|
62
62
|
summary: Apricot eats Gorilla is a SOAP communication helper.
|
63
63
|
test_files:
|
64
|
-
-
|
64
|
+
- test/apricoteatsgorilla_test.rb
|
65
|
+
- test/helper.rb
|
66
|
+
- test/apricoteatsgorilla/hash_to_xml_test.rb
|
67
|
+
- test/apricoteatsgorilla/xml_to_hash_test.rb
|
68
|
+
- test/apricoteatsgorilla/shortcut_method_test.rb
|
69
|
+
- test/apricoteatsgorilla/soap_envelope_test.rb
|