telnyx 2.6.0 → 2.7.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/workflows/ruby.yml +1 -1
- data/.rubocop.yml +1 -1
- data/Gemfile +4 -0
- data/VERSION +1 -1
- data/lib/telnyx/api_operations/create.rb +6 -1
- data/lib/telnyx/api_resource.rb +10 -0
- data/lib/telnyx/call.rb +1 -1
- data/lib/telnyx/messaging_phone_number.rb +0 -5
- data/lib/telnyx/phone_number.rb +2 -2
- data/lib/telnyx/util.rb +11 -39
- data/lib/telnyx/verification.rb +9 -0
- data/lib/telnyx/version.rb +1 -1
- data/test/telnyx/alphanumeric_sender_id_test.rb +1 -1
- data/test/telnyx/api_operations_test.rb +1 -1
- data/test/telnyx/api_resource_test.rb +1 -1
- data/test/telnyx/available_phone_number_test.rb +1 -1
- data/test/telnyx/call_control_test.rb +10 -31
- data/test/telnyx/conference_test.rb +1 -1
- data/test/telnyx/errors_test.rb +1 -1
- data/test/telnyx/fax_test.rb +1 -0
- data/test/telnyx/list_object_test.rb +1 -1
- data/test/telnyx/message_test.rb +1 -1
- data/test/telnyx/messaging_phone_number_test.rb +1 -1
- data/test/telnyx/messaging_profile_test.rb +1 -1
- data/test/telnyx/number_reservation_test.rb +2 -0
- data/test/telnyx/public_key_test.rb +1 -1
- data/test/telnyx/telnyx_client_test.rb +43 -49
- data/test/telnyx/telnyx_object_test.rb +12 -14
- data/test/telnyx/telnyx_response_test.rb +1 -1
- data/test/telnyx/util_test.rb +1 -1
- data/test/telnyx/verification_test.rb +4 -2
- data/test/telnyx/verify_profile_test.rb +2 -0
- data/test/telnyx/webhook_test.rb +1 -1
- data/test/telnyx/wireless_detail_records_report_test.rb +1 -0
- data/test/telnyx_test.rb +20 -24
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 407a5714f7cb3d239c29e30db367cb2ce79529bd6c56d2cc618fae5a2d53445a
|
4
|
+
data.tar.gz: ca77fece83a957351b70886ec4e7df72c202c9a362e2c5210b2b8472f31dfc07
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5d3011d6cf70a2445963ebfde957ba1d6868ae8552990e483deea284d534bd7040162bddd059aa29369ca2813768f721eceed5dd8eb39512c322198d4d55b98f
|
7
|
+
data.tar.gz: c736dcdf467ea9a6ff49856d1fa2d3acdb0e11bde5e4d700c810d39abde29586c2b596b17cf51eab5ceb2fd07d4cc727fbc0dcf283a40ef8bc9f637627aa9854
|
data/.github/workflows/ruby.yml
CHANGED
data/.rubocop.yml
CHANGED
data/Gemfile
CHANGED
@@ -24,6 +24,10 @@ group :development do
|
|
24
24
|
gem "guard-rubocop"
|
25
25
|
gem "rubocop", "~> 1.6"
|
26
26
|
|
27
|
+
# debugging
|
28
|
+
# gem 'httplog' # when included logs all http requests
|
29
|
+
# gem 'awesome_print'
|
30
|
+
|
27
31
|
# Rack 2.0+ requires Ruby >= 2.2.2 which is problematic for the test suite on
|
28
32
|
# older Ruby versions. Check Ruby the version here and put a maximum
|
29
33
|
# constraint on Rack if necessary.
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
2.
|
1
|
+
2.7.0
|
@@ -4,7 +4,12 @@ module Telnyx
|
|
4
4
|
module APIOperations
|
5
5
|
module Create
|
6
6
|
def create(params = {}, opts = {})
|
7
|
-
|
7
|
+
if opts.respond_to? :fetch
|
8
|
+
url = opts.fetch(:resource_url, nil)
|
9
|
+
opts.delete :resource_url
|
10
|
+
end
|
11
|
+
url ||= resource_url
|
12
|
+
resp, opts = request(:post, url, params, opts)
|
8
13
|
Util.convert_to_telnyx_object(resp.data, opts)
|
9
14
|
end
|
10
15
|
end
|
data/lib/telnyx/api_resource.rb
CHANGED
@@ -10,6 +10,16 @@ module Telnyx
|
|
10
10
|
# own endpoints, but there are certain cases where this is allowed.
|
11
11
|
attr_accessor :save_with_parent
|
12
12
|
|
13
|
+
class << self
|
14
|
+
def inherited(subclass)
|
15
|
+
super
|
16
|
+
@descendants ||= []
|
17
|
+
@descendants << subclass
|
18
|
+
end
|
19
|
+
|
20
|
+
attr_reader :descendants
|
21
|
+
end
|
22
|
+
|
13
23
|
def self.class_name
|
14
24
|
name.split("::")[-1]
|
15
25
|
end
|
data/lib/telnyx/call.rb
CHANGED
@@ -35,7 +35,7 @@ module Telnyx
|
|
35
35
|
gather_using_audio gather_using_speak playback_start
|
36
36
|
playback_stop record_start record_stop send_dtmf transfer
|
37
37
|
transcription_start transcription_stop record_pause
|
38
|
-
record_resume gather_stop refer].freeze
|
38
|
+
record_resume gather_stop refer enqueue leave_queue].freeze
|
39
39
|
|
40
40
|
ACTIONS.each do |action|
|
41
41
|
nested_resource_class_methods action,
|
@@ -5,11 +5,6 @@ module Telnyx
|
|
5
5
|
include Telnyx::APIOperations::Save
|
6
6
|
extend Telnyx::APIOperations::List
|
7
7
|
|
8
|
-
def initialize(*)
|
9
|
-
super
|
10
|
-
warn "[DEPRECATION] MessagingPhoneNumber is deprecated, use PhoneNumber instead"
|
11
|
-
end
|
12
|
-
|
13
8
|
OBJECT_NAME = "messaging_phone_number".freeze
|
14
9
|
def self.resource_path(id = nil)
|
15
10
|
return "phone_numbers/#{CGI.escape(id)}/messaging" if id
|
data/lib/telnyx/phone_number.rb
CHANGED
data/lib/telnyx/util.rb
CHANGED
@@ -37,45 +37,17 @@ module Telnyx
|
|
37
37
|
end
|
38
38
|
|
39
39
|
def self.object_classes
|
40
|
-
@object_classes ||=
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
Fax::OBJECT_NAME => Fax,
|
52
|
-
FaxApplication::OBJECT_NAME => FaxApplication,
|
53
|
-
FQDN::OBJECT_NAME => FQDN,
|
54
|
-
FQDNConnection::OBJECT_NAME => FQDNConnection,
|
55
|
-
IP::OBJECT_NAME => IP,
|
56
|
-
IPConnection::OBJECT_NAME => IPConnection,
|
57
|
-
Message::OBJECT_NAME => Message,
|
58
|
-
MessagingPhoneNumber::OBJECT_NAME => MessagingPhoneNumber,
|
59
|
-
"messaging_settings" => MessagingPhoneNumber,
|
60
|
-
MessagingProfile::OBJECT_NAME => MessagingProfile,
|
61
|
-
NumberLookup::OBJECT_NAME => NumberLookup,
|
62
|
-
NumberOrder::OBJECT_NAME => NumberOrder,
|
63
|
-
NumberOrderDocument::OBJECT_NAME => NumberOrderDocument,
|
64
|
-
NumberReservation::OBJECT_NAME => NumberReservation,
|
65
|
-
OutboundVoiceProfile::OBJECT_NAME => OutboundVoiceProfile,
|
66
|
-
PhoneNumber::OBJECT_NAME => PhoneNumber,
|
67
|
-
"phone_number_reservation" => NumberReservation,
|
68
|
-
PhoneNumberRegulatoryRequirement::OBJECT_NAME => PhoneNumberRegulatoryRequirement,
|
69
|
-
"phone_number_regulatory_group" => PhoneNumberRegulatoryRequirement,
|
70
|
-
Portout::OBJECT_NAME => Portout,
|
71
|
-
VerifyProfile::OBJECT_NAME => VerifyProfile,
|
72
|
-
PublicKey::OBJECT_NAME => PublicKey,
|
73
|
-
RegulatoryRequirement::OBJECT_NAME => RegulatoryRequirement,
|
74
|
-
SimCard::OBJECT_NAME => SimCard,
|
75
|
-
Verification::OBJECT_NAME => Verification,
|
76
|
-
"verification" => Verification::Response,
|
77
|
-
WirelessDetailRecordsReport::OBJECT_NAME => WirelessDetailRecordsReport,
|
78
|
-
}
|
40
|
+
@object_classes ||= APIResource.descendants
|
41
|
+
.select { |klass| klass.constants(false).include? :OBJECT_NAME }
|
42
|
+
.map { |klass| [klass::OBJECT_NAME, klass] }
|
43
|
+
.to_h
|
44
|
+
.merge(
|
45
|
+
"messaging_settings" => MessagingPhoneNumber,
|
46
|
+
"phone_number_regulatory_group" => PhoneNumberRegulatoryRequirement,
|
47
|
+
"phone_number_reservation" => NumberReservation,
|
48
|
+
"verification_profile" => VerifyProfile,
|
49
|
+
"verification" => Verification::Response
|
50
|
+
)
|
79
51
|
end
|
80
52
|
|
81
53
|
def self.push_object_class(key, klass)
|
data/lib/telnyx/verification.rb
CHANGED
@@ -8,6 +8,10 @@ module Telnyx
|
|
8
8
|
extend APIOperations::Create
|
9
9
|
extend APIOperations::NestedResource
|
10
10
|
|
11
|
+
class << self
|
12
|
+
private :create
|
13
|
+
end
|
14
|
+
|
11
15
|
nested_resource_class_methods "by_telephone",
|
12
16
|
path: "by_tn",
|
13
17
|
operations: [:retrieve],
|
@@ -21,6 +25,11 @@ module Telnyx
|
|
21
25
|
Response.construct_from resp.data[:data]
|
22
26
|
end
|
23
27
|
|
28
|
+
# Trigger a call verification
|
29
|
+
def self.call(params = {}, opts = {})
|
30
|
+
create(params, { **opts, resource_url: "#{resource_url}/call" })
|
31
|
+
end
|
32
|
+
|
24
33
|
OBJECT_NAME = "verify_verification".freeze
|
25
34
|
RESOURCE_PATH = "verifications".freeze
|
26
35
|
end
|
data/lib/telnyx/version.rb
CHANGED
@@ -37,6 +37,8 @@ module Telnyx
|
|
37
37
|
assert defined? @call.record_stop
|
38
38
|
assert defined? @call.send_dtmf
|
39
39
|
assert defined? @call.transfer
|
40
|
+
assert defined? @call.enqueue
|
41
|
+
assert defined? @call.leave_queue
|
40
42
|
end
|
41
43
|
end
|
42
44
|
|
@@ -62,37 +64,6 @@ module Telnyx
|
|
62
64
|
assert call.call_leg_id
|
63
65
|
assert call.call_session_id
|
64
66
|
end
|
65
|
-
|
66
|
-
should "send all commands" do
|
67
|
-
@call = Call.new
|
68
|
-
@call.id = "1234"
|
69
|
-
@call.reject cause: "CALL_REJECTED"
|
70
|
-
assert_requested :post, format_action_url(@call, "reject")
|
71
|
-
@call.answer
|
72
|
-
assert_requested :post, format_action_url(@call, "answer")
|
73
|
-
@call.hangup
|
74
|
-
assert_requested :post, format_action_url(@call, "hangup")
|
75
|
-
@call.bridge call_control_id: SecureRandom.base64(20)
|
76
|
-
assert_requested :post, format_action_url(@call, "bridge")
|
77
|
-
@call.speak language: "en-US", voice: "female", payload: "Telnyx call control test"
|
78
|
-
assert_requested :post, format_action_url(@call, "speak")
|
79
|
-
@call.fork_start call_control_id: SecureRandom.base64(20)
|
80
|
-
assert_requested :post, format_action_url(@call, "fork_start")
|
81
|
-
@call.fork_stop
|
82
|
-
assert_requested :post, format_action_url(@call, "fork_stop")
|
83
|
-
@call.gather_using_audio audio_url: "https://audio.example.com"
|
84
|
-
assert_requested :post, format_action_url(@call, "gather_using_audio")
|
85
|
-
@call.gather_using_speak language: "en-US", voice: "female", payload: "Telnyx call control test"
|
86
|
-
assert_requested :post, format_action_url(@call, "gather_using_speak")
|
87
|
-
@call.playback_start audio_url: "https://audio.example.com"
|
88
|
-
assert_requested :post, format_action_url(@call, "playback_start")
|
89
|
-
@call.playback_stop
|
90
|
-
assert_requested :post, format_action_url(@call, "playback_stop")
|
91
|
-
@call.send_dtmf digits: "1www2WABCDw9"
|
92
|
-
assert_requested :post, format_action_url(@call, "send_dtmf")
|
93
|
-
@call.transfer to: "+15552223333"
|
94
|
-
assert_requested :post, format_action_url(@call, "transfer")
|
95
|
-
end
|
96
67
|
end
|
97
68
|
|
98
69
|
context "commands" do
|
@@ -172,6 +143,14 @@ module Telnyx
|
|
172
143
|
@call.refer sip_address: "sip:username@sip.non-telnyx-address.com"
|
173
144
|
assert_requested :post, format_action_url(@call, "refer")
|
174
145
|
end
|
146
|
+
should "enqueue" do
|
147
|
+
@call.enqueue call_control_id: SecureRandom.base64(20)
|
148
|
+
assert_requested :post, format_action_url(@call, "enqueue")
|
149
|
+
end
|
150
|
+
should "leave_queue" do
|
151
|
+
@call.leave_queue call_control_id: SecureRandom.base64(20)
|
152
|
+
assert_requested :post, format_action_url(@call, "leave_queue")
|
153
|
+
end
|
175
154
|
end
|
176
155
|
|
177
156
|
def create_call
|
data/test/telnyx/errors_test.rb
CHANGED
data/test/telnyx/fax_test.rb
CHANGED
data/test/telnyx/message_test.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
|
3
|
+
require_relative "../test_helper"
|
4
4
|
|
5
5
|
module Telnyx
|
6
6
|
class TelnyxClientTest < Test::Unit::TestCase
|
@@ -235,19 +235,17 @@ module Telnyx
|
|
235
235
|
|
236
236
|
context "Telnyx-Account header" do
|
237
237
|
should "use a globally set header" do
|
238
|
-
|
239
|
-
|
240
|
-
Telnyx.telnyx_account = "acct_1234"
|
238
|
+
old = Telnyx.telnyx_account
|
239
|
+
Telnyx.telnyx_account = "acct_1234"
|
241
240
|
|
242
|
-
|
243
|
-
|
244
|
-
|
241
|
+
stub_request(:post, "#{Telnyx.api_base}/v2/messaging_profiles")
|
242
|
+
.with(headers: { "Telnyx-Account" => Telnyx.telnyx_account })
|
243
|
+
.to_return(body: JSON.generate(object: "account"))
|
245
244
|
|
246
|
-
|
247
|
-
|
248
|
-
|
249
|
-
|
250
|
-
end
|
245
|
+
client = TelnyxClient.new
|
246
|
+
client.execute_request(:post, "/v2/messaging_profiles", params: { name: "foobar" })
|
247
|
+
ensure
|
248
|
+
Telnyx.telnyx_account = old
|
251
249
|
end
|
252
250
|
|
253
251
|
should "use a locally set header" do
|
@@ -274,40 +272,38 @@ module Telnyx
|
|
274
272
|
|
275
273
|
context "app_info" do
|
276
274
|
should "send app_info if set" do
|
277
|
-
|
278
|
-
|
279
|
-
|
280
|
-
|
281
|
-
|
282
|
-
|
283
|
-
|
284
|
-
)
|
275
|
+
old = Telnyx.app_info
|
276
|
+
Telnyx.set_app_info(
|
277
|
+
"MyAwesomePlugin",
|
278
|
+
partner_id: "partner_1234",
|
279
|
+
url: "https://myawesomeplugin.info",
|
280
|
+
version: "1.2.34"
|
281
|
+
)
|
285
282
|
|
286
|
-
|
287
|
-
|
288
|
-
|
289
|
-
|
290
|
-
|
291
|
-
|
283
|
+
stub_request(:post, "#{Telnyx.api_base}/v2/messaging_profiles")
|
284
|
+
.with do |req|
|
285
|
+
assert_equal \
|
286
|
+
"Telnyx/v2 RubyBindings/#{Telnyx::VERSION} " \
|
287
|
+
"MyAwesomePlugin/1.2.34 (https://myawesomeplugin.info)",
|
288
|
+
req.headers["User-Agent"]
|
292
289
|
|
293
|
-
|
294
|
-
|
290
|
+
data = JSON.parse(req.headers["X-Telnyx-Client-User-Agent"],
|
291
|
+
symbolize_names: true)
|
295
292
|
|
296
|
-
|
297
|
-
|
298
|
-
|
299
|
-
|
300
|
-
|
301
|
-
|
293
|
+
assert_equal({
|
294
|
+
name: "MyAwesomePlugin",
|
295
|
+
partner_id: "partner_1234",
|
296
|
+
url: "https://myawesomeplugin.info",
|
297
|
+
version: "1.2.34",
|
298
|
+
}, data[:application])
|
302
299
|
|
303
|
-
|
304
|
-
|
300
|
+
true
|
301
|
+
end.to_return(body: JSON.generate(record_type: "messaging_profile"))
|
305
302
|
|
306
|
-
|
307
|
-
|
308
|
-
|
309
|
-
|
310
|
-
end
|
303
|
+
client = TelnyxClient.new
|
304
|
+
client.execute_request(:post, "/v2/messaging_profiles")
|
305
|
+
ensure
|
306
|
+
Telnyx.app_info = old
|
311
307
|
end
|
312
308
|
end
|
313
309
|
|
@@ -591,16 +587,14 @@ module Telnyx
|
|
591
587
|
end
|
592
588
|
|
593
589
|
should "reset local thread state after a call" do
|
594
|
-
|
595
|
-
Thread.current[:telnyx_client] = :telnyx_client
|
590
|
+
Thread.current[:telnyx_client] = :telnyx_client
|
596
591
|
|
597
|
-
|
598
|
-
|
592
|
+
client = TelnyxClient.new
|
593
|
+
client.request {}
|
599
594
|
|
600
|
-
|
601
|
-
|
602
|
-
|
603
|
-
end
|
595
|
+
assert_equal :telnyx_client, Thread.current[:telnyx_client]
|
596
|
+
ensure
|
597
|
+
Thread.current[:telnyx_client] = nil
|
604
598
|
end
|
605
599
|
end
|
606
600
|
end
|
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
|
3
|
+
require_relative "../test_helper"
|
4
4
|
|
5
5
|
module Telnyx
|
6
6
|
class TelnyxObjectTest < Test::Unit::TestCase
|
@@ -159,21 +159,19 @@ module Telnyx
|
|
159
159
|
|
160
160
|
context "#to_hash" do
|
161
161
|
should "skip calling to_hash on nil" do
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
raise "Can't call to_hash on nil"
|
166
|
-
end
|
162
|
+
module NilWithToHash
|
163
|
+
def to_hash
|
164
|
+
raise "Can't call to_hash on nil"
|
167
165
|
end
|
168
|
-
::NilClass.include NilWithToHash
|
169
|
-
|
170
|
-
hash_with_nil = { id: 3, foo: nil }
|
171
|
-
obj = TelnyxObject.construct_from(hash_with_nil)
|
172
|
-
expected_hash = { id: 3, foo: nil }
|
173
|
-
assert_equal expected_hash, obj.to_hash
|
174
|
-
ensure
|
175
|
-
::NilClass.send(:undef_method, :to_hash)
|
176
166
|
end
|
167
|
+
::NilClass.include NilWithToHash
|
168
|
+
|
169
|
+
hash_with_nil = { id: 3, foo: nil }
|
170
|
+
obj = TelnyxObject.construct_from(hash_with_nil)
|
171
|
+
expected_hash = { id: 3, foo: nil }
|
172
|
+
assert_equal expected_hash, obj.to_hash
|
173
|
+
ensure
|
174
|
+
::NilClass.send(:undef_method, :to_hash)
|
177
175
|
end
|
178
176
|
|
179
177
|
should "recursively call to_hash on its values" do
|
data/test/telnyx/util_test.rb
CHANGED
@@ -1,10 +1,12 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require_relative "../test_helper"
|
4
|
+
|
3
5
|
module Telnyx
|
4
6
|
class VerificationTest < Test::Unit::TestCase
|
5
7
|
should "create verification" do
|
6
|
-
Verification.
|
7
|
-
assert_requested :post, "#{Telnyx.api_base}/v2/verifications"
|
8
|
+
Verification.call phone_number: "+15555555555", twofa_profile_id: "1234", type: "sms", verify_profile_id: "foobar"
|
9
|
+
assert_requested :post, "#{Telnyx.api_base}/v2/verifications/call"
|
8
10
|
end
|
9
11
|
|
10
12
|
should "retrieve verification" do
|
data/test/telnyx/webhook_test.rb
CHANGED
data/test/telnyx_test.rb
CHANGED
@@ -4,33 +4,29 @@ require ::File.expand_path("../test_helper", __FILE__)
|
|
4
4
|
|
5
5
|
class TelnyxTest < Test::Unit::TestCase
|
6
6
|
should "allow app_info to be configured" do
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
Telnyx.app_info = old
|
23
|
-
end
|
7
|
+
old = Telnyx.app_info
|
8
|
+
Telnyx.set_app_info(
|
9
|
+
"MyAwesomePlugin",
|
10
|
+
partner_id: "partner_1234",
|
11
|
+
url: "https://myawesomeplugin.info",
|
12
|
+
version: "1.2.34"
|
13
|
+
)
|
14
|
+
assert_equal({
|
15
|
+
name: "MyAwesomePlugin",
|
16
|
+
partner_id: "partner_1234",
|
17
|
+
url: "https://myawesomeplugin.info",
|
18
|
+
version: "1.2.34",
|
19
|
+
}, Telnyx.app_info)
|
20
|
+
ensure
|
21
|
+
Telnyx.app_info = old
|
24
22
|
end
|
25
23
|
|
26
24
|
should "allow max_network_retries to be configured" do
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
Telnyx.max_network_retries = old
|
33
|
-
end
|
25
|
+
old = Telnyx.max_network_retries
|
26
|
+
Telnyx.max_network_retries = 99
|
27
|
+
assert_equal 99, Telnyx.max_network_retries
|
28
|
+
ensure
|
29
|
+
Telnyx.max_network_retries = old
|
34
30
|
end
|
35
31
|
|
36
32
|
should "have default open and read timeouts" do
|
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: 2.
|
4
|
+
version: 2.7.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Telnyx
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-
|
11
|
+
date: 2021-07-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: faraday
|