telnyx 0.0.6 → 0.0.7
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 +4 -4
- data/VERSION +1 -1
- data/lib/telnyx.rb +2 -0
- data/lib/telnyx/api_operations/nested_resource.rb +15 -3
- data/lib/telnyx/phone_number.rb +29 -0
- data/lib/telnyx/sim_card.rb +19 -0
- data/lib/telnyx/telnyx_response.rb +11 -2
- data/lib/telnyx/util.rb +2 -0
- data/lib/telnyx/version.rb +1 -1
- data/test/telnyx/phone_number_test.rb +114 -0
- data/test/telnyx/sim_card_test.rb +59 -0
- data/test/telnyx/telnyx_client_test.rb +12 -11
- metadata +8 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 954fc20c0162c4c8d7a2a4452e5d892b1ab4a46b2cb080af7b4fd3d4d9fed258
|
4
|
+
data.tar.gz: afac25a5c6384f6ad5aacefacbfa0a6eb5927a8d19744865eba79328e9560108
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e284d6bf79df563365f76e9355dc7009e58bbbcbb984f440e45bdf55d297fdbb9b742484418dec64de4d5a99c86b626fec113093a83d02f39f2f65d11a0a813f
|
7
|
+
data.tar.gz: 6a233a3042db655c72511203c9e79d3b1b80ae64b3ec38dacf5c1b31a8c3ee417291428ce57a3b7c2d9e35ba3b0a81ad66529a781322937da044eb0bb26fa2c7
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
1
|
+
0.0.7
|
data/lib/telnyx.rb
CHANGED
@@ -46,7 +46,9 @@ require "telnyx/messaging_phone_number"
|
|
46
46
|
require "telnyx/messaging_profile"
|
47
47
|
require "telnyx/number_order"
|
48
48
|
require "telnyx/number_reservation"
|
49
|
+
require "telnyx/phone_number"
|
49
50
|
require "telnyx/public_key"
|
51
|
+
require "telnyx/sim_card.rb"
|
50
52
|
|
51
53
|
module Telnyx
|
52
54
|
@app_info = nil
|
@@ -6,11 +6,12 @@ module Telnyx
|
|
6
6
|
# that it's possible to do so from a static context (i.e. without a
|
7
7
|
# pre-existing collection of subresources on the parent).
|
8
8
|
#
|
9
|
-
# For
|
9
|
+
# For example, a transfer gains the static methods for reversals so that the
|
10
10
|
# methods `.create_reversal`, `.retrieve_reversal`, `.update_reversal`,
|
11
11
|
# etc. all become available.
|
12
12
|
# rubocop:disable Metrics/AbcSize
|
13
13
|
# rubocop:disable Metrics/MethodLength
|
14
|
+
# rubocop:disable Metrics/CyclomaticComplexity
|
14
15
|
module NestedResource
|
15
16
|
def nested_resource_class_methods(resource, path: nil, operations: nil, instance_methods: {})
|
16
17
|
path ||= "#{resource}s"
|
@@ -29,8 +30,19 @@ module Telnyx
|
|
29
30
|
define_instance_method = lambda do |target_name, operation|
|
30
31
|
return unless instance_methods.keys.include? operation
|
31
32
|
|
32
|
-
|
33
|
-
|
33
|
+
case operation
|
34
|
+
when :create, :list
|
35
|
+
define_method(instance_methods[operation] || target_name) do |*opts|
|
36
|
+
self.class.send(target_name, id, *opts)
|
37
|
+
end
|
38
|
+
when :retrieve
|
39
|
+
define_method(instance_methods[operation] || target_name) do |nested_id|
|
40
|
+
self.class.send(target_name, id, nested_id)
|
41
|
+
end
|
42
|
+
when :update, :delete
|
43
|
+
define_method(instance_methods[operation] || target_name) do |nested_id, *opts|
|
44
|
+
self.class.send(target_name, id, nested_id, *opts)
|
45
|
+
end
|
34
46
|
end
|
35
47
|
end
|
36
48
|
|
@@ -0,0 +1,29 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Telnyx
|
4
|
+
class PhoneNumber < APIResource
|
5
|
+
include Telnyx::APIOperations::Save
|
6
|
+
include Telnyx::APIOperations::Delete
|
7
|
+
extend Telnyx::APIOperations::List
|
8
|
+
extend Telnyx::APIOperations::NestedResource
|
9
|
+
|
10
|
+
nested_resource_class_methods "voice",
|
11
|
+
path: ["voice"],
|
12
|
+
operations: %i[update list],
|
13
|
+
instance_methods: { list: "voice" }
|
14
|
+
nested_resource_class_methods "messaging",
|
15
|
+
path: ["messaging"],
|
16
|
+
operations: %i[update list],
|
17
|
+
instance_methods: { list: "messaging" }
|
18
|
+
|
19
|
+
def update_messaging(opts)
|
20
|
+
self.class.update_messaging(id, nil, opts)
|
21
|
+
end
|
22
|
+
|
23
|
+
def update_voice(opts)
|
24
|
+
self.class.update_voice(id, nil, opts)
|
25
|
+
end
|
26
|
+
|
27
|
+
OBJECT_NAME = "phone_number".freeze
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Telnyx
|
4
|
+
class SimCard < APIResource
|
5
|
+
include Telnyx::APIOperations::Save
|
6
|
+
extend APIOperations::NestedResource
|
7
|
+
extend APIOperations::List
|
8
|
+
|
9
|
+
ACTIONS = %w[deactivate activate].freeze
|
10
|
+
ACTIONS.each do |action|
|
11
|
+
nested_resource_class_methods action,
|
12
|
+
path: %W[actions #{action}],
|
13
|
+
operations: [:create],
|
14
|
+
instance_methods: { create: action }
|
15
|
+
end
|
16
|
+
|
17
|
+
OBJECT_NAME = "sim_card".freeze
|
18
|
+
end
|
19
|
+
end
|
@@ -26,7 +26,7 @@ module Telnyx
|
|
26
26
|
# This may throw JSON::ParserError if the response body is not valid JSON.
|
27
27
|
def self.from_faraday_hash(http_resp)
|
28
28
|
resp = TelnyxResponse.new
|
29
|
-
resp.data = JSON.parse(http_resp[:body], symbolize_names: true)
|
29
|
+
resp.data = JSON.parse(preprocess_response(http_resp[:body]), symbolize_names: true)
|
30
30
|
resp.http_body = http_resp[:body]
|
31
31
|
resp.http_headers = http_resp[:headers]
|
32
32
|
resp.http_status = http_resp[:status]
|
@@ -39,12 +39,21 @@ module Telnyx
|
|
39
39
|
# This may throw JSON::ParserError if the response body is not valid JSON.
|
40
40
|
def self.from_faraday_response(http_resp)
|
41
41
|
resp = TelnyxResponse.new
|
42
|
-
resp.data = JSON.parse(http_resp.body, symbolize_names: true)
|
42
|
+
resp.data = JSON.parse(preprocess_response(http_resp.body), symbolize_names: true)
|
43
43
|
resp.http_body = http_resp.body
|
44
44
|
resp.http_headers = http_resp.headers
|
45
45
|
resp.http_status = http_resp.status
|
46
46
|
resp.request_id = http_resp.headers["X-Request-Id"]
|
47
47
|
resp
|
48
48
|
end
|
49
|
+
|
50
|
+
class << self
|
51
|
+
private
|
52
|
+
|
53
|
+
# Helper to handle when the server responds with a blank body (as is the case with SimCards).
|
54
|
+
def preprocess_response(resp)
|
55
|
+
resp.empty? ? "{}" : resp
|
56
|
+
end
|
57
|
+
end
|
49
58
|
end
|
50
59
|
end
|
data/lib/telnyx/util.rb
CHANGED
data/lib/telnyx/version.rb
CHANGED
@@ -0,0 +1,114 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative "../test_helper"
|
4
|
+
module Telnyx
|
5
|
+
class PhoneNumberTest < Test::Unit::TestCase
|
6
|
+
should "list resources" do
|
7
|
+
stub = stub_request(:get, "#{Telnyx.api_base}/v2/phone_numbers")
|
8
|
+
.to_return(body: JSON.generate(data: (1..5).map { |i| mock_response(i) }))
|
9
|
+
phone_numbers = Telnyx::PhoneNumber.list
|
10
|
+
assert_requested stub
|
11
|
+
assert_kind_of Telnyx::ListObject, phone_numbers
|
12
|
+
assert_kind_of Telnyx::PhoneNumber, phone_numbers.first
|
13
|
+
end
|
14
|
+
|
15
|
+
should "get resource" do
|
16
|
+
stub = stub_request(:get, "#{Telnyx.api_base}/v2/phone_numbers/123")
|
17
|
+
.to_return(body: JSON.generate(data: mock_response("123")))
|
18
|
+
phone_number = Telnyx::PhoneNumber.retrieve("123")
|
19
|
+
assert_kind_of Telnyx::PhoneNumber, phone_number
|
20
|
+
assert_requested stub
|
21
|
+
assert_equal phone_number.id, "123"
|
22
|
+
end
|
23
|
+
|
24
|
+
should "update resource" do
|
25
|
+
stub_request(:get, "#{Telnyx.api_base}/v2/phone_numbers/123")
|
26
|
+
.to_return(body: JSON.generate(data: mock_response("123")))
|
27
|
+
stub = stub_request(:patch, "#{Telnyx.api_base}/v2/phone_numbers/123")
|
28
|
+
.to_return(body: JSON.generate(data: mock_response("123")))
|
29
|
+
phone_number = Telnyx::PhoneNumber.retrieve("123")
|
30
|
+
phone_number.save
|
31
|
+
assert_requested stub
|
32
|
+
end
|
33
|
+
|
34
|
+
should "delete resource" do
|
35
|
+
stub_request(:get, "#{Telnyx.api_base}/v2/phone_numbers/123")
|
36
|
+
.to_return(body: JSON.generate(data: mock_response("123")))
|
37
|
+
stub = stub_request(:delete, "#{Telnyx.api_base}/v2/phone_numbers/123")
|
38
|
+
.to_return(body: JSON.generate(data: mock_response("123")))
|
39
|
+
phone_number = Telnyx::PhoneNumber.retrieve("123")
|
40
|
+
phone_number.delete
|
41
|
+
assert_requested stub
|
42
|
+
end
|
43
|
+
|
44
|
+
context "nested commands" do
|
45
|
+
should "update voice" do
|
46
|
+
stub_request(:get, "#{Telnyx.api_base}/v2/phone_numbers/123")
|
47
|
+
.to_return(body: JSON.generate(data: mock_response("123")))
|
48
|
+
command_stub = stub_request(:patch, "#{Telnyx.api_base}/v2/phone_numbers/123/voice")
|
49
|
+
.with(body: { connection_id: 123 })
|
50
|
+
.to_return(body: JSON.generate(data: mock_voice_response))
|
51
|
+
phone_number = Telnyx::PhoneNumber.retrieve("123")
|
52
|
+
phone_number.update_voice(connection_id: 123)
|
53
|
+
assert_requested command_stub
|
54
|
+
end
|
55
|
+
|
56
|
+
should "get voice" do
|
57
|
+
stub_request(:get, "#{Telnyx.api_base}/v2/phone_numbers/123")
|
58
|
+
.to_return(body: JSON.generate(data: mock_response("123")))
|
59
|
+
command_stub = stub_request(:get, "#{Telnyx.api_base}/v2/phone_numbers/123/voice")
|
60
|
+
.to_return(body: JSON.generate(data: mock_voice_response("456")))
|
61
|
+
phone_number = Telnyx::PhoneNumber.retrieve("123")
|
62
|
+
voice = phone_number.voice
|
63
|
+
assert_requested command_stub
|
64
|
+
assert_equal voice.data.connection_id, "456"
|
65
|
+
end
|
66
|
+
|
67
|
+
should "get messaging" do
|
68
|
+
stub_request(:get, "#{Telnyx.api_base}/v2/phone_numbers/123")
|
69
|
+
.to_return(body: JSON.generate(data: mock_response("123")))
|
70
|
+
command_stub = stub_request(:get, "#{Telnyx.api_base}/v2/phone_numbers/123/messaging")
|
71
|
+
.to_return(body: JSON.generate(data: mock_messaging_response("456")))
|
72
|
+
phone_number = Telnyx::PhoneNumber.retrieve("123")
|
73
|
+
phone_number.messaging
|
74
|
+
assert_requested command_stub
|
75
|
+
end
|
76
|
+
|
77
|
+
should "update messaging" do
|
78
|
+
stub_request(:get, "#{Telnyx.api_base}/v2/phone_numbers/123")
|
79
|
+
.to_return(body: JSON.generate(data: mock_response("123")))
|
80
|
+
command_stub = stub_request(:patch, "#{Telnyx.api_base}/v2/phone_numbers/123/messaging")
|
81
|
+
.with(body: { messaging_profile_id: "12345", messaging_product: "P2P" })
|
82
|
+
.to_return(body: JSON.generate(data: mock_messaging_response))
|
83
|
+
phone_number = Telnyx::PhoneNumber.retrieve("123")
|
84
|
+
phone_number.update_messaging(messaging_profile_id: "12345", messaging_product: "P2P")
|
85
|
+
assert_requested command_stub
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
def mock_response(id = nil)
|
90
|
+
{
|
91
|
+
id: (id || rand(0...1_000_000_000_000)),
|
92
|
+
record_type: :phone_number,
|
93
|
+
status: rand(1..10),
|
94
|
+
phone_number: "+15555555555",
|
95
|
+
address_id: rand(0...1_000_000_000_000),
|
96
|
+
}
|
97
|
+
end
|
98
|
+
|
99
|
+
def mock_voice_response(id = nil)
|
100
|
+
{
|
101
|
+
connection_id: (id || rand(0...1_000_000_000_000)),
|
102
|
+
connection_name: "Telnyx connection",
|
103
|
+
}
|
104
|
+
end
|
105
|
+
|
106
|
+
def mock_messaging_response(_id = nil)
|
107
|
+
{
|
108
|
+
record_type: "messaging_phone_number",
|
109
|
+
phone_number: "+18005550001",
|
110
|
+
id: "+18665550001",
|
111
|
+
}
|
112
|
+
end
|
113
|
+
end
|
114
|
+
end
|
@@ -0,0 +1,59 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative "../test_helper"
|
4
|
+
|
5
|
+
module Telnyx
|
6
|
+
class SimCardTest < Test::Unit::TestCase
|
7
|
+
should "retrieve sim card" do
|
8
|
+
stub = stub_request(:get, "#{Telnyx.api_base}/v2/sim_cards/123")
|
9
|
+
.to_return(body: JSON.generate(data: { record_type: "sim_card", id: "123" }))
|
10
|
+
sim = Telnyx::SimCard.retrieve "123"
|
11
|
+
assert_requested stub
|
12
|
+
assert_kind_of Telnyx::SimCard, sim
|
13
|
+
end
|
14
|
+
|
15
|
+
should "list sim cards" do
|
16
|
+
stub = stub_request(:get, "#{Telnyx.api_base}/v2/sim_cards")
|
17
|
+
.to_return(body: JSON.generate(data: (1..5).map { |i| { record_type: "sim_card", id: i } }))
|
18
|
+
simlist = Telnyx::SimCard.list
|
19
|
+
assert_requested stub
|
20
|
+
assert_kind_of Telnyx::ListObject, simlist
|
21
|
+
end
|
22
|
+
|
23
|
+
should "save sim card" do
|
24
|
+
stub_request(:get, "#{Telnyx.api_base}/v2/sim_cards/123")
|
25
|
+
.to_return(body: JSON.generate(data: { record_type: "sim_card", id: "123" }))
|
26
|
+
stub = stub_request(:patch, "#{Telnyx.api_base}/v2/sim_cards/123")
|
27
|
+
.to_return(body: JSON.generate(data: { record_type: "sim_card", id: "123" }))
|
28
|
+
sim = Telnyx::SimCard.retrieve "123"
|
29
|
+
sim.save
|
30
|
+
assert_requested stub
|
31
|
+
end
|
32
|
+
|
33
|
+
context "actions" do
|
34
|
+
should "deactivate" do
|
35
|
+
stub_request(:get, "#{Telnyx.api_base}/v2/sim_cards/123")
|
36
|
+
.to_return(body: JSON.generate(data: { record_type: "sim_card", id: "123" }))
|
37
|
+
|
38
|
+
stub = stub_request(:post, "#{Telnyx.api_base}/v2/sim_cards/123/actions/deactivate")
|
39
|
+
.to_return(body: JSON.generate(errors: []), status: 202)
|
40
|
+
|
41
|
+
sim = Telnyx::SimCard.retrieve "123"
|
42
|
+
sim.deactivate
|
43
|
+
assert_requested stub
|
44
|
+
end
|
45
|
+
|
46
|
+
should "activate" do
|
47
|
+
stub_request(:get, "#{Telnyx.api_base}/v2/sim_cards/123")
|
48
|
+
.to_return(body: JSON.generate(data: { record_type: "sim_card", id: "123" }))
|
49
|
+
|
50
|
+
stub = stub_request(:post, "#{Telnyx.api_base}/v2/sim_cards/123/actions/activate")
|
51
|
+
.to_return(body: JSON.generate(errors: []), status: 202)
|
52
|
+
|
53
|
+
sim = Telnyx::SimCard.retrieve "123"
|
54
|
+
sim.activate
|
55
|
+
assert_requested stub
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
@@ -324,17 +324,18 @@ module Telnyx
|
|
324
324
|
assert_equal 'Invalid response object from API: "" (HTTP response code was 500)', e.message
|
325
325
|
end
|
326
326
|
|
327
|
-
|
328
|
-
|
329
|
-
|
330
|
-
|
331
|
-
|
332
|
-
|
333
|
-
|
334
|
-
|
335
|
-
|
336
|
-
|
337
|
-
|
327
|
+
# Disabled this due to incompatibility with sim endpont actions.
|
328
|
+
# should "handle success response with empty body" do
|
329
|
+
# stub_request(:post, "#{Telnyx.api_base}/v2/messaging_profiles")
|
330
|
+
# .to_return(body: "", status: 200)
|
331
|
+
|
332
|
+
# client = TelnyxClient.new
|
333
|
+
# e = assert_raises Telnyx::APIError do
|
334
|
+
# client.execute_request(:post, "/v2/messaging_profiles")
|
335
|
+
# end
|
336
|
+
|
337
|
+
# assert_equal 'Invalid response object from API: "" (HTTP response code was 200)', e.message
|
338
|
+
# end
|
338
339
|
|
339
340
|
should "handle error response with unknown value" do
|
340
341
|
stub_request(:post, "#{Telnyx.api_base}/v2/messaging_profiles")
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: telnyx
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Telnyx
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-
|
11
|
+
date: 2019-11-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: faraday
|
@@ -112,7 +112,9 @@ files:
|
|
112
112
|
- lib/telnyx/messaging_profile.rb
|
113
113
|
- lib/telnyx/number_order.rb
|
114
114
|
- lib/telnyx/number_reservation.rb
|
115
|
+
- lib/telnyx/phone_number.rb
|
115
116
|
- lib/telnyx/public_key.rb
|
117
|
+
- lib/telnyx/sim_card.rb
|
116
118
|
- lib/telnyx/singleton_api_resource.rb
|
117
119
|
- lib/telnyx/telnyx_client.rb
|
118
120
|
- lib/telnyx/telnyx_object.rb
|
@@ -136,7 +138,9 @@ files:
|
|
136
138
|
- test/telnyx/messaging_profile_test.rb
|
137
139
|
- test/telnyx/number_order_test.rb
|
138
140
|
- test/telnyx/number_reservation_test.rb
|
141
|
+
- test/telnyx/phone_number_test.rb
|
139
142
|
- test/telnyx/public_key_test.rb
|
143
|
+
- test/telnyx/sim_card_test.rb
|
140
144
|
- test/telnyx/telnyx_client_test.rb
|
141
145
|
- test/telnyx/telnyx_object_test.rb
|
142
146
|
- test/telnyx/telnyx_response_test.rb
|
@@ -189,7 +193,9 @@ test_files:
|
|
189
193
|
- test/telnyx/messaging_profile_test.rb
|
190
194
|
- test/telnyx/number_order_test.rb
|
191
195
|
- test/telnyx/number_reservation_test.rb
|
196
|
+
- test/telnyx/phone_number_test.rb
|
192
197
|
- test/telnyx/public_key_test.rb
|
198
|
+
- test/telnyx/sim_card_test.rb
|
193
199
|
- test/telnyx/telnyx_client_test.rb
|
194
200
|
- test/telnyx/telnyx_object_test.rb
|
195
201
|
- test/telnyx/telnyx_response_test.rb
|