savon-multipart 1.0.0
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/.gitignore +4 -0
- data/.rspec +1 -0
- data/.travis.yml +8 -0
- data/CHANGELOG.md +4 -0
- data/Gemfile +4 -0
- data/LICENSE +20 -0
- data/README.md +15 -0
- data/Rakefile +11 -0
- data/lib/savon/multipart/soap/part.rb +14 -0
- data/lib/savon/multipart/soap/request.rb +29 -0
- data/lib/savon/multipart/soap/response.rb +68 -0
- data/lib/savon/multipart/soap/xml.rb +50 -0
- data/lib/savon/multipart/version.rb +7 -0
- data/lib/savon-multipart.rb +5 -0
- data/savon-multipart.gemspec +26 -0
- data/spec/fixtures/response/multipart.txt +103 -0
- data/spec/savon/soap/response_spec.rb +32 -0
- data/spec/spec_helper.rb +10 -0
- metadata +145 -0
data/.gitignore
ADDED
data/.rspec
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
--colour
|
data/.travis.yml
ADDED
data/CHANGELOG.md
ADDED
data/Gemfile
ADDED
data/LICENSE
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
Copyright (c) 2011 Martin Westin, Daniel Harrington
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
4
|
+
a copy of this software and associated documentation files (the
|
5
|
+
"Software"), to deal in the Software without restriction, including
|
6
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
7
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
+
permit persons to whom the Software is furnished to do so, subject to
|
9
|
+
the following conditions:
|
10
|
+
|
11
|
+
The above copyright notice and this permission notice shall be
|
12
|
+
included in all copies or substantial portions of the Software.
|
13
|
+
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
17
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
Savon Multipart [](http://travis-ci.org/rubiii/savon-multipart)
|
2
|
+
===============
|
3
|
+
|
4
|
+
Adds multipart support (SOAP with Attachments) to [Savon](https://github.com/rubiii/savon).
|
5
|
+
Please test and provide feedback so we can merge this into Savon proper.
|
6
|
+
|
7
|
+
|
8
|
+
Installation
|
9
|
+
------------
|
10
|
+
|
11
|
+
Savon Multipart is available through [Rubygems](http://rubygems.org/gems/savon-multipart) and can be installed via:
|
12
|
+
|
13
|
+
```
|
14
|
+
$ gem install savon-multipart
|
15
|
+
```
|
data/Rakefile
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
module Savon
|
2
|
+
module SOAP
|
3
|
+
class Request
|
4
|
+
|
5
|
+
private
|
6
|
+
|
7
|
+
def configure(http)
|
8
|
+
http.url = soap.endpoint
|
9
|
+
if soap.has_parts? # do multipart stuff if soap has parts
|
10
|
+
request_message = soap.request_message
|
11
|
+
# takes relevant http headers from the "Mail" message and makes
|
12
|
+
# them Net::HTTP compatible
|
13
|
+
request_message.header.fields.each do |field|
|
14
|
+
http.headers[field.name] = field.to_s
|
15
|
+
end
|
16
|
+
#request.headers["Content-Type"] << %|; start="<savon_soap_xml_part>"|
|
17
|
+
request_message.body.set_sort_order soap.parts_sort_order if soap.parts_sort_order && soap.parts_sort_order.any?
|
18
|
+
http.body = request_message.body.encoded
|
19
|
+
else
|
20
|
+
http.body = soap.to_xml
|
21
|
+
end
|
22
|
+
http.headers["Content-Type"] ||= CONTENT_TYPE[soap.version]
|
23
|
+
http.headers["Content-Length"] = http.body.bytesize.to_s
|
24
|
+
http
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,68 @@
|
|
1
|
+
require "savon/multipart/soap/part"
|
2
|
+
|
3
|
+
module Savon
|
4
|
+
module SOAP
|
5
|
+
class Response
|
6
|
+
|
7
|
+
# Overwrite to +decode_multipart+.
|
8
|
+
def initialize(config, response)
|
9
|
+
self.http = response
|
10
|
+
decode_multipart
|
11
|
+
raise_errors if config.raise_errors
|
12
|
+
end
|
13
|
+
|
14
|
+
def parts
|
15
|
+
@parts || []
|
16
|
+
end
|
17
|
+
|
18
|
+
attr_writer :parts
|
19
|
+
|
20
|
+
# Returns +true+ if this is a multipart response.
|
21
|
+
def multipart?
|
22
|
+
http.headers["Content-Type"] =~ /^multipart/
|
23
|
+
end
|
24
|
+
|
25
|
+
# Returns the boundary declaration of the multipart response.
|
26
|
+
def boundary
|
27
|
+
return unless multipart?
|
28
|
+
@boundary ||= Mail::Field.new("Content-Type", http.headers["Content-Type"]).parameters['boundary']
|
29
|
+
end
|
30
|
+
|
31
|
+
# Returns the Array of attachments if it was a multipart response.
|
32
|
+
def attachments
|
33
|
+
parts.attachments
|
34
|
+
end
|
35
|
+
|
36
|
+
# Overwrite to work with multipart response.
|
37
|
+
def to_xml
|
38
|
+
if multipart?
|
39
|
+
parts.first.body.decoded # we just assume the first part is the XML
|
40
|
+
else
|
41
|
+
http.body
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
private
|
46
|
+
|
47
|
+
# Decoding multipart responses.
|
48
|
+
#
|
49
|
+
# <tt>response.to_xml</tt> will point to the first part, hopefully the SOAP part of the multipart.
|
50
|
+
# All attachments are available in the <tt>response.parts</tt> Array. Each is a Part from the mail gem.
|
51
|
+
# See the docs there for details but:
|
52
|
+
#
|
53
|
+
# * response.parts[0].body is the contents
|
54
|
+
# * response.parts[0].headers are the mime headers
|
55
|
+
#
|
56
|
+
# And you can do nesting:
|
57
|
+
#
|
58
|
+
# * response.parts[0].parts[2].body
|
59
|
+
def decode_multipart
|
60
|
+
return unless multipart?
|
61
|
+
part_of_parts = Part.new(:headers => http.headers, :body => http.body)
|
62
|
+
part_of_parts.body.split!(boundary)
|
63
|
+
self.parts = part_of_parts.parts
|
64
|
+
end
|
65
|
+
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
require "savon/multipart/soap/part"
|
2
|
+
|
3
|
+
module Savon
|
4
|
+
module SOAP
|
5
|
+
class XML
|
6
|
+
|
7
|
+
# Use sort functionality in Mail::Body.sort!() to order parts.
|
8
|
+
# An array of mime types is expected.
|
9
|
+
# E.g. this makes the xml appear before an attached image: ["text/xml", "image/jpeg"]
|
10
|
+
attr_accessor :parts_sort_order
|
11
|
+
|
12
|
+
# Adds a Part object to the current SOAP "message".
|
13
|
+
# Parts are really attachments.
|
14
|
+
def add_part(part)
|
15
|
+
@parts ||= Array.new
|
16
|
+
@parts << part
|
17
|
+
end
|
18
|
+
|
19
|
+
# Check if any parts have been added.
|
20
|
+
def has_parts?
|
21
|
+
@parts ||= Array.new
|
22
|
+
!@parts.empty?
|
23
|
+
end
|
24
|
+
|
25
|
+
# Returns the mime message for a multipart request.
|
26
|
+
def request_message
|
27
|
+
return if @parts.empty?
|
28
|
+
|
29
|
+
@request_message = Part.new do
|
30
|
+
content_type 'multipart/related; type="text/xml"'
|
31
|
+
end
|
32
|
+
|
33
|
+
soap_body = self.to_xml
|
34
|
+
soap_message = Part.new do
|
35
|
+
content_type 'text/xml; charset=utf-8'
|
36
|
+
add_content_transfer_encoding
|
37
|
+
body soap_body
|
38
|
+
end
|
39
|
+
soap_message.add_content_id "<savon_soap_xml_part>"
|
40
|
+
@request_message.add_part(soap_message)
|
41
|
+
@parts.each do |part|
|
42
|
+
@request_message.add_part(part)
|
43
|
+
end
|
44
|
+
#puts @request_message
|
45
|
+
@request_message
|
46
|
+
end
|
47
|
+
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
lib = File.expand_path("../lib", __FILE__)
|
2
|
+
$:.unshift lib unless $:.include? lib
|
3
|
+
|
4
|
+
require "savon/multipart/version"
|
5
|
+
|
6
|
+
Gem::Specification.new do |s|
|
7
|
+
s.name = "savon-multipart"
|
8
|
+
s.version = Savon::Multipart::VERSION
|
9
|
+
s.authors = ["Martin Westin", "Daniel Harrington"]
|
10
|
+
s.email = ["martin@eimermusic.com", "me@rubiii.com"]
|
11
|
+
s.homepage = "http://savonrb.com"
|
12
|
+
s.summary = "Heavy metal Ruby SOAP client with multipart support"
|
13
|
+
s.description = "Adds multipart support (SOAP with Attachments) to Savon"
|
14
|
+
|
15
|
+
s.rubyforge_project = s.name
|
16
|
+
|
17
|
+
s.add_dependency "savon", "1.0.0"
|
18
|
+
s.add_dependency "mail"
|
19
|
+
|
20
|
+
s.add_development_dependency "rake", "~> 0.8.7"
|
21
|
+
s.add_development_dependency "rspec", "~> 2.5.0"
|
22
|
+
s.add_development_dependency "autotest"
|
23
|
+
|
24
|
+
s.files = `git ls-files`.split("\n")
|
25
|
+
s.require_path = "lib"
|
26
|
+
end
|
@@ -0,0 +1,103 @@
|
|
1
|
+
----==_mimepart_4d416ae62fd32_201a8043814c4724
|
2
|
+
Date: Thu, 27 Jan 2011 13:53:58 +0100
|
3
|
+
Message-ID: <4d416ae631391_201a8043814c482c@Martin-iMac.local.mail>
|
4
|
+
Mime-Version: 1.0
|
5
|
+
Content-Type: text/xml;
|
6
|
+
charset=utf-8
|
7
|
+
Content-Transfer-Encoding: 7bit
|
8
|
+
content-id: soap_xml_part
|
9
|
+
|
10
|
+
<?xml version="1.0" encoding="UTF-8"?><soapenv:Envelope xmlns:wsdl="http://www.3gpp.org/ftp/Specs/archive/23_series/23.140/schema/REL-5-MM7-1-2" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"><soapenv:Header><ns1:TransactionID soapenv:actor="" soapenv:mustUnderstand="1" xsi:type="xsd:string" xmlns:ns1="http://www.3gpp.org/ftp/Specs/archive/23_series/23.140/schema/REL-5-MM7-1-2">2011012713535811111111111</ns1:TransactionID></soapenv:Header><soapenv:Body><SubmitReq xmlns="http://www.3gpp.org/ftp/Specs/archive/23_series/23.140/schema/REL-5-MM7-1-2"><MM7Version>5.3.0</MM7Version><SenderIdentification><VASPID>messaging</VASPID><VASID>ADM</VASID><SenderAddress><ShortCode>1111</ShortCode></SenderAddress></SenderIdentification><Recipients><To><Number>11111111111</Number></To></Recipients><ServiceCode>1</ServiceCode><MessageClass>Personal</MessageClass><ExpiryDate>2011-01-28T13:53:58Z</ExpiryDate><DeliveryReport>false</DeliveryReport><ReadReply>false</ReadReply><Priority>Normal</Priority><Subject>Test MMS via Savon</Subject><ChargedParty>Sender</ChargedParty><Content href="cid:attachment_1" allowAdaptations="true"/></SubmitReq></soapenv:Body></soapenv:Envelope>
|
11
|
+
|
12
|
+
----==_mimepart_4d416ae62fd32_201a8043814c4724
|
13
|
+
Date: Thu, 27 Jan 2011 13:53:58 +0100
|
14
|
+
Message-ID: <4d416ae63586d_201a8043814c518@Martin-iMac.local.mail>
|
15
|
+
Mime-Version: 1.0
|
16
|
+
Content-Type: multipart/mixed;
|
17
|
+
boundary="--==_mimepart_4d416ae628621_201a8043814c46ea";
|
18
|
+
charset=UTF-8
|
19
|
+
Content-Transfer-Encoding: 7bit
|
20
|
+
content-id: <attachment_1>
|
21
|
+
|
22
|
+
|
23
|
+
|
24
|
+
----==_mimepart_4d416ae628621_201a8043814c46ea
|
25
|
+
Date: Thu, 27 Jan 2011 13:53:58 +0100
|
26
|
+
Message-ID: <4d416ae635039_201a8043814c507d@Martin-iMac.local.mail>
|
27
|
+
Mime-Version: 1.0
|
28
|
+
Content-Type: application/smil;
|
29
|
+
charset=UTF-8
|
30
|
+
Content-Transfer-Encoding: 7bit
|
31
|
+
content-id: smil_1.smil
|
32
|
+
|
33
|
+
<smil>
|
34
|
+
<head>
|
35
|
+
<layout>
|
36
|
+
<root-layout width="240" height="320"/>
|
37
|
+
<region id="Image" top="0%" left="0%" height="70%" width="100%" fit="meet"/>
|
38
|
+
<region id="Text" top="70%" left="0%" height="30%" width="100%" fit="scroll"/>
|
39
|
+
</layout>
|
40
|
+
</head>
|
41
|
+
<body>
|
42
|
+
<par dur="5s"><img src="cid:github_logo.gif" region="Image"></img><text src="cid:text_0.txt" region="Text"><param name="hAlign" value="right"/><param name="textsize" value="small"/></text></par>
|
43
|
+
</body>
|
44
|
+
</smil>
|
45
|
+
|
46
|
+
----==_mimepart_4d416ae628621_201a8043814c46ea
|
47
|
+
Date: Thu, 27 Jan 2011 13:53:58 +0100
|
48
|
+
Mime-Version: 1.0
|
49
|
+
Content-Type: image/gif;
|
50
|
+
charset=UTF-8;
|
51
|
+
filename=mobile_baby_logo.gif
|
52
|
+
Content-Transfer-Encoding: base64
|
53
|
+
Content-Disposition: attachment;
|
54
|
+
filename=github_logo.gif
|
55
|
+
content-id: github_logo.gif
|
56
|
+
|
57
|
+
R0lGODlhZQAtALMAAPz8/MTExFBQUPn5+ZaWlgAAAPf393x8fNTU1LKysqKi
|
58
|
+
ouXl5YuLiyUlJTg4OGNjYyH5BAAAAAAALAAAAABlAC0AAAT/EMhJq7046827
|
59
|
+
/xLSFIUDAgKpnl+gkgf7GW8JHrXcLXWid4xaAfHBvX6cWgC5Mb6WHieJqVFS
|
60
|
+
M8EaMZq7XqxeC+9lKnbDFDCaglA5BhPDYT5XWKSFdfqpFxssNTEVeH0SaoUZ
|
61
|
+
gXdneoeIXy+CFISFjh4JBw4ODwwLFAkCEnRzBAALB1ludFCECwx0WxQBowdQ
|
62
|
+
E7SlAFaYdXAZCUIkDw8OK7ovDwAuwSqCeA9CDp4TCop7boYvKUIMGNXMQhIj
|
63
|
+
zcrgMKLmL7HLKnYUxdjH6QWhFd/zUwDw5+zMzvgFGkzoV8CWhH025M3zMWEA
|
64
|
+
QGMIYxAU8g+gIIIG9ZHJBtAXAAI1/5KZGqeigciIAAwEIPhgZYBpeEgI2PZC
|
65
|
+
YDk+7zYqLPmAZLsJNANSGKOCoUZyE6xNCumrTY+bKjIiLCPEFjSdR4VV8CkJ
|
66
|
+
ZdJIi45QuMfP0VSOJDL6zHMQWQWvWQtI2jkXndhrJExgfKvT0VUVWxDa/Fp0
|
67
|
+
Aly6YY3lxLZ3cV60BQeBwePuY40/bZFCrguAkmMbjQ33xTkBGE6iJR2srZf5
|
68
|
+
HGHXS++KZmx2dNQKqdJO+GtuWmu5eIFLlv1bb+14jvAYXCuk8u+5Sm8xKg6V
|
69
|
+
hPO4VEn/LuARwICYhflqRjxc8ezHO0WeT3gIdT4KQfMywCwe9k7W0oljh1zA
|
70
|
+
t2nkNU0zAP9CBYg0wIHuPXDgggweGBGDaxEwQAACBPBdDQ0OSMaB8cmlAG95
|
71
|
+
HRjMAwcwZyGDBGWY4YMLEvjEhS+suOEAZKXzhkMA3YhiDQqoyCCLB+amBIwq
|
72
|
+
yOjGgg/d+NCJDLon1wI+athMk+BYiIeRRR44ETNK4tOjiiCqIMB8DTLFYI1R
|
73
|
+
EUlChkKcGUwDPr2RYDBfqigkRT9qoomCDVJIBgEGDECMnjou2AChhQ6wADFw
|
74
|
+
CtDjoHtOiOiEAujZiY//pSNAlJx26umnoIbqFEAShmrqqaiaSqACCGgJ4qYD
|
75
|
+
IKCaAwkoWuKhpdKoWgMEgNLqdw3UOoCvGRKwa60I9HSohQgIMMz/Aa02mwAB
|
76
|
+
DZzY7AEDyAEnrQz2kKEUN6qWCQMDHqosttSatAm1J6rGJ7sNMgAnMQQssK0A
|
77
|
+
cCYggiZwIiACAdQ6EGgAJg2ArwO3CotjlvHO2ACsA1AL6wKqidAAlBPCSzCc
|
78
|
+
UMK7oL3SZJtsA9gOe+i/Jjvwb7oKivBAAgXHWiGSL+S6YFCwziphT78OIG+J
|
79
|
+
JR9Ibas9Udujxwcq0AC5hjbAIL4wlwo1rxLz6jLPPgox5koMEMj0yCb1xGC6
|
80
|
+
vI7dQKsPG3BoxNWabfPaC/akdKlyU302vkoP47TBcO6t5jyBfgxniQr3VCLE
|
81
|
+
bCOg9CYcD80gzEGXi3G5UTtYrd0IUDwvoeHDyquj2gB9KYKF+S67QMDlYjvL
|
82
|
+
0O4+gO8BRr90oAGq9RiAAocvsKhJIkBr+MpnTzgvzCEDzaABHTa3oMVwkntr
|
83
|
+
38juapLRDxvqANlMC9+3hPj2rTLz1RMMcNs+F/z8oZMv31M0ZDKIwAEP1IkJ
|
84
|
+
J5OfTiLX0zI57bQAM6koAyRqlQE+FL9Ana5/CGIA1yZHogPND1CeWkDgUkXB
|
85
|
+
ClowQxEAADs=
|
86
|
+
|
87
|
+
|
88
|
+
----==_mimepart_4d416ae628621_201a8043814c46ea
|
89
|
+
Date: Thu, 27 Jan 2011 13:53:58 +0100
|
90
|
+
Message-ID: <4d416ae633ce8_201a8043814c49c7@Martin-iMac.local.mail>
|
91
|
+
Mime-Version: 1.0
|
92
|
+
Content-Type: text/plain;
|
93
|
+
charset=UTF-8
|
94
|
+
Content-Transfer-Encoding: 7bit
|
95
|
+
content-id: text_0.txt
|
96
|
+
|
97
|
+
This is a test message from Github
|
98
|
+
|
99
|
+
----==_mimepart_4d416ae628621_201a8043814c46ea--
|
100
|
+
|
101
|
+
|
102
|
+
----==_mimepart_4d416ae62fd32_201a8043814c4724--
|
103
|
+
|
@@ -0,0 +1,32 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe Savon::SOAP::Response do
|
4
|
+
|
5
|
+
before do
|
6
|
+
@header = { "Content-Type" => 'multipart/related; boundary="--==_mimepart_4d416ae62fd32_201a8043814c4724"; charset=UTF-8; type="text/xml"' }
|
7
|
+
path = File.expand_path("../../../fixtures/response/multipart.txt", __FILE__)
|
8
|
+
raise ArgumentError, "Unable to load: #{path}" unless File.exist? path
|
9
|
+
@body = File.read(path)
|
10
|
+
end
|
11
|
+
|
12
|
+
it "parses without Exception" do
|
13
|
+
response = soap_response :headers => @header, :body => @body
|
14
|
+
response.to_xml.should == '<?xml version="1.0" encoding="UTF-8"?><soapenv:Envelope xmlns:wsdl="http://www.3gpp.org/ftp/Specs/archive/23_series/23.140/schema/REL-5-MM7-1-2" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"><soapenv:Header><ns1:TransactionID soapenv:actor="" soapenv:mustUnderstand="1" xsi:type="xsd:string" xmlns:ns1="http://www.3gpp.org/ftp/Specs/archive/23_series/23.140/schema/REL-5-MM7-1-2">2011012713535811111111111</ns1:TransactionID></soapenv:Header><soapenv:Body><SubmitReq xmlns="http://www.3gpp.org/ftp/Specs/archive/23_series/23.140/schema/REL-5-MM7-1-2"><MM7Version>5.3.0</MM7Version><SenderIdentification><VASPID>messaging</VASPID><VASID>ADM</VASID><SenderAddress><ShortCode>1111</ShortCode></SenderAddress></SenderIdentification><Recipients><To><Number>11111111111</Number></To></Recipients><ServiceCode>1</ServiceCode><MessageClass>Personal</MessageClass><ExpiryDate>2011-01-28T13:53:58Z</ExpiryDate><DeliveryReport>false</DeliveryReport><ReadReply>false</ReadReply><Priority>Normal</Priority><Subject>Test MMS via Savon</Subject><ChargedParty>Sender</ChargedParty><Content href="cid:attachment_1" allowAdaptations="true"/></SubmitReq></soapenv:Body></soapenv:Envelope>'
|
15
|
+
response.parts.length.should == 2
|
16
|
+
response.parts[1].parts.length.should == 3
|
17
|
+
response.parts[1].parts[2].body.should == "This is a test message from Github"
|
18
|
+
end
|
19
|
+
|
20
|
+
it "returns the attachments" do
|
21
|
+
response = soap_response :headers => @header, :body => @body
|
22
|
+
response.attachments.size.should == 1
|
23
|
+
end
|
24
|
+
|
25
|
+
def soap_response(options = {})
|
26
|
+
defaults = { :code => 200, :headers => {}, :body => "" }
|
27
|
+
response = defaults.merge options
|
28
|
+
|
29
|
+
Savon::SOAP::Response.new Savon.config, HTTPI::Response.new(response[:code], response[:headers], response[:body])
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
data/spec/spec_helper.rb
ADDED
metadata
ADDED
@@ -0,0 +1,145 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: savon-multipart
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.0
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Martin Westin
|
9
|
+
- Daniel Harrington
|
10
|
+
autorequire:
|
11
|
+
bindir: bin
|
12
|
+
cert_chain: []
|
13
|
+
date: 2012-06-29 00:00:00.000000000 Z
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: savon
|
17
|
+
requirement: !ruby/object:Gem::Requirement
|
18
|
+
none: false
|
19
|
+
requirements:
|
20
|
+
- - '='
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: 1.0.0
|
23
|
+
type: :runtime
|
24
|
+
prerelease: false
|
25
|
+
version_requirements: !ruby/object:Gem::Requirement
|
26
|
+
none: false
|
27
|
+
requirements:
|
28
|
+
- - '='
|
29
|
+
- !ruby/object:Gem::Version
|
30
|
+
version: 1.0.0
|
31
|
+
- !ruby/object:Gem::Dependency
|
32
|
+
name: mail
|
33
|
+
requirement: !ruby/object:Gem::Requirement
|
34
|
+
none: false
|
35
|
+
requirements:
|
36
|
+
- - ! '>='
|
37
|
+
- !ruby/object:Gem::Version
|
38
|
+
version: '0'
|
39
|
+
type: :runtime
|
40
|
+
prerelease: false
|
41
|
+
version_requirements: !ruby/object:Gem::Requirement
|
42
|
+
none: false
|
43
|
+
requirements:
|
44
|
+
- - ! '>='
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: '0'
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: rake
|
49
|
+
requirement: !ruby/object:Gem::Requirement
|
50
|
+
none: false
|
51
|
+
requirements:
|
52
|
+
- - ~>
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: 0.8.7
|
55
|
+
type: :development
|
56
|
+
prerelease: false
|
57
|
+
version_requirements: !ruby/object:Gem::Requirement
|
58
|
+
none: false
|
59
|
+
requirements:
|
60
|
+
- - ~>
|
61
|
+
- !ruby/object:Gem::Version
|
62
|
+
version: 0.8.7
|
63
|
+
- !ruby/object:Gem::Dependency
|
64
|
+
name: rspec
|
65
|
+
requirement: !ruby/object:Gem::Requirement
|
66
|
+
none: false
|
67
|
+
requirements:
|
68
|
+
- - ~>
|
69
|
+
- !ruby/object:Gem::Version
|
70
|
+
version: 2.5.0
|
71
|
+
type: :development
|
72
|
+
prerelease: false
|
73
|
+
version_requirements: !ruby/object:Gem::Requirement
|
74
|
+
none: false
|
75
|
+
requirements:
|
76
|
+
- - ~>
|
77
|
+
- !ruby/object:Gem::Version
|
78
|
+
version: 2.5.0
|
79
|
+
- !ruby/object:Gem::Dependency
|
80
|
+
name: autotest
|
81
|
+
requirement: !ruby/object:Gem::Requirement
|
82
|
+
none: false
|
83
|
+
requirements:
|
84
|
+
- - ! '>='
|
85
|
+
- !ruby/object:Gem::Version
|
86
|
+
version: '0'
|
87
|
+
type: :development
|
88
|
+
prerelease: false
|
89
|
+
version_requirements: !ruby/object:Gem::Requirement
|
90
|
+
none: false
|
91
|
+
requirements:
|
92
|
+
- - ! '>='
|
93
|
+
- !ruby/object:Gem::Version
|
94
|
+
version: '0'
|
95
|
+
description: Adds multipart support (SOAP with Attachments) to Savon
|
96
|
+
email:
|
97
|
+
- martin@eimermusic.com
|
98
|
+
- me@rubiii.com
|
99
|
+
executables: []
|
100
|
+
extensions: []
|
101
|
+
extra_rdoc_files: []
|
102
|
+
files:
|
103
|
+
- .gitignore
|
104
|
+
- .rspec
|
105
|
+
- .travis.yml
|
106
|
+
- CHANGELOG.md
|
107
|
+
- Gemfile
|
108
|
+
- LICENSE
|
109
|
+
- README.md
|
110
|
+
- Rakefile
|
111
|
+
- lib/savon-multipart.rb
|
112
|
+
- lib/savon/multipart/soap/part.rb
|
113
|
+
- lib/savon/multipart/soap/request.rb
|
114
|
+
- lib/savon/multipart/soap/response.rb
|
115
|
+
- lib/savon/multipart/soap/xml.rb
|
116
|
+
- lib/savon/multipart/version.rb
|
117
|
+
- savon-multipart.gemspec
|
118
|
+
- spec/fixtures/response/multipart.txt
|
119
|
+
- spec/savon/soap/response_spec.rb
|
120
|
+
- spec/spec_helper.rb
|
121
|
+
homepage: http://savonrb.com
|
122
|
+
licenses: []
|
123
|
+
post_install_message:
|
124
|
+
rdoc_options: []
|
125
|
+
require_paths:
|
126
|
+
- lib
|
127
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
128
|
+
none: false
|
129
|
+
requirements:
|
130
|
+
- - ! '>='
|
131
|
+
- !ruby/object:Gem::Version
|
132
|
+
version: '0'
|
133
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
134
|
+
none: false
|
135
|
+
requirements:
|
136
|
+
- - ! '>='
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: '0'
|
139
|
+
requirements: []
|
140
|
+
rubyforge_project: savon-multipart
|
141
|
+
rubygems_version: 1.8.24
|
142
|
+
signing_key:
|
143
|
+
specification_version: 3
|
144
|
+
summary: Heavy metal Ruby SOAP client with multipart support
|
145
|
+
test_files: []
|