savon 0.9.2 → 0.9.3

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.
@@ -1,70 +0,0 @@
1
- require "builder"
2
-
3
- require "savon"
4
- require "savon/core_ext/object"
5
- require "savon/core_ext/string"
6
-
7
- module Savon
8
- module CoreExt
9
- module Hash
10
-
11
- # Returns a new Hash with +self+ and +other_hash+ merged recursively.
12
- # Modifies the receiver in place.
13
- def deep_merge!(other_hash)
14
- other_hash.each_pair do |k,v|
15
- tv = self[k]
16
- self[k] = tv.is_a?(Hash) && v.is_a?(Hash) ? tv.deep_merge(v) : v
17
- end
18
- self
19
- end unless defined? deep_merge!
20
-
21
- # Returns the values from the soap:Header element or an empty Hash in case the element could
22
- # not be found.
23
- def find_soap_header
24
- find_soap_element /.+:Header/
25
- end
26
-
27
- # Returns the values from the soap:Body element or an empty Hash in case the element could
28
- # not be found.
29
- def find_soap_body
30
- find_soap_element /.+:Body/
31
- end
32
-
33
- # Maps keys and values of a Hash created from SOAP response XML to more convenient Ruby Objects.
34
- def map_soap_response
35
- inject({}) do |hash, (key, value)|
36
- value = case value
37
- when ::Hash then value["xsi:nil"] ? nil : value.map_soap_response
38
- when ::Array then value.map { |val| val.map_soap_response rescue val }
39
- when ::String then value.map_soap_response
40
- end
41
-
42
- new_key = if Savon.strip_namespaces?
43
- key.strip_namespace.snakecase.to_sym
44
- else
45
- key.snakecase
46
- end
47
-
48
- if hash[new_key] # key already exists, value should be added as an Array
49
- hash[new_key] = [hash[new_key], value].flatten
50
- result = hash
51
- else
52
- result = hash.merge new_key => value
53
- end
54
- result
55
- end
56
- end
57
-
58
- private
59
-
60
- def find_soap_element(element)
61
- envelope = self[keys.first] || {}
62
- element_key = envelope.keys.find { |key| element =~ key } rescue nil
63
- element_key ? envelope[element_key].map_soap_response : {}
64
- end
65
-
66
- end
67
- end
68
- end
69
-
70
- Hash.send :include, Savon::CoreExt::Hash
@@ -1,121 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Hash do
4
-
5
- describe "#deep_merge!" do
6
- it "should recursively merge two Hashes" do
7
- hash = { :one => 1, "two" => { "three" => 3 } }
8
- other_hash = { :four => 4, "two" => { "three" => "merge", :five => 5 } }
9
-
10
- hash.merge!(other_hash).should == { :one => 1, :four => 4, "two" => { "three" => "merge", :five => 5 } }
11
- end
12
- end
13
-
14
- describe "#find_soap_header" do
15
- it "should return the content from the 'soap:Header' element" do
16
- soap_header = { "soap:Envelope" => { "soap:Header" => "content" } }
17
- soap_header.find_soap_header.should == "content"
18
- end
19
-
20
- it "should return an empty Hash in case the 'soap:Header' element could not be found" do
21
- soap_header = { "some_hash" => "content" }
22
- soap_header.find_soap_header.should == {}
23
- end
24
- end
25
-
26
- describe "#find_soap_body" do
27
- it "should return the content from the 'soap:Body' element" do
28
- soap_body = { "soap:Envelope" => { "soap:Body" => "content" } }
29
- soap_body.find_soap_body.should == "content"
30
- end
31
-
32
- it "should return an empty Hash in case the 'soap:Body' element could not be found" do
33
- soap_body = { "some_hash" => "content" }
34
- soap_body.find_soap_body.should == {}
35
- end
36
- end
37
-
38
- describe "#map_soap_response" do
39
- it "should convert Hash key Strings to snake_case Symbols" do
40
- soap_response = { "userResponse" => { "accountStatus" => "active" } }
41
- result = { :user_response => { :account_status => "active" } }
42
-
43
- soap_response.map_soap_response.should == result
44
- end
45
-
46
- it "should strip namespaces from Hash keys" do
47
- soap_response = { "ns:userResponse" => { "ns2:id" => "666" } }
48
- result = { :user_response => { :id => "666" } }
49
-
50
- soap_response.map_soap_response.should == result
51
- end
52
-
53
- context "with Savon.strip_namespaces set to false" do
54
- around do |example|
55
- Savon.strip_namespaces = false
56
- example.run
57
- Savon.strip_namespaces = true
58
- end
59
-
60
- it "should not strip namespaces from Hash keys" do
61
- soap_response = { "ns:userResponse" => { "ns2:id" => "666" } }
62
- result = { "ns:user_response" => { "ns2:id" => "666" } }
63
-
64
- soap_response.map_soap_response.should == result
65
- end
66
- end
67
-
68
- it "should convert Hash keys and values in Arrays" do
69
- soap_response = { "response" => [{ "name" => "dude" }, { "name" => "gorilla" }] }
70
- result = { :response=> [{ :name => "dude" }, { :name => "gorilla" }] }
71
-
72
- soap_response.map_soap_response.should == result
73
- end
74
-
75
- it "should convert xsi:nil values to nil Objects" do
76
- soap_response = { "userResponse" => { "xsi:nil" => "true" } }
77
- result = { :user_response => nil }
78
-
79
- soap_response.map_soap_response.should == result
80
- end
81
-
82
- it "should convert Hash values matching the xs:dateTime format into DateTime Objects" do
83
- soap_response = { "response" => { "at" => "2012-03-22T16:22:33+00:00" } }
84
- result = { :response => { :at => DateTime.new(2012, 03, 22, 16, 22, 33) } }
85
-
86
- soap_response.map_soap_response.should == result
87
- end
88
-
89
- it "should convert Hash values matching 'true' to TrueClass" do
90
- soap_response = { "response" => { "active" => "false" } }
91
- result = { :response => { :active => false } }
92
-
93
- soap_response.map_soap_response.should == result
94
- end
95
-
96
- it "should convert Hash values matching 'false' to FalseClass" do
97
- soap_response = { "response" => { "active" => "true" } }
98
- result = { :response => { :active => true } }
99
-
100
- soap_response.map_soap_response.should == result
101
- end
102
-
103
- it "should convert namespaced entries to array elements" do
104
- soap_response = {
105
- "history" => {
106
- "ns10:case" => { "ns10:name" => "a_name" },
107
- "ns11:case" => { "ns11:name" => "another_name" }
108
- }
109
- }
110
-
111
- result = {
112
- :history => {
113
- :case => [{ :name => "a_name" }, { :name => "another_name" }]
114
- }
115
- }
116
-
117
- soap_response.map_soap_response.should == result
118
- end
119
- end
120
-
121
- end