multipart-post 2.2.2 → 2.3.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b35663b5864e84de5c0105883e785d221f5d721df8feac0f793adbe9c0778419
4
- data.tar.gz: e653f283f339ce00a3ac4446cacde77854eb751ffaea05f2ce583b70608950be
3
+ metadata.gz: f1a26f1b06e253bdd1a96889881cd28090f1bb294754de989b5d01ee173f2251
4
+ data.tar.gz: f0df38197a55f9470d21d0284fb12c16deabe86e1ab71e39f409bcbabfb9cf86
5
5
  SHA512:
6
- metadata.gz: 721a3cdae109205ebcccc5cbdc2e4f1f68d10f19b9bbb94e8c4b0b2484459f3fbc73f064e517e0d86577418a30d302bb2640874dce3a473f206cc5fcbb6afc73
7
- data.tar.gz: be6ddbcbf9941f51b3906e53f1b8e429f9fad134edd43d164d33fd82c8db33c2a46a71b92559696ef6286af548222e4a0391c1156874084acf7cff7ab1229815
6
+ metadata.gz: 8048da79e851331b26fae693ce8e5329481c729934f3653fce804332df8b3f8edcdc566dc543a14e461ec674bb0700e87b92d26b5fe24dc4fcb13312574faf04
7
+ data.tar.gz: 1323dbcffd530f36bbb14e7ca5f90033ce3bf558ef669387df855638da7a6a619b4fe355ab5b2470428edfd2bb5c1fdbd267b848a940d84a0bbcb451c341c743
checksums.yaml.gz.sig CHANGED
Binary file
data/changelog.md ADDED
@@ -0,0 +1,14 @@
1
+ # CHANGELOG
2
+
3
+ ## Unreleased
4
+
5
+ ### Added
6
+
7
+ - Add the ability to set Content-ID header for ParamPart [#62](https://github.com/socketry/multipart-post/pull/62)
8
+ - Allow mixed key types for parts headers [#79](https://github.com/socketry/multipart-post/pull/79)
9
+
10
+ ### Changed
11
+
12
+ - Refactor `Parts` into a `Multipart::Post` namespace [#65](https://github.com/socketry/multipart-post/pull/65)
13
+ - Use mutable strings where needed [#70](https://github.com/socketry/multipart-post/pull/70)
14
+ - Use `frozen_string_literal` everywhere [#78](https://github.com/socketry/multipart-post/pull/78)
data/lib/composite_io.rb CHANGED
@@ -1,2 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Released under the MIT License.
4
+ # Copyright, 2006-2013, by Nick Sieger.
5
+ # Copyright, 2010, by Tohru Hashimoto.
6
+ # Copyright, 2011, by Jeff Hodges.
7
+ # Copyright, 2011, by Alex Koppel.
8
+ # Copyright, 2011, by Christine Yen.
9
+ # Copyright, 2011, by Gerrit Riessen.
10
+ # Copyright, 2011, by Luke Redpath.
11
+ # Copyright, 2013, by Mislav Marohnić.
12
+ # Copyright, 2013, by Leo Cassarani.
13
+ # Copyright, 2019, by Olle Jonsson.
14
+ # Copyright, 2022, by Samuel Williams.
15
+
1
16
  warn "Top level ::CompositeIO is deprecated, require 'multipart/post' and use `Multipart::Post::CompositeReadIO` instead!"
2
17
  require_relative 'multipart/post'
@@ -1,24 +1,19 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # Copyright, 2007-2013, by Nick Sieger.
4
- #
5
- # Permission is hereby granted, free of charge, to any person obtaining a copy
6
- # of this software and associated documentation files (the "Software"), to deal
7
- # in the Software without restriction, including without limitation the rights
8
- # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- # copies of the Software, and to permit persons to whom the Software is
10
- # furnished to do so, subject to the following conditions:
11
- #
12
- # The above copyright notice and this permission notice shall be included in
13
- # all copies or substantial portions of the Software.
14
- #
15
- # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
- # THE SOFTWARE.
3
+ # Released under the MIT License.
4
+ # Copyright, 2006-2013, by Nick Sieger.
5
+ # Copyright, 2010, by Tohru Hashimoto.
6
+ # Copyright, 2011, by Jeff Hodges.
7
+ # Copyright, 2011, by Alex Koppel.
8
+ # Copyright, 2011, by Christine Yen.
9
+ # Copyright, 2011, by Gerrit Riessen.
10
+ # Copyright, 2011, by Luke Redpath.
11
+ # Copyright, 2013, by Mislav Marohnić.
12
+ # Copyright, 2013, by Leo Cassarani.
13
+ # Copyright, 2019, by Olle Jonsson.
14
+ # Copyright, 2019, by Patrick Davey.
15
+ # Copyright, 2021, by Lewis Cowles.
16
+ # Copyright, 2021-2022, by Samuel Williams.
22
17
 
23
18
  module Multipart
24
19
  module Post
@@ -1,24 +1,17 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # Copyright, 2007-2013, by Nick Sieger.
4
- #
5
- # Permission is hereby granted, free of charge, to any person obtaining a copy
6
- # of this software and associated documentation files (the "Software"), to deal
7
- # in the Software without restriction, including without limitation the rights
8
- # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- # copies of the Software, and to permit persons to whom the Software is
10
- # furnished to do so, subject to the following conditions:
11
- #
12
- # The above copyright notice and this permission notice shall be included in
13
- # all copies or substantial portions of the Software.
14
- #
15
- # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
- # THE SOFTWARE.
3
+ # Released under the MIT License.
4
+ # Copyright, 2008, by McClain Looney.
5
+ # Copyright, 2008-2013, by Nick Sieger.
6
+ # Copyright, 2011, by Gerrit Riessen.
7
+ # Copyright, 2013, by Vincent Pellé.
8
+ # Copyright, 2013, by Gustav Ernberg.
9
+ # Copyright, 2013, by Socrates Vicente.
10
+ # Copyright, 2013, by Steffen Grunwald.
11
+ # Copyright, 2019, by Olle Jonsson.
12
+ # Copyright, 2019-2022, by Samuel Williams.
13
+ # Copyright, 2019, by Patrick Davey.
14
+ # Copyright, 2022, by Jason York.
22
15
 
23
16
  require_relative 'parts'
24
17
  require_relative 'composite_read_io'
@@ -44,11 +37,10 @@ module Multipart
44
37
 
45
38
  def initialize(path, params, headers={}, boundary = Multipartable.secure_boundary)
46
39
  headers = headers.clone # don't want to modify the original variable
47
- parts_headers = headers.delete(:parts) || {}
48
- parts_headers.transform_keys!(&:to_sym)
40
+ parts_headers = symbolize_keys(headers.delete(:parts) || {})
49
41
 
50
42
  super(path, headers)
51
- parts = params.transform_keys(&:to_sym).map do |k,v|
43
+ parts = symbolize_keys(params).map do |k,v|
52
44
  case v
53
45
  when Array
54
46
  v.map {|item| Parts::Part.new(boundary, k, item, parts_headers[k]) }
@@ -67,9 +59,18 @@ module Multipart
67
59
  end
68
60
 
69
61
  attr :boundary
62
+
63
+ private
64
+
65
+ if RUBY_VERSION >= "2.5.0"
66
+ def symbolize_keys(hash)
67
+ hash.transform_keys(&:to_sym)
68
+ end
69
+ else
70
+ def symbolize_keys(hash)
71
+ hash.map{|key,value| [key.to_sym, value]}.to_h
72
+ end
73
+ end
70
74
  end
71
75
  end
72
76
  end
73
-
74
- Multipartable = Multipart::Post::Multipartable
75
- Object.deprecate_constant :Multipartable
@@ -1,24 +1,23 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # Copyright, 2007-2013, by Nick Sieger.
4
- #
5
- # Permission is hereby granted, free of charge, to any person obtaining a copy
6
- # of this software and associated documentation files (the "Software"), to deal
7
- # in the Software without restriction, including without limitation the rights
8
- # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- # copies of the Software, and to permit persons to whom the Software is
10
- # furnished to do so, subject to the following conditions:
11
- #
12
- # The above copyright notice and this permission notice shall be included in
13
- # all copies or substantial portions of the Software.
14
- #
15
- # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
- # THE SOFTWARE.
3
+ # Released under the MIT License.
4
+ # Copyright, 2008-2009, by McClain Looney.
5
+ # Copyright, 2009-2013, by Nick Sieger.
6
+ # Copyright, 2011, by Johannes Wagener.
7
+ # Copyright, 2011, by Gerrit Riessen.
8
+ # Copyright, 2011, by Jason Moore.
9
+ # Copyright, 2012, by Steven Davidovitz.
10
+ # Copyright, 2012, by hexfet.
11
+ # Copyright, 2013, by Vincent Pellé.
12
+ # Copyright, 2013, by Gustav Ernberg.
13
+ # Copyright, 2013, by Socrates Vicente.
14
+ # Copyright, 2017, by David Moles.
15
+ # Copyright, 2017, by Matt Colyer.
16
+ # Copyright, 2017, by Eric Hutzelman.
17
+ # Copyright, 2019-2021, by Olle Jonsson.
18
+ # Copyright, 2019, by Ethan Turkeltaub.
19
+ # Copyright, 2019, by Patrick Davey.
20
+ # Copyright, 2021-2022, by Samuel Williams.
22
21
 
23
22
  require 'stringio'
24
23
 
@@ -147,6 +146,3 @@ module Multipart
147
146
  end
148
147
  end
149
148
  end
150
-
151
- Parts = Multipart::Post::Parts
152
- Object.deprecate_constant :Parts
@@ -1,24 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # Copyright, 2007-2013, by Nick Sieger.
4
- #
5
- # Permission is hereby granted, free of charge, to any person obtaining a copy
6
- # of this software and associated documentation files (the "Software"), to deal
7
- # in the Software without restriction, including without limitation the rights
8
- # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- # copies of the Software, and to permit persons to whom the Software is
10
- # furnished to do so, subject to the following conditions:
11
- #
12
- # The above copyright notice and this permission notice shall be included in
13
- # all copies or substantial portions of the Software.
14
- #
15
- # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
- # THE SOFTWARE.
3
+ # Released under the MIT License.
4
+ # Copyright, 2022, by Samuel Williams.
22
5
 
23
6
  module Multipart
24
7
  module Post
@@ -1,27 +1,11 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # Copyright, 2007-2013, by Nick Sieger.
4
- #
5
- # Permission is hereby granted, free of charge, to any person obtaining a copy
6
- # of this software and associated documentation files (the "Software"), to deal
7
- # in the Software without restriction, including without limitation the rights
8
- # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- # copies of the Software, and to permit persons to whom the Software is
10
- # furnished to do so, subject to the following conditions:
11
- #
12
- # The above copyright notice and this permission notice shall be included in
13
- # all copies or substantial portions of the Software.
14
- #
15
- # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
- # THE SOFTWARE.
3
+ # Released under the MIT License.
4
+ # Copyright, 2019, by Patrick Davey.
5
+ # Copyright, 2021-2023, by Samuel Williams.
22
6
 
23
7
  module Multipart
24
8
  module Post
25
- VERSION = "2.2.2"
9
+ VERSION = "2.3.0"
26
10
  end
27
11
  end
@@ -1,24 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # Copyright, 2007-2013, by Nick Sieger.
4
- #
5
- # Permission is hereby granted, free of charge, to any person obtaining a copy
6
- # of this software and associated documentation files (the "Software"), to deal
7
- # in the Software without restriction, including without limitation the rights
8
- # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- # copies of the Software, and to permit persons to whom the Software is
10
- # furnished to do so, subject to the following conditions:
11
- #
12
- # The above copyright notice and this permission notice shall be included in
13
- # all copies or substantial portions of the Software.
14
- #
15
- # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
- # THE SOFTWARE.
3
+ # Released under the MIT License.
4
+ # Copyright, 2019, by Patrick Davey.
5
+ # Copyright, 2021-2022, by Samuel Williams.
22
6
 
23
7
  require_relative 'post/multipartable'
24
8
  require_relative 'post/upload_io'
@@ -1,3 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Released under the MIT License.
4
+ # Copyright, 2009-2013, by Nick Sieger.
5
+ # Copyright, 2019-2022, by Samuel Williams.
6
+
1
7
  warn "Top level ::MultipartPost is deprecated, require 'multipart/post' and use `Multipart::Post` instead!"
2
8
  require_relative 'multipart/post'
9
+
3
10
  MultipartPost = Multipart::Post
11
+ Object.deprecate_constant :MultipartPost
data/lib/multipartable.rb CHANGED
@@ -1,2 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Released under the MIT License.
4
+ # Copyright, 2008, by McClain Looney.
5
+ # Copyright, 2008-2013, by Nick Sieger.
6
+ # Copyright, 2011, by Gerrit Riessen.
7
+ # Copyright, 2013, by Vincent Pellé.
8
+ # Copyright, 2013, by Gustav Ernberg.
9
+ # Copyright, 2013, by Socrates Vicente.
10
+ # Copyright, 2013, by Steffen Grunwald.
11
+ # Copyright, 2019, by Olle Jonsson.
12
+ # Copyright, 2019-2022, by Samuel Williams.
13
+ # Copyright, 2019, by Patrick Davey.
14
+
1
15
  warn "Top level ::Multipartable is deprecated, require 'multipart/post' and use `Multipart::Post::Multipartable` instead!"
2
16
  require_relative 'multipart/post'
17
+
18
+ Multipartable = Multipart::Post::Multipartable
19
+ Object.deprecate_constant :Multipartable
@@ -1,24 +1,11 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # Copyright, 2007-2013, by Nick Sieger.
4
- #
5
- # Permission is hereby granted, free of charge, to any person obtaining a copy
6
- # of this software and associated documentation files (the "Software"), to deal
7
- # in the Software without restriction, including without limitation the rights
8
- # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- # copies of the Software, and to permit persons to whom the Software is
10
- # furnished to do so, subject to the following conditions:
11
- #
12
- # The above copyright notice and this permission notice shall be included in
13
- # all copies or substantial portions of the Software.
14
- #
15
- # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
- # THE SOFTWARE.
3
+ # Released under the MIT License.
4
+ # Copyright, 2006-2012, by Nick Sieger.
5
+ # Copyright, 2008, by McClain Looney.
6
+ # Copyright, 2019, by Olle Jonsson.
7
+ # Copyright, 2019, by Patrick Davey.
8
+ # Copyright, 2021-2022, by Samuel Williams.
22
9
 
23
10
  require 'net/http'
24
11
 
data/lib/parts.rb CHANGED
@@ -1,2 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Released under the MIT License.
4
+ # Copyright, 2008-2009, by McClain Looney.
5
+ # Copyright, 2009-2013, by Nick Sieger.
6
+ # Copyright, 2011, by Johannes Wagener.
7
+ # Copyright, 2011, by Gerrit Riessen.
8
+ # Copyright, 2011, by Jason Moore.
9
+ # Copyright, 2012, by Steven Davidovitz.
10
+ # Copyright, 2012, by hexfet.
11
+ # Copyright, 2013, by Vincent Pellé.
12
+ # Copyright, 2013, by Gustav Ernberg.
13
+ # Copyright, 2013, by Socrates Vicente.
14
+ # Copyright, 2017, by David Moles.
15
+ # Copyright, 2017, by Matt Colyer.
16
+ # Copyright, 2017, by Eric Hutzelman.
17
+ # Copyright, 2019, by Olle Jonsson.
18
+ # Copyright, 2019, by Ethan Turkeltaub.
19
+ # Copyright, 2022, by Samuel Williams.
20
+
1
21
  warn "Top level ::Parts is deprecated, require 'multipart/post' and use `Multipart::Post::Parts` instead!"
2
22
  require_relative 'multipart/post'
23
+
24
+ Parts = Multipart::Post::Parts
25
+ Object.deprecate_constant :Parts
data/license.md ADDED
@@ -0,0 +1,57 @@
1
+ # MIT License
2
+
3
+ Copyright, 2006-2014, by Nick Sieger.
4
+ Copyright, 2008-2009, by McClain Looney.
5
+ Copyright, 2010, by Tohru Hashimoto.
6
+ Copyright, 2011, by Jeff Hodges.
7
+ Copyright, 2011, by Alex Koppel.
8
+ Copyright, 2011, by Johannes Wagener.
9
+ Copyright, 2011, by Christine Yen.
10
+ Copyright, 2011, by Gerrit Riessen.
11
+ Copyright, 2011, by Jason Moore.
12
+ Copyright, 2011, by Luke Redpath.
13
+ Copyright, 2012, by Steven Davidovitz.
14
+ Copyright, 2012, by hexfet.
15
+ Copyright, 2013, by Jordi Massaguer Pla.
16
+ Copyright, 2013, by Mislav Marohnić.
17
+ Copyright, 2013, by Vincent Pellé.
18
+ Copyright, 2013, by Gustav Ernberg.
19
+ Copyright, 2013, by Socrates Vicente.
20
+ Copyright, 2013, by Leo Cassarani.
21
+ Copyright, 2013, by Jagtesh Chadha.
22
+ Copyright, 2013, by Steffen Grunwald.
23
+ Copyright, 2013, by Lonre Wang.
24
+ Copyright, 2017-2023, by Samuel Williams.
25
+ Copyright, 2017, by Feuda Nan.
26
+ Copyright, 2017, by David Moles.
27
+ Copyright, 2017, by Matt Colyer.
28
+ Copyright, 2017, by Eric Hutzelman.
29
+ Copyright, 2019, by Lachlan Priest.
30
+ Copyright, 2019, by Jan Piotrowski.
31
+ Copyright, 2019-2022, by Olle Jonsson.
32
+ Copyright, 2019, by Ethan Turkeltaub.
33
+ Copyright, 2019, by Jan-Joost Spanjers.
34
+ Copyright, 2019, by Patrick Davey.
35
+ Copyright, 2021, by Tim Barkley.
36
+ Copyright, 2021, by Lewis Cowles.
37
+ Copyright, 2022, by Jason York.
38
+ Copyright, 2022, by Takuya Noguchi.
39
+ Copyright, 2023, by Peter Goldstein.
40
+
41
+ Permission is hereby granted, free of charge, to any person obtaining a copy
42
+ of this software and associated documentation files (the "Software"), to deal
43
+ in the Software without restriction, including without limitation the rights
44
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
45
+ copies of the Software, and to permit persons to whom the Software is
46
+ furnished to do so, subject to the following conditions:
47
+
48
+ The above copyright notice and this permission notice shall be included in all
49
+ copies or substantial portions of the Software.
50
+
51
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
52
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
53
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
54
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
55
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
56
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
57
+ SOFTWARE.
data/readme.md ADDED
@@ -0,0 +1,170 @@
1
+ # Multipart::Post
2
+
3
+ Adds a streamy multipart form post capability to `Net::HTTP`. Also supports other
4
+ methods besides `POST`.
5
+
6
+ [![Development Status](https://github.com/socketry/multipart-post/workflows/Test/badge.svg)](https://github.com/socketry/multipart-post/actions?workflow=Test)
7
+
8
+ ## Features/Problems
9
+
10
+ - Appears to actually work. A good feature to have.
11
+ - Encapsulates posting of file/binary parts and name/value parameter parts, similar to
12
+ most browsers' file upload forms.
13
+ - Provides an `UploadIO` helper class to prepare IO objects for inclusion in the params
14
+ hash of the multipart post object.
15
+
16
+ ## Installation
17
+
18
+ ``` shell
19
+ bundle add multipart-post
20
+ ```
21
+
22
+ ## Usage
23
+
24
+ ``` ruby
25
+ require 'net/http/post/multipart'
26
+
27
+ url = URI.parse('http://www.example.com/upload')
28
+ File.open("./image.jpg") do |jpg|
29
+ req = Net::HTTP::Post::Multipart.new url.path,
30
+ "file" => UploadIO.new(jpg, "image/jpeg", "image.jpg")
31
+ res = Net::HTTP.start(url.host, url.port) do |http|
32
+ http.request(req)
33
+ end
34
+ end
35
+ ```
36
+
37
+ To post multiple files or attachments, simply include multiple parameters with
38
+ `UploadIO` values:
39
+
40
+ ``` ruby
41
+ require 'net/http/post/multipart'
42
+
43
+ url = URI.parse('http://www.example.com/upload')
44
+ req = Net::HTTP::Post::Multipart.new url.path,
45
+ "file1" => UploadIO.new(File.new("./image.jpg"), "image/jpeg", "image.jpg"),
46
+ "file2" => UploadIO.new(File.new("./image2.jpg"), "image/jpeg", "image2.jpg")
47
+ res = Net::HTTP.start(url.host, url.port) do |http|
48
+ http.request(req)
49
+ end
50
+ ```
51
+
52
+ To post files with other normal, non-file params such as input values, you need to pass hashes to the `Multipart.new` method.
53
+
54
+ In Rails 4 for example:
55
+
56
+ ``` ruby
57
+ def model_params
58
+ require_params = params.require(:model).permit(:param_one, :param_two, :param_three, :avatar)
59
+ require_params[:avatar] = model_params[:avatar].present? ? UploadIO.new(model_params[:avatar].tempfile, model_params[:avatar].content_type, model_params[:avatar].original_filename) : nil
60
+ require_params
61
+ end
62
+
63
+ require 'net/http/post/multipart'
64
+
65
+ url = URI.parse('http://www.example.com/upload')
66
+ Net::HTTP.start(url.host, url.port) do |http|
67
+ req = Net::HTTP::Post::Multipart.new(url, model_params)
68
+ key = "authorization_key"
69
+ req.add_field("Authorization", key) #add to Headers
70
+ http.use_ssl = (url.scheme == "https")
71
+ http.request(req)
72
+ end
73
+ ```
74
+
75
+ Or in plain ruby:
76
+
77
+ ``` ruby
78
+ def params(file)
79
+ params = { "description" => "A nice picture!" }
80
+ params[:datei] = UploadIO.new(file, "image/jpeg", "image.jpg")
81
+ params
82
+ end
83
+
84
+ url = URI.parse('http://www.example.com/upload')
85
+ File.open("./image.jpg") do |file|
86
+ req = Net::HTTP::Post::Multipart.new(url.path, params(file))
87
+ res = Net::HTTP.start(url.host, url.port) do |http|
88
+ return http.request(req).body
89
+ end
90
+ end
91
+ ```
92
+
93
+ ### Parts Headers
94
+
95
+ By default, all individual parts will include the header `Content-Disposition` as well as `Content-Length`, `Content-Transfer-Encoding` and `Content-Type` for the File Parts.
96
+
97
+ You may optionally configure the headers `Content-Type` and `Content-ID` for both ParamPart and FilePart by passing in a `parts` header.
98
+
99
+ For example:
100
+
101
+ ``` ruby
102
+ url = URI.parse('http://www.example.com/upload')
103
+
104
+ params = {
105
+ "file_metadata_01" => { "description" => "A nice picture!" },
106
+ "file_content_01" => UploadIO.new(file, "image/jpeg", "image.jpg")
107
+ }
108
+
109
+ headers = {
110
+ 'parts': {
111
+ 'file_metadata_01': {
112
+ 'Content-Type' => "application/json"
113
+ }
114
+ }
115
+ }
116
+
117
+ req = Net::HTTP::Post::Multipart.new(uri, params, headers)
118
+ ```
119
+
120
+ This would configure the `file_metadata_01` part to include `Content-Type`
121
+
122
+ Content-Disposition: form-data; name="file_metadata_01"
123
+ Content-Type: application/json
124
+ {
125
+ "description" => "A nice picture!"
126
+ }
127
+
128
+ #### Custom Parts Headers
129
+
130
+ *For FileParts only.*
131
+
132
+ You can include any number of custom parts headers in addition to `Content-Type` and `Content-ID`.
133
+
134
+ ``` ruby
135
+ headers = {
136
+ 'parts': {
137
+ 'file_metadata_01': {
138
+ 'Content-Type' => "application/json",
139
+ 'My-Custom-Header' => "Yo Yo!"
140
+ }
141
+ }
142
+ }
143
+ ```
144
+
145
+ ### Debugging
146
+
147
+ You can debug requests and responses (e.g. status codes) for all requests by adding the following code:
148
+
149
+ ``` ruby
150
+ http = Net::HTTP.new(uri.host, uri.port)
151
+ http.set_debug_output($stdout)
152
+ ```
153
+
154
+ ## Versioning
155
+
156
+ This library aims to adhere to [Semantic Versioning 2.0.0](http://semver.org/).
157
+ Violations of this scheme should be reported as bugs. Specifically,
158
+ if a minor or patch version is released that breaks backward
159
+ compatibility, a new version should be immediately released that
160
+ restores compatibility. Breaking changes to the public API will
161
+ only be introduced with new major versions.
162
+
163
+ As a result of this policy, you can (and should) specify a
164
+ dependency on this gem using the [Pessimistic Version Constraint](http://guides.rubygems.org/patterns/#pessimistic-version-constraint) with two digits of precision.
165
+
166
+ For example:
167
+
168
+ ``` ruby
169
+ spec.add_dependency 'multipart-post', '~> 2.1'
170
+ ```
data.tar.gz.sig CHANGED
Binary file
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: multipart-post
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.2.2
4
+ version: 2.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nick Sieger
@@ -16,9 +16,8 @@ authors:
16
16
  - Ethan Turkeltaub
17
17
  - Jagtesh Chadha
18
18
  - Jason York
19
- - Nick
20
- - VincWebwag
21
- - hasimo
19
+ - Tohru Hashimoto
20
+ - Vincent Pellé
22
21
  - hexfet
23
22
  - Christine Yen
24
23
  - David Moles
@@ -37,41 +36,44 @@ authors:
37
36
  - Luke Redpath
38
37
  - Matt Colyer
39
38
  - Mislav Marohnić
39
+ - Peter Goldstein
40
40
  - Socrates Vicente
41
41
  - Steffen Grunwald
42
+ - Takuya Noguchi
42
43
  - Tim Barkley
43
44
  autorequire:
44
45
  bindir: bin
45
46
  cert_chain:
46
47
  - |
47
48
  -----BEGIN CERTIFICATE-----
48
- MIIEhDCCAuygAwIBAgIBATANBgkqhkiG9w0BAQsFADA3MTUwMwYDVQQDDCxzYW11
49
- ZWwud2lsbGlhbXMvREM9b3Jpb250cmFuc2Zlci9EQz1jby9EQz1uejAeFw0yMTA4
50
- MTYwNjMzNDRaFw0yMjA4MTYwNjMzNDRaMDcxNTAzBgNVBAMMLHNhbXVlbC53aWxs
51
- aWFtcy9EQz1vcmlvbnRyYW5zZmVyL0RDPWNvL0RDPW56MIIBojANBgkqhkiG9w0B
52
- AQEFAAOCAY8AMIIBigKCAYEAyXLSS/cw+fXJ5e7hi+U/TeChPWeYdwJojDsFY1xr
53
- xvtqbTTL8gbLHz5LW3QD2nfwCv3qTlw0qI3Ie7a9VMJMbSvgVEGEfQirqIgJXWMj
54
- eNMDgKsMJtC7u/43abRKx7TCURW3iWyR19NRngsJJmaR51yGGGm2Kfsr+JtKKLtL
55
- L188Wm3f13KAx7QJU8qyuBnj1/gWem076hzdA7xi1DbrZrch9GCRz62xymJlrJHn
56
- 9iZEZ7AxrS7vokhMlzSr/XMUihx/8aFKtk+tMLClqxZSmBWIErWdicCGTULXCBNb
57
- E/mljo4zEVKhlTWpJklMIhr55ZRrSarKFuW7en0+tpJrfsYiAmXMJNi4XAYJH7uL
58
- rgJuJwSaa/dMz+VmUoo7VKtSfCoOI+6v5/z0sK3oT6sG6ZwyI47DBq2XqNC6tnAj
59
- w+XmCywiTQrFzMMAvcA7rPI4F0nU1rZId51rOvvfxaONp+wgTi4P8owZLw0/j0m4
60
- 8C20DYi6EYx4AHDXiLpElWh3AgMBAAGjgZowgZcwCQYDVR0TBAIwADALBgNVHQ8E
61
- BAMCBLAwHQYDVR0OBBYEFB6ZaeWKxQjGTI+pmz7cKRmMIywwMC4GA1UdEQQnMCWB
62
- I3NhbXVlbC53aWxsaWFtc0BvcmlvbnRyYW5zZmVyLmNvLm56MC4GA1UdEgQnMCWB
63
- I3NhbXVlbC53aWxsaWFtc0BvcmlvbnRyYW5zZmVyLmNvLm56MA0GCSqGSIb3DQEB
64
- CwUAA4IBgQBVoM+pu3dpdUhZM1w051iw5GfiqclAr1Psypf16Tiod/ho//4oAu6T
65
- 9fj3DPX/acWV9P/FScvqo4Qgv6g4VWO5ZU7z2JmPoTXZtYMunRAmQPFL/gSUc6aK
66
- vszMHIyhtyzRc6DnfW2AiVOjMBjaYv8xXZc9bduniRVPrLR4J7ozmGLh4o4uJp7w
67
- x9KCFaR8Lvn/r0oJWJOqb/DMAYI83YeN2Dlt3jpwrsmsONrtC5S3gOUle5afSGos
68
- bYt5ocnEpKSomR9ZtnCGljds/aeO1Xgpn2r9HHcjwnH346iNrnHmMlC7BtHUFPDg
69
- Ts92S47PTOXzwPBDsrFiq3VLbRjHSwf8rpqybQBH9MfzxGGxTaETQYOd6b4e4Ag6
70
- y92abGna0bmIEb4+Tx9rQ10Uijh1POzvr/VTH4bbIPy9FbKrRsIQ24qDbNJRtOpE
71
- RAOsIl+HOBTb252nx1kIRN5hqQx272AJCbCjKx8egcUQKffFVVCI0nye09v5CK+a
72
- HiLJ8VOFx6w=
49
+ MIIE2DCCA0CgAwIBAgIBATANBgkqhkiG9w0BAQsFADBhMRgwFgYDVQQDDA9zYW11
50
+ ZWwud2lsbGlhbXMxHTAbBgoJkiaJk/IsZAEZFg1vcmlvbnRyYW5zZmVyMRIwEAYK
51
+ CZImiZPyLGQBGRYCY28xEjAQBgoJkiaJk/IsZAEZFgJuejAeFw0yMjA4MDYwNDUz
52
+ MjRaFw0zMjA4MDMwNDUzMjRaMGExGDAWBgNVBAMMD3NhbXVlbC53aWxsaWFtczEd
53
+ MBsGCgmSJomT8ixkARkWDW9yaW9udHJhbnNmZXIxEjAQBgoJkiaJk/IsZAEZFgJj
54
+ bzESMBAGCgmSJomT8ixkARkWAm56MIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIB
55
+ igKCAYEAomvSopQXQ24+9DBB6I6jxRI2auu3VVb4nOjmmHq7XWM4u3HL+pni63X2
56
+ 9qZdoq9xt7H+RPbwL28LDpDNflYQXoOhoVhQ37Pjn9YDjl8/4/9xa9+NUpl9XDIW
57
+ sGkaOY0eqsQm1pEWkHJr3zn/fxoKPZPfaJOglovdxf7dgsHz67Xgd/ka+Wo1YqoE
58
+ e5AUKRwUuvaUaumAKgPH+4E4oiLXI4T1Ff5Q7xxv6yXvHuYtlMHhYfgNn8iiW8WN
59
+ XibYXPNP7NtieSQqwR/xM6IRSoyXKuS+ZNGDPUUGk8RoiV/xvVN4LrVm9upSc0ss
60
+ RZ6qwOQmXCo/lLcDUxJAgG95cPw//sI00tZan75VgsGzSWAOdjQpFM0l4dxvKwHn
61
+ tUeT3ZsAgt0JnGqNm2Bkz81kG4A2hSyFZTFA8vZGhp+hz+8Q573tAR89y9YJBdYM
62
+ zp0FM4zwMNEUwgfRzv1tEVVUEXmoFCyhzonUUw4nE4CFu/sE3ffhjKcXcY//qiSW
63
+ xm4erY3XAgMBAAGjgZowgZcwCQYDVR0TBAIwADALBgNVHQ8EBAMCBLAwHQYDVR0O
64
+ BBYEFO9t7XWuFf2SKLmuijgqR4sGDlRsMC4GA1UdEQQnMCWBI3NhbXVlbC53aWxs
65
+ aWFtc0BvcmlvbnRyYW5zZmVyLmNvLm56MC4GA1UdEgQnMCWBI3NhbXVlbC53aWxs
66
+ aWFtc0BvcmlvbnRyYW5zZmVyLmNvLm56MA0GCSqGSIb3DQEBCwUAA4IBgQB5sxkE
67
+ cBsSYwK6fYpM+hA5B5yZY2+L0Z+27jF1pWGgbhPH8/FjjBLVn+VFok3CDpRqwXCl
68
+ xCO40JEkKdznNy2avOMra6PFiQyOE74kCtv7P+Fdc+FhgqI5lMon6tt9rNeXmnW/
69
+ c1NaMRdxy999hmRGzUSFjozcCwxpy/LwabxtdXwXgSay4mQ32EDjqR1TixS1+smp
70
+ 8C/NCWgpIfzpHGJsjvmH2wAfKtTTqB9CVKLCWEnCHyCaRVuKkrKjqhYCdmMBqCws
71
+ JkxfQWC+jBVeG9ZtPhQgZpfhvh+6hMhraUYRQ6XGyvBqEUe+yo6DKIT3MtGE2+CP
72
+ eX9i9ZWBydWb8/rvmwmX2kkcBbX0hZS1rcR593hGc61JR6lvkGYQ2MYskBveyaxt
73
+ Q2K9NVun/S785AP05vKkXZEFYxqG6EW012U4oLcFl5MySFajYXRYbuUpH6AY+HP8
74
+ voD0MPg1DssDLKwXyt1eKD/+Fq0bFWhwVM/1XiAXL7lyYUyOq24KHgQ2Csg=
73
75
  -----END CERTIFICATE-----
74
- date: 2022-06-09 00:00:00.000000000 Z
76
+ date: 2023-01-26 00:00:00.000000000 Z
75
77
  dependencies:
76
78
  - !ruby/object:Gem::Dependency
77
79
  name: bundler
@@ -88,39 +90,40 @@ dependencies:
88
90
  - !ruby/object:Gem::Version
89
91
  version: '0'
90
92
  - !ruby/object:Gem::Dependency
91
- name: rake
93
+ name: rspec
92
94
  requirement: !ruby/object:Gem::Requirement
93
95
  requirements:
94
- - - ">="
96
+ - - "~>"
95
97
  - !ruby/object:Gem::Version
96
- version: '0'
98
+ version: '3.4'
97
99
  type: :development
98
100
  prerelease: false
99
101
  version_requirements: !ruby/object:Gem::Requirement
100
102
  requirements:
101
- - - ">="
103
+ - - "~>"
102
104
  - !ruby/object:Gem::Version
103
- version: '0'
105
+ version: '3.4'
104
106
  - !ruby/object:Gem::Dependency
105
- name: rspec
107
+ name: covered
106
108
  requirement: !ruby/object:Gem::Requirement
107
109
  requirements:
108
- - - "~>"
110
+ - - ">="
109
111
  - !ruby/object:Gem::Version
110
- version: '3.4'
112
+ version: '0'
111
113
  type: :development
112
114
  prerelease: false
113
115
  version_requirements: !ruby/object:Gem::Requirement
114
116
  requirements:
115
- - - "~>"
117
+ - - ">="
116
118
  - !ruby/object:Gem::Version
117
- version: '3.4'
119
+ version: '0'
118
120
  description:
119
121
  email:
120
122
  executables: []
121
123
  extensions: []
122
124
  extra_rdoc_files: []
123
125
  files:
126
+ - changelog.md
124
127
  - lib/composite_io.rb
125
128
  - lib/multipart/post.rb
126
129
  - lib/multipart/post/composite_read_io.rb
@@ -132,6 +135,8 @@ files:
132
135
  - lib/multipartable.rb
133
136
  - lib/net/http/post/multipart.rb
134
137
  - lib/parts.rb
138
+ - license.md
139
+ - readme.md
135
140
  homepage: https://github.com/socketry/multipart-post
136
141
  licenses:
137
142
  - MIT
@@ -144,14 +149,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
144
149
  requirements:
145
150
  - - ">="
146
151
  - !ruby/object:Gem::Version
147
- version: 2.6.0
152
+ version: 2.3.0
148
153
  required_rubygems_version: !ruby/object:Gem::Requirement
149
154
  requirements:
150
155
  - - ">="
151
156
  - !ruby/object:Gem::Version
152
157
  version: '0'
153
158
  requirements: []
154
- rubygems_version: 3.3.8
159
+ rubygems_version: 3.4.1
155
160
  signing_key:
156
161
  specification_version: 4
157
162
  summary: A multipart form post accessory for Net::HTTP.
metadata.gz.sig CHANGED
Binary file