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 ADDED
@@ -0,0 +1,4 @@
1
+ *.gem
2
+ .bundle
3
+ Gemfile.lock
4
+ pkg/*
data/.rspec ADDED
@@ -0,0 +1 @@
1
+ --colour
data/.travis.yml ADDED
@@ -0,0 +1,8 @@
1
+ rvm:
2
+ - 1.8.7
3
+ - 1.9.2
4
+ - ruby-head
5
+ - ree
6
+ - rbx
7
+ # - rbx-2.0
8
+ - jruby
data/CHANGELOG.md ADDED
@@ -0,0 +1,4 @@
1
+ ## 0.9.7 (UPCOMING)
2
+
3
+ * Initial version. Adds multipart support (SOAP with Attachments) to Savon v0.9.7.
4
+ Please test and provide feedback so we can merge this into Savon proper.
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source :rubygems
2
+ gemspec
3
+
4
+ #gem "savon", :path => "../savon"
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 [![Build Status](http://travis-ci.org/rubiii/savon-multipart.png)](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,11 @@
1
+ require "bundler"
2
+ Bundler::GemHelper.install_tasks
3
+
4
+ require "rspec/core/rake_task"
5
+
6
+ RSpec::Core::RakeTask.new do |t|
7
+ t.rspec_opts = %w(-c)
8
+ end
9
+
10
+ task :default => :spec
11
+ task :test => :spec
@@ -0,0 +1,14 @@
1
+ require "mail"
2
+
3
+ module Savon
4
+ module SOAP
5
+
6
+ # = Savon::SOAP::Part
7
+ #
8
+ # Represents a part in a multipart SOAP request.
9
+ class Part < Mail::Part
10
+ # placeholder for SOAP-sepcific improvements... some day.
11
+ end
12
+
13
+ end
14
+ end
@@ -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,7 @@
1
+ module Savon
2
+ module Multipart
3
+
4
+ VERSION = "1.0.0"
5
+
6
+ end
7
+ end
@@ -0,0 +1,5 @@
1
+ require "savon"
2
+ require "savon/multipart/version"
3
+ require "savon/multipart/soap/request"
4
+ require "savon/multipart/soap/response"
5
+ require "savon/multipart/soap/xml"
@@ -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
@@ -0,0 +1,10 @@
1
+ require "bundler"
2
+ Bundler.require :default, :development
3
+
4
+ require "savon-multipart"
5
+
6
+ # Disable logging and deprecations for specs.
7
+ Savon.configure do |config|
8
+ config.log = false
9
+ # config.deprecate = false
10
+ end
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: []