New Upstream Release - ruby-multipart-post

Ready changes

Summary

Merged new upstream version: 2.3.0 (was: 2.2.3).

Resulting package

Built on 2023-06-03T11:45 (took 6m0s)

The resulting binary packages can be installed (if you have the apt repository enabled) by running one of:

apt install -t fresh-releases ruby-multipart-post

Lintian Result

Diff

diff --git a/changelog.md b/changelog.md
new file mode 100644
index 0000000..d179b82
--- /dev/null
+++ b/changelog.md
@@ -0,0 +1,14 @@
+# CHANGELOG
+
+## Unreleased
+
+### Added
+
+- Add the ability to set Content-ID header for ParamPart [#62](https://github.com/socketry/multipart-post/pull/62)
+- Allow mixed key types for parts headers [#79](https://github.com/socketry/multipart-post/pull/79)
+
+### Changed
+
+- Refactor `Parts` into a `Multipart::Post` namespace  [#65](https://github.com/socketry/multipart-post/pull/65)
+- Use mutable strings where needed [#70](https://github.com/socketry/multipart-post/pull/70)
+- Use `frozen_string_literal` everywhere [#78](https://github.com/socketry/multipart-post/pull/78)
diff --git a/checksums.yaml.gz.sig b/checksums.yaml.gz.sig
index b8289b6..2480ec4 100644
Binary files a/checksums.yaml.gz.sig and b/checksums.yaml.gz.sig differ
diff --git a/data.tar.gz.sig b/data.tar.gz.sig
index f3eb5cd..61a48a2 100644
Binary files a/data.tar.gz.sig and b/data.tar.gz.sig differ
diff --git a/debian/changelog b/debian/changelog
index 5a37102..e32f635 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,9 @@
+ruby-multipart-post (2.3.0-1) UNRELEASED; urgency=low
+
+  * New upstream release.
+
+ -- Debian Janitor <janitor@jelmer.uk>  Sat, 03 Jun 2023 11:39:47 -0000
+
 ruby-multipart-post (2.2.3-1) unstable; urgency=medium
 
   * Team upload.
diff --git a/lib/composite_io.rb b/lib/composite_io.rb
index 3430a09..c0748a4 100644
--- a/lib/composite_io.rb
+++ b/lib/composite_io.rb
@@ -1,2 +1,17 @@
+# frozen_string_literal: true
+
+# Released under the MIT License.
+# Copyright, 2006-2013, by Nick Sieger.
+# Copyright, 2010, by Tohru Hashimoto.
+# Copyright, 2011, by Jeff Hodges.
+# Copyright, 2011, by Alex Koppel.
+# Copyright, 2011, by Christine Yen.
+# Copyright, 2011, by Gerrit Riessen.
+# Copyright, 2011, by Luke Redpath.
+# Copyright, 2013, by Mislav Marohnić.
+# Copyright, 2013, by Leo Cassarani.
+# Copyright, 2019, by Olle Jonsson.
+# Copyright, 2022, by Samuel Williams.
+
 warn "Top level ::CompositeIO is deprecated, require 'multipart/post' and use `Multipart::Post::CompositeReadIO` instead!"
 require_relative 'multipart/post'
diff --git a/lib/multipart/post.rb b/lib/multipart/post.rb
index a7221ec..29ab41a 100644
--- a/lib/multipart/post.rb
+++ b/lib/multipart/post.rb
@@ -1,24 +1,8 @@
 # frozen_string_literal: true
 
-# Copyright, 2007-2013, by Nick Sieger.
-# 
-# Permission is hereby granted, free of charge, to any person obtaining a copy
-# of this software and associated documentation files (the "Software"), to deal
-# in the Software without restriction, including without limitation the rights
-# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-# copies of the Software, and to permit persons to whom the Software is
-# furnished to do so, subject to the following conditions:
-# 
-# The above copyright notice and this permission notice shall be included in
-# all copies or substantial portions of the Software.
-# 
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-# THE SOFTWARE.
+# Released under the MIT License.
+# Copyright, 2019, by Patrick Davey.
+# Copyright, 2021-2022, by Samuel Williams.
 
 require_relative 'post/multipartable'
 require_relative 'post/upload_io'
diff --git a/lib/multipart/post/composite_read_io.rb b/lib/multipart/post/composite_read_io.rb
index 54a1a46..44704b7 100644
--- a/lib/multipart/post/composite_read_io.rb
+++ b/lib/multipart/post/composite_read_io.rb
@@ -1,24 +1,19 @@
 # frozen_string_literal: true
 
-# Copyright, 2007-2013, by Nick Sieger.
-# 
-# Permission is hereby granted, free of charge, to any person obtaining a copy
-# of this software and associated documentation files (the "Software"), to deal
-# in the Software without restriction, including without limitation the rights
-# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-# copies of the Software, and to permit persons to whom the Software is
-# furnished to do so, subject to the following conditions:
-# 
-# The above copyright notice and this permission notice shall be included in
-# all copies or substantial portions of the Software.
-# 
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-# THE SOFTWARE.
+# Released under the MIT License.
+# Copyright, 2006-2013, by Nick Sieger.
+# Copyright, 2010, by Tohru Hashimoto.
+# Copyright, 2011, by Jeff Hodges.
+# Copyright, 2011, by Alex Koppel.
+# Copyright, 2011, by Christine Yen.
+# Copyright, 2011, by Gerrit Riessen.
+# Copyright, 2011, by Luke Redpath.
+# Copyright, 2013, by Mislav Marohnić.
+# Copyright, 2013, by Leo Cassarani.
+# Copyright, 2019, by Olle Jonsson.
+# Copyright, 2019, by Patrick Davey.
+# Copyright, 2021, by Lewis Cowles.
+# Copyright, 2021-2022, by Samuel Williams.
 
 module Multipart
   module Post
diff --git a/lib/multipart/post/multipartable.rb b/lib/multipart/post/multipartable.rb
index ff69a8b..d4017ec 100644
--- a/lib/multipart/post/multipartable.rb
+++ b/lib/multipart/post/multipartable.rb
@@ -1,24 +1,17 @@
 # frozen_string_literal: true
 
-# Copyright, 2007-2013, by Nick Sieger.
-# 
-# Permission is hereby granted, free of charge, to any person obtaining a copy
-# of this software and associated documentation files (the "Software"), to deal
-# in the Software without restriction, including without limitation the rights
-# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-# copies of the Software, and to permit persons to whom the Software is
-# furnished to do so, subject to the following conditions:
-# 
-# The above copyright notice and this permission notice shall be included in
-# all copies or substantial portions of the Software.
-# 
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-# THE SOFTWARE.
+# Released under the MIT License.
+# Copyright, 2008, by McClain Looney.
+# Copyright, 2008-2013, by Nick Sieger.
+# Copyright, 2011, by Gerrit Riessen.
+# Copyright, 2013, by Vincent Pellé.
+# Copyright, 2013, by Gustav Ernberg.
+# Copyright, 2013, by Socrates Vicente.
+# Copyright, 2013, by Steffen Grunwald.
+# Copyright, 2019, by Olle Jonsson.
+# Copyright, 2019-2022, by Samuel Williams.
+# Copyright, 2019, by Patrick Davey.
+# Copyright, 2022, by Jason York.
 
 require_relative 'parts'
 require_relative 'composite_read_io'
@@ -81,6 +74,3 @@ module Multipart
     end
   end
 end
-
-Multipartable = Multipart::Post::Multipartable
-Object.deprecate_constant :Multipartable
diff --git a/lib/multipart/post/parts.rb b/lib/multipart/post/parts.rb
index a826e49..14ab5aa 100644
--- a/lib/multipart/post/parts.rb
+++ b/lib/multipart/post/parts.rb
@@ -1,24 +1,23 @@
 # frozen_string_literal: true
 
-# Copyright, 2007-2013, by Nick Sieger.
-# 
-# Permission is hereby granted, free of charge, to any person obtaining a copy
-# of this software and associated documentation files (the "Software"), to deal
-# in the Software without restriction, including without limitation the rights
-# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-# copies of the Software, and to permit persons to whom the Software is
-# furnished to do so, subject to the following conditions:
-# 
-# The above copyright notice and this permission notice shall be included in
-# all copies or substantial portions of the Software.
-# 
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-# THE SOFTWARE.
+# Released under the MIT License.
+# Copyright, 2008-2009, by McClain Looney.
+# Copyright, 2009-2013, by Nick Sieger.
+# Copyright, 2011, by Johannes Wagener.
+# Copyright, 2011, by Gerrit Riessen.
+# Copyright, 2011, by Jason Moore.
+# Copyright, 2012, by Steven Davidovitz.
+# Copyright, 2012, by hexfet.
+# Copyright, 2013, by Vincent Pellé.
+# Copyright, 2013, by Gustav Ernberg.
+# Copyright, 2013, by Socrates Vicente.
+# Copyright, 2017, by David Moles.
+# Copyright, 2017, by Matt Colyer.
+# Copyright, 2017, by Eric Hutzelman.
+# Copyright, 2019-2021, by Olle Jonsson.
+# Copyright, 2019, by Ethan Turkeltaub.
+# Copyright, 2019, by Patrick Davey.
+# Copyright, 2021-2022, by Samuel Williams.
 
 require 'stringio'
 
@@ -147,6 +146,3 @@ module Multipart
     end
   end
 end
-
-Parts = Multipart::Post::Parts
-Object.deprecate_constant :Parts
diff --git a/lib/multipart/post/upload_io.rb b/lib/multipart/post/upload_io.rb
index 5b47b5d..6381744 100644
--- a/lib/multipart/post/upload_io.rb
+++ b/lib/multipart/post/upload_io.rb
@@ -1,24 +1,7 @@
 # frozen_string_literal: true
 
-# Copyright, 2007-2013, by Nick Sieger.
-# 
-# Permission is hereby granted, free of charge, to any person obtaining a copy
-# of this software and associated documentation files (the "Software"), to deal
-# in the Software without restriction, including without limitation the rights
-# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-# copies of the Software, and to permit persons to whom the Software is
-# furnished to do so, subject to the following conditions:
-# 
-# The above copyright notice and this permission notice shall be included in
-# all copies or substantial portions of the Software.
-# 
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-# THE SOFTWARE.
+# Released under the MIT License.
+# Copyright, 2022, by Samuel Williams.
 
 module Multipart
   module Post
diff --git a/lib/multipart/post/version.rb b/lib/multipart/post/version.rb
index b41461b..f3da747 100644
--- a/lib/multipart/post/version.rb
+++ b/lib/multipart/post/version.rb
@@ -1,27 +1,11 @@
 # frozen_string_literal: true
 
-# Copyright, 2007-2013, by Nick Sieger.
-# 
-# Permission is hereby granted, free of charge, to any person obtaining a copy
-# of this software and associated documentation files (the "Software"), to deal
-# in the Software without restriction, including without limitation the rights
-# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-# copies of the Software, and to permit persons to whom the Software is
-# furnished to do so, subject to the following conditions:
-# 
-# The above copyright notice and this permission notice shall be included in
-# all copies or substantial portions of the Software.
-# 
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-# THE SOFTWARE.
+# Released under the MIT License.
+# Copyright, 2019, by Patrick Davey.
+# Copyright, 2021-2023, by Samuel Williams.
 
 module Multipart
   module Post
-    VERSION = "2.2.3"
+    VERSION = "2.3.0"
   end
 end
diff --git a/lib/multipart_post.rb b/lib/multipart_post.rb
index 0343867..2913ab2 100644
--- a/lib/multipart_post.rb
+++ b/lib/multipart_post.rb
@@ -1,3 +1,11 @@
+# frozen_string_literal: true
+
+# Released under the MIT License.
+# Copyright, 2009-2013, by Nick Sieger.
+# Copyright, 2019-2022, by Samuel Williams.
+
 warn "Top level ::MultipartPost is deprecated, require 'multipart/post' and use `Multipart::Post` instead!"
 require_relative 'multipart/post'
+
 MultipartPost = Multipart::Post
+Object.deprecate_constant :MultipartPost
diff --git a/lib/multipartable.rb b/lib/multipartable.rb
index cb6ea19..aa5978a 100644
--- a/lib/multipartable.rb
+++ b/lib/multipartable.rb
@@ -1,2 +1,19 @@
+# frozen_string_literal: true
+
+# Released under the MIT License.
+# Copyright, 2008, by McClain Looney.
+# Copyright, 2008-2013, by Nick Sieger.
+# Copyright, 2011, by Gerrit Riessen.
+# Copyright, 2013, by Vincent Pellé.
+# Copyright, 2013, by Gustav Ernberg.
+# Copyright, 2013, by Socrates Vicente.
+# Copyright, 2013, by Steffen Grunwald.
+# Copyright, 2019, by Olle Jonsson.
+# Copyright, 2019-2022, by Samuel Williams.
+# Copyright, 2019, by Patrick Davey.
+
 warn "Top level ::Multipartable is deprecated, require 'multipart/post' and use `Multipart::Post::Multipartable` instead!"
 require_relative 'multipart/post'
+
+Multipartable = Multipart::Post::Multipartable
+Object.deprecate_constant :Multipartable
diff --git a/lib/net/http/post/multipart.rb b/lib/net/http/post/multipart.rb
index b504ba7..5a201d2 100644
--- a/lib/net/http/post/multipart.rb
+++ b/lib/net/http/post/multipart.rb
@@ -1,24 +1,11 @@
 # frozen_string_literal: true
 
-# Copyright, 2007-2013, by Nick Sieger.
-# 
-# Permission is hereby granted, free of charge, to any person obtaining a copy
-# of this software and associated documentation files (the "Software"), to deal
-# in the Software without restriction, including without limitation the rights
-# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-# copies of the Software, and to permit persons to whom the Software is
-# furnished to do so, subject to the following conditions:
-# 
-# The above copyright notice and this permission notice shall be included in
-# all copies or substantial portions of the Software.
-# 
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-# THE SOFTWARE.
+# Released under the MIT License.
+# Copyright, 2006-2012, by Nick Sieger.
+# Copyright, 2008, by McClain Looney.
+# Copyright, 2019, by Olle Jonsson.
+# Copyright, 2019, by Patrick Davey.
+# Copyright, 2021-2022, by Samuel Williams.
 
 require 'net/http'
 
diff --git a/lib/parts.rb b/lib/parts.rb
index c583302..c9a52d2 100644
--- a/lib/parts.rb
+++ b/lib/parts.rb
@@ -1,2 +1,25 @@
+# frozen_string_literal: true
+
+# Released under the MIT License.
+# Copyright, 2008-2009, by McClain Looney.
+# Copyright, 2009-2013, by Nick Sieger.
+# Copyright, 2011, by Johannes Wagener.
+# Copyright, 2011, by Gerrit Riessen.
+# Copyright, 2011, by Jason Moore.
+# Copyright, 2012, by Steven Davidovitz.
+# Copyright, 2012, by hexfet.
+# Copyright, 2013, by Vincent Pellé.
+# Copyright, 2013, by Gustav Ernberg.
+# Copyright, 2013, by Socrates Vicente.
+# Copyright, 2017, by David Moles.
+# Copyright, 2017, by Matt Colyer.
+# Copyright, 2017, by Eric Hutzelman.
+# Copyright, 2019, by Olle Jonsson.
+# Copyright, 2019, by Ethan Turkeltaub.
+# Copyright, 2022, by Samuel Williams.
+
 warn "Top level ::Parts is deprecated, require 'multipart/post' and use `Multipart::Post::Parts` instead!"
 require_relative 'multipart/post'
+
+Parts = Multipart::Post::Parts
+Object.deprecate_constant :Parts
diff --git a/license.md b/license.md
new file mode 100644
index 0000000..1e1a413
--- /dev/null
+++ b/license.md
@@ -0,0 +1,57 @@
+# MIT License
+
+Copyright, 2006-2014, by Nick Sieger.  
+Copyright, 2008-2009, by McClain Looney.  
+Copyright, 2010, by Tohru Hashimoto.  
+Copyright, 2011, by Jeff Hodges.  
+Copyright, 2011, by Alex Koppel.  
+Copyright, 2011, by Johannes Wagener.  
+Copyright, 2011, by Christine Yen.  
+Copyright, 2011, by Gerrit Riessen.  
+Copyright, 2011, by Jason Moore.  
+Copyright, 2011, by Luke Redpath.  
+Copyright, 2012, by Steven Davidovitz.  
+Copyright, 2012, by hexfet.  
+Copyright, 2013, by Jordi Massaguer Pla.  
+Copyright, 2013, by Mislav Marohnić.  
+Copyright, 2013, by Vincent Pellé.  
+Copyright, 2013, by Gustav Ernberg.  
+Copyright, 2013, by Socrates Vicente.  
+Copyright, 2013, by Leo Cassarani.  
+Copyright, 2013, by Jagtesh Chadha.  
+Copyright, 2013, by Steffen Grunwald.  
+Copyright, 2013, by Lonre Wang.  
+Copyright, 2017-2023, by Samuel Williams.  
+Copyright, 2017, by Feuda Nan.  
+Copyright, 2017, by David Moles.  
+Copyright, 2017, by Matt Colyer.  
+Copyright, 2017, by Eric Hutzelman.  
+Copyright, 2019, by Lachlan Priest.  
+Copyright, 2019, by Jan Piotrowski.  
+Copyright, 2019-2022, by Olle Jonsson.  
+Copyright, 2019, by Ethan Turkeltaub.  
+Copyright, 2019, by Jan-Joost Spanjers.  
+Copyright, 2019, by Patrick Davey.  
+Copyright, 2021, by Tim Barkley.  
+Copyright, 2021, by Lewis Cowles.  
+Copyright, 2022, by Jason York.  
+Copyright, 2022, by Takuya Noguchi.  
+Copyright, 2023, by Peter Goldstein.  
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/metadata.gz.sig b/metadata.gz.sig
index 1b3b5f4..a1072a6 100644
Binary files a/metadata.gz.sig and b/metadata.gz.sig differ
diff --git a/multipart-post.gemspec b/multipart-post.gemspec
index acc8adf..1555aa7 100644
--- a/multipart-post.gemspec
+++ b/multipart-post.gemspec
@@ -2,18 +2,18 @@
 # This file has been automatically generated by gem2tgz #
 #########################################################
 # -*- encoding: utf-8 -*-
-# stub: multipart-post 2.2.3 ruby lib
+# stub: multipart-post 2.3.0 ruby lib
 
 Gem::Specification.new do |s|
   s.name = "multipart-post".freeze
-  s.version = "2.2.3"
+  s.version = "2.3.0"
 
   s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
   s.require_paths = ["lib".freeze]
-  s.authors = ["Nick Sieger".freeze, "Samuel Williams".freeze, "Olle Jonsson".freeze, "McClain Looney".freeze, "Lewis Cowles".freeze, "Gustav Ernberg".freeze, "Patrick Davey".freeze, "Steven Davidovitz".freeze, "Alex Koppel".freeze, "Ethan Turkeltaub".freeze, "Jagtesh Chadha".freeze, "Jason York".freeze, "Nick".freeze, "VincWebwag".freeze, "hasimo".freeze, "hexfet".freeze, "Christine Yen".freeze, "David Moles".freeze, "Eric Hutzelman".freeze, "Feuda Nan".freeze, "Gerrit Riessen".freeze, "Jan Piotrowski".freeze, "Jan-Joost Spanjers".freeze, "Jason Moore".freeze, "Jeff Hodges".freeze, "Johannes Wagener".freeze, "Jordi Massaguer Pla".freeze, "Lachlan Priest".freeze, "Leo Cassarani".freeze, "Lonre Wang".freeze, "Luke Redpath".freeze, "Matt Colyer".freeze, "Mislav Marohnic\u0301".freeze, "Socrates Vicente".freeze, "Steffen Grunwald".freeze, "Tim Barkley".freeze]
-  s.cert_chain = ["-----BEGIN CERTIFICATE-----\nMIIEhDCCAuygAwIBAgIBATANBgkqhkiG9w0BAQsFADA3MTUwMwYDVQQDDCxzYW11\nZWwud2lsbGlhbXMvREM9b3Jpb250cmFuc2Zlci9EQz1jby9EQz1uejAeFw0yMTA4\nMTYwNjMzNDRaFw0yMjA4MTYwNjMzNDRaMDcxNTAzBgNVBAMMLHNhbXVlbC53aWxs\naWFtcy9EQz1vcmlvbnRyYW5zZmVyL0RDPWNvL0RDPW56MIIBojANBgkqhkiG9w0B\nAQEFAAOCAY8AMIIBigKCAYEAyXLSS/cw+fXJ5e7hi+U/TeChPWeYdwJojDsFY1xr\nxvtqbTTL8gbLHz5LW3QD2nfwCv3qTlw0qI3Ie7a9VMJMbSvgVEGEfQirqIgJXWMj\neNMDgKsMJtC7u/43abRKx7TCURW3iWyR19NRngsJJmaR51yGGGm2Kfsr+JtKKLtL\nL188Wm3f13KAx7QJU8qyuBnj1/gWem076hzdA7xi1DbrZrch9GCRz62xymJlrJHn\n9iZEZ7AxrS7vokhMlzSr/XMUihx/8aFKtk+tMLClqxZSmBWIErWdicCGTULXCBNb\nE/mljo4zEVKhlTWpJklMIhr55ZRrSarKFuW7en0+tpJrfsYiAmXMJNi4XAYJH7uL\nrgJuJwSaa/dMz+VmUoo7VKtSfCoOI+6v5/z0sK3oT6sG6ZwyI47DBq2XqNC6tnAj\nw+XmCywiTQrFzMMAvcA7rPI4F0nU1rZId51rOvvfxaONp+wgTi4P8owZLw0/j0m4\n8C20DYi6EYx4AHDXiLpElWh3AgMBAAGjgZowgZcwCQYDVR0TBAIwADALBgNVHQ8E\nBAMCBLAwHQYDVR0OBBYEFB6ZaeWKxQjGTI+pmz7cKRmMIywwMC4GA1UdEQQnMCWB\nI3NhbXVlbC53aWxsaWFtc0BvcmlvbnRyYW5zZmVyLmNvLm56MC4GA1UdEgQnMCWB\nI3NhbXVlbC53aWxsaWFtc0BvcmlvbnRyYW5zZmVyLmNvLm56MA0GCSqGSIb3DQEB\nCwUAA4IBgQBVoM+pu3dpdUhZM1w051iw5GfiqclAr1Psypf16Tiod/ho//4oAu6T\n9fj3DPX/acWV9P/FScvqo4Qgv6g4VWO5ZU7z2JmPoTXZtYMunRAmQPFL/gSUc6aK\nvszMHIyhtyzRc6DnfW2AiVOjMBjaYv8xXZc9bduniRVPrLR4J7ozmGLh4o4uJp7w\nx9KCFaR8Lvn/r0oJWJOqb/DMAYI83YeN2Dlt3jpwrsmsONrtC5S3gOUle5afSGos\nbYt5ocnEpKSomR9ZtnCGljds/aeO1Xgpn2r9HHcjwnH346iNrnHmMlC7BtHUFPDg\nTs92S47PTOXzwPBDsrFiq3VLbRjHSwf8rpqybQBH9MfzxGGxTaETQYOd6b4e4Ag6\ny92abGna0bmIEb4+Tx9rQ10Uijh1POzvr/VTH4bbIPy9FbKrRsIQ24qDbNJRtOpE\nRAOsIl+HOBTb252nx1kIRN5hqQx272AJCbCjKx8egcUQKffFVVCI0nye09v5CK+a\nHiLJ8VOFx6w=\n-----END CERTIFICATE-----\n".freeze]
-  s.date = "2022-06-10"
-  s.files = ["lib/composite_io.rb".freeze, "lib/multipart/post.rb".freeze, "lib/multipart/post/composite_read_io.rb".freeze, "lib/multipart/post/multipartable.rb".freeze, "lib/multipart/post/parts.rb".freeze, "lib/multipart/post/upload_io.rb".freeze, "lib/multipart/post/version.rb".freeze, "lib/multipart_post.rb".freeze, "lib/multipartable.rb".freeze, "lib/net/http/post/multipart.rb".freeze, "lib/parts.rb".freeze]
+  s.authors = ["Nick Sieger".freeze, "Samuel Williams".freeze, "Olle Jonsson".freeze, "McClain Looney".freeze, "Lewis Cowles".freeze, "Gustav Ernberg".freeze, "Patrick Davey".freeze, "Steven Davidovitz".freeze, "Alex Koppel".freeze, "Ethan Turkeltaub".freeze, "Jagtesh Chadha".freeze, "Jason York".freeze, "Tohru Hashimoto".freeze, "Vincent Pell\u00E9".freeze, "hexfet".freeze, "Christine Yen".freeze, "David Moles".freeze, "Eric Hutzelman".freeze, "Feuda Nan".freeze, "Gerrit Riessen".freeze, "Jan Piotrowski".freeze, "Jan-Joost Spanjers".freeze, "Jason Moore".freeze, "Jeff Hodges".freeze, "Johannes Wagener".freeze, "Jordi Massaguer Pla".freeze, "Lachlan Priest".freeze, "Leo Cassarani".freeze, "Lonre Wang".freeze, "Luke Redpath".freeze, "Matt Colyer".freeze, "Mislav Marohnic\u0301".freeze, "Peter Goldstein".freeze, "Socrates Vicente".freeze, "Steffen Grunwald".freeze, "Takuya Noguchi".freeze, "Tim Barkley".freeze]
+  s.cert_chain = ["-----BEGIN CERTIFICATE-----\nMIIE2DCCA0CgAwIBAgIBATANBgkqhkiG9w0BAQsFADBhMRgwFgYDVQQDDA9zYW11\nZWwud2lsbGlhbXMxHTAbBgoJkiaJk/IsZAEZFg1vcmlvbnRyYW5zZmVyMRIwEAYK\nCZImiZPyLGQBGRYCY28xEjAQBgoJkiaJk/IsZAEZFgJuejAeFw0yMjA4MDYwNDUz\nMjRaFw0zMjA4MDMwNDUzMjRaMGExGDAWBgNVBAMMD3NhbXVlbC53aWxsaWFtczEd\nMBsGCgmSJomT8ixkARkWDW9yaW9udHJhbnNmZXIxEjAQBgoJkiaJk/IsZAEZFgJj\nbzESMBAGCgmSJomT8ixkARkWAm56MIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIB\nigKCAYEAomvSopQXQ24+9DBB6I6jxRI2auu3VVb4nOjmmHq7XWM4u3HL+pni63X2\n9qZdoq9xt7H+RPbwL28LDpDNflYQXoOhoVhQ37Pjn9YDjl8/4/9xa9+NUpl9XDIW\nsGkaOY0eqsQm1pEWkHJr3zn/fxoKPZPfaJOglovdxf7dgsHz67Xgd/ka+Wo1YqoE\ne5AUKRwUuvaUaumAKgPH+4E4oiLXI4T1Ff5Q7xxv6yXvHuYtlMHhYfgNn8iiW8WN\nXibYXPNP7NtieSQqwR/xM6IRSoyXKuS+ZNGDPUUGk8RoiV/xvVN4LrVm9upSc0ss\nRZ6qwOQmXCo/lLcDUxJAgG95cPw//sI00tZan75VgsGzSWAOdjQpFM0l4dxvKwHn\ntUeT3ZsAgt0JnGqNm2Bkz81kG4A2hSyFZTFA8vZGhp+hz+8Q573tAR89y9YJBdYM\nzp0FM4zwMNEUwgfRzv1tEVVUEXmoFCyhzonUUw4nE4CFu/sE3ffhjKcXcY//qiSW\nxm4erY3XAgMBAAGjgZowgZcwCQYDVR0TBAIwADALBgNVHQ8EBAMCBLAwHQYDVR0O\nBBYEFO9t7XWuFf2SKLmuijgqR4sGDlRsMC4GA1UdEQQnMCWBI3NhbXVlbC53aWxs\naWFtc0BvcmlvbnRyYW5zZmVyLmNvLm56MC4GA1UdEgQnMCWBI3NhbXVlbC53aWxs\naWFtc0BvcmlvbnRyYW5zZmVyLmNvLm56MA0GCSqGSIb3DQEBCwUAA4IBgQB5sxkE\ncBsSYwK6fYpM+hA5B5yZY2+L0Z+27jF1pWGgbhPH8/FjjBLVn+VFok3CDpRqwXCl\nxCO40JEkKdznNy2avOMra6PFiQyOE74kCtv7P+Fdc+FhgqI5lMon6tt9rNeXmnW/\nc1NaMRdxy999hmRGzUSFjozcCwxpy/LwabxtdXwXgSay4mQ32EDjqR1TixS1+smp\n8C/NCWgpIfzpHGJsjvmH2wAfKtTTqB9CVKLCWEnCHyCaRVuKkrKjqhYCdmMBqCws\nJkxfQWC+jBVeG9ZtPhQgZpfhvh+6hMhraUYRQ6XGyvBqEUe+yo6DKIT3MtGE2+CP\neX9i9ZWBydWb8/rvmwmX2kkcBbX0hZS1rcR593hGc61JR6lvkGYQ2MYskBveyaxt\nQ2K9NVun/S785AP05vKkXZEFYxqG6EW012U4oLcFl5MySFajYXRYbuUpH6AY+HP8\nvoD0MPg1DssDLKwXyt1eKD/+Fq0bFWhwVM/1XiAXL7lyYUyOq24KHgQ2Csg=\n-----END CERTIFICATE-----\n".freeze]
+  s.date = "2023-01-26"
+  s.files = ["changelog.md".freeze, "lib/composite_io.rb".freeze, "lib/multipart/post.rb".freeze, "lib/multipart/post/composite_read_io.rb".freeze, "lib/multipart/post/multipartable.rb".freeze, "lib/multipart/post/parts.rb".freeze, "lib/multipart/post/upload_io.rb".freeze, "lib/multipart/post/version.rb".freeze, "lib/multipart_post.rb".freeze, "lib/multipartable.rb".freeze, "lib/net/http/post/multipart.rb".freeze, "lib/parts.rb".freeze, "license.md".freeze, "readme.md".freeze]
   s.homepage = "https://github.com/socketry/multipart-post".freeze
   s.licenses = ["MIT".freeze]
   s.required_ruby_version = Gem::Requirement.new(">= 2.3.0".freeze)
@@ -26,9 +26,11 @@ Gem::Specification.new do |s|
 
   if s.respond_to? :add_runtime_dependency then
     s.add_development_dependency(%q<bundler>.freeze, [">= 0"])
+    s.add_development_dependency(%q<covered>.freeze, [">= 0"])
     s.add_development_dependency(%q<rspec>.freeze, ["~> 3.4"])
   else
     s.add_dependency(%q<bundler>.freeze, [">= 0"])
+    s.add_dependency(%q<covered>.freeze, [">= 0"])
     s.add_dependency(%q<rspec>.freeze, ["~> 3.4"])
   end
 end
diff --git a/readme.md b/readme.md
new file mode 100644
index 0000000..84d22c8
--- /dev/null
+++ b/readme.md
@@ -0,0 +1,170 @@
+# Multipart::Post
+
+Adds a streamy multipart form post capability to `Net::HTTP`. Also supports other
+methods besides `POST`.
+
+[![Development Status](https://github.com/socketry/multipart-post/workflows/Test/badge.svg)](https://github.com/socketry/multipart-post/actions?workflow=Test)
+
+## Features/Problems
+
+  - Appears to actually work. A good feature to have.
+  - Encapsulates posting of file/binary parts and name/value parameter parts, similar to
+    most browsers' file upload forms.
+  - Provides an `UploadIO` helper class to prepare IO objects for inclusion in the params
+    hash of the multipart post object.
+
+## Installation
+
+``` shell
+bundle add multipart-post
+```
+
+## Usage
+
+``` ruby
+require 'net/http/post/multipart'
+
+url = URI.parse('http://www.example.com/upload')
+File.open("./image.jpg") do |jpg|
+  req = Net::HTTP::Post::Multipart.new url.path,
+    "file" => UploadIO.new(jpg, "image/jpeg", "image.jpg")
+  res = Net::HTTP.start(url.host, url.port) do |http|
+    http.request(req)
+  end
+end
+```
+
+To post multiple files or attachments, simply include multiple parameters with
+`UploadIO` values:
+
+``` ruby
+require 'net/http/post/multipart'
+
+url = URI.parse('http://www.example.com/upload')
+req = Net::HTTP::Post::Multipart.new url.path,
+  "file1" => UploadIO.new(File.new("./image.jpg"), "image/jpeg", "image.jpg"),
+  "file2" => UploadIO.new(File.new("./image2.jpg"), "image/jpeg", "image2.jpg")
+res = Net::HTTP.start(url.host, url.port) do |http|
+  http.request(req)
+end
+```
+
+To post files with other normal, non-file params such as input values, you need to pass hashes to the `Multipart.new` method.
+
+In Rails 4 for example:
+
+``` ruby
+def model_params
+  require_params = params.require(:model).permit(:param_one, :param_two, :param_three, :avatar)
+  require_params[:avatar] = model_params[:avatar].present? ? UploadIO.new(model_params[:avatar].tempfile, model_params[:avatar].content_type, model_params[:avatar].original_filename) : nil
+  require_params
+end
+
+require 'net/http/post/multipart'
+
+url = URI.parse('http://www.example.com/upload')
+Net::HTTP.start(url.host, url.port) do |http|
+  req = Net::HTTP::Post::Multipart.new(url, model_params)
+  key = "authorization_key"
+  req.add_field("Authorization", key) #add to Headers
+  http.use_ssl = (url.scheme == "https")
+  http.request(req)
+end
+```
+
+Or in plain ruby:
+
+``` ruby
+def params(file)
+  params = { "description" => "A nice picture!" }
+  params[:datei] = UploadIO.new(file, "image/jpeg", "image.jpg")
+  params
+end
+
+url = URI.parse('http://www.example.com/upload')
+File.open("./image.jpg") do |file|
+  req = Net::HTTP::Post::Multipart.new(url.path, params(file))
+  res = Net::HTTP.start(url.host, url.port) do |http|
+    return http.request(req).body
+  end
+end
+```
+
+### Parts Headers
+
+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.
+
+You may optionally configure the headers `Content-Type` and `Content-ID` for both ParamPart and FilePart by passing in a `parts` header.
+
+For example:
+
+``` ruby
+url = URI.parse('http://www.example.com/upload')
+
+params = {
+  "file_metadata_01" => { "description" => "A nice picture!" },
+  "file_content_01"  => UploadIO.new(file, "image/jpeg", "image.jpg")
+}
+
+headers = {
+  'parts': {
+    'file_metadata_01': {
+      'Content-Type' => "application/json"
+      }
+    }
+  }
+
+req = Net::HTTP::Post::Multipart.new(uri, params, headers)
+```
+
+This would configure the `file_metadata_01` part to include `Content-Type`
+
+    Content-Disposition: form-data; name="file_metadata_01"
+    Content-Type: application/json
+      {
+        "description" => "A nice picture!" 
+      }
+
+#### Custom Parts Headers
+
+*For FileParts only.*
+
+You can include any number of custom parts headers in addition to `Content-Type` and `Content-ID`.
+
+``` ruby
+headers = {
+  'parts': {
+    'file_metadata_01': {
+      'Content-Type' => "application/json",
+      'My-Custom-Header' => "Yo Yo!"
+    }
+  }
+}
+```
+
+### Debugging
+
+You can debug requests and responses (e.g. status codes) for all requests by adding the following code:
+
+``` ruby
+http = Net::HTTP.new(uri.host, uri.port)
+http.set_debug_output($stdout)
+```
+
+## Versioning
+
+This library aims to adhere to [Semantic Versioning 2.0.0](http://semver.org/).
+Violations of this scheme should be reported as bugs. Specifically,
+if a minor or patch version is released that breaks backward
+compatibility, a new version should be immediately released that
+restores compatibility. Breaking changes to the public API will
+only be introduced with new major versions.
+
+As a result of this policy, you can (and should) specify a
+dependency on this gem using the [Pessimistic Version Constraint](http://guides.rubygems.org/patterns/#pessimistic-version-constraint) with two digits of precision.
+
+For example:
+
+``` ruby
+spec.add_dependency 'multipart-post', '~> 2.1'
+```

Debdiff

[The following lists of changes regard files as different if they have different names, permissions or owners.]

Files in second set of .debs but not in first

-rw-r--r--  root/root   /usr/share/doc/ruby-multipart-post/changelog.gz
-rw-r--r--  root/root   /usr/share/rubygems-integration/all/gems/multipart-post-2.3.0/lib/composite_io.rb
-rw-r--r--  root/root   /usr/share/rubygems-integration/all/gems/multipart-post-2.3.0/lib/multipart/post.rb
-rw-r--r--  root/root   /usr/share/rubygems-integration/all/gems/multipart-post-2.3.0/lib/multipart/post/composite_read_io.rb
-rw-r--r--  root/root   /usr/share/rubygems-integration/all/gems/multipart-post-2.3.0/lib/multipart/post/multipartable.rb
-rw-r--r--  root/root   /usr/share/rubygems-integration/all/gems/multipart-post-2.3.0/lib/multipart/post/parts.rb
-rw-r--r--  root/root   /usr/share/rubygems-integration/all/gems/multipart-post-2.3.0/lib/multipart/post/upload_io.rb
-rw-r--r--  root/root   /usr/share/rubygems-integration/all/gems/multipart-post-2.3.0/lib/multipart/post/version.rb
-rw-r--r--  root/root   /usr/share/rubygems-integration/all/gems/multipart-post-2.3.0/lib/multipart_post.rb
-rw-r--r--  root/root   /usr/share/rubygems-integration/all/gems/multipart-post-2.3.0/lib/multipartable.rb
-rw-r--r--  root/root   /usr/share/rubygems-integration/all/gems/multipart-post-2.3.0/lib/net/http/post/multipart.rb
-rw-r--r--  root/root   /usr/share/rubygems-integration/all/gems/multipart-post-2.3.0/lib/parts.rb
-rw-r--r--  root/root   /usr/share/rubygems-integration/all/specifications/multipart-post-2.3.0.gemspec

Files in first set of .debs but not in second

-rw-r--r--  root/root   /usr/share/rubygems-integration/all/gems/multipart-post-2.2.3/lib/composite_io.rb
-rw-r--r--  root/root   /usr/share/rubygems-integration/all/gems/multipart-post-2.2.3/lib/multipart/post.rb
-rw-r--r--  root/root   /usr/share/rubygems-integration/all/gems/multipart-post-2.2.3/lib/multipart/post/composite_read_io.rb
-rw-r--r--  root/root   /usr/share/rubygems-integration/all/gems/multipart-post-2.2.3/lib/multipart/post/multipartable.rb
-rw-r--r--  root/root   /usr/share/rubygems-integration/all/gems/multipart-post-2.2.3/lib/multipart/post/parts.rb
-rw-r--r--  root/root   /usr/share/rubygems-integration/all/gems/multipart-post-2.2.3/lib/multipart/post/upload_io.rb
-rw-r--r--  root/root   /usr/share/rubygems-integration/all/gems/multipart-post-2.2.3/lib/multipart/post/version.rb
-rw-r--r--  root/root   /usr/share/rubygems-integration/all/gems/multipart-post-2.2.3/lib/multipart_post.rb
-rw-r--r--  root/root   /usr/share/rubygems-integration/all/gems/multipart-post-2.2.3/lib/multipartable.rb
-rw-r--r--  root/root   /usr/share/rubygems-integration/all/gems/multipart-post-2.2.3/lib/net/http/post/multipart.rb
-rw-r--r--  root/root   /usr/share/rubygems-integration/all/gems/multipart-post-2.2.3/lib/parts.rb
-rw-r--r--  root/root   /usr/share/rubygems-integration/all/specifications/multipart-post-2.2.3.gemspec

No differences were encountered in the control files

More details

Full run details