From fd98c848049e63177b0448bc5766342c261bad77 Mon Sep 17 00:00:00 2001 From: Michael Broshi Date: Thu, 27 Mar 2025 11:47:01 -0400 Subject: [PATCH] Update add_beta_version --- lib/stripe.rb | 14 +++++++++++--- test/stripe_test.rb | 27 ++++++++++++++++++++++----- 2 files changed, 33 insertions(+), 8 deletions(-) diff --git a/lib/stripe.rb b/lib/stripe.rb index a34fa0f8..c271f00d 100644 --- a/lib/stripe.rb +++ b/lib/stripe.rb @@ -160,11 +160,19 @@ module Stripe end def self.add_beta_version(beta_name, version) - if api_version.include?("; #{beta_name}=") - raise "Stripe version header #{api_version} already contains entry for beta #{beta_name}" + unless version.match?(/\Av\d+\z/) + raise ArgumentError, "Version must be in the format 'v' followed by a number (e.g., 'v3')" end - self.api_version = "#{api_version}; #{beta_name}=#{version}" + if api_version.include?("; #{beta_name}=") + current_version = api_version.match(/; #{beta_name}=v(\d+)/)[1].to_i + new_version = version[1..-1].to_i + return if new_version <= current_version # Keep the higher version, no update needed + + self.api_version = api_version.sub(/; #{beta_name}=v\d+/, "; #{beta_name}=#{version}") + else + self.api_version = "#{api_version}; #{beta_name}=#{version}" + end end class RawRequest diff --git a/test/stripe_test.rb b/test/stripe_test.rb index d856d505..13d7b6e9 100644 --- a/test/stripe_test.rb +++ b/test/stripe_test.rb @@ -129,16 +129,33 @@ class StripeTest < Test::Unit::TestCase assert_equal "https://other.stripe.com", Stripe.meter_events_base end - should "allow beta versions to be added once only" do + should "allow beta versions to be added multiple times" do Stripe.api_version = "2018-02-28" Stripe.add_beta_version("my_beta", "v2") assert_equal "2018-02-28; my_beta=v2", Stripe.api_version - err = assert_raises do - Stripe.add_beta_version("my_beta", "v1") - assert_equal(err, "Stripe version header 2018-02-28; my_beta=v2 already contains entry for beta my_beta") - end + # same version should be a no-op + Stripe.add_beta_version("my_beta", "v2") + assert_equal "2018-02-28; my_beta=v2", Stripe.api_version + + # higher version should use higher version + Stripe.add_beta_version("my_beta", "v5") + assert_equal "2018-02-28; my_beta=v5", Stripe.api_version + + # lower version should be a no-op + Stripe.add_beta_version("my_beta", "v4") + assert_equal "2018-02-28; my_beta=v5", Stripe.api_version + end + + should "allow append multiple beta names" do + Stripe.api_version = "2018-02-28" + + Stripe.add_beta_version("my_beta", "v2") + assert_equal "2018-02-28; my_beta=v2", Stripe.api_version + + Stripe.add_beta_version("my_beta_two", "v4") + assert_equal "2018-02-28; my_beta=v2; my_beta_two=v4", Stripe.api_version end should "allow verify_ssl_certs to be configured" do