twilio_mock 0.1.0 → 0.1.1

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 00a6a986657d167465ce4b98b08c5ba79ec1cc1d
4
- data.tar.gz: 73923634aca40b7300487b27a731567c4897a318
3
+ metadata.gz: 1e85e4460cea137d2213054ef9a0f267004f3b15
4
+ data.tar.gz: 7624468ce852603c647cfd56cd0ca22ae0eaf416
5
5
  SHA512:
6
- metadata.gz: dbd3e06f261efb1aaa88ab2e70f80317a2de6a889980f86d7fdfbbdb68985bc29e3761771be4f163c82779c476628672747bb7e535525848048cc76dd1f15a6a
7
- data.tar.gz: 7a16f1baf1dcf024c2af1d7e50c12784fa491a90a01273ff8f21dbd229c66da45d2c22b883f42d8eca92371f30b848c8b3395a1b69d81ddc5d939e7cebc6148a
6
+ metadata.gz: e66ea8ff9506f6a30a99a2e3fffb9732c62152d03ba689cc2c5a4a2abe546e7ee785c135aa83ac9a30e22776919b8d58a7f8881019607879d3c0f55e74841a6c
7
+ data.tar.gz: 8fed1a57fd636c40377135d401ed0ae12293b334f24fc9dc3ce479f2d4229ddfe6133fca3229f2365870ef8b0eeebe510a1fe0038039cb32cd969de2addc5f7b
data/lib/rest.rb CHANGED
@@ -1,34 +1,40 @@
1
1
  require 'twilio-ruby'
2
- require 'twilio_mocker'
3
2
 
4
3
  module Twilio
5
4
  module REST
6
5
  class Messages < ListResource
7
6
  def create(attrs)
8
- TwilioMocker.new.stub_create_message(attrs)
7
+ TwilioMock::Mocker.new.create_message(attrs) if TwilioMock::Testing.enabled?
9
8
  super(attrs)
10
9
  end
11
10
  end
12
11
 
13
12
  class IncomingPhoneNumbers < ListResource
14
13
  def create(attrs)
15
- TwilioMocker.new.stub_buy_number(attrs)
14
+ TwilioMock::Mocker.new.buy_number(attrs) if TwilioMock::Testing.enabled?
16
15
  super(attrs)
17
16
  end
18
17
  end
19
18
 
20
19
  class AvailablePhoneNumbers < ListResource
21
20
  def get(sid)
22
- TwilioMocker.new.stub_available_numbers
21
+ TwilioMock::Mocker.new.available_number if TwilioMock::Testing.enabled?
23
22
  super(sid)
24
23
  end
25
24
  end
26
25
 
26
+ class Local < ListResource
27
+ def list(params = {}, full_path = false)
28
+ TwilioMock::Mocker.new.available_number(nil, params) if TwilioMock::Testing.enabled?
29
+ super(params, full_path)
30
+ end
31
+ end
32
+
27
33
  module Lookups
28
34
  class PhoneNumbers < NextGenListResource
29
- def get(number, query={})
30
- TwilioLookupMocker.new.stub_lookup(number)
31
- super(number, query)
35
+ def get(number)
36
+ TwilioMock::LookupMocker.new.lookup(number) if TwilioMock::Testing.enabled?
37
+ super(number)
32
38
  end
33
39
  end
34
40
  end
@@ -0,0 +1,28 @@
1
+ require_relative './mocker'
2
+
3
+ module TwilioMock
4
+ class LookupMocker < Mocker
5
+ API_VERSION = 'v1'.freeze
6
+ HOST = 'lookups.twilio.com'.freeze
7
+
8
+ def lookup(number, country_code = nil)
9
+ stub_request(:get, "#{base_twilio_url}/PhoneNumbers/#{number}")
10
+ .with(headers: headers)
11
+ .to_return(status: 200, body: response(number, country_code), headers: {})
12
+ end
13
+
14
+ private
15
+
16
+ def response(number, country_code)
17
+ {
18
+ country_code: country_code || 'US',
19
+ phone_number: number,
20
+ url: "#{base_twilio_url}/PhoneNumber/number"
21
+ }.to_json
22
+ end
23
+
24
+ def base_twilio_url
25
+ "https://#{HOST}/#{API_VERSION}"
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,71 @@
1
+ require 'twilio-ruby'
2
+ require 'webmock'
3
+ require_relative 'number_generator'
4
+
5
+ module TwilioMock
6
+ class Mocker
7
+ include Twilio::REST::Utils
8
+
9
+ API_VERSION = '2010-04-01'.freeze
10
+ HOST = 'api.twilio.com'.freeze
11
+
12
+ def initialize
13
+ @username = Twilio.account_sid
14
+ @token = Twilio.auth_token
15
+ end
16
+
17
+ def create_message(attrs)
18
+ prepare_stub(attrs, 'Messages.json')
19
+ end
20
+
21
+ def available_number(number = nil, params = nil)
22
+ query_string = params && params.any? ? twilify(params).to_h.to_query : ''
23
+ stub_request(:get, "#{base_twilio_url}/AvailablePhoneNumbers/US/Local.json?#{query_string}")
24
+ .with(headers: headers, basic_auth: basic_auth)
25
+ .to_return(status: 200, body: available_number_response(number), headers: {})
26
+ end
27
+
28
+ def buy_number(attrs)
29
+ prepare_stub(attrs, 'IncomingPhoneNumbers.json')
30
+ end
31
+
32
+ private
33
+
34
+ def response
35
+ {
36
+ sid: @username
37
+ }.to_json
38
+ end
39
+
40
+ def headers
41
+ Twilio::REST::Client::HTTP_HEADERS
42
+ end
43
+
44
+ def basic_auth
45
+ [@username, @token]
46
+ end
47
+
48
+ def stub_request(method, url)
49
+ WebMock.stub_request(method, url)
50
+ end
51
+
52
+ def base_twilio_url
53
+ "https://#{HOST}/#{API_VERSION}/Accounts/#{@username}"
54
+ end
55
+
56
+ def prepare_stub(attrs, path)
57
+ body = twilify(attrs).map { |k, val| [k, val.to_s] }.to_h
58
+ stub_request(:post, "#{base_twilio_url}/#{path}")
59
+ .with(body: body, headers: headers, basic_auth: basic_auth)
60
+ .to_return(status: 200, body: response, headers: {})
61
+ end
62
+
63
+ def available_number_response(number)
64
+ number ||= NumberGenerator.instance.generate
65
+ {
66
+ sid: @username,
67
+ available_phone_numbers: [{ 'PhoneNumber' => number }]
68
+ }.to_json
69
+ end
70
+ end
71
+ end
@@ -0,0 +1,23 @@
1
+ module TwilioMock
2
+ class NumberGenerator
3
+ include Singleton
4
+
5
+ BASE_TEST_NUMBER = '+1500555'.freeze
6
+
7
+ attr_reader :available_numbers
8
+
9
+ def initialize
10
+ @available_numbers = []
11
+ end
12
+
13
+ def generate
14
+ number = loop do
15
+ number = "#{BASE_TEST_NUMBER}#{rand(9999).to_s.rjust(4, '0')}"
16
+ unless @available_numbers.include?(number)
17
+ @available_numbers << number
18
+ break number
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,39 @@
1
+ module TwilioMock
2
+ class Testing
3
+ class << self
4
+ attr_accessor :__test_mode
5
+
6
+ def __set_test_mode(mode)
7
+ if block_given?
8
+ current_mode = self.__test_mode
9
+ begin
10
+ self.__test_mode = mode
11
+ yield
12
+ ensure
13
+ self.__test_mode = current_mode
14
+ end
15
+ else
16
+ self.__test_mode = mode
17
+ end
18
+ end
19
+
20
+ def enable!(&block)
21
+ __set_test_mode(:enable, &block)
22
+ end
23
+
24
+ def disable!(&block)
25
+ __set_test_mode(:disable, &block)
26
+ end
27
+
28
+ def enabled?
29
+ self.__test_mode == :enable
30
+ end
31
+
32
+ def disabled?
33
+ self.__test_mode == :disable
34
+ end
35
+ end
36
+ end
37
+ end
38
+
39
+ TwilioMock::Testing.enable! # default behavior
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: twilio_mock
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Maicol Bentancor
@@ -10,90 +10,57 @@ bindir: bin
10
10
  cert_chain: []
11
11
  date: 2017-05-30 00:00:00.000000000 Z
12
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
13
  - !ruby/object:Gem::Dependency
28
14
  name: twilio-ruby
29
15
  requirement: !ruby/object:Gem::Requirement
30
16
  requirements:
31
17
  - - "~>"
32
18
  - !ruby/object:Gem::Version
33
- version: '4.13'
19
+ version: '3.16'
34
20
  - - ">="
35
21
  - !ruby/object:Gem::Version
36
- version: 4.13.0
22
+ version: '3'
37
23
  type: :runtime
38
24
  prerelease: false
39
25
  version_requirements: !ruby/object:Gem::Requirement
40
26
  requirements:
41
27
  - - "~>"
42
28
  - !ruby/object:Gem::Version
43
- version: '4.13'
29
+ version: '3.16'
44
30
  - - ">="
45
31
  - !ruby/object:Gem::Version
46
- version: 4.13.0
32
+ version: '3'
47
33
  - !ruby/object:Gem::Dependency
48
34
  name: webmock
49
35
  requirement: !ruby/object:Gem::Requirement
50
36
  requirements:
51
37
  - - "~>"
52
38
  - !ruby/object:Gem::Version
53
- version: '3.0'
39
+ version: '2.3'
54
40
  - - ">="
55
41
  - !ruby/object:Gem::Version
56
- version: 3.0.1
42
+ version: '2'
57
43
  type: :runtime
58
44
  prerelease: false
59
45
  version_requirements: !ruby/object:Gem::Requirement
60
46
  requirements:
61
47
  - - "~>"
62
48
  - !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'
49
+ version: '2.3'
84
50
  - - ">="
85
51
  - !ruby/object:Gem::Version
86
- version: 3.6.0
87
- description: ock for the twilio gem using webmock
52
+ version: '2'
53
+ description: Mock for the twilio gem using webmock
88
54
  email:
89
55
  executables: []
90
56
  extensions: []
91
57
  extra_rdoc_files: []
92
58
  files:
93
59
  - lib/rest.rb
94
- - lib/twilio_lookup_mocker.rb
95
- - lib/twilio_mocker.rb
96
- - lib/twilio_number_generator.rb
60
+ - lib/twilio_mock/lookup_mocker.rb
61
+ - lib/twilio_mock/mocker.rb
62
+ - lib/twilio_mock/number_generator.rb
63
+ - lib/twilio_mock/testing.rb
97
64
  homepage:
98
65
  licenses:
99
66
  - MIT
@@ -1,26 +0,0 @@
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
data/lib/twilio_mocker.rb DELETED
@@ -1,64 +0,0 @@
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
@@ -1,21 +0,0 @@
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