nexmo 5.0.2 → 5.1.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/README.md +25 -5
- data/lib/nexmo.rb +1 -0
- data/lib/nexmo/client.rb +16 -4
- data/lib/nexmo/key_value_logger.rb +35 -0
- data/lib/nexmo/namespace.rb +43 -20
- data/lib/nexmo/pricing.rb +3 -1
- data/lib/nexmo/version.rb +1 -1
- metadata +4 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f4155d7a6a67606fc9bc5a9d43fe530585a4d160
|
4
|
+
data.tar.gz: 4be1b6e5b4bf2043b10a4f2c238ea283c60ceb85
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bd048ba74997b9900fc7ec2697478f6e5b2b6de7cebcd3849b12371e360770d2fd7f3f33939ce1af8e21a7d000ee558e71f2b44b9f139f3d576a00a6803d5067
|
7
|
+
data.tar.gz: fa30b6e1059ed7de07825e94f4e348245a3c6c007175d11fb95dc0be4519b3a682fe3adcde71c3196d6f5236db440cb9469ca3b9efd16ea79895e02fb10e401d
|
data/README.md
CHANGED
@@ -5,6 +5,7 @@
|
|
5
5
|
This is the Ruby client library for Nexmo's API. To use it you'll
|
6
6
|
need a Nexmo account. Sign up [for free at nexmo.com][signup].
|
7
7
|
|
8
|
+
* [Requirements](#requirements)
|
8
9
|
* [Installation](#installation)
|
9
10
|
* [Usage](#usage)
|
10
11
|
* [SMS API](#sms-api)
|
@@ -13,7 +14,10 @@ need a Nexmo account. Sign up [for free at nexmo.com][signup].
|
|
13
14
|
* [Number Insight API](#number-insight-api)
|
14
15
|
* [Application API](#application-api)
|
15
16
|
* [Numbers API](#numbers-api)
|
16
|
-
* [
|
17
|
+
* [Logging](#logging)
|
18
|
+
* [JWT authentication](#jwt-authentication)
|
19
|
+
* [Webhook signatures](#webhook-signatures)
|
20
|
+
* [API coverage](#api-coverage)
|
17
21
|
* [License](#license)
|
18
22
|
|
19
23
|
|
@@ -353,6 +357,23 @@ client.numbers.update(country: 'GB', msisdn: '447700900000', voice_callback_type
|
|
353
357
|
Docs: [https://developer.nexmo.com/api/developer/numbers#update-a-number](https://developer.nexmo.com/api/developer/numbers?utm_source=DEV_REL&utm_medium=github&utm_campaign=ruby-client-library#update-a-number)
|
354
358
|
|
355
359
|
|
360
|
+
## Logging
|
361
|
+
|
362
|
+
Use the logger option or attribute writer method to specify a logger. For example:
|
363
|
+
|
364
|
+
```ruby
|
365
|
+
require 'logger'
|
366
|
+
|
367
|
+
logger = Logger.new(STDOUT)
|
368
|
+
|
369
|
+
client = Nexmo::Client.new(logger: logger)
|
370
|
+
```
|
371
|
+
|
372
|
+
By default the library sets the logger to `Rails.logger` if it is defined.
|
373
|
+
|
374
|
+
To disable logging set the logger to `nil`.
|
375
|
+
|
376
|
+
|
356
377
|
## JWT authentication
|
357
378
|
|
358
379
|
By default the library generates a short lived JWT per request.
|
@@ -377,7 +398,7 @@ client.auth_token = auth_token
|
|
377
398
|
````
|
378
399
|
|
379
400
|
|
380
|
-
##
|
401
|
+
## Webhook signatures
|
381
402
|
|
382
403
|
```ruby
|
383
404
|
client = Nexmo::Client.new(signature_secret: 'secret')
|
@@ -391,11 +412,10 @@ end
|
|
391
412
|
|
392
413
|
Docs: [https://developer.nexmo.com/concepts/guides/signing-messages](https://developer.nexmo.com/concepts/guides/signing-messages?utm_source=DEV_REL&utm_medium=github&utm_campaign=ruby-client-library)
|
393
414
|
|
394
|
-
Note: you'll need to contact support@nexmo.com to enable message signing on
|
395
|
-
your account before you can validate webhook signatures.
|
415
|
+
Note: you'll need to contact support@nexmo.com to enable message signing on your account.
|
396
416
|
|
397
417
|
|
398
|
-
## API
|
418
|
+
## API coverage
|
399
419
|
|
400
420
|
* Account
|
401
421
|
* [X] Balance
|
data/lib/nexmo.rb
CHANGED
@@ -9,6 +9,7 @@ require 'nexmo/errors/error'
|
|
9
9
|
require 'nexmo/errors/client_error'
|
10
10
|
require 'nexmo/errors/server_error'
|
11
11
|
require 'nexmo/errors/authentication_error'
|
12
|
+
require 'nexmo/key_value_logger'
|
12
13
|
require 'nexmo/namespace'
|
13
14
|
require 'nexmo/client'
|
14
15
|
require 'nexmo/account'
|
data/lib/nexmo/client.rb
CHANGED
@@ -2,7 +2,13 @@
|
|
2
2
|
|
3
3
|
module Nexmo
|
4
4
|
class Client
|
5
|
-
|
5
|
+
attr_writer :api_key
|
6
|
+
attr_writer :api_secret
|
7
|
+
attr_writer :signature_secret
|
8
|
+
attr_writer :application_id
|
9
|
+
attr_writer :private_key
|
10
|
+
attr_accessor :user_agent
|
11
|
+
attr_accessor :auth_token
|
6
12
|
|
7
13
|
def initialize(options = {})
|
8
14
|
@api_key = options[:api_key] || ENV['NEXMO_API_KEY']
|
@@ -15,11 +21,17 @@ module Nexmo
|
|
15
21
|
|
16
22
|
@private_key = options[:private_key]
|
17
23
|
|
18
|
-
@
|
24
|
+
@user_agent = UserAgent.string(options[:app_name], options[:app_version])
|
19
25
|
|
20
|
-
|
26
|
+
self.logger = options[:logger] || (defined?(Rails.logger) && Rails.logger)
|
27
|
+
end
|
21
28
|
|
22
|
-
|
29
|
+
def logger
|
30
|
+
@logger
|
31
|
+
end
|
32
|
+
|
33
|
+
def logger=(logger)
|
34
|
+
@logger = Nexmo::KeyValueLogger.new(logger)
|
23
35
|
end
|
24
36
|
|
25
37
|
def authorization
|
@@ -0,0 +1,35 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Nexmo
|
4
|
+
class KeyValueLogger
|
5
|
+
def initialize(logger)
|
6
|
+
@logger = logger
|
7
|
+
end
|
8
|
+
|
9
|
+
def debug(message, data = nil)
|
10
|
+
@logger.debug(format(message, data)) if @logger
|
11
|
+
end
|
12
|
+
|
13
|
+
def info(message, data = nil)
|
14
|
+
@logger.info(format(message, data)) if @logger
|
15
|
+
end
|
16
|
+
|
17
|
+
def warning(message, data = nil)
|
18
|
+
@logger.warning(format(message, data)) if @logger
|
19
|
+
end
|
20
|
+
|
21
|
+
def error(message, data = nil)
|
22
|
+
@logger.error(format(message, data)) if @logger
|
23
|
+
end
|
24
|
+
|
25
|
+
private
|
26
|
+
|
27
|
+
def format(message, hash)
|
28
|
+
return message if hash.nil?
|
29
|
+
|
30
|
+
fields = hash.map { |key, value| "#{key}=#{value}" if value }.compact
|
31
|
+
fields.unshift(message)
|
32
|
+
fields.join(' ')
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
data/lib/nexmo/namespace.rb
CHANGED
@@ -5,6 +5,9 @@ module Nexmo
|
|
5
5
|
class Namespace
|
6
6
|
def initialize(client)
|
7
7
|
@client = client
|
8
|
+
|
9
|
+
@http = Net::HTTP.new(host, Net::HTTP.https_default_port)
|
10
|
+
@http.use_ssl = true
|
8
11
|
end
|
9
12
|
|
10
13
|
private
|
@@ -26,6 +29,10 @@ module Nexmo
|
|
26
29
|
false
|
27
30
|
end
|
28
31
|
|
32
|
+
def logger
|
33
|
+
@client.logger
|
34
|
+
end
|
35
|
+
|
29
36
|
def request(path, params: nil, type: Get, &block)
|
30
37
|
uri = URI('https://' + host + path)
|
31
38
|
|
@@ -40,41 +47,42 @@ module Nexmo
|
|
40
47
|
end
|
41
48
|
|
42
49
|
message = type.new(uri.request_uri)
|
43
|
-
|
44
|
-
if type::REQUEST_HAS_BODY
|
45
|
-
if json_body?
|
46
|
-
message['Content-Type'] = 'application/json'
|
47
|
-
message.body = JSON.generate(params)
|
48
|
-
else
|
49
|
-
message.form_data = params
|
50
|
-
end
|
51
|
-
end
|
52
|
-
|
53
50
|
message['Authorization'] = @client.authorization if authorization_header?
|
54
51
|
message['User-Agent'] = @client.user_agent
|
55
52
|
|
56
|
-
|
57
|
-
http.use_ssl = true
|
53
|
+
encode_body(params, message) if type::REQUEST_HAS_BODY
|
58
54
|
|
59
|
-
|
55
|
+
logger.info('Nexmo API request', method: message.method, path: uri.path)
|
56
|
+
|
57
|
+
response = @http.request(message)
|
60
58
|
|
61
59
|
parse(response, &block)
|
62
60
|
end
|
63
61
|
|
62
|
+
def encode_body(params, message)
|
63
|
+
if json_body?
|
64
|
+
message['Content-Type'] = 'application/json'
|
65
|
+
message.body = JSON.generate(params)
|
66
|
+
else
|
67
|
+
message.form_data = params
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
64
71
|
def parse(response, &block)
|
72
|
+
logger.info('Nexmo API response',
|
73
|
+
host: host,
|
74
|
+
status: response.code,
|
75
|
+
type: response.content_type,
|
76
|
+
length: response.content_length,
|
77
|
+
trace_id: response['x-nexmo-trace-id'])
|
78
|
+
|
65
79
|
case response
|
66
80
|
when Net::HTTPNoContent
|
67
81
|
:no_content
|
68
82
|
when Net::HTTPSuccess
|
69
83
|
parse_success(response, &block)
|
70
|
-
when Net::HTTPUnauthorized
|
71
|
-
raise AuthenticationError, "#{response.code} response from #{host}"
|
72
|
-
when Net::HTTPClientError
|
73
|
-
raise ClientError, "#{response.code} response from #{host}"
|
74
|
-
when Net::HTTPServerError
|
75
|
-
raise ServerError, "#{response.code} response from #{host}"
|
76
84
|
else
|
77
|
-
|
85
|
+
handle_error(response)
|
78
86
|
end
|
79
87
|
end
|
80
88
|
|
@@ -87,5 +95,20 @@ module Nexmo
|
|
87
95
|
response.body
|
88
96
|
end
|
89
97
|
end
|
98
|
+
|
99
|
+
def handle_error(response)
|
100
|
+
logger.debug(response.body)
|
101
|
+
|
102
|
+
case response
|
103
|
+
when Net::HTTPUnauthorized
|
104
|
+
raise AuthenticationError
|
105
|
+
when Net::HTTPClientError
|
106
|
+
raise ClientError
|
107
|
+
when Net::HTTPServerError
|
108
|
+
raise ServerError
|
109
|
+
else
|
110
|
+
raise Error
|
111
|
+
end
|
112
|
+
end
|
90
113
|
end
|
91
114
|
end
|
data/lib/nexmo/pricing.rb
CHANGED
data/lib/nexmo/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: nexmo
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 5.0
|
4
|
+
version: 5.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tim Craft
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-05-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: jwt
|
@@ -92,6 +92,7 @@ files:
|
|
92
92
|
- lib/nexmo/errors/server_error.rb
|
93
93
|
- lib/nexmo/files.rb
|
94
94
|
- lib/nexmo/jwt.rb
|
95
|
+
- lib/nexmo/key_value_logger.rb
|
95
96
|
- lib/nexmo/keys.rb
|
96
97
|
- lib/nexmo/messages.rb
|
97
98
|
- lib/nexmo/namespace.rb
|
@@ -126,7 +127,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
126
127
|
version: '0'
|
127
128
|
requirements: []
|
128
129
|
rubyforge_project:
|
129
|
-
rubygems_version: 2.6.
|
130
|
+
rubygems_version: 2.6.14.1
|
130
131
|
signing_key:
|
131
132
|
specification_version: 4
|
132
133
|
summary: This is the Ruby client library for Nexmo's API. To use it you'll need a
|