diff --git a/lib/plivo/resources/calls.rb b/lib/plivo/resources/calls.rb index 116d5e03..e1f791fc 100644 --- a/lib/plivo/resources/calls.rb +++ b/lib/plivo/resources/calls.rb @@ -282,8 +282,8 @@ def create(from, to, answer_url, answer_method = 'POST', options = nil) true, %w[GET POST]) params = { - from: from, - to: to.join('<'), + from: format_phone_number(from), + to: to.map{|x| format_phone_number(x)}.join('<'), answer_url: answer_url, answer_method: answer_method } @@ -397,7 +397,6 @@ def each # - To filter out those numbers that contain a particular number sequence, use to_number={ sequence} # - To filter out a number that matches an exact number, use to_number={ exact_number} def list_live(options = nil) - if options.nil? options = {} else diff --git a/lib/plivo/resources/messages.rb b/lib/plivo/resources/messages.rb index a0f4b75c..8b6f14ec 100644 --- a/lib/plivo/resources/messages.rb +++ b/lib/plivo/resources/messages.rb @@ -83,8 +83,8 @@ def create(src, dst, text, options = nil, powerpack_uuid = nil) end params = { - src: src, - dst: dst.join('<'), + src: format_phone_number(src), + dst: dst.map{|x| format_phone_number(x)}.join('<'), text: text, powerpack_uuid: powerpack_uuid } diff --git a/lib/plivo/utils.rb b/lib/plivo/utils.rb index d0ea0304..0b90fd8b 100644 --- a/lib/plivo/utils.rb +++ b/lib/plivo/utils.rb @@ -7,6 +7,7 @@ module Plivo module Utils module_function + VANITY_4_LETTERS_KEYS_REGEX = /[SVYZ]/.freeze TYPE_WHITELIST = [Integer] TYPE_WHITELIST.push(Fixnum, Bignum) unless 1.class == Integer @@ -107,5 +108,27 @@ def valid_signature?(uri, nonce, signature, auth_token) sha256_digest = OpenSSL::Digest.new('sha256') Base64.encode64(OpenSSL::HMAC.digest(sha256_digest, auth_token, data_to_sign)).strip() == signature end + + def format_phone_number(number) + return if number.nil? + formatted_num = vanity_conversion(number) + formatted_num = formatted_num.gsub(/[^0-9]/, '') + if formatted_num.length >=7 && formatted_num.length <= 14 + return '+' + formatted_num.to_s + else + raise_invalid_request("Please enter a valid phone number") + end + end + + def vanity_conversion(phone) + return phone.gsub(Regexp.new('[a-zA-Z]')) do |c| + c.upcase! + # subtract "A" + n = (c.ord - 65) / 3 + # account for #7 & #9 which have 4 chars + n -= 1 if c.match(VANITY_4_LETTERS_KEYS_REGEX) + (n + 2).to_s + end + end end end diff --git a/spec/resource_messages_spec.rb b/spec/resource_messages_spec.rb index 3670f8e7..76d6fcbe 100644 --- a/spec/resource_messages_spec.rb +++ b/spec/resource_messages_spec.rb @@ -103,8 +103,8 @@ def to_json_list(list_object) compare_requests(uri: '/v1/Account/MAXXXXXXXXXXXXXXXXXX/Message/', method: 'POST', data: { - src: '9898989890', - dst: '9090909090<9898989898', + src: '+9898989890', + dst: '+9090909090<+9898989898', text: 'message', powerpack_uuid: nil, type: 'sms', @@ -120,8 +120,8 @@ def to_json_list(list_object) expect do @api.messages .create( - '9898989898', - %w[9090909090 9898989898], + '+9898989898', + %w[+9090909090 +9898989898], 'message', type: 'sms', url: 'http://url.com',