telnyx 0.0.5 → 2.2.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 +4 -4
- data/.travis.yml +2 -2
- data/Gemfile +1 -0
- data/README.md +42 -3
- data/VERSION +1 -1
- data/bin/telnyx-console +2 -1
- data/lib/telnyx.rb +19 -1
- data/lib/telnyx/address.rb +12 -0
- data/lib/telnyx/api_operations/list.rb +1 -1
- data/lib/telnyx/api_operations/nested_resource.rb +17 -4
- data/lib/telnyx/api_resource.rb +1 -1
- data/lib/telnyx/billing_group.rb +12 -0
- data/lib/telnyx/call_control_application.rb +12 -0
- data/lib/telnyx/{conferences.rb → conference.rb} +2 -1
- data/lib/telnyx/connection.rb +9 -0
- data/lib/telnyx/credential_connection.rb +12 -0
- data/lib/telnyx/fqdn.rb +12 -0
- data/lib/telnyx/fqdn_connection.rb +12 -0
- data/lib/telnyx/ip.rb +12 -0
- data/lib/telnyx/ip_connection.rb +12 -0
- data/lib/telnyx/list_object.rb +30 -44
- data/lib/telnyx/number_lookup.rb +7 -0
- data/lib/telnyx/number_order_document.rb +11 -0
- data/lib/telnyx/outbound_voice_profile.rb +12 -0
- data/lib/telnyx/phone_number.rb +44 -0
- data/lib/telnyx/phone_number_regulatory_requirement.rb +9 -0
- data/lib/telnyx/portout.rb +12 -0
- data/lib/telnyx/regulatory_requirement.rb +9 -0
- data/lib/telnyx/sim_card.rb +24 -0
- data/lib/telnyx/telnyx_client.rb +1 -1
- data/lib/telnyx/telnyx_response.rb +11 -2
- data/lib/telnyx/util.rb +31 -11
- data/lib/telnyx/version.rb +1 -1
- data/lib/telnyx/wireless_detail_records_report.rb +12 -0
- data/telnyx.gemspec +1 -1
- data/test/telnyx/address_test.rb +67 -0
- data/test/telnyx/alphanumeric_sender_id_test.rb +4 -0
- data/test/telnyx/api_resource_test.rb +14 -5
- data/test/telnyx/billing_group_test.rb +40 -0
- data/test/telnyx/call_control_application_test.rb +42 -0
- data/test/telnyx/{conferences_test.rb → conference_test.rb} +5 -5
- data/test/telnyx/connection_test.rb +28 -0
- data/test/telnyx/credential_connection_test.rb +40 -0
- data/test/telnyx/errors_test.rb +4 -4
- data/test/telnyx/fqdn_connection_test.rb +40 -0
- data/test/telnyx/fqdn_test.rb +40 -0
- data/test/telnyx/ip_connection_test.rb +40 -0
- data/test/telnyx/ip_test.rb +40 -0
- data/test/telnyx/list_object_test.rb +48 -90
- data/test/telnyx/messaging_profile_test.rb +15 -4
- data/test/telnyx/number_lookup_test.rb +18 -0
- data/test/telnyx/number_order_document_test.rb +35 -0
- data/test/telnyx/outbound_voice_profile_test.rb +67 -0
- data/test/telnyx/phone_number_regulatory_requirement_test.rb +14 -0
- data/test/telnyx/phone_number_test.rb +157 -0
- data/test/telnyx/public_key_test.rb +1 -0
- data/test/telnyx/regulatory_requirement_test.rb +21 -0
- data/test/telnyx/sim_card_test.rb +44 -0
- data/test/telnyx/telnyx_client_test.rb +11 -10
- data/test/telnyx/wireless_detail_records_report_test.rb +57 -0
- data/test/test_helper.rb +1 -1
- metadata +74 -10
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 312011d0dba1f1fc11299f526a0d628f40814e7ed43c233f4d9fc5acd5758b5f
|
4
|
+
data.tar.gz: 8f3c7bd28ec643dda8ff88d9896fb510bd5fa5832837dc15b5a1692e8efcb365
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d1552a7725c8cfb0da9195f507e3a02ec491c1ab1395358938dddc777c138ca5bf0af084fb1c15c379a71a1ac115f08d8c6fd5a5c9e0938e9e0cf35a8adccdc6
|
7
|
+
data.tar.gz: a0dac15edc3a119ec1b049733a679bff27a91fa2740e78b31669a392ddb79185523ff42cda40e7e821dd56cff6ca519ba033bacb3251a8d3ebf434eabb68316d
|
data/.travis.yml
CHANGED
@@ -11,7 +11,7 @@ rvm:
|
|
11
11
|
|
12
12
|
matrix:
|
13
13
|
include:
|
14
|
-
- rvm: jruby-
|
14
|
+
- rvm: jruby-9.2.11.0
|
15
15
|
jdk: oraclejdk11
|
16
16
|
|
17
17
|
|
@@ -26,7 +26,7 @@ sudo: false
|
|
26
26
|
env:
|
27
27
|
global:
|
28
28
|
# If changing this number, please also change it in `test/test_helper.rb`.
|
29
|
-
- TELNYX_MOCK_VERSION=0.
|
29
|
+
- TELNYX_MOCK_VERSION=0.8.9
|
30
30
|
|
31
31
|
cache:
|
32
32
|
directories:
|
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -1,7 +1,8 @@
|
|
1
1
|
# Telnyx Ruby Library
|
2
2
|
|
3
|
-
[](https://travis-ci.org/telnyx/telnyx-ruby)
|
4
|
-
[](https://coveralls.io/github/telnyx/telnyx-ruby?branch=master)
|
3
|
+
[](https://travis-ci.org/team-telnyx/telnyx-ruby)
|
4
|
+
[](https://coveralls.io/github/team-telnyx/telnyx-ruby?branch=master)
|
5
|
+
[](https://joinslack.telnyx.com/)
|
5
6
|
|
6
7
|
The Telnyx Ruby library provides convenient access to the Telnyx API from
|
7
8
|
applications written in the Ruby language. It includes a pre-defined set of
|
@@ -34,7 +35,7 @@ If you want to build the gem from source:
|
|
34
35
|
|
35
36
|
### Requirements
|
36
37
|
|
37
|
-
* Ruby 2.0
|
38
|
+
* Ruby 2.1.0+
|
38
39
|
|
39
40
|
### Bundler
|
40
41
|
|
@@ -65,6 +66,44 @@ Telnyx::MessagingProfile.list()
|
|
65
66
|
Telnyx::MessagingProfile.retrieve("123")
|
66
67
|
```
|
67
68
|
|
69
|
+
|
70
|
+
### Iterating over a resource
|
71
|
+
|
72
|
+
API resources are paginated and the library comes with a handful of methods to
|
73
|
+
ease dealing with them seemlessly.
|
74
|
+
|
75
|
+
```ruby
|
76
|
+
# list messaging profiles
|
77
|
+
first_page = Telnyx::MessagingProfile.list()
|
78
|
+
|
79
|
+
# check whether there are more pages to go through
|
80
|
+
if first_page.more?
|
81
|
+
puts("There are still more pages to go.")
|
82
|
+
else
|
83
|
+
puts("This is the last page.")
|
84
|
+
end
|
85
|
+
|
86
|
+
# get current page's size and number
|
87
|
+
first_page.page_size
|
88
|
+
first_page.page_number
|
89
|
+
|
90
|
+
# fetch the next and previous pages
|
91
|
+
second_page = first_page.next_page
|
92
|
+
first_page = second_page.previous_page
|
93
|
+
|
94
|
+
# iterate over the results of a *single page*
|
95
|
+
second_page.each do |messaging_profile|
|
96
|
+
puts(messaging_profile.id)
|
97
|
+
end
|
98
|
+
|
99
|
+
# iterate over *all of the messaging profiles* starting at `first_page`
|
100
|
+
# similar to `each`, but requests subsequent pages as needed
|
101
|
+
first_page.auto_paging_each do |messaging_profile|
|
102
|
+
puts(messaging_profile.id)
|
103
|
+
end
|
104
|
+
```
|
105
|
+
|
106
|
+
|
68
107
|
### Configuring a Client
|
69
108
|
|
70
109
|
While a default HTTP client is used by default, it's also possible to have the
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
1
|
+
0.0.1
|
data/bin/telnyx-console
CHANGED
data/lib/telnyx.rb
CHANGED
@@ -36,17 +36,35 @@ require "telnyx/api_resource"
|
|
36
36
|
require "telnyx/singleton_api_resource"
|
37
37
|
require "telnyx/webhook"
|
38
38
|
|
39
|
+
require "telnyx/address"
|
39
40
|
require "telnyx/alphanumeric_sender_id"
|
40
41
|
require "telnyx/available_phone_number"
|
42
|
+
require "telnyx/billing_group"
|
41
43
|
require "telnyx/call"
|
42
|
-
require "telnyx/
|
44
|
+
require "telnyx/conference"
|
45
|
+
require "telnyx/connection"
|
46
|
+
require "telnyx/call_control_application"
|
47
|
+
require "telnyx/credential_connection"
|
43
48
|
require "telnyx/event"
|
49
|
+
require "telnyx/fqdn_connection"
|
50
|
+
require "telnyx/fqdn"
|
51
|
+
require "telnyx/ip_connection"
|
52
|
+
require "telnyx/ip"
|
44
53
|
require "telnyx/message"
|
45
54
|
require "telnyx/messaging_phone_number"
|
46
55
|
require "telnyx/messaging_profile"
|
56
|
+
require "telnyx/number_lookup"
|
57
|
+
require "telnyx/number_order_document"
|
47
58
|
require "telnyx/number_order"
|
48
59
|
require "telnyx/number_reservation"
|
60
|
+
require "telnyx/outbound_voice_profile"
|
61
|
+
require "telnyx/phone_number_regulatory_requirement"
|
62
|
+
require "telnyx/phone_number"
|
63
|
+
require "telnyx/portout"
|
49
64
|
require "telnyx/public_key"
|
65
|
+
require "telnyx/regulatory_requirement"
|
66
|
+
require "telnyx/sim_card"
|
67
|
+
require "telnyx/wireless_detail_records_report"
|
50
68
|
|
51
69
|
module Telnyx
|
52
70
|
@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"
|
@@ -19,7 +20,8 @@ module Telnyx
|
|
19
20
|
|
20
21
|
resource_url_method = :"#{resource}s_url"
|
21
22
|
define_singleton_method(resource_url_method) do |id, nested_id = nil|
|
22
|
-
|
23
|
+
# raise ArgumentError, "id is required" if id.nil?
|
24
|
+
url = id.nil? ? "#{resource_url}/#{path}" : "#{resource_url}/#{CGI.escape(id)}/#{path}"
|
23
25
|
url += "/#{CGI.escape(nested_id)}" unless nested_id.nil?
|
24
26
|
url
|
25
27
|
end
|
@@ -28,8 +30,19 @@ module Telnyx
|
|
28
30
|
define_instance_method = lambda do |target_name, operation|
|
29
31
|
return unless instance_methods.keys.include? operation
|
30
32
|
|
31
|
-
|
32
|
-
|
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
|
33
46
|
end
|
34
47
|
end
|
35
48
|
|
data/lib/telnyx/api_resource.rb
CHANGED
@@ -20,7 +20,7 @@ module Telnyx
|
|
20
20
|
end
|
21
21
|
# Namespaces are separated in object names with periods (.) and in URLs
|
22
22
|
# with forward slashes (/), so replace the former with the latter.
|
23
|
-
"/v2/#{self::OBJECT_NAME.downcase.tr('.', '/')}s"
|
23
|
+
const_defined?("RESOURCE_PATH") ? "/v2/#{self::RESOURCE_PATH}" : "/v2/#{self::OBJECT_NAME.downcase.tr('.', '/')}s"
|
24
24
|
end
|
25
25
|
|
26
26
|
# A metaprogramming call that specifies that a field of a resource can be
|
@@ -0,0 +1,12 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Telnyx
|
4
|
+
class BillingGroup < APIResource
|
5
|
+
extend APIOperations::List
|
6
|
+
extend APIOperations::Create
|
7
|
+
include APIOperations::Delete
|
8
|
+
include APIOperations::Save
|
9
|
+
|
10
|
+
OBJECT_NAME = "billing_group".freeze
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Telnyx
|
4
|
+
class CallControlApplication < APIResource
|
5
|
+
extend APIOperations::List
|
6
|
+
extend APIOperations::Create
|
7
|
+
include APIOperations::Delete
|
8
|
+
include APIOperations::Save
|
9
|
+
|
10
|
+
OBJECT_NAME = "call_control_application".freeze
|
11
|
+
end
|
12
|
+
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
module Telnyx
|
4
|
-
class
|
4
|
+
class Conference < APIResource
|
5
5
|
extend APIOperations::List
|
6
6
|
extend APIOperations::Create
|
7
7
|
extend APIOperations::NestedResource
|
@@ -16,4 +16,5 @@ module Telnyx
|
|
16
16
|
end
|
17
17
|
OBJECT_NAME = "conference".freeze
|
18
18
|
end
|
19
|
+
Conferences = Conference # Name change without breaking existing code
|
19
20
|
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Telnyx
|
4
|
+
class CredentialConnection < APIResource
|
5
|
+
extend Telnyx::APIOperations::List
|
6
|
+
extend Telnyx::APIOperations::Create
|
7
|
+
include Telnyx::APIOperations::Save
|
8
|
+
include Telnyx::APIOperations::Delete
|
9
|
+
|
10
|
+
OBJECT_NAME = "credential_connection".freeze
|
11
|
+
end
|
12
|
+
end
|
data/lib/telnyx/fqdn.rb
ADDED
@@ -0,0 +1,12 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Telnyx
|
4
|
+
class FQDN < APIResource
|
5
|
+
extend Telnyx::APIOperations::List
|
6
|
+
extend Telnyx::APIOperations::Create
|
7
|
+
include Telnyx::APIOperations::Delete
|
8
|
+
include Telnyx::APIOperations::Save
|
9
|
+
|
10
|
+
OBJECT_NAME = "fqdn".freeze
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Telnyx
|
4
|
+
class FQDNConnection < APIResource
|
5
|
+
extend Telnyx::APIOperations::List
|
6
|
+
extend Telnyx::APIOperations::Create
|
7
|
+
include Telnyx::APIOperations::Delete
|
8
|
+
include Telnyx::APIOperations::Save
|
9
|
+
|
10
|
+
OBJECT_NAME = "fqdn_connection".freeze
|
11
|
+
end
|
12
|
+
end
|
data/lib/telnyx/ip.rb
ADDED
@@ -0,0 +1,12 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Telnyx
|
4
|
+
class IP < APIResource
|
5
|
+
extend Telnyx::APIOperations::List
|
6
|
+
extend Telnyx::APIOperations::Create
|
7
|
+
include Telnyx::APIOperations::Delete
|
8
|
+
include Telnyx::APIOperations::Save
|
9
|
+
|
10
|
+
OBJECT_NAME = "ip".freeze
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Telnyx
|
4
|
+
class IPConnection < APIResource
|
5
|
+
extend APIOperations::List
|
6
|
+
extend APIOperations::Create
|
7
|
+
include APIOperations::Delete
|
8
|
+
include APIOperations::Save
|
9
|
+
|
10
|
+
OBJECT_NAME = "ip_connection".freeze
|
11
|
+
end
|
12
|
+
end
|
data/lib/telnyx/list_object.rb
CHANGED
@@ -59,23 +59,6 @@ module Telnyx
|
|
59
59
|
end
|
60
60
|
end
|
61
61
|
|
62
|
-
# Iterates through each resource in all pages, making additional fetches to
|
63
|
-
# the API as necessary.
|
64
|
-
#
|
65
|
-
# Note that this method will make as many API calls as necessary to fetch
|
66
|
-
# all resources. For more granular control, please see +each+ and
|
67
|
-
# +next_page_by_token+.
|
68
|
-
def auto_paging_each_by_token(&blk)
|
69
|
-
return enum_for(:auto_paging_each_by_token) unless block_given?
|
70
|
-
|
71
|
-
page = self
|
72
|
-
loop do
|
73
|
-
page.each(&blk)
|
74
|
-
page = page.next_page_by_token
|
75
|
-
break if page.empty?
|
76
|
-
end
|
77
|
-
end
|
78
|
-
|
79
62
|
# Returns true if the page object contains no elements.
|
80
63
|
def empty?
|
81
64
|
data.empty?
|
@@ -98,15 +81,7 @@ module Telnyx
|
|
98
81
|
def next_page(params = {}, opts = {})
|
99
82
|
return self.class.empty_list(opts) unless more?
|
100
83
|
next_page_number = page_number.to_i + 1
|
101
|
-
pagination = { number: next_page_number, size:
|
102
|
-
params = filters.merge(params).merge(page: pagination)
|
103
|
-
|
104
|
-
list(params, opts)
|
105
|
-
end
|
106
|
-
|
107
|
-
def next_page_by_token(params = {}, opts = {})
|
108
|
-
return self.class.empty_list(opts) unless token
|
109
|
-
pagination = { token: token }
|
84
|
+
pagination = { number: next_page_number, size: filter_page_size }
|
110
85
|
params = filters.merge(params).merge(page: pagination)
|
111
86
|
|
112
87
|
list(params, opts)
|
@@ -119,37 +94,48 @@ module Telnyx
|
|
119
94
|
def previous_page(params = {}, opts = {})
|
120
95
|
prev_page_number = page_number.to_i - 1
|
121
96
|
prev_page_number = [prev_page_number, 1].max
|
122
|
-
pagination = { number: prev_page_number, size:
|
97
|
+
pagination = { number: prev_page_number, size: filter_page_size }
|
123
98
|
params = filters.merge(params).merge(page: pagination)
|
124
99
|
|
125
100
|
list(params, opts)
|
126
101
|
end
|
127
102
|
|
128
|
-
# Fetch the current page size
|
129
|
-
def page_size
|
130
|
-
|
131
|
-
params[:page][:size]
|
132
|
-
else
|
133
|
-
20
|
134
|
-
end
|
103
|
+
# Fetch the current page size from metadata.
|
104
|
+
def page_size
|
105
|
+
from_meta(:page_size, 20)
|
135
106
|
end
|
136
107
|
|
137
|
-
# Fetch the current page number
|
108
|
+
# Fetch the current page number from metadata.
|
138
109
|
def page_number
|
139
|
-
|
140
|
-
meta.page_number
|
141
|
-
else
|
142
|
-
1
|
143
|
-
end
|
144
|
-
end
|
145
|
-
|
146
|
-
def token
|
147
|
-
return meta.next_page_token if meta && meta[:next_page_token]
|
110
|
+
from_meta(:page_number, 1)
|
148
111
|
end
|
149
112
|
|
150
113
|
def resource_url
|
151
114
|
url ||
|
152
115
|
raise(ArgumentError, "List object does not contain a 'url' field.")
|
153
116
|
end
|
117
|
+
|
118
|
+
private
|
119
|
+
|
120
|
+
# Determine page size from filters
|
121
|
+
def filter_page_size
|
122
|
+
if filters && filters[:page] && filters[:page][:size]
|
123
|
+
filters[:page][:size]
|
124
|
+
else
|
125
|
+
20
|
126
|
+
end
|
127
|
+
end
|
128
|
+
|
129
|
+
# Fetches `attribute` from current page metada. If it's not found returns
|
130
|
+
# `default`, which defaults to `nil`.
|
131
|
+
def from_meta(attribute, default = nil)
|
132
|
+
attribute = attribute.to_sym
|
133
|
+
|
134
|
+
if meta && meta[attribute]
|
135
|
+
meta.public_send(attribute)
|
136
|
+
else
|
137
|
+
default
|
138
|
+
end
|
139
|
+
end
|
154
140
|
end
|
155
141
|
end
|