From 7d39d7dc80746be47f1ed3f92504eecbea8a0077 Mon Sep 17 00:00:00 2001 From: tim-kos Date: Tue, 28 Apr 2026 18:09:15 +0200 Subject: [PATCH 1/6] ci: run supported MRI matrix and enable LFS checkout --- .github/workflows/ci.yml | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 3ecd823..04efa4a 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -13,15 +13,14 @@ jobs: strategy: matrix: ruby: - - 3.0 - 3.1 - 3.2 - 3.3 - - jruby - - truffleruby fail-fast: false steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 + with: + lfs: true - uses: actions/setup-node@v4 with: node-version: 20 @@ -53,7 +52,9 @@ jobs: TRANSLOADIT_KEY: ${{ secrets.TRANSLOADIT_KEY }} TRANSLOADIT_SECRET: ${{ secrets.TRANSLOADIT_SECRET }} steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 + with: + lfs: true - uses: ruby/setup-ruby@v1 with: ruby-version: 3.3 From 2795b6a58d561774a9f600c891232ae972b5e790 Mon Sep 17 00:00:00 2001 From: tim-kos Date: Tue, 28 Apr 2026 18:11:41 +0200 Subject: [PATCH 2/6] test: require minitest/mock for Ruby 3.2+ --- test/test_helper.rb | 1 + 1 file changed, 1 insertion(+) diff --git a/test/test_helper.rb b/test/test_helper.rb index ed79841..5ff41b3 100644 --- a/test/test_helper.rb +++ b/test/test_helper.rb @@ -13,6 +13,7 @@ end require "minitest/autorun" +require "minitest/mock" require "transloadit" require "vcr" require "open3" From 64285191c81b2e75ec3f96171e063c063a4053f3 Mon Sep 17 00:00:00 2001 From: tim-kos Date: Tue, 28 Apr 2026 18:12:11 +0200 Subject: [PATCH 3/6] ci: trigger workflow on latest test-helper fix From a33ea71b477c255589fa719e8fcd453cd778ee17 Mon Sep 17 00:00:00 2001 From: tim-kos Date: Tue, 28 Apr 2026 18:13:58 +0200 Subject: [PATCH 4/6] test: avoid minitest stub/mock dependency across Ruby versions --- test/test_helper.rb | 27 +++++++++++++++++++++++++- test/unit/test_transloadit.rb | 2 +- test/unit/transloadit/test_assembly.rb | 10 ++++++---- 3 files changed, 33 insertions(+), 6 deletions(-) diff --git a/test/test_helper.rb b/test/test_helper.rb index 5ff41b3..5f594f9 100644 --- a/test/test_helper.rb +++ b/test/test_helper.rb @@ -13,7 +13,6 @@ end require "minitest/autorun" -require "minitest/mock" require "transloadit" require "vcr" require "open3" @@ -73,3 +72,29 @@ def run_transloadit_sig(payload, key:, secret:, algorithm: nil) end Minitest::Test.include(TransloaditCliHelpers) + +module SingletonMethodOverrideHelpers + def with_singleton_method(target, name, implementation) + eigenclass = class << target + self + end + + backup = "__orig_#{name}_for_test__" + had_method = eigenclass.method_defined?(name) || eigenclass.private_method_defined?(name) + eigenclass.send(:alias_method, backup, name) if had_method + + target.define_singleton_method(name, &implementation) + yield + ensure + eigenclass = class << target + self + end + eigenclass.send(:remove_method, name) rescue nil + if had_method + eigenclass.send(:alias_method, name, backup) + eigenclass.send(:remove_method, backup) rescue nil + end + end +end + +Minitest::Test.include(SingletonMethodOverrideHelpers) diff --git a/test/unit/test_transloadit.rb b/test/unit/test_transloadit.rb index 867beeb..4a07589 100644 --- a/test/unit/test_transloadit.rb +++ b/test/unit/test_transloadit.rb @@ -109,7 +109,7 @@ it "must produce Transloadit-compatible JSON output" do fixed_time = Time.utc(2025, 10, 28, 0, 0, 0) - Time.stub :now, fixed_time do + with_singleton_method(Time, :now, proc { fixed_time }) do _(@transloadit.to_json).must_equal MultiJson.dump(@transloadit.to_hash) end end diff --git a/test/unit/transloadit/test_assembly.rb b/test/unit/transloadit/test_assembly.rb index 0202ca2..14fef21 100644 --- a/test/unit/transloadit/test_assembly.rb +++ b/test/unit/transloadit/test_assembly.rb @@ -146,12 +146,14 @@ it "must call the create! method with the same parameters" do VCR.use_cassette "submit_assembly" do file = open("lib/transloadit/version.rb") - mocker = Minitest::Mock.new - mocker.expect :call, nil, [file] - @assembly.stub :create!, mocker do + create_arg = nil + with_singleton_method(@assembly, :create!, proc { |arg| + create_arg = arg + nil + }) do @assembly.submit!(file) end - mocker.verify + _(create_arg).must_equal file end end end From 65e821ccabda543e260f425b0e11af4e4e61513c Mon Sep 17 00:00:00 2001 From: tim-kos Date: Tue, 28 Apr 2026 18:17:37 +0200 Subject: [PATCH 5/6] style: satisfy standardrb layout and rescue rules --- test/test_helper.rb | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/test/test_helper.rb b/test/test_helper.rb index 5f594f9..0e9d3bc 100644 --- a/test/test_helper.rb +++ b/test/test_helper.rb @@ -75,9 +75,7 @@ def run_transloadit_sig(payload, key:, secret:, algorithm: nil) module SingletonMethodOverrideHelpers def with_singleton_method(target, name, implementation) - eigenclass = class << target - self - end + eigenclass = target.singleton_class backup = "__orig_#{name}_for_test__" had_method = eigenclass.method_defined?(name) || eigenclass.private_method_defined?(name) @@ -86,13 +84,15 @@ def with_singleton_method(target, name, implementation) target.define_singleton_method(name, &implementation) yield ensure - eigenclass = class << target - self + eigenclass = target.singleton_class + if eigenclass.method_defined?(name) || eigenclass.private_method_defined?(name) + eigenclass.send(:remove_method, name) end - eigenclass.send(:remove_method, name) rescue nil if had_method eigenclass.send(:alias_method, name, backup) - eigenclass.send(:remove_method, backup) rescue nil + if eigenclass.method_defined?(backup) || eigenclass.private_method_defined?(backup) + eigenclass.send(:remove_method, backup) + end end end end From c2f6768cc590e14857932381bb67cf936ca15fe7 Mon Sep 17 00:00:00 2001 From: tim-kos Date: Tue, 28 Apr 2026 21:38:33 +0200 Subject: [PATCH 6/6] ci: align required Ruby version with tested matrix --- transloadit.gemspec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/transloadit.gemspec b/transloadit.gemspec index 4dbed07..691ebe5 100644 --- a/transloadit.gemspec +++ b/transloadit.gemspec @@ -16,7 +16,7 @@ Gem::Specification.new do |gem| gem.description = "The transloadit gem allows you to automate uploading files through the Transloadit REST API" gem.required_rubygems_version = ">= 2.2.0" - gem.required_ruby_version = ">= 3.0.0" + gem.required_ruby_version = ">= 3.1.0" gem.files = `git ls-files`.split("\n") gem.require_paths = %w[lib]