class TwilioMock::Mocker

Constants

API_VERSION
HOST

Public Class Methods

new(username: Twilio.account_sid, token: Twilio.auth_token) click to toggle source
# File lib/twilio_mock/mocker.rb, line 12
def initialize(username: Twilio.account_sid, token: Twilio.auth_token)
  @username = username
  @token = token
end

Public Instance Methods

available_number(number = nil, params = nil) click to toggle source
# File lib/twilio_mock/mocker.rb, line 22
def available_number(number = nil, params = nil)
  query_string = params && params.any? ? Twilify.process(params).to_h.to_query : ''
  stub_request(:get, "#{base_twilio_url}/AvailablePhoneNumbers/US/Local.json?#{query_string}")
    .with(basic_auth: basic_auth)
    .to_return(status: 200, body: available_number_response(number), headers: {})
end
buy_number(attrs) click to toggle source
# File lib/twilio_mock/mocker.rb, line 29
def buy_number(attrs)
  prepare_stub(attrs, 'IncomingPhoneNumbers.json')
end
clean() click to toggle source
# File lib/twilio_mock/mocker.rb, line 37
def clean
  number_generator.clean
  messages_queue.clean
end
create_message(attrs) click to toggle source
# File lib/twilio_mock/mocker.rb, line 17
def create_message(attrs)
  messages_queue.add OpenStruct.new(attrs)
  prepare_stub(attrs, 'Messages.json')
end
messages() click to toggle source
# File lib/twilio_mock/mocker.rb, line 33
def messages
  messages_queue.messages
end

Private Instance Methods

available_number_response(number) click to toggle source
# File lib/twilio_mock/mocker.rb, line 69
def available_number_response(number)
  number ||= number_generator.generate
  {
    sid: @username,
    available_phone_numbers: [{ 'phone_number' => number }],
    meta: {
      key: 'available_phone_numbers'
    }
  }.to_json
end
base_twilio_url() click to toggle source
# File lib/twilio_mock/mocker.rb, line 58
def base_twilio_url
  "https://#{HOST}/#{API_VERSION}/Accounts/#{@username}"
end
basic_auth() click to toggle source
# File lib/twilio_mock/mocker.rb, line 50
def basic_auth
  [@username, @token]
end
messages_queue() click to toggle source
# File lib/twilio_mock/mocker.rb, line 84
def messages_queue
  MessagesQueue.instance
end
number_generator() click to toggle source
# File lib/twilio_mock/mocker.rb, line 80
def number_generator
  NumberGenerator.instance
end
prepare_stub(attrs, path) click to toggle source
# File lib/twilio_mock/mocker.rb, line 62
def prepare_stub(attrs, path)
  body = Twilify.process(attrs).map { |k, val| [k, val.to_s] }.to_h
  stub_request(:post, "#{base_twilio_url}/#{path}")
    .with(body: body, basic_auth: basic_auth)
    .to_return(status: 200, body: response, headers: {})
end
response() click to toggle source
# File lib/twilio_mock/mocker.rb, line 44
def response
  {
    sid: @username
  }.to_json
end
stub_request(method, url) click to toggle source
# File lib/twilio_mock/mocker.rb, line 54
def stub_request(method, url)
  WebMock.stub_request(method, url)
end