From 3d75246a42e9fc874c2188ff0fb388d79cf83d95 Mon Sep 17 00:00:00 2001 From: Nicolas Rodriguez Date: Sat, 28 Mar 2026 02:11:33 +0100 Subject: [PATCH 1/7] Move dev dependencies to Gemfile --- Gemfile | 12 ++++++++++++ mailgun.gemspec | 13 ------------- 2 files changed, 12 insertions(+), 13 deletions(-) diff --git a/Gemfile b/Gemfile index 33b0fb1..5307ecc 100644 --- a/Gemfile +++ b/Gemfile @@ -7,3 +7,15 @@ gemspec gem 'json', '~> 2.1' gem 'mini_mime' +gem 'pry', '~> 0.16.0' +gem 'rails' +gem 'rake', '~> 13.3.1' +gem 'rspec', '~> 3.13.0' +gem 'rspec-its', '~> 2.0.0' +gem 'rubocop' +gem 'rubocop-rake' +gem 'rubocop-rspec' +gem 'simplecov' +gem 'simplecov-json' +gem 'vcr', '~> 6.4.0' +gem 'webmock', '~> 3.7' diff --git a/mailgun.gemspec b/mailgun.gemspec index 5fbd3ee..53f5eac 100644 --- a/mailgun.gemspec +++ b/mailgun.gemspec @@ -27,19 +27,6 @@ Gem::Specification.new do |spec| spec.required_ruby_version = '>= 3.0.0' - spec.add_development_dependency 'bundler', '>= 1.16.2' - spec.add_development_dependency 'pry', '~> 0.16.0' - spec.add_development_dependency 'rails' - spec.add_development_dependency 'rake', '~> 13.3.1' - spec.add_development_dependency 'rspec', '~> 3.13.0' - spec.add_development_dependency 'rspec-its', '~> 2.0.0' - spec.add_development_dependency 'rubocop' - spec.add_development_dependency 'rubocop-rake' - spec.add_development_dependency 'rubocop-rspec' - spec.add_development_dependency 'simplecov' - spec.add_development_dependency 'simplecov-json' - spec.add_development_dependency 'vcr', '~> 6.4.0' - spec.add_development_dependency 'webmock', '~> 3.7' spec.add_dependency 'faraday', '~> 2.1' spec.add_dependency 'faraday-multipart', '< 2' spec.add_dependency 'mini_mime' From caf627089ae1c28f87e3f0cf1fee8592cfde73b0 Mon Sep 17 00:00:00 2001 From: Nicolas Rodriguez Date: Sat, 28 Mar 2026 02:12:35 +0100 Subject: [PATCH 2/7] Cleanup mailgun.gemspec --- mailgun.gemspec | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/mailgun.gemspec b/mailgun.gemspec index 53f5eac..5abd340 100644 --- a/mailgun.gemspec +++ b/mailgun.gemspec @@ -1,8 +1,6 @@ # frozen_string_literal: true -lib = File.expand_path('lib', __dir__) -$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib) -require 'mailgun/version' +require_relative 'lib/mailgun/version' Gem::Specification.new do |spec| spec.name = 'mailgun-ruby' @@ -20,10 +18,7 @@ Gem::Specification.new do |spec| spec.metadata['documentation_uri'] = 'https://documentation.mailgun.com/' spec.metadata['source_code_uri'] = 'https://github.com/mailgun/mailgun-ruby' - spec.files = `git ls-files -z`.split("\x0") - spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) } - spec.test_files = spec.files.grep(%r{^(test|spec|features)/}) - spec.require_paths = ['lib'] + spec.files = `git ls-files -z`.split("\x0") spec.required_ruby_version = '>= 3.0.0' From db31fb987176fc6456c071f12b49dd9fe747f1b2 Mon Sep 17 00:00:00 2001 From: Nicolas Rodriguez Date: Sat, 28 Mar 2026 02:17:20 +0100 Subject: [PATCH 3/7] Lightweight built gem --- mailgun.gemspec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mailgun.gemspec b/mailgun.gemspec index 5abd340..c6b08b4 100644 --- a/mailgun.gemspec +++ b/mailgun.gemspec @@ -18,7 +18,7 @@ Gem::Specification.new do |spec| spec.metadata['documentation_uri'] = 'https://documentation.mailgun.com/' spec.metadata['source_code_uri'] = 'https://github.com/mailgun/mailgun-ruby' - spec.files = `git ls-files -z`.split("\x0") + spec.files = Dir['README.md', 'LICENSE', 'CHANGELOG.md', 'lib/**/*.rb'] spec.required_ruby_version = '>= 3.0.0' From f782d66b6279ecb4ba12a07b7aeaaee36126dded Mon Sep 17 00:00:00 2001 From: Nicolas Rodriguez Date: Sat, 28 Mar 2026 02:18:02 +0100 Subject: [PATCH 4/7] Add some bundler binstubs (bin/rspec is faster to type than bundle exec rspec) --- .rubocop.yml | 4 +++- bin/rake | 16 ++++++++++++++++ bin/rspec | 16 ++++++++++++++++ bin/rubocop | 16 ++++++++++++++++ 4 files changed, 51 insertions(+), 1 deletion(-) create mode 100755 bin/rake create mode 100755 bin/rspec create mode 100755 bin/rubocop diff --git a/.rubocop.yml b/.rubocop.yml index 909d0f3..36b3a48 100644 --- a/.rubocop.yml +++ b/.rubocop.yml @@ -1,6 +1,8 @@ AllCops: NewCops: disable SuggestExtensions: false + Exclude: + - bin/* plugins: - rubocop-rspec @@ -65,4 +67,4 @@ RSpec/SpecFilePathFormat: RSpec/ContextWording: Enabled: false RSpec/OverwritingSetup: - Enabled: false \ No newline at end of file + Enabled: false diff --git a/bin/rake b/bin/rake new file mode 100755 index 0000000..9efbee9 --- /dev/null +++ b/bin/rake @@ -0,0 +1,16 @@ +#!/usr/bin/env ruby +# frozen_string_literal: true + +# +# This file was generated by Bundler. +# +# The application 'rake' is installed as part of a gem, and +# this file is here to facilitate running it. +# + +ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../Gemfile", __dir__) + +require "rubygems" +require "bundler/setup" + +load Gem.bin_path("rake", "rake") diff --git a/bin/rspec b/bin/rspec new file mode 100755 index 0000000..93e191c --- /dev/null +++ b/bin/rspec @@ -0,0 +1,16 @@ +#!/usr/bin/env ruby +# frozen_string_literal: true + +# +# This file was generated by Bundler. +# +# The application 'rspec' is installed as part of a gem, and +# this file is here to facilitate running it. +# + +ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../Gemfile", __dir__) + +require "rubygems" +require "bundler/setup" + +load Gem.bin_path("rspec-core", "rspec") diff --git a/bin/rubocop b/bin/rubocop new file mode 100755 index 0000000..d73598d --- /dev/null +++ b/bin/rubocop @@ -0,0 +1,16 @@ +#!/usr/bin/env ruby +# frozen_string_literal: true + +# +# This file was generated by Bundler. +# +# The application 'rubocop' is installed as part of a gem, and +# this file is here to facilitate running it. +# + +ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../Gemfile", __dir__) + +require "rubygems" +require "bundler/setup" + +load Gem.bin_path("rubocop", "rubocop") From e8a3a3df58aff75db72e65082e5cc93a24d8b6fb Mon Sep 17 00:00:00 2001 From: Nicolas Rodriguez Date: Sat, 28 Mar 2026 02:18:38 +0100 Subject: [PATCH 5/7] Run all specs by default when using rake to run tests --- Rakefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Rakefile b/Rakefile index 64831bc..be9a038 100644 --- a/Rakefile +++ b/Rakefile @@ -29,4 +29,4 @@ RSpec::Core::RakeTask.new('spec:all') do |t| t.pattern = 'spec/**/*_spec.rb' end -task default: 'spec:unit' +task default: 'spec:all' From b3c6fd48c8978200ba128171d778fed17cdf5849 Mon Sep 17 00:00:00 2001 From: Nicolas Rodriguez Date: Sat, 28 Mar 2026 02:21:18 +0100 Subject: [PATCH 6/7] Use official Simplecov JSON formatter See: https://github.com/simplecov-ruby/simplecov/tree/main?tab=readme-ov-file#json-formatter --- Gemfile | 1 - spec/spec_helper.rb | 3 ++- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Gemfile b/Gemfile index 5307ecc..ceae01e 100644 --- a/Gemfile +++ b/Gemfile @@ -16,6 +16,5 @@ gem 'rubocop' gem 'rubocop-rake' gem 'rubocop-rspec' gem 'simplecov' -gem 'simplecov-json' gem 'vcr', '~> 6.4.0' gem 'webmock', '~> 3.7' diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index 16dd7ef..fdd97a1 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -1,7 +1,8 @@ # frozen_string_literal: true require 'simplecov' -require 'simplecov-json' +require 'simplecov_json_formatter' + SimpleCov.formatters = SimpleCov::Formatter::MultiFormatter.new( [ SimpleCov::Formatter::HTMLFormatter, From c86ec5810b8c75f1f03ed209bf497ad31ea1b792 Mon Sep 17 00:00:00 2001 From: Nicolas Rodriguez Date: Sat, 28 Mar 2026 02:22:48 +0100 Subject: [PATCH 7/7] Add rubocop-performance gem, fix Rubocop offenses --- .rubocop.yml | 1 + Gemfile | 1 + lib/mailgun/client.rb | 2 +- lib/mailgun/helpers/api_version_checker.rb | 4 ++-- lib/mailgun/response.rb | 2 +- 5 files changed, 6 insertions(+), 4 deletions(-) diff --git a/.rubocop.yml b/.rubocop.yml index 36b3a48..c75c9ca 100644 --- a/.rubocop.yml +++ b/.rubocop.yml @@ -5,6 +5,7 @@ AllCops: - bin/* plugins: + - rubocop-performance - rubocop-rspec - rubocop-rake diff --git a/Gemfile b/Gemfile index ceae01e..42764f4 100644 --- a/Gemfile +++ b/Gemfile @@ -13,6 +13,7 @@ gem 'rake', '~> 13.3.1' gem 'rspec', '~> 3.13.0' gem 'rspec-its', '~> 2.0.0' gem 'rubocop' +gem 'rubocop-performance' gem 'rubocop-rake' gem 'rubocop-rspec' gem 'simplecov' diff --git a/lib/mailgun/client.rb b/lib/mailgun/client.rb index 0e84e78..5ff36f7 100644 --- a/lib/mailgun/client.rb +++ b/lib/mailgun/client.rb @@ -27,7 +27,7 @@ def initialize(api_key = Mailgun.api_key, 'Accept' => '*/*' } } - request_options.merge!(request: { timeout: timeout }) if timeout + request_options[:request] = { timeout: timeout } if timeout @http_client = build_http_client(api_key, request_options) diff --git a/lib/mailgun/helpers/api_version_checker.rb b/lib/mailgun/helpers/api_version_checker.rb index 463bf3d..daf454a 100644 --- a/lib/mailgun/helpers/api_version_checker.rb +++ b/lib/mailgun/helpers/api_version_checker.rb @@ -13,7 +13,7 @@ def requires_api_version(version, *method_names) define_method(method_name) do |*args, **kwargs, &block| warn_unless_api_version(version) - original_method.bind(self).call(*args, **kwargs, &block) + original_method.bind_call(self, *args, **kwargs, &block) end end end @@ -24,7 +24,7 @@ def enforces_api_version(version, *method_names) define_method(method_name) do |*args, **kwargs, &block| require_api_version(version) - original_method.bind(self).call(*args, **kwargs, &block) + original_method.bind_call(self, *args, **kwargs, &block) end end end diff --git a/lib/mailgun/response.rb b/lib/mailgun/response.rb index bc0d2fd..646f299 100644 --- a/lib/mailgun/response.rb +++ b/lib/mailgun/response.rb @@ -65,7 +65,7 @@ def to_yaml! # # @return [Boolean] A boolean that binarizes the response status result. def success? - (200..299).include?(status) + (200..299).cover?(status) end end end