savon-multipart 1.2.0 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 0082bc59877c68ea84cb396252ae675e75249747
4
+ data.tar.gz: 5ca53baa0cee4653660c3c9d15955ec27ad2be77
5
+ SHA512:
6
+ metadata.gz: 8bc0eac605b09715e3acb66254d74c9b4a574d166551143bac3f272fcfa8c8a7483cde26720ab82575a913140d41c2eda0a4c907d3de324bd8fc93a539616f31
7
+ data.tar.gz: 916d06c7b645e4e243787ee7419464f4155633de7e59344227efb7fe94d5effaff27786654afc41c3b7a2f8e4f494e9b297ac58d00d68441e526a9d5a2654445
data/.gitignore CHANGED
@@ -2,3 +2,4 @@
2
2
  .bundle
3
3
  Gemfile.lock
4
4
  pkg/*
5
+ .rvmrc
data/.travis.yml CHANGED
@@ -1,8 +1,9 @@
1
+ # https://github.com/travis-ci/travis-ci/wiki/.travis.yml-options
2
+ language: "ruby"
3
+ script: "bundle exec rake"
1
4
  rvm:
2
- - 1.8.7
3
5
  - 1.9.2
4
- - ruby-head
5
- - ree
6
+ - 1.9.3
7
+ - 2.0.0
8
+ - jruby-19mode
6
9
  - rbx
7
- # - rbx-2.0
8
- - jruby
data/CHANGELOG.md CHANGED
@@ -2,3 +2,8 @@
2
2
 
3
3
  * Initial version. Adds multipart support (SOAP with Attachments) to Savon v0.9.7.
4
4
  Please test and provide feedback so we can merge this into Savon proper.
5
+
6
+ ## 2.0.0 (UNRELEASED)
7
+ * Rewrite of savon-multipart to work with Savon 2.0+
8
+ This includes all of the existing functionality in savon-multipart
9
+ for savon1, but in a way that will be easier to maintain.
data/Gemfile CHANGED
@@ -1,4 +1,14 @@
1
- source :rubygems
1
+ source 'https://rubygems.org'
2
2
  gemspec
3
3
 
4
- #gem "savon", :path => "../savon"
4
+ group :development do
5
+ gem 'pry'
6
+ gem 'pry-debugger'
7
+ end
8
+
9
+ platform :rbx do
10
+ gem 'json'
11
+ gem 'racc'
12
+ gem 'rubysl'
13
+ gem 'rubinius-coverage'
14
+ end
data/README.md CHANGED
@@ -1,8 +1,21 @@
1
- Savon Multipart [![Build Status](http://travis-ci.org/savonrb/savon-multipart.png)](http://travis-ci.org/savonrb/savon-multipart)
1
+ Savon Multipart [![Build Status](https://secure.travis-ci.org/savonrb/savon-multipart.png)](http://travis-ci.org/savonrb/savon-multipart)
2
2
  ===============
3
3
 
4
4
  Adds multipart support (SOAP with Attachments) to [Savon](https://github.com/savonrb/savon).
5
- Please test and provide feedback so we can merge this into Savon proper.
5
+ Please test and provide feedback so we can support as many multipart-soap messages as possible.
6
+
7
+
8
+ Savon2
9
+ ------
10
+
11
+ Recently Savon launched a rewrite that broke compatibility with savon-multipart. If you're using savon
12
+ version 1, this should just work, but if you'd like to use Savon2, you will probably want to specify
13
+ something like this in your Gemfile
14
+
15
+
16
+ ```
17
+ gem 'savon-multipart', :git => 'https://github.com/tjarratt/savon-multipart.git', :branch => 'savon2'
18
+ ```
6
19
 
7
20
 
8
21
  Installation
@@ -1,5 +1,3 @@
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"
1
+ require 'savon'
2
+ require 'savon/multipart/version'
3
+ require 'savon/multipart/response'
@@ -0,0 +1,50 @@
1
+ require 'mail'
2
+
3
+ module Savon
4
+ module Multipart
5
+ class Response < Savon::Response
6
+ attr_reader :parts
7
+
8
+ def initialize(*args)
9
+ @parts = []
10
+ super
11
+ end
12
+
13
+ def attachments
14
+ if multipart?
15
+ parse_body unless @has_parsed_body
16
+ @parts.attachments
17
+ else
18
+ []
19
+ end
20
+ end
21
+
22
+ def xml
23
+ if multipart?
24
+ parse_body unless @has_parsed_body
25
+ @parts.first.body.to_s
26
+ else
27
+ super
28
+ end
29
+ end
30
+
31
+ private
32
+ def multipart?
33
+ !(http.headers['content-type'] =~ /^multipart/).nil?
34
+ end
35
+
36
+ def boundary
37
+ return unless multipart?
38
+ @boundary ||= Mail::Field.new('content-type', http.headers['content-type']).parameters['boundary']
39
+ end
40
+
41
+ def parse_body
42
+ @parts = Mail::Part.new(
43
+ :headers => http.headers,
44
+ :body => http.body
45
+ ).body.split!(boundary).parts
46
+ @has_parsed_body = true
47
+ end
48
+ end
49
+ end
50
+ end
@@ -1,7 +1,7 @@
1
1
  module Savon
2
2
  module Multipart
3
3
 
4
- VERSION = "1.2.0"
4
+ VERSION = "2.0.0"
5
5
 
6
6
  end
7
7
  end
@@ -14,11 +14,11 @@ Gem::Specification.new do |s|
14
14
 
15
15
  s.rubyforge_project = s.name
16
16
 
17
- s.add_dependency "savon", "1.2.0"
18
- s.add_dependency "mail"
17
+ s.add_dependency "savon", "~> 2.3.0"
18
+ s.add_dependency "mail", "2.5.3"
19
19
 
20
- s.add_development_dependency "rake", "~> 0.8.7"
21
- s.add_development_dependency "rspec", "~> 2.5.0"
20
+ s.add_development_dependency "rake"
21
+ s.add_development_dependency "rspec"
22
22
  s.add_development_dependency "autotest"
23
23
 
24
24
  s.files = `git ls-files`.split("\n")
@@ -0,0 +1 @@
1
+ <?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>
@@ -0,0 +1,25 @@
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"?><envelope ><header></header><body><SubmitReq>true</SubmitReq></body></envelope>
11
+
12
+ ----==_mimepart_4d416ae628621_201a8043814c46ea
13
+ Date: Thu, 27 Jan 2011 13:53:58 +0100
14
+ Message-ID: <4d416ae633ce8_201a8043814c49c7@Martin-iMac.local.mail>
15
+ Mime-Version: 1.0
16
+ Content-Type: text/plain;
17
+ charset=UTF-8
18
+ Content-Transfer-Encoding: 7bit
19
+ content-id: text_0.txt
20
+
21
+ This is a test message from Github
22
+
23
+ ----==_mimepart_4d416ae628621_201a8043814c46ea--
24
+
25
+ ----==_mimepart_4d416ae62fd32_201a8043814c4724--
@@ -1,6 +1,6 @@
1
- require "spec_helper"
1
+ require 'savon-multipart'
2
2
 
3
- describe Savon::SOAP::Response do
3
+ describe Savon::Multipart::Response do
4
4
 
5
5
  before do
6
6
  @header = { "Content-Type" => 'multipart/related; boundary="--==_mimepart_4d416ae62fd32_201a8043814c4724"; charset=UTF-8; type="text/xml"' }
@@ -11,22 +11,61 @@ describe Savon::SOAP::Response do
11
11
 
12
12
  it "parses without Exception" do
13
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>'
14
+ response.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
15
  response.parts.length.should == 2
16
16
  response.parts[1].parts.length.should == 3
17
17
  response.parts[1].parts[2].body.should == "This is a test message from Github"
18
18
  end
19
19
 
20
+ it "returns a String from the #xml method" do
21
+ body = File.read(File.expand_path('../../../fixtures/response/simple_multipart.txt', __FILE__))
22
+ response = soap_response :headers => @header, :body => body
23
+ response.xml.class.should == String
24
+ end
25
+
26
+ it "returns a Hash from the #body method" do
27
+ body = File.read(File.expand_path('../../../fixtures/response/simple_multipart.txt', __FILE__))
28
+ response = soap_response :headers => @header, :body => body
29
+ response.body.class.should == Hash
30
+ response.body.should == {:submit_req => true}
31
+ end
32
+
20
33
  it "returns the attachments" do
21
34
  response = soap_response :headers => @header, :body => @body
22
35
  response.attachments.size.should == 1
23
36
  end
24
37
 
38
+ it "parses soap messages without attachments too" do
39
+ header = { 'Content-Type' => 'text/html; charset=utf-8'}
40
+ body = File.read(File.expand_path('../../../fixtures/response/not_multipart.txt', __FILE__))
41
+ response = soap_response :headers => header, :body => body
42
+
43
+ response.xml.chomp.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>'
44
+ response.parts.size.should == 0
45
+ response.attachments.size.should == 0
46
+ end
47
+
48
+ it "only parses the SOAP body once" do
49
+ response = soap_response :headers => @header, :body => @body
50
+ response.xml
51
+
52
+ counter = 0
53
+ subbed_parse_body = lambda { counter += 1 }
54
+ response.class.send(:define_method, :parse_body, subbed_parse_body)
55
+ 5.times { response.attachments }
56
+
57
+ counter.should == 0
58
+ end
59
+
25
60
  def soap_response(options = {})
26
61
  defaults = { :code => 200, :headers => {}, :body => "" }
27
62
  response = defaults.merge options
63
+ globals = {
64
+ :multipart => true,
65
+ :convert_response_tags_to => lambda { |tag| tag.snakecase.to_sym}
66
+ }
67
+ http = HTTPI::Response.new(response[:code], response[:headers], response[:body])
28
68
 
29
- Savon::SOAP::Response.new Savon.config, HTTPI::Response.new(response[:code], response[:headers], response[:body])
69
+ Savon::Multipart::Response.new(http, globals, {})
30
70
  end
31
-
32
71
  end
metadata CHANGED
@@ -1,8 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: savon-multipart
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.0
5
- prerelease:
4
+ version: 2.0.0
6
5
  platform: ruby
7
6
  authors:
8
7
  - Martin Westin
@@ -10,86 +9,76 @@ authors:
10
9
  autorequire:
11
10
  bindir: bin
12
11
  cert_chain: []
13
- date: 2012-10-01 00:00:00.000000000 Z
12
+ date: 2014-05-13 00:00:00.000000000 Z
14
13
  dependencies:
15
14
  - !ruby/object:Gem::Dependency
16
15
  name: savon
17
16
  requirement: !ruby/object:Gem::Requirement
18
- none: false
19
17
  requirements:
20
- - - '='
18
+ - - "~>"
21
19
  - !ruby/object:Gem::Version
22
- version: 1.2.0
20
+ version: 2.3.0
23
21
  type: :runtime
24
22
  prerelease: false
25
23
  version_requirements: !ruby/object:Gem::Requirement
26
- none: false
27
24
  requirements:
28
- - - '='
25
+ - - "~>"
29
26
  - !ruby/object:Gem::Version
30
- version: 1.2.0
27
+ version: 2.3.0
31
28
  - !ruby/object:Gem::Dependency
32
29
  name: mail
33
30
  requirement: !ruby/object:Gem::Requirement
34
- none: false
35
31
  requirements:
36
- - - ! '>='
32
+ - - '='
37
33
  - !ruby/object:Gem::Version
38
- version: '0'
34
+ version: 2.5.3
39
35
  type: :runtime
40
36
  prerelease: false
41
37
  version_requirements: !ruby/object:Gem::Requirement
42
- none: false
43
38
  requirements:
44
- - - ! '>='
39
+ - - '='
45
40
  - !ruby/object:Gem::Version
46
- version: '0'
41
+ version: 2.5.3
47
42
  - !ruby/object:Gem::Dependency
48
43
  name: rake
49
44
  requirement: !ruby/object:Gem::Requirement
50
- none: false
51
45
  requirements:
52
- - - ~>
46
+ - - ">="
53
47
  - !ruby/object:Gem::Version
54
- version: 0.8.7
48
+ version: '0'
55
49
  type: :development
56
50
  prerelease: false
57
51
  version_requirements: !ruby/object:Gem::Requirement
58
- none: false
59
52
  requirements:
60
- - - ~>
53
+ - - ">="
61
54
  - !ruby/object:Gem::Version
62
- version: 0.8.7
55
+ version: '0'
63
56
  - !ruby/object:Gem::Dependency
64
57
  name: rspec
65
58
  requirement: !ruby/object:Gem::Requirement
66
- none: false
67
59
  requirements:
68
- - - ~>
60
+ - - ">="
69
61
  - !ruby/object:Gem::Version
70
- version: 2.5.0
62
+ version: '0'
71
63
  type: :development
72
64
  prerelease: false
73
65
  version_requirements: !ruby/object:Gem::Requirement
74
- none: false
75
66
  requirements:
76
- - - ~>
67
+ - - ">="
77
68
  - !ruby/object:Gem::Version
78
- version: 2.5.0
69
+ version: '0'
79
70
  - !ruby/object:Gem::Dependency
80
71
  name: autotest
81
72
  requirement: !ruby/object:Gem::Requirement
82
- none: false
83
73
  requirements:
84
- - - ! '>='
74
+ - - ">="
85
75
  - !ruby/object:Gem::Version
86
76
  version: '0'
87
77
  type: :development
88
78
  prerelease: false
89
79
  version_requirements: !ruby/object:Gem::Requirement
90
- none: false
91
80
  requirements:
92
- - - ! '>='
81
+ - - ">="
93
82
  - !ruby/object:Gem::Version
94
83
  version: '0'
95
84
  description: Adds multipart support (SOAP with Attachments) to Savon
@@ -100,46 +89,43 @@ executables: []
100
89
  extensions: []
101
90
  extra_rdoc_files: []
102
91
  files:
103
- - .gitignore
104
- - .rspec
105
- - .travis.yml
92
+ - ".gitignore"
93
+ - ".rspec"
94
+ - ".travis.yml"
106
95
  - CHANGELOG.md
107
96
  - Gemfile
108
97
  - LICENSE
109
98
  - README.md
110
99
  - Rakefile
111
100
  - 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
101
+ - lib/savon/multipart/response.rb
116
102
  - lib/savon/multipart/version.rb
117
103
  - savon-multipart.gemspec
118
104
  - spec/fixtures/response/multipart.txt
105
+ - spec/fixtures/response/not_multipart.txt
106
+ - spec/fixtures/response/simple_multipart.txt
119
107
  - spec/savon/soap/response_spec.rb
120
- - spec/spec_helper.rb
121
108
  homepage: http://savonrb.com
122
109
  licenses: []
110
+ metadata: {}
123
111
  post_install_message:
124
112
  rdoc_options: []
125
113
  require_paths:
126
114
  - lib
127
115
  required_ruby_version: !ruby/object:Gem::Requirement
128
- none: false
129
116
  requirements:
130
- - - ! '>='
117
+ - - ">="
131
118
  - !ruby/object:Gem::Version
132
119
  version: '0'
133
120
  required_rubygems_version: !ruby/object:Gem::Requirement
134
- none: false
135
121
  requirements:
136
- - - ! '>='
122
+ - - ">="
137
123
  - !ruby/object:Gem::Version
138
124
  version: '0'
139
125
  requirements: []
140
126
  rubyforge_project: savon-multipart
141
- rubygems_version: 1.8.24
127
+ rubygems_version: 2.2.2
142
128
  signing_key:
143
- specification_version: 3
129
+ specification_version: 4
144
130
  summary: Heavy metal Ruby SOAP client with multipart support
145
131
  test_files: []
@@ -1,14 +0,0 @@
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
@@ -1,29 +0,0 @@
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
@@ -1,68 +0,0 @@
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
@@ -1,50 +0,0 @@
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
data/spec/spec_helper.rb DELETED
@@ -1,10 +0,0 @@
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