twilio_mock 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/lib/rest.rb +36 -0
- data/lib/twilio_lookup_mocker.rb +26 -0
- data/lib/twilio_mocker.rb +64 -0
- data/lib/twilio_number_generator.rb +21 -0
- metadata +121 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 00a6a986657d167465ce4b98b08c5ba79ec1cc1d
|
4
|
+
data.tar.gz: 73923634aca40b7300487b27a731567c4897a318
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: dbd3e06f261efb1aaa88ab2e70f80317a2de6a889980f86d7fdfbbdb68985bc29e3761771be4f163c82779c476628672747bb7e535525848048cc76dd1f15a6a
|
7
|
+
data.tar.gz: 7a16f1baf1dcf024c2af1d7e50c12784fa491a90a01273ff8f21dbd229c66da45d2c22b883f42d8eca92371f30b848c8b3395a1b69d81ddc5d939e7cebc6148a
|
data/lib/rest.rb
ADDED
@@ -0,0 +1,36 @@
|
|
1
|
+
require 'twilio-ruby'
|
2
|
+
require 'twilio_mocker'
|
3
|
+
|
4
|
+
module Twilio
|
5
|
+
module REST
|
6
|
+
class Messages < ListResource
|
7
|
+
def create(attrs)
|
8
|
+
TwilioMocker.new.stub_create_message(attrs)
|
9
|
+
super(attrs)
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
class IncomingPhoneNumbers < ListResource
|
14
|
+
def create(attrs)
|
15
|
+
TwilioMocker.new.stub_buy_number(attrs)
|
16
|
+
super(attrs)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
class AvailablePhoneNumbers < ListResource
|
21
|
+
def get(sid)
|
22
|
+
TwilioMocker.new.stub_available_numbers
|
23
|
+
super(sid)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
module Lookups
|
28
|
+
class PhoneNumbers < NextGenListResource
|
29
|
+
def get(number, query={})
|
30
|
+
TwilioLookupMocker.new.stub_lookup(number)
|
31
|
+
super(number, query)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require_relative './twilio_mocker'
|
2
|
+
|
3
|
+
class TwilioLookupMocker < TwilioMocker
|
4
|
+
API_VERSION = 'v1'.freeze
|
5
|
+
HOST = 'lookups.twilio.com'.freeze
|
6
|
+
|
7
|
+
def stub_lookup(number, country_code = nil)
|
8
|
+
stub_request(:get, "#{base_twilio_url}/PhoneNumbers/#{number}")
|
9
|
+
.with(headers: headers)
|
10
|
+
.to_return(status: 200, body: response(number, country_code), headers: {})
|
11
|
+
end
|
12
|
+
|
13
|
+
private
|
14
|
+
|
15
|
+
def response(number, country_code)
|
16
|
+
{
|
17
|
+
country_code: country_code.presence || 'US',
|
18
|
+
phone_number: number,
|
19
|
+
url: "#{base_twilio_url}/PhoneNumber/number"
|
20
|
+
}.to_json
|
21
|
+
end
|
22
|
+
|
23
|
+
def base_twilio_url
|
24
|
+
"https://#{HOST}/#{API_VERSION}"
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,64 @@
|
|
1
|
+
require 'twilio-ruby'
|
2
|
+
require 'webmock'
|
3
|
+
require 'twilio_number_generator'
|
4
|
+
|
5
|
+
class TwilioMocker
|
6
|
+
include Twilio::REST::Utils
|
7
|
+
|
8
|
+
API_VERSION = '2010-04-01'.freeze
|
9
|
+
HOST = 'api.twilio.com'.freeze
|
10
|
+
|
11
|
+
def initialize
|
12
|
+
@username = Twilio.account_sid
|
13
|
+
@token = Twilio.auth_token
|
14
|
+
end
|
15
|
+
|
16
|
+
def stub_create_message(attrs)
|
17
|
+
prepare_stub(attrs, 'Messages.json')
|
18
|
+
end
|
19
|
+
|
20
|
+
def stub_available_numbers
|
21
|
+
response_numbers = {
|
22
|
+
sid: @username,
|
23
|
+
available_phone_numbers: [{ 'PhoneNumber' => TwilioNumberGenerator.instance.generate }]
|
24
|
+
}.to_json
|
25
|
+
stub_request(:get, "#{base_twilio_url}/AvailablePhoneNumbers/US/Local.json")
|
26
|
+
.with(headers: headers, basic_auth: basic_auth)
|
27
|
+
.to_return(status: 200, body: response_numbers, headers: {})
|
28
|
+
end
|
29
|
+
|
30
|
+
def stub_buy_number(attrs)
|
31
|
+
prepare_stub(attrs, 'IncomingPhoneNumbers.json')
|
32
|
+
end
|
33
|
+
|
34
|
+
private
|
35
|
+
|
36
|
+
def response
|
37
|
+
{
|
38
|
+
sid: @username
|
39
|
+
}.to_json
|
40
|
+
end
|
41
|
+
|
42
|
+
def headers
|
43
|
+
Twilio::REST::Client::HTTP_HEADERS
|
44
|
+
end
|
45
|
+
|
46
|
+
def basic_auth
|
47
|
+
[@username, @token]
|
48
|
+
end
|
49
|
+
|
50
|
+
def stub_request(method, url)
|
51
|
+
WebMock.stub_request(method, url)
|
52
|
+
end
|
53
|
+
|
54
|
+
def base_twilio_url
|
55
|
+
"https://#{HOST}/#{API_VERSION}/Accounts/#{@username}"
|
56
|
+
end
|
57
|
+
|
58
|
+
def prepare_stub(attrs, path)
|
59
|
+
body = twilify(attrs).map { |k, val| [k, val.to_s] }.to_h
|
60
|
+
stub_request(:post, "#{base_twilio_url}/#{path}")
|
61
|
+
.with(body: body, headers: headers, basic_auth: basic_auth)
|
62
|
+
.to_return(status: 200, body: response, headers: {})
|
63
|
+
end
|
64
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
class TwilioNumberGenerator
|
2
|
+
include Singleton
|
3
|
+
|
4
|
+
BASE_TEST_NUMBER = '+1500555'.freeze
|
5
|
+
|
6
|
+
attr_reader :available_numbers
|
7
|
+
|
8
|
+
def initialize
|
9
|
+
@available_numbers = []
|
10
|
+
end
|
11
|
+
|
12
|
+
def generate
|
13
|
+
number = loop do
|
14
|
+
number = "#{BASE_TEST_NUMBER}#{rand(9999).to_s.rjust(4, '0')}"
|
15
|
+
unless @available_numbers.include?(number)
|
16
|
+
@available_numbers << number
|
17
|
+
break number
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
metadata
ADDED
@@ -0,0 +1,121 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: twilio_mock
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Maicol Bentancor
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2017-05-30 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: bundler
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.14'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.14'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: twilio-ruby
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '4.13'
|
34
|
+
- - ">="
|
35
|
+
- !ruby/object:Gem::Version
|
36
|
+
version: 4.13.0
|
37
|
+
type: :runtime
|
38
|
+
prerelease: false
|
39
|
+
version_requirements: !ruby/object:Gem::Requirement
|
40
|
+
requirements:
|
41
|
+
- - "~>"
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: '4.13'
|
44
|
+
- - ">="
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: 4.13.0
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: webmock
|
49
|
+
requirement: !ruby/object:Gem::Requirement
|
50
|
+
requirements:
|
51
|
+
- - "~>"
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '3.0'
|
54
|
+
- - ">="
|
55
|
+
- !ruby/object:Gem::Version
|
56
|
+
version: 3.0.1
|
57
|
+
type: :runtime
|
58
|
+
prerelease: false
|
59
|
+
version_requirements: !ruby/object:Gem::Requirement
|
60
|
+
requirements:
|
61
|
+
- - "~>"
|
62
|
+
- !ruby/object:Gem::Version
|
63
|
+
version: '3.0'
|
64
|
+
- - ">="
|
65
|
+
- !ruby/object:Gem::Version
|
66
|
+
version: 3.0.1
|
67
|
+
- !ruby/object:Gem::Dependency
|
68
|
+
name: rspec
|
69
|
+
requirement: !ruby/object:Gem::Requirement
|
70
|
+
requirements:
|
71
|
+
- - "~>"
|
72
|
+
- !ruby/object:Gem::Version
|
73
|
+
version: '3.6'
|
74
|
+
- - ">="
|
75
|
+
- !ruby/object:Gem::Version
|
76
|
+
version: 3.6.0
|
77
|
+
type: :development
|
78
|
+
prerelease: false
|
79
|
+
version_requirements: !ruby/object:Gem::Requirement
|
80
|
+
requirements:
|
81
|
+
- - "~>"
|
82
|
+
- !ruby/object:Gem::Version
|
83
|
+
version: '3.6'
|
84
|
+
- - ">="
|
85
|
+
- !ruby/object:Gem::Version
|
86
|
+
version: 3.6.0
|
87
|
+
description: ock for the twilio gem using webmock
|
88
|
+
email:
|
89
|
+
executables: []
|
90
|
+
extensions: []
|
91
|
+
extra_rdoc_files: []
|
92
|
+
files:
|
93
|
+
- lib/rest.rb
|
94
|
+
- lib/twilio_lookup_mocker.rb
|
95
|
+
- lib/twilio_mocker.rb
|
96
|
+
- lib/twilio_number_generator.rb
|
97
|
+
homepage:
|
98
|
+
licenses:
|
99
|
+
- MIT
|
100
|
+
metadata: {}
|
101
|
+
post_install_message:
|
102
|
+
rdoc_options: []
|
103
|
+
require_paths:
|
104
|
+
- lib
|
105
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
106
|
+
requirements:
|
107
|
+
- - ">="
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: '0'
|
110
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
111
|
+
requirements:
|
112
|
+
- - ">="
|
113
|
+
- !ruby/object:Gem::Version
|
114
|
+
version: '0'
|
115
|
+
requirements: []
|
116
|
+
rubyforge_project:
|
117
|
+
rubygems_version: 2.6.10
|
118
|
+
signing_key:
|
119
|
+
specification_version: 4
|
120
|
+
summary: Mock for the twilio gem
|
121
|
+
test_files: []
|