Skip to content
Merged
Show file tree
Hide file tree
Changes from 13 commits
Commits
Show all changes
32 commits
Select commit Hold shift + click to select a range
1126073
fix: Regional API domain processing
manisha1997 Nov 26, 2025
2ae48ae
Merge branch 'main' into regional-api-domain-processing
manisha1997 Nov 26, 2025
48dac8e
fix: Regional API domain processing
manisha1997 Nov 26, 2025
17f36ef
fix: Regional API domain processing
manisha1997 Nov 26, 2025
dd656f4
fix: Regional API domain processing
manisha1997 Nov 26, 2025
4e4b1b8
fix: Regional API domain processing
manisha1997 Nov 26, 2025
86f84f4
fix: Regional API domain processing
manisha1997 Nov 26, 2025
9c59209
fix: Regional API domain processing
manisha1997 Nov 26, 2025
b5dbfe1
fix: Regional API domain processing
manisha1997 Nov 26, 2025
f2e6ade
fix: Regional API domain processing
manisha1997 Nov 26, 2025
ceb2582
fix: Regional API domain processing
manisha1997 Nov 26, 2025
19ef793
fix: Regional API domain processing
manisha1997 Nov 26, 2025
f438b4b
fix: Regional API domain processing
manisha1997 Nov 26, 2025
0b186ad
fix: Regional API domain processing
manisha1997 Nov 28, 2025
4cddb05
fix: Regional API domain processing
manisha1997 Nov 28, 2025
8cb0b4f
fix: Regional API domain processing
manisha1997 Nov 28, 2025
bdf1b93
fix: Regional API domain processing
manisha1997 Nov 28, 2025
7a53506
fix: Regional API domain processing
manisha1997 Nov 28, 2025
b8142a9
fix: Regional API domain processing
manisha1997 Nov 28, 2025
1787d5d
fix: Regional API domain processing
manisha1997 Nov 28, 2025
874ac88
fix: Regional API domain processing
manisha1997 Nov 28, 2025
3e08521
fix: Regional API domain processing
manisha1997 Nov 28, 2025
a4630a6
fix: Regional API domain processing
manisha1997 Nov 28, 2025
b22181c
fix: Regional API domain processing
manisha1997 Nov 28, 2025
1ebcbdb
fix: Regional API domain processing
manisha1997 Nov 28, 2025
da128d9
fix: Regional API domain processing
manisha1997 Nov 28, 2025
596c002
fix: Regional API domain processing
manisha1997 Nov 28, 2025
51300b5
fix: Regional API domain processing
manisha1997 Nov 28, 2025
87a98e6
fix: Regional API domain processing
manisha1997 Nov 28, 2025
d77d0a3
fix: Regional API domain processing
manisha1997 Nov 28, 2025
8f52d3b
fix: Regional API domain processing
manisha1997 Nov 28, 2025
5243245
fix: Regional API domain processing
manisha1997 Nov 28, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 23 additions & 2 deletions lib/twilio-ruby/base/client_base.rb
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,20 @@ module REST
class ClientBase
# rubocop:disable Style/ClassVars
@@default_region = 'us1'
@@region_mappings = {
'au1' => 'sydney',
'br1' => 'sao-paulo',
'de1' => 'frankfurt',
'ie1' => 'dublin',
'jp1' => 'tokyo',
'jp2' => 'osaka',
'sg1' => 'singapore',
'us1' => 'ashburn',
'us2' => 'umatilla'
}
# rubocop:enable Style/ClassVars

attr_accessor :http_client, :username, :password, :account_sid, :auth_token, :region, :edge, :logger,
attr_accessor :http_client, :username, :password, :account_sid, :auth_token, :region, :logger,
:user_agent_extensions, :credentials

# rubocop:disable Metrics/ParameterLists
Expand All @@ -14,7 +25,7 @@ def initialize(username = nil, password = nil, account_sid = nil, region = nil,
@username = username || Twilio.account_sid
@password = password || Twilio.auth_token
@region = region || Twilio.region
@edge = Twilio.edge
@edge = !region.nil? ? @@region_mappings[region] : nil
Copy link

Copilot AI Nov 28, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Multiple issues with this edge initialization logic:

  1. Ignores Twilio.edge completely: The old code was @edge = Twilio.edge, but now it's completely ignored. This is a breaking change that should either be documented or handled with a deprecation warning.

  2. Doesn't handle the Twilio.region fallback: When region parameter is nil but Twilio.region is set (line 27), the mapping won't work because the check uses the parameter region, not @region.

  3. Silent failure for unmapped regions: Returns nil for invalid/unmapped regions without any warning.

Suggested fix:

@region = region || Twilio.region
@edge = if @region && @@region_mappings[@region]
  @@region_mappings[@region]
elsif Twilio.edge
  warn '[DEPRECATION] Setting edge via Twilio.edge is deprecated. Use Twilio.region instead.'
  Twilio.edge
else
  nil
end
Suggested change
@edge = !region.nil? ? @@region_mappings[region] : nil
if @region && @@region_mappings[@region]
@edge = @@region_mappings[@region]
elsif Twilio.edge
warn '[DEPRECATION] Setting edge via Twilio.edge is deprecated. Use Twilio.region instead.'
@edge = Twilio.edge
else
warn "[WARN] Region '#{@region}' is not mapped to an edge. @edge set to nil." unless @region.nil?
@edge = nil
end

Copilot uses AI. Check for mistakes.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

+1

@account_sid = account_sid || @username
@auth_token = @password
@auth = [@username, @password]
Expand All @@ -23,6 +34,16 @@ def initialize(username = nil, password = nil, account_sid = nil, region = nil,
@user_agent_extensions = user_agent_extensions || []
end

def edge=(value)
warn '[DEPRECATION] `edge` is deprecated and will be removed in a future version. Use `region` instead.'
@edge = value
end

def edge
warn '[DEPRECATION] `edge` is deprecated and will be removed in a future version. Use `region` instead.'
@edge
end

def credential_provider(credential_provider = nil)
@credentials = credential_provider
self
Expand Down
24 changes: 23 additions & 1 deletion spec/rest/client_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@
expect(@client.auth_token).to eq('someToken')
expect(@client.http_client).to eq('someClient')
expect(@client.region).to eq('someRegion')
expect(@client.edge).to eq('someEdge')
expect(@client.edge).to eq(nil)
expect(@client.logger).to eq('someLogger')
end

Expand All @@ -41,6 +41,28 @@
expect(@client.logger).to eq('myLogger')
end

it 'uses the region edge mapping' do
@client = Twilio::REST::Client.new('myUser', 'myPassword', 'someSid', 'ie1', 'myClient', 'myLogger')
expect(@client.account_sid).to eq('someSid')
expect(@client.auth_token).to eq('myPassword')
expect(@client.region).to eq('ie1')
expect(@client.edge).to eq('dublin')
expect(@client.logger).to eq('myLogger')
end

it 'catches warning when setting edge' do
original_stderr = $stderr
$stderr = StringIO.new
begin
@client = Twilio::REST::Client.new
@client.edge = 'deprecatedEdge'
warnings = $stderr.string
expect(warnings).to include('[DEPRECATION] `edge` is deprecated and will be removed in a future version. Use `region` instead.')
ensure
$stderr = original_stderr
end
end

class MyVersion < Twilio::REST::Version
def initialize(domain)
super
Expand Down
Loading