savon-multipart 2.1.1 → 2.1.2
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.
- checksums.yaml +5 -5
- data/.github/workflows/ci.yml +46 -0
- data/CHANGELOG.md +6 -2
- data/Gemfile +7 -5
- data/README.md +8 -2
- data/lib/savon/multipart/response.rb +34 -1
- data/lib/savon/multipart/version.rb +1 -1
- data/savon-multipart.gemspec +1 -4
- data/spec/fixtures/response/simple_xop.txt +13 -0
- data/spec/savon/soap/response_spec.rb +14 -1
- metadata +10 -24
- data/.travis.yml +0 -10
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 206ff4ab739562cbbf2e15e23d4b7c3a762b08bc26a2fefb286de605603e18ca
|
4
|
+
data.tar.gz: e1c187a1fbe40e23be747a620ab8378d1dfec812f80b72ec9ae0964b02ce35bb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3fa992c3e53d971d2ff58ef15a09f4ca96bb2b5f682eb11b40bf5848d2e1e487a2cb088455e923ac02d7da86d50d672a6a1c22ac0a2bc91a7aba5c9c6c5e6a4c
|
7
|
+
data.tar.gz: b85cef7fdcac332de45e1c58140a9855a18af9df988c2f20aefbc2c7630f88ebdf11f68305b0364d00472b29b2a6a72372ff1e9b9f9bf85776b7ec8493b8f315
|
@@ -0,0 +1,46 @@
|
|
1
|
+
name: CI
|
2
|
+
|
3
|
+
on:
|
4
|
+
pull_request:
|
5
|
+
|
6
|
+
push:
|
7
|
+
branches: [master]
|
8
|
+
|
9
|
+
jobs:
|
10
|
+
# linting:
|
11
|
+
# runs-on: ubuntu-latest
|
12
|
+
|
13
|
+
# steps:
|
14
|
+
# - uses: actions/checkout@v1
|
15
|
+
|
16
|
+
# - name: Set up Ruby 2.7
|
17
|
+
# uses: ruby/setup-ruby@v1
|
18
|
+
# with:
|
19
|
+
# ruby-version: 2.7
|
20
|
+
# bundler-cache: true
|
21
|
+
|
22
|
+
# - name: Rubocop
|
23
|
+
# run: bundle exec rubocop --format progress
|
24
|
+
|
25
|
+
build:
|
26
|
+
# When we have linting, this is where we will place that
|
27
|
+
needs: []
|
28
|
+
runs-on: ubuntu-latest
|
29
|
+
strategy:
|
30
|
+
matrix:
|
31
|
+
ruby:
|
32
|
+
- 2.6
|
33
|
+
- 2.7
|
34
|
+
- '3.0'
|
35
|
+
- 3.1
|
36
|
+
- jruby-9.2
|
37
|
+
- jruby-9.3
|
38
|
+
|
39
|
+
steps:
|
40
|
+
- uses: actions/checkout@v1
|
41
|
+
- uses: ruby/setup-ruby@v1
|
42
|
+
with:
|
43
|
+
ruby-version: ${{ matrix.ruby }}
|
44
|
+
bundler-cache: true # 'bundle install' and cache
|
45
|
+
- name: Test
|
46
|
+
run: bundle exec rake
|
data/CHANGELOG.md
CHANGED
@@ -1,6 +1,10 @@
|
|
1
|
-
## 2.1.
|
1
|
+
## 2.1.2 (2022-01-20)
|
2
2
|
|
3
|
-
*
|
3
|
+
* Loosen dependency on `mail` gem. ([#23](https://github.com/savonrb/savon-multipart/pull/23))
|
4
|
+
|
5
|
+
## 2.1.1
|
6
|
+
|
7
|
+
* Improve detection of multipart content-type header.
|
4
8
|
|
5
9
|
## 2.1.0
|
6
10
|
|
data/Gemfile
CHANGED
@@ -1,9 +1,11 @@
|
|
1
1
|
source 'https://rubygems.org'
|
2
2
|
gemspec
|
3
3
|
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
gem
|
8
|
-
gem
|
4
|
+
if RUBY_VERSION > "3.1"
|
5
|
+
# net-smtp, net-pop and net-imap were removed from ruby 3.1 standard gems. See: https://github.com/rails/rails/pull/42366
|
6
|
+
# Can drop when https://github.com/mikel/mail/pull/1439 is resolved
|
7
|
+
gem "net-imap", require: false
|
8
|
+
gem "net-pop", require: false
|
9
|
+
gem "net-smtp", require: false
|
9
10
|
end
|
11
|
+
gem "rubocop", "~> 0.49.1"
|
data/README.md
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
Savon Multipart [](https://github.com/savonrb/savon-multipart/actions/workflows/ci.yml)
|
2
2
|
===============
|
3
3
|
|
4
4
|
Adds multipart support (SOAP with Attachments) to [Savon](https://github.com/savonrb/savon).
|
@@ -7,12 +7,18 @@ Please test and provide feedback so we can support as many multipart-soap messag
|
|
7
7
|
Installation
|
8
8
|
------------
|
9
9
|
|
10
|
-
Savon Multipart is available through [Rubygems](
|
10
|
+
Savon Multipart is available through [Rubygems](https://rubygems.org/gems/savon-multipart) and can be installed via:
|
11
11
|
|
12
12
|
```
|
13
13
|
$ gem install savon-multipart
|
14
14
|
```
|
15
15
|
|
16
|
+
Or in your `Gemfile`:
|
17
|
+
|
18
|
+
```ruby
|
19
|
+
gem 'savon-multipart'
|
20
|
+
```
|
21
|
+
|
16
22
|
Usage
|
17
23
|
------------
|
18
24
|
|
@@ -22,7 +22,12 @@ module Savon
|
|
22
22
|
def xml
|
23
23
|
if multipart?
|
24
24
|
parse_body unless @has_parsed_body
|
25
|
-
|
25
|
+
if xop?
|
26
|
+
parse_xop unless @has_parsed_xop
|
27
|
+
@xop_body
|
28
|
+
else
|
29
|
+
@parts.first.body.to_s
|
30
|
+
end
|
26
31
|
else
|
27
32
|
super
|
28
33
|
end
|
@@ -33,6 +38,15 @@ module Savon
|
|
33
38
|
!(http.headers['content-type'] =~ /^multipart/im).nil?
|
34
39
|
end
|
35
40
|
|
41
|
+
def xop?
|
42
|
+
if multipart?
|
43
|
+
parse_body unless @has_parsed_body
|
44
|
+
!(@parts.first.header['content-type'].to_s =~ /^application\/xop\+xml/i).nil?
|
45
|
+
else
|
46
|
+
false
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
36
50
|
def boundary
|
37
51
|
return unless multipart?
|
38
52
|
@boundary ||= Mail::Field.new('content-type', http.headers['content-type']).parameters['boundary']
|
@@ -45,6 +59,25 @@ module Savon
|
|
45
59
|
).body.split!(boundary).parts
|
46
60
|
@has_parsed_body = true
|
47
61
|
end
|
62
|
+
|
63
|
+
def parse_xop
|
64
|
+
xml = @parts.first.body.to_s
|
65
|
+
parsed = Nokogiri.XML(xml)
|
66
|
+
xop_elements = parsed.xpath('//xop:Include', xop: "http://www.w3.org/2004/08/xop/include")
|
67
|
+
if xop_elements.count == 0
|
68
|
+
@xop_body = @parts.first.body.to_s
|
69
|
+
@has_parsed_xop = true
|
70
|
+
return
|
71
|
+
end
|
72
|
+
xop_elements.each do |xop_element|
|
73
|
+
href = xop_element.attributes['href'].to_s
|
74
|
+
cid = href[4..-1]
|
75
|
+
data = @parts.find { |p| p.header['content-id'].to_s == "<#{cid}>" }.body.to_s
|
76
|
+
xop_element.parent.content = Base64.encode64(data).chomp
|
77
|
+
end
|
78
|
+
@xop_body = parsed.to_s
|
79
|
+
@has_parsed_xop = true
|
80
|
+
end
|
48
81
|
end
|
49
82
|
end
|
50
83
|
end
|
data/savon-multipart.gemspec
CHANGED
@@ -13,16 +13,13 @@ Gem::Specification.new do |s|
|
|
13
13
|
s.description = "Adds multipart support (SOAP with Attachments) to Savon"
|
14
14
|
s.required_ruby_version = '>= 1.9.2'
|
15
15
|
|
16
|
-
s.rubyforge_project = s.name
|
17
|
-
|
18
16
|
s.add_dependency "savon", "~> 2"
|
19
|
-
s.add_dependency "mail", "~> 2
|
17
|
+
s.add_dependency "mail", "~> 2"
|
20
18
|
|
21
19
|
s.add_development_dependency "rake"
|
22
20
|
s.add_development_dependency "pry"
|
23
21
|
s.add_development_dependency "rspec"
|
24
22
|
s.add_development_dependency "autotest"
|
25
|
-
s.add_development_dependency "transpec"
|
26
23
|
|
27
24
|
s.files = `git ls-files`.split("\n")
|
28
25
|
s.require_path = "lib"
|
@@ -0,0 +1,13 @@
|
|
1
|
+
----==_mimepart_4d416ae62fd32_201a8043814c4724
|
2
|
+
Content-ID: <http://tempuri.org/0>
|
3
|
+
Content-Transfer-Encoding: 8bit
|
4
|
+
Content-Type: application/xop+xml;charset=utf-8;type="text/xml"
|
5
|
+
|
6
|
+
<?xml version="1.0" encoding="UTF-8"?><envelope ><header></header><body><BinaryData><xop:Include href="cid:http://tempuri.org/1/123456789" xmlns:xop="http://www.w3.org/2004/08/xop/include"/></BinaryData></body></envelope>
|
7
|
+
----==_mimepart_4d416ae62fd32_201a8043814c4724
|
8
|
+
Content-ID: <http://tempuri.org/1/123456789>
|
9
|
+
Content-Transfer-Encoding: binary
|
10
|
+
Content-Type: application/octet-stream
|
11
|
+
|
12
|
+
BinaryDataGoesHere
|
13
|
+
----==_mimepart_4d416ae62fd32_201a8043814c4724--
|
@@ -1,6 +1,6 @@
|
|
1
1
|
require 'savon-multipart'
|
2
2
|
|
3
|
-
describe Savon::Multipart::Response do
|
3
|
+
RSpec.describe Savon::Multipart::Response do
|
4
4
|
|
5
5
|
let(:header) {{ "Content-Type" => 'multipart/related; boundary="--==_mimepart_4d416ae62fd32_201a8043814c4724"; charset=UTF-8; type="text/xml"' }}
|
6
6
|
let(:body) { File.read(path) }
|
@@ -53,6 +53,19 @@ describe Savon::Multipart::Response do
|
|
53
53
|
end
|
54
54
|
end
|
55
55
|
|
56
|
+
context "simple xop" do
|
57
|
+
let(:path) { File.expand_path('../../../fixtures/response/simple_xop.txt', __FILE__) }
|
58
|
+
|
59
|
+
it "returns a String from the #xml method" do
|
60
|
+
expect(response.xml.class).to eq(String)
|
61
|
+
end
|
62
|
+
|
63
|
+
it "returns a Hash from the #body method, include xop data" do
|
64
|
+
expect(response.body.class).to eq(Hash)
|
65
|
+
expect(response.body).to eq({:binary_data => Base64.encode64('BinaryDataGoesHere').chomp})
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
56
69
|
describe "a multipart response with case sensitive headers" do
|
57
70
|
let(:header) {{ "Content-Type" => 'MuLtIpArT/rElAtEd; boundary="--==_mimepart_4d416ae62fd32_201a8043814c4724"; charset=UTF-8; type="text/xml"' }}
|
58
71
|
let(:path) { File.expand_path('../../../fixtures/response/simple_multipart.txt', __FILE__) }
|
metadata
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: savon-multipart
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.1.
|
4
|
+
version: 2.1.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Martin Westin
|
8
8
|
- Daniel Harrington
|
9
|
-
autorequire:
|
9
|
+
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2022-01-20 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: savon
|
@@ -31,14 +31,14 @@ dependencies:
|
|
31
31
|
requirements:
|
32
32
|
- - "~>"
|
33
33
|
- !ruby/object:Gem::Version
|
34
|
-
version: 2
|
34
|
+
version: '2'
|
35
35
|
type: :runtime
|
36
36
|
prerelease: false
|
37
37
|
version_requirements: !ruby/object:Gem::Requirement
|
38
38
|
requirements:
|
39
39
|
- - "~>"
|
40
40
|
- !ruby/object:Gem::Version
|
41
|
-
version: 2
|
41
|
+
version: '2'
|
42
42
|
- !ruby/object:Gem::Dependency
|
43
43
|
name: rake
|
44
44
|
requirement: !ruby/object:Gem::Requirement
|
@@ -95,20 +95,6 @@ dependencies:
|
|
95
95
|
- - ">="
|
96
96
|
- !ruby/object:Gem::Version
|
97
97
|
version: '0'
|
98
|
-
- !ruby/object:Gem::Dependency
|
99
|
-
name: transpec
|
100
|
-
requirement: !ruby/object:Gem::Requirement
|
101
|
-
requirements:
|
102
|
-
- - ">="
|
103
|
-
- !ruby/object:Gem::Version
|
104
|
-
version: '0'
|
105
|
-
type: :development
|
106
|
-
prerelease: false
|
107
|
-
version_requirements: !ruby/object:Gem::Requirement
|
108
|
-
requirements:
|
109
|
-
- - ">="
|
110
|
-
- !ruby/object:Gem::Version
|
111
|
-
version: '0'
|
112
98
|
description: Adds multipart support (SOAP with Attachments) to Savon
|
113
99
|
email:
|
114
100
|
- martin@eimermusic.com
|
@@ -117,9 +103,9 @@ executables: []
|
|
117
103
|
extensions: []
|
118
104
|
extra_rdoc_files: []
|
119
105
|
files:
|
106
|
+
- ".github/workflows/ci.yml"
|
120
107
|
- ".gitignore"
|
121
108
|
- ".rspec"
|
122
|
-
- ".travis.yml"
|
123
109
|
- CHANGELOG.md
|
124
110
|
- Gemfile
|
125
111
|
- LICENSE
|
@@ -132,12 +118,13 @@ files:
|
|
132
118
|
- spec/fixtures/response/multipart.txt
|
133
119
|
- spec/fixtures/response/not_multipart.txt
|
134
120
|
- spec/fixtures/response/simple_multipart.txt
|
121
|
+
- spec/fixtures/response/simple_xop.txt
|
135
122
|
- spec/fixtures/response/soap_fault.txt
|
136
123
|
- spec/savon/soap/response_spec.rb
|
137
124
|
homepage: http://savonrb.com
|
138
125
|
licenses: []
|
139
126
|
metadata: {}
|
140
|
-
post_install_message:
|
127
|
+
post_install_message:
|
141
128
|
rdoc_options: []
|
142
129
|
require_paths:
|
143
130
|
- lib
|
@@ -152,9 +139,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
152
139
|
- !ruby/object:Gem::Version
|
153
140
|
version: '0'
|
154
141
|
requirements: []
|
155
|
-
|
156
|
-
|
157
|
-
signing_key:
|
142
|
+
rubygems_version: 3.2.7
|
143
|
+
signing_key:
|
158
144
|
specification_version: 4
|
159
145
|
summary: Heavy metal Ruby SOAP client with multipart support
|
160
146
|
test_files: []
|