Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

WIP: allow using Twilio and SignalWire at the same time #83

Open
wants to merge 5 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
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
6 changes: 3 additions & 3 deletions lib/signalwire/rest/client.rb
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,12 @@ module Signalwire::REST
class Client < Twilio::REST::Client
def initialize(username = nil, password = nil, account_sid = nil, region = nil, http_client = Twilio::HTTP::Client.new, **args)
host = args.delete(:signalwire_space_url)
service_provider = args.delete(:service_provider)

unless host.nil?
Signalwire::Sdk.configure do |config|
config.hostname = host
config.hostname = host if host
config.service_provider = service_provider if service_provider
end
end

super(username, password, account_sid, region, http_client)
end
Expand Down
6 changes: 6 additions & 0 deletions lib/signalwire/sdk.rb
Original file line number Diff line number Diff line change
Expand Up @@ -14,10 +14,16 @@
module Signalwire
module Sdk
class << self
attr_accessor :configuration

def configuration
@configuration ||= Configuration.new
end

def reset
@configuration = Configuration.new
end

def configure
yield(configuration)
end
Expand Down
17 changes: 16 additions & 1 deletion lib/signalwire/sdk/configuration.rb
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,22 @@
module Signalwire
module Sdk
class Configuration
attr_accessor :hostname
attr_accessor :hostname, :service_provider

def initialize
@service_provider = 'signalwire' if self.service_provider.nil?
end

def configure
yield self
end


def reset_config
configure do |config|
config.service_provider = 'signalwire'
end
end
end
end
end
31 changes: 30 additions & 1 deletion lib/signalwire/sdk/domain.rb
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,37 @@
module Twilio
module REST
class Domain
attr_reader :client

def initialize(client)
@client = client
@host = nil
@base_url = nil
@port = nil
end

def absolute_url(uri)
"#{@base_url.chomp('/')}/#{uri.chomp('/').gsub(%r{^/(api/)/}, '')}"
if Signalwire::Sdk.configuration.service_provider == 'twilio'
"#{@base_url.chomp('/')}/#{uri.chomp('/').gsub(/^\//, '')}"
else
"#{@base_url.chomp('/')}/#{uri.chomp('/').gsub(%r{^/(api/)/}, '')}"
end
end

def request(method, uri, params = {}, data = {}, headers = {}, auth = nil, timeout = nil)
url = uri.match(/^http/) ? uri : absolute_url(uri)

@client.request(
@base_url,
@port,
method,
url,
params,
data,
headers,
auth,
timeout
)
end
end
end
Expand Down
15 changes: 11 additions & 4 deletions lib/signalwire/sdk/twilio_set_fax.rb
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,14 @@ class Fax < Domain
def initialize(twilio)
super

@host = ENV['SIGNALWIRE_HOST'] ||
Signalwire::Sdk.configuration.hostname ||
raise(ArgumentError,
'SignalWire Space URL is not configured. Enter your SignalWire Space domain via the '\
@host = if Signalwire::Sdk.configuration.service_provider == 'twilio'
'fax.twilio.com'
else
ENV['SIGNALWIRE_HOST'] || Signalwire::Sdk.configuration.hostname ||
raise(ArgumentError,
'SignalWire Space URL is not configured. Enter your SignalWire Space domain via the '\
'SIGNALWIRE_HOST environment variable, or hostname in the configuration.')
end

@base_url = "https://#{@host}"
@port = 443
Expand All @@ -26,6 +29,10 @@ def hostname
@host
end

def service_provider
Signalwire::Sdk.configuration.service_provider
end

attr_reader :account_sid

class V1 < Version
Expand Down
16 changes: 11 additions & 5 deletions lib/signalwire/sdk/twilio_set_host.rb
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,15 @@ class Api < Domain
def initialize(twilio)
super

@host = ENV['SIGNALWIRE_HOST'] ||
ENV['SIGNALWIRE_API_HOSTNAME'] ||
Signalwire::Sdk.configuration.hostname ||
raise(ArgumentError,
'SignalWire Space URL is not configured. Enter your SignalWire Space domain via the '\
@host = if Signalwire::Sdk.configuration.service_provider == 'twilio'
'api.twilio.com'
else
ENV['SIGNALWIRE_HOST'] || ENV['SIGNALWIRE_API_HOSTNAME'] || Signalwire::Sdk.configuration.hostname ||
raise(ArgumentError,
'SignalWire Space URL is not configured. Enter your SignalWire Space domain via the '\
'SIGNALWIRE_HOST or SIGNALWIRE_API_HOSTNAME environment variables, '\
'or hostname in the configuration.')
end

@base_url = "https://#{@host}"
@port = 443
Expand All @@ -24,6 +26,10 @@ def initialize(twilio)
def hostname
@host
end

def service_provider
Signalwire::Sdk.configuration.service_provider
end
end
end
end
8 changes: 6 additions & 2 deletions spec/signalwire/sdk/configuration_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -5,23 +5,27 @@
module Signalwire
RSpec.describe Sdk::Configuration do
describe '#hostname' do
it 'there is no default' do
it 'there is no default hostname but is a default service provider' do
expect(Sdk::Configuration.new.hostname).to eq nil
expect(Sdk::Configuration.new.service_provider).to eq 'signalwire'
end
end

describe '#hostname=' do
it 'can set value' do
config = Sdk::Configuration.new
config.hostname = 'test.signalwire.com'
config.service_provider = 'twilio'
expect(config.hostname).to eq('test.signalwire.com')
expect(config.service_provider).to eq('twilio')
end
end

describe 'setting up directly in the constructor' do
it 'sets the configuration in the constructor' do
client = Signalwire::REST::Client.new 'xyz123-xyz123-xyz123', 'PTxyz123-xyz123-xyz123', signalwire_space_url: 'test.signalwire.com'
client = Signalwire::REST::Client.new 'xyz123-xyz123-xyz123', 'PTxyz123-xyz123-xyz123', signalwire_space_url: 'test.signalwire.com', service_provider: 'twilio'
expect(Signalwire::Sdk.configuration.hostname).to eq('test.signalwire.com')
expect(Signalwire::Sdk.configuration.service_provider).to eq('twilio')
end
end
end
Expand Down
33 changes: 31 additions & 2 deletions spec/signalwire/sdk_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -4,17 +4,31 @@

RSpec.describe Signalwire::Sdk do
describe '#configure' do
it 'returns the configured hostname' do
it 'returns the configured hostname for signalwire' do
Signalwire::Sdk.configure do |config|
config.hostname = 'demo.signalwire.com'
end

twilio_client = Twilio::REST::Client.new
expect(twilio_client.api.hostname).to eq('demo.signalwire.com')
expect(twilio_client.fax.hostname).to eq('demo.signalwire.com')
expect(twilio_client.api.service_provider).to eq('signalwire')
end

it 'requires the hostname configuration to be set' do
it 'returns the configured hostname for twilio' do
Signalwire::Sdk.configure do |config|
# config.hostname = 'demo.signalwire.com'
config.service_provider = 'twilio'
end

twilio_client = Twilio::REST::Client.new
expect(twilio_client.api.hostname).to eq('api.twilio.com')
expect(twilio_client.fax.hostname).to eq('fax.twilio.com')
expect(twilio_client.api.service_provider).to eq('twilio')
end


it 'requires the hostname configuration to be set for signalwire' do
Signalwire::Sdk.configure do |config|
config.hostname = nil
end
Expand All @@ -23,5 +37,20 @@
Twilio::REST::Client.new.api
end.to raise_exception ArgumentError, /SignalWire Space URL is not configured/
end

it 'does not require the hostname configuration to be set for twilio' do
Signalwire::Sdk.configure do |config|
config.hostname = nil
config.service_provider = 'twilio'
end

expect do
Twilio::REST::Client.new.api
end.not_to raise_exception ArgumentError, /SignalWire Space URL is not configured/
end

after :each do
Signalwire::Sdk.reset
end
end
end