nexmo 5.9.0 → 6.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +35 -465
- data/lib/nexmo.rb +31 -48
- data/lib/nexmo/{authentication/abstract.rb → abstract_authentication.rb} +2 -2
- data/lib/nexmo/account.rb +4 -2
- data/lib/nexmo/alerts.rb +3 -3
- data/lib/nexmo/applications.rb +45 -63
- data/lib/nexmo/applications/list_response.rb +9 -0
- data/lib/nexmo/{errors/authentication_error.rb → authentication_error.rb} +0 -0
- data/lib/nexmo/{authentication/basic.rb → basic.rb} +1 -1
- data/lib/nexmo/{authentication/bearer_token.rb → bearer_token.rb} +1 -1
- data/lib/nexmo/calls.rb +18 -18
- data/lib/nexmo/{call_dtmf.rb → calls/dtmf.rb} +2 -2
- data/lib/nexmo/calls/list_response.rb +9 -0
- data/lib/nexmo/{call_stream.rb → calls/stream.rb} +3 -3
- data/lib/nexmo/{call_talk.rb → calls/talk.rb} +3 -3
- data/lib/nexmo/client.rb +20 -169
- data/lib/nexmo/{errors/client_error.rb → client_error.rb} +0 -0
- data/lib/nexmo/config.rb +165 -0
- data/lib/nexmo/conversations.rb +44 -13
- data/lib/nexmo/{conversation_events.rb → conversations/events.rb} +5 -5
- data/lib/nexmo/{conversation_legs.rb → conversations/legs.rb} +3 -3
- data/lib/nexmo/{conversation_members.rb → conversations/members.rb} +6 -6
- data/lib/nexmo/{conversation_users.rb → conversations/users.rb} +6 -6
- data/lib/nexmo/entity.rb +14 -0
- data/lib/nexmo/{errors/error.rb → error.rb} +0 -0
- data/lib/nexmo/files.rb +1 -2
- data/lib/nexmo/gsm7.rb +13 -0
- data/lib/nexmo/{authentication/key_secret_params.rb → key_secret_params.rb} +2 -2
- data/lib/nexmo/{authentication/key_secret_query.rb → key_secret_query.rb} +2 -2
- data/lib/nexmo/keys.rb +4 -22
- data/lib/nexmo/namespace.rb +22 -12
- data/lib/nexmo/number_insight.rb +6 -4
- data/lib/nexmo/number_insight/response.rb +5 -0
- data/lib/nexmo/numbers.rb +20 -12
- data/lib/nexmo/numbers/list_response.rb +9 -0
- data/lib/nexmo/numbers/response.rb +7 -0
- data/lib/nexmo/pricing.rb +2 -2
- data/lib/nexmo/pricing_types.rb +4 -4
- data/lib/nexmo/redact.rb +1 -1
- data/lib/nexmo/response.rb +23 -0
- data/lib/nexmo/secrets.rb +7 -7
- data/lib/nexmo/secrets/list_response.rb +9 -0
- data/lib/nexmo/{errors/server_error.rb → server_error.rb} +0 -0
- data/lib/nexmo/sms.rb +17 -3
- data/lib/nexmo/sms/response.rb +7 -0
- data/lib/nexmo/verify.rb +10 -8
- data/lib/nexmo/verify/response.rb +5 -0
- data/lib/nexmo/version.rb +1 -1
- data/nexmo.gemspec +4 -2
- metadata +45 -20
- data/lib/nexmo/applications_v2.rb +0 -102
data/lib/nexmo/conversations.rb
CHANGED
@@ -28,7 +28,7 @@ module Nexmo
|
|
28
28
|
# @option params [Hash] :properties
|
29
29
|
# - **:ttl** (Integer) After how many seconds an empty conversation is deleted
|
30
30
|
#
|
31
|
-
# @return [
|
31
|
+
# @return [Response]
|
32
32
|
#
|
33
33
|
# @see https://developer.nexmo.com/api/conversation#createConversation
|
34
34
|
#
|
@@ -58,7 +58,7 @@ module Nexmo
|
|
58
58
|
#
|
59
59
|
# @param [Hash, nil] params
|
60
60
|
#
|
61
|
-
# @return [
|
61
|
+
# @return [Response]
|
62
62
|
#
|
63
63
|
# @see https://developer.nexmo.com/api/conversation#replaceConversation
|
64
64
|
#
|
@@ -73,7 +73,7 @@ module Nexmo
|
|
73
73
|
#
|
74
74
|
# @param [String] id
|
75
75
|
#
|
76
|
-
# @return [
|
76
|
+
# @return [Response]
|
77
77
|
#
|
78
78
|
# @see https://developer.nexmo.com/api/conversation#retrieveConversation
|
79
79
|
#
|
@@ -105,7 +105,7 @@ module Nexmo
|
|
105
105
|
# @param [String] id
|
106
106
|
# @param [Hash] params
|
107
107
|
#
|
108
|
-
# @return [
|
108
|
+
# @return [Response]
|
109
109
|
#
|
110
110
|
# @see https://developer.nexmo.com/api/conversation#replaceConversation
|
111
111
|
#
|
@@ -120,7 +120,7 @@ module Nexmo
|
|
120
120
|
#
|
121
121
|
# @param [String] id
|
122
122
|
#
|
123
|
-
# @return [
|
123
|
+
# @return [Response]
|
124
124
|
#
|
125
125
|
# @see https://developer.nexmo.com/api/conversation#deleteConversation
|
126
126
|
#
|
@@ -128,28 +128,59 @@ module Nexmo
|
|
128
128
|
request('/beta/conversations/' + id, type: Delete)
|
129
129
|
end
|
130
130
|
|
131
|
-
#
|
131
|
+
# Record a conversation.
|
132
|
+
#
|
133
|
+
# @example
|
134
|
+
# response = client.conversations.record(id, action: 'start')
|
135
|
+
#
|
136
|
+
# @option params [String] :action
|
137
|
+
# Recording action. Must be one of `start` or `stop`.
|
138
|
+
#
|
139
|
+
# @option params [String] :event_url
|
140
|
+
# The webhook endpoint where recording progress events are sent to.
|
141
|
+
#
|
142
|
+
# @option params [String] :event_method
|
143
|
+
# The HTTP method used to send event information to **:event_url**.
|
144
|
+
#
|
145
|
+
# @option params [String] :split
|
146
|
+
# Record the sent and received audio in separate channels of a stereo recording.
|
147
|
+
#
|
148
|
+
# @option params [String] :format
|
149
|
+
# Record the conversation in a specific format.
|
150
|
+
#
|
151
|
+
# @param [String] id
|
152
|
+
# @param [Hash] params
|
153
|
+
#
|
154
|
+
# @return [Response]
|
155
|
+
#
|
156
|
+
# @see https://developer.nexmo.com/api/conversation#recordConversation
|
157
|
+
#
|
158
|
+
def record(id, params)
|
159
|
+
request('/beta/conversations/' + id + '/record', params: params, type: Put)
|
160
|
+
end
|
161
|
+
|
162
|
+
# @return [Events]
|
132
163
|
#
|
133
164
|
def events
|
134
|
-
@events ||=
|
165
|
+
@events ||= Events.new(@config)
|
135
166
|
end
|
136
167
|
|
137
|
-
# @return [
|
168
|
+
# @return [Legs]
|
138
169
|
#
|
139
170
|
def legs
|
140
|
-
@legs ||=
|
171
|
+
@legs ||= Legs.new(@config)
|
141
172
|
end
|
142
173
|
|
143
|
-
# @return [
|
174
|
+
# @return [Members]
|
144
175
|
#
|
145
176
|
def members
|
146
|
-
@members ||=
|
177
|
+
@members ||= Members.new(@config)
|
147
178
|
end
|
148
179
|
|
149
|
-
# @return [
|
180
|
+
# @return [Users]
|
150
181
|
#
|
151
182
|
def users
|
152
|
-
@users ||=
|
183
|
+
@users ||= Users.new(@config)
|
153
184
|
end
|
154
185
|
end
|
155
186
|
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
module Nexmo
|
4
|
-
class
|
4
|
+
class Conversations::Events < Namespace
|
5
5
|
self.authentication = BearerToken
|
6
6
|
|
7
7
|
self.request_body = JSON
|
@@ -23,7 +23,7 @@ module Nexmo
|
|
23
23
|
# @param [String] conversation_id
|
24
24
|
# @param [Hash] params
|
25
25
|
#
|
26
|
-
# @return [
|
26
|
+
# @return [Response]
|
27
27
|
#
|
28
28
|
# @see https://developer.nexmo.com/api/conversation#createEvent
|
29
29
|
#
|
@@ -35,7 +35,7 @@ module Nexmo
|
|
35
35
|
#
|
36
36
|
# @param [String] conversation_id
|
37
37
|
#
|
38
|
-
# @return [
|
38
|
+
# @return [Response]
|
39
39
|
#
|
40
40
|
# @see https://developer.nexmo.com/api/conversation#getEvents
|
41
41
|
#
|
@@ -48,7 +48,7 @@ module Nexmo
|
|
48
48
|
# @param [String] conversation_id
|
49
49
|
# @param [String] event_id
|
50
50
|
#
|
51
|
-
# @return [
|
51
|
+
# @return [Response]
|
52
52
|
#
|
53
53
|
# @see https://developer.nexmo.com/api/conversation#getEvent
|
54
54
|
#
|
@@ -61,7 +61,7 @@ module Nexmo
|
|
61
61
|
# @param [String] conversation_id
|
62
62
|
# @param [String] event_id
|
63
63
|
#
|
64
|
-
# @return [
|
64
|
+
# @return [Response]
|
65
65
|
#
|
66
66
|
# @see https://developer.nexmo.com/api/conversation#deleteEvent
|
67
67
|
#
|
@@ -1,12 +1,12 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
module Nexmo
|
4
|
-
class
|
4
|
+
class Conversations::Legs < Namespace
|
5
5
|
self.authentication = BearerToken
|
6
6
|
|
7
7
|
# List legs.
|
8
8
|
#
|
9
|
-
# @return [
|
9
|
+
# @return [Response]
|
10
10
|
#
|
11
11
|
# @see https://developer.nexmo.com/api/conversation#listLegs
|
12
12
|
#
|
@@ -18,7 +18,7 @@ module Nexmo
|
|
18
18
|
#
|
19
19
|
# @param [String] leg_id
|
20
20
|
#
|
21
|
-
# @return [
|
21
|
+
# @return [Response]
|
22
22
|
#
|
23
23
|
# @see https://developer.nexmo.com/api/conversation#deleteLeg
|
24
24
|
#
|
@@ -1,7 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
module Nexmo
|
4
|
-
class
|
4
|
+
class Conversations::Members < Namespace
|
5
5
|
self.authentication = BearerToken
|
6
6
|
|
7
7
|
self.request_body = JSON
|
@@ -34,7 +34,7 @@ module Nexmo
|
|
34
34
|
# @param [String] conversation_id
|
35
35
|
# @param [Hash] params
|
36
36
|
#
|
37
|
-
# @return [
|
37
|
+
# @return [Response]
|
38
38
|
#
|
39
39
|
# @see https://developer.nexmo.com/api/conversation#createMember
|
40
40
|
#
|
@@ -46,7 +46,7 @@ module Nexmo
|
|
46
46
|
#
|
47
47
|
# @param [String] conversation_id
|
48
48
|
#
|
49
|
-
# @return [
|
49
|
+
# @return [Response]
|
50
50
|
#
|
51
51
|
# @see https://developer.nexmo.com/api/conversation#getMembers
|
52
52
|
#
|
@@ -59,7 +59,7 @@ module Nexmo
|
|
59
59
|
# @param [String] conversation_id
|
60
60
|
# @param [String] member_id
|
61
61
|
#
|
62
|
-
# @return [
|
62
|
+
# @return [Response]
|
63
63
|
#
|
64
64
|
# @see https://developer.nexmo.com/api/conversation#getMember
|
65
65
|
#
|
@@ -79,7 +79,7 @@ module Nexmo
|
|
79
79
|
# @param [String] member_id
|
80
80
|
# @param [Hash] params
|
81
81
|
#
|
82
|
-
# @return [
|
82
|
+
# @return [Response]
|
83
83
|
#
|
84
84
|
# @see https://developer.nexmo.com/api/conversation#updateMember
|
85
85
|
#
|
@@ -92,7 +92,7 @@ module Nexmo
|
|
92
92
|
# @param [String] conversation_id
|
93
93
|
# @param [String] member_id
|
94
94
|
#
|
95
|
-
# @return [
|
95
|
+
# @return [Response]
|
96
96
|
#
|
97
97
|
# @see https://developer.nexmo.com/api/conversation#deleteMember
|
98
98
|
#
|
@@ -1,7 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
module Nexmo
|
4
|
-
class
|
4
|
+
class Conversations::Users < Namespace
|
5
5
|
self.authentication = BearerToken
|
6
6
|
|
7
7
|
self.request_body = JSON
|
@@ -20,7 +20,7 @@ module Nexmo
|
|
20
20
|
#
|
21
21
|
# @param [Hash] params
|
22
22
|
#
|
23
|
-
# @return [
|
23
|
+
# @return [Response]
|
24
24
|
#
|
25
25
|
# @see https://developer.nexmo.com/api/conversation#createUser
|
26
26
|
#
|
@@ -30,7 +30,7 @@ module Nexmo
|
|
30
30
|
|
31
31
|
# List users.
|
32
32
|
#
|
33
|
-
# @return [
|
33
|
+
# @return [Response]
|
34
34
|
#
|
35
35
|
# @see https://developer.nexmo.com/api/conversation#getUsers
|
36
36
|
#
|
@@ -42,7 +42,7 @@ module Nexmo
|
|
42
42
|
#
|
43
43
|
# @param [String] id
|
44
44
|
#
|
45
|
-
# @return [
|
45
|
+
# @return [Response]
|
46
46
|
#
|
47
47
|
# @see https://developer.nexmo.com/api/conversation#getUser
|
48
48
|
#
|
@@ -69,7 +69,7 @@ module Nexmo
|
|
69
69
|
# @param [String] id
|
70
70
|
# @param [Hash] params
|
71
71
|
#
|
72
|
-
# @return [
|
72
|
+
# @return [Response]
|
73
73
|
#
|
74
74
|
# @see https://developer.nexmo.com/api/conversation#updateUser
|
75
75
|
#
|
@@ -81,7 +81,7 @@ module Nexmo
|
|
81
81
|
#
|
82
82
|
# @param [String] id
|
83
83
|
#
|
84
|
-
# @return [
|
84
|
+
# @return [Response]
|
85
85
|
#
|
86
86
|
# @see https://developer.nexmo.com/api/conversation#deleteUser
|
87
87
|
#
|
data/lib/nexmo/entity.rb
CHANGED
@@ -6,6 +6,10 @@ module Nexmo
|
|
6
6
|
@attributes = kwargs
|
7
7
|
end
|
8
8
|
|
9
|
+
def [](key)
|
10
|
+
@attributes[attribute_key(key)]
|
11
|
+
end
|
12
|
+
|
9
13
|
def []=(key, value)
|
10
14
|
@attributes[attribute_key(key)] = value
|
11
15
|
end
|
@@ -31,5 +35,15 @@ module Nexmo
|
|
31
35
|
attr_reader :attributes
|
32
36
|
|
33
37
|
protected :attributes
|
38
|
+
|
39
|
+
def each_pair(&block)
|
40
|
+
return to_enum(:each_pair) unless block
|
41
|
+
|
42
|
+
@attributes.each_pair(&block)
|
43
|
+
end
|
44
|
+
|
45
|
+
alias_method :each, :each_pair
|
46
|
+
|
47
|
+
include Enumerable
|
34
48
|
end
|
35
49
|
end
|
File without changes
|
data/lib/nexmo/files.rb
CHANGED
data/lib/nexmo/gsm7.rb
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
module Nexmo
|
2
|
+
module GSM7
|
3
|
+
CHARACTERS = "\n\f\r !\"\#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_abcdefghijklmnopqrstuvwxyz{|}~ ¡£¤¥§¿ÄÅÆÉÑÖØÜßàäåæçèéìñòöøùüΓΔΘΛΞΠΣΦΨΩ€"
|
4
|
+
|
5
|
+
REGEXP = /\A[#{Regexp.escape(CHARACTERS)}]*\z/
|
6
|
+
|
7
|
+
def self.encoded?(string)
|
8
|
+
REGEXP =~ string
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
private_constant :GSM7
|
13
|
+
end
|
data/lib/nexmo/keys.rb
CHANGED
@@ -2,30 +2,12 @@
|
|
2
2
|
|
3
3
|
module Nexmo
|
4
4
|
module Keys
|
5
|
-
|
6
|
-
|
7
|
-
hash.transform_keys { |k| hyphenate_key(k) }
|
8
|
-
end
|
9
|
-
|
10
|
-
def camelcase(hash)
|
11
|
-
hash.transform_keys { |k| camelcase_key(k) }
|
12
|
-
end
|
13
|
-
else
|
14
|
-
def hyphenate(hash)
|
15
|
-
hash.each_with_object({}) { |(k, v), h| h[hyphenate_key(k)] = v }
|
16
|
-
end
|
17
|
-
|
18
|
-
def camelcase(hash)
|
19
|
-
hash.each_with_object({}) { |(k, v), h| h[camelcase_key(k)] = v }
|
20
|
-
end
|
5
|
+
def hyphenate(hash)
|
6
|
+
hash.transform_keys { |k| k.to_s.tr('_', '-') }
|
21
7
|
end
|
22
8
|
|
23
|
-
def
|
24
|
-
k.to_s.
|
25
|
-
end
|
26
|
-
|
27
|
-
def camelcase_key(k)
|
28
|
-
k.to_s.gsub(/_(\w)/) { $1.upcase }
|
9
|
+
def camelcase(hash)
|
10
|
+
hash.transform_keys { |k| k.to_s.gsub(/_(\w)/) { $1.upcase } }
|
29
11
|
end
|
30
12
|
|
31
13
|
ATTRIBUTE_KEYS = Hash.new { |h, k| h[k] = k.split(PATTERN).join('_').downcase.to_sym }
|
data/lib/nexmo/namespace.rb
CHANGED
@@ -4,17 +4,17 @@ require 'json'
|
|
4
4
|
|
5
5
|
module Nexmo
|
6
6
|
class Namespace
|
7
|
-
def initialize(
|
8
|
-
@
|
7
|
+
def initialize(config)
|
8
|
+
@config = config
|
9
9
|
|
10
|
-
@logger =
|
10
|
+
@logger = config.logger
|
11
11
|
|
12
12
|
@host = self.class.host
|
13
13
|
|
14
14
|
@http = Net::HTTP.new(@host, Net::HTTP.https_default_port, p_addr = nil)
|
15
15
|
@http.use_ssl = true
|
16
16
|
|
17
|
-
@
|
17
|
+
@config.http.set(@http) unless @config.http.nil?
|
18
18
|
end
|
19
19
|
|
20
20
|
def self.host
|
@@ -45,6 +45,14 @@ module Nexmo
|
|
45
45
|
@request_headers ||= {}
|
46
46
|
end
|
47
47
|
|
48
|
+
def self.response_class
|
49
|
+
@response_class ||= Response
|
50
|
+
end
|
51
|
+
|
52
|
+
def self.response_class=(response_class)
|
53
|
+
@response_class = response_class
|
54
|
+
end
|
55
|
+
|
48
56
|
private
|
49
57
|
|
50
58
|
Get = Net::HTTP::Get
|
@@ -52,12 +60,12 @@ module Nexmo
|
|
52
60
|
Post = Net::HTTP::Post
|
53
61
|
Delete = Net::HTTP::Delete
|
54
62
|
|
55
|
-
def request(path, params: nil, type: Get, &block)
|
63
|
+
def request(path, params: nil, type: Get, response_class: nil, &block)
|
56
64
|
uri = URI('https://' + @host + path)
|
57
65
|
|
58
66
|
params ||= {}
|
59
67
|
|
60
|
-
authentication = self.class.authentication.new(@
|
68
|
+
authentication = self.class.authentication.new(@config)
|
61
69
|
authentication.update(params)
|
62
70
|
|
63
71
|
unless type::REQUEST_HAS_BODY || params.empty?
|
@@ -68,7 +76,7 @@ module Nexmo
|
|
68
76
|
|
69
77
|
message = type.new(uri)
|
70
78
|
|
71
|
-
message['User-Agent'] = @
|
79
|
+
message['User-Agent'] = UserAgent.string(@config.app_name, @config.app_version)
|
72
80
|
|
73
81
|
self.class.request_headers.each do |key, value|
|
74
82
|
message[key] = value
|
@@ -88,18 +96,20 @@ module Nexmo
|
|
88
96
|
|
89
97
|
@logger.debug(response.body) if response.body
|
90
98
|
|
91
|
-
parse(response)
|
99
|
+
parse(response, response_class || self.class.response_class)
|
92
100
|
end
|
93
101
|
|
94
|
-
def parse(response)
|
102
|
+
def parse(response, response_class)
|
95
103
|
case response
|
96
104
|
when Net::HTTPNoContent
|
97
|
-
|
105
|
+
response_class.new(nil, response)
|
98
106
|
when Net::HTTPSuccess
|
99
107
|
if response['Content-Type'].split(';').first == 'application/json'
|
100
|
-
::JSON.parse(response.body, object_class: Nexmo::Entity)
|
108
|
+
entity = ::JSON.parse(response.body, object_class: Nexmo::Entity)
|
109
|
+
|
110
|
+
response_class.new(entity, response)
|
101
111
|
else
|
102
|
-
response
|
112
|
+
response_class.new(nil, response)
|
103
113
|
end
|
104
114
|
else
|
105
115
|
raise Errors.parse(response)
|