ringcentral-sdk 0.8.2 → 0.9.6
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 +5 -5
- data/README.md +82 -22
- data/lib/ringcentral.rb +25 -11
- data/lib/subscription.rb +4 -3
- data/ringcentral-sdk.gemspec +6 -5
- data/spec/fax_spec.rb +4 -4
- data/spec/mms_spec.rb +5 -5
- data/spec/query_params_spec.rb +22 -0
- data/spec/ringcentral_spec.rb +16 -16
- data/spec/subscription_spec.rb +8 -8
- metadata +47 -26
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 1540372aa98b7028d885a28cc968a3348cf39c19611e2d86dbbcd67e115152bd
|
4
|
+
data.tar.gz: d6e4c9cbacec4d74422b2c692ac0f99e4213191e7ec47e43d5205776b1c60808
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: accae1e8fa5df89849746124c4f5f51587b7c9d67c4bf8498d5c726bbc541719a2b2117aa278535271cba3ddc0602b76827140a6a2bc25fec3a4fae1613eecef
|
7
|
+
data.tar.gz: ba5d969dabb7b891f2b22597097388e2c7a08dff9262dcd209be7bdbaa9da49c35ce18b48502fb982889c4a7a138128e79c9e2c6ecdcebbcccb41c9cc5ca8676
|
data/README.md
CHANGED
@@ -1,9 +1,17 @@
|
|
1
|
-
#
|
1
|
+
# RingCentral SDK for Ruby
|
2
2
|
|
3
|
-
[](https://github.com/ringcentral/ringcentral-ruby/actions/workflows/ruby.yml)
|
4
|
+
[](https://twitter.com/RingCentralDevs)
|
5
5
|
|
6
|
-
|
6
|
+
__[RingCentral Developers](https://developer.ringcentral.com/api-products)__ is a cloud communications platform which can be accessed via more than 70 APIs. The platform's main capabilities include technologies that enable:
|
7
|
+
__[Voice](https://developer.ringcentral.com/api-products/voice), [SMS/MMS](https://developer.ringcentral.com/api-products/sms), [Fax](https://developer.ringcentral.com/api-products/fax), [Glip Team Messaging](https://developer.ringcentral.com/api-products/team-messaging), [Data and Configurations](https://developer.ringcentral.com/api-products/configuration)__.
|
8
|
+
|
9
|
+
[API Reference](https://developer.ringcentral.com/api-docs/latest/index.html) and [APIs Explorer](https://developer.ringcentral.com/api-explorer/latest/index.html).
|
10
|
+
|
11
|
+
|
12
|
+
## Getting help and support
|
13
|
+
|
14
|
+
If you are having difficulty using this SDK, or working with the RingCentral API, please visit our [developer community forums](https://community.ringcentral.com/spaces/144/) for help and to get quick answers to your questions. If you wish to contact the RingCentral Developer Support team directly, please [submit a help ticket](https://developers.ringcentral.com/support/create-case) from our developer website.
|
7
15
|
|
8
16
|
|
9
17
|
## Installation
|
@@ -13,6 +21,15 @@ gem install ringcentral-sdk
|
|
13
21
|
```
|
14
22
|
|
15
23
|
|
24
|
+
### Name collision with `ringcentral` gem
|
25
|
+
|
26
|
+
The `ringcentral` gem is using RingCentral's legacy API which was End-of-Lifed in 2018. Everyone is recommended to move to the REST API.
|
27
|
+
|
28
|
+
If you have both the `ringcentral` and `ringcentral-sdk` gems installed, you will run into a collision error when attempting to initialize the `ringcentral-sdk` RingCentral SDK.
|
29
|
+
|
30
|
+
The solution is `gem uninstall ringcentral`
|
31
|
+
|
32
|
+
|
16
33
|
## Documentation
|
17
34
|
|
18
35
|
https://developer.ringcentral.com/api-docs/latest/index.html
|
@@ -23,28 +40,66 @@ https://developer.ringcentral.com/api-docs/latest/index.html
|
|
23
40
|
```ruby
|
24
41
|
require 'ringcentral'
|
25
42
|
|
26
|
-
rc = RingCentral.new(
|
27
|
-
rc.authorize(username:
|
43
|
+
rc = RingCentral.new('clientID', 'clientSecret', 'serverURL')
|
44
|
+
rc.authorize(username: 'username', extension: 'extension', password: 'password')
|
28
45
|
|
29
46
|
# get
|
30
47
|
r = rc.get('/restapi/v1.0/account/~/extension/~')
|
31
48
|
expect(r).not_to be_nil
|
32
|
-
expect('101').to eq(
|
49
|
+
expect('101').to eq(r.body['extensionNumber'])
|
50
|
+
```
|
51
|
+
|
52
|
+
|
53
|
+
## How to specify query parameters
|
54
|
+
|
55
|
+
### for get & delete
|
56
|
+
|
57
|
+
```ruby
|
58
|
+
rc.get('/restapi/v1.0/account/~/extension', { hello: 'world' })
|
59
|
+
```
|
60
|
+
|
61
|
+
### for post, put & patch
|
62
|
+
|
63
|
+
```ruby
|
64
|
+
rc.post('/restapi/v1.0/account/~/extension/~/sms', payload: body, params: { hello: 'world' })
|
33
65
|
```
|
34
66
|
|
67
|
+
### multi-value query parameter
|
68
|
+
|
69
|
+
```ruby
|
70
|
+
rc.get('/restapi/v1.0/account/~/extension', { hello: ['world1', 'world2'] })
|
71
|
+
```
|
72
|
+
|
73
|
+
Above will be translated to `/restapi/v1.0/account/~/extension?hello=world1&hello=world2`.
|
74
|
+
|
35
75
|
|
36
76
|
### Token Refresh
|
37
77
|
|
38
|
-
Access token expires. You need to call `rc.refresh()` before it
|
78
|
+
Access token expires. You need to call `rc.refresh()` before it expires.
|
39
79
|
If you want the SDK to do auto refresh please `rc.auto_refresh = true` before authorization.
|
40
80
|
|
41
81
|
|
82
|
+
### Load preexisting token
|
83
|
+
|
84
|
+
Let's say you already have a token. Then you can load it like this: `rc.token = your_token_object`.
|
85
|
+
|
86
|
+
The benifits of loading a preexisting token is you don't need to go through any authorization flow.
|
87
|
+
|
88
|
+
If what you have is a JSON string instead of a Ruby object, you need to convert it first: `JSON.parse(your_token_string)`.
|
89
|
+
|
90
|
+
If you only have a string for the access token instead of for the whole object, you can set it like this:
|
91
|
+
|
92
|
+
```ruby
|
93
|
+
rc.token = { access_token: 'the token string' }
|
94
|
+
```
|
95
|
+
|
96
|
+
|
42
97
|
### Send SMS
|
43
98
|
|
44
99
|
```ruby
|
45
100
|
r = rc.post('/restapi/v1.0/account/~/extension/~/sms', payload: {
|
46
|
-
to: [{phoneNumber: ENV['
|
47
|
-
from: {phoneNumber: ENV['
|
101
|
+
to: [{phoneNumber: ENV['RINGCENTRAL_RECEIVER']}],
|
102
|
+
from: {phoneNumber: ENV['RINGCENTRAL_USERNAME']},
|
48
103
|
text: 'Hello world'
|
49
104
|
})
|
50
105
|
```
|
@@ -54,7 +109,7 @@ r = rc.post('/restapi/v1.0/account/~/extension/~/sms', payload: {
|
|
54
109
|
|
55
110
|
```ruby
|
56
111
|
rc.post('/restapi/v1.0/account/~/extension/~/fax',
|
57
|
-
payload: { to: [{ phoneNumber: ENV['
|
112
|
+
payload: { to: [{ phoneNumber: ENV['RINGCENTRAL_RECEIVER'] }] },
|
58
113
|
files: [
|
59
114
|
['spec/test.txt', 'text/plain'],
|
60
115
|
['spec/test.png', 'image/png']
|
@@ -68,8 +123,8 @@ payload: { to: [{ phoneNumber: ENV['receiver'] }] },
|
|
68
123
|
```ruby
|
69
124
|
r = rc.post('/restapi/v1.0/account/~/extension/~/sms',
|
70
125
|
payload: {
|
71
|
-
to: [{ phoneNumber: ENV['
|
72
|
-
from: { phoneNumber: ENV['
|
126
|
+
to: [{ phoneNumber: ENV['RINGCENTRAL_RECEIVER'] }],
|
127
|
+
from: { phoneNumber: ENV['RINGCENTRAL_USERNAME'] },
|
73
128
|
text: 'hello world'
|
74
129
|
},
|
75
130
|
files: [
|
@@ -104,20 +159,25 @@ For more sample code, please refer to the [test cases](/spec).
|
|
104
159
|
|
105
160
|
## How to test
|
106
161
|
|
162
|
+
```
|
163
|
+
bundle install --path vendor/bundle
|
164
|
+
```
|
165
|
+
|
107
166
|
Create `.env` file with the following content:
|
108
167
|
|
109
168
|
```
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
receiver=number-to-receiver-sms
|
169
|
+
RINGCENTRAL_SERVER_URL=https://platform.devtest.ringcentral.com
|
170
|
+
RINGCENTRAL_CLIENT_ID=
|
171
|
+
RINGCENTRAL_CLIENT_SECRET=
|
172
|
+
RINGCENTRAL_USERNAME=
|
173
|
+
RINGCENTRAL_EXTENSION=
|
174
|
+
RINGCENTRAL_PASSWORD=
|
175
|
+
RINGCENTRAL_RECEIVER=
|
118
176
|
```
|
119
177
|
|
120
|
-
|
178
|
+
`RINGCENTRAL_RECEIVER` is a phone number to receive SMS, Fax..etc.
|
179
|
+
|
180
|
+
Run `bundle exec rspec`
|
121
181
|
|
122
182
|
|
123
183
|
## License
|
data/lib/ringcentral.rb
CHANGED
@@ -3,6 +3,7 @@ require 'addressable/uri'
|
|
3
3
|
require 'json'
|
4
4
|
require 'concurrent'
|
5
5
|
require 'faraday'
|
6
|
+
require 'faraday_middleware'
|
6
7
|
require 'tmpdir'
|
7
8
|
|
8
9
|
class RingCentral
|
@@ -14,19 +15,20 @@ class RingCentral
|
|
14
15
|
'https://platform.ringcentral.com'
|
15
16
|
end
|
16
17
|
|
17
|
-
attr_reader :
|
18
|
+
attr_reader :client_id, :client_secret, :server, :token
|
18
19
|
attr_accessor :auto_refresh
|
19
20
|
|
20
|
-
def initialize(
|
21
|
-
@
|
22
|
-
@
|
21
|
+
def initialize(client_id, client_secret, server)
|
22
|
+
@client_id = client_id
|
23
|
+
@client_secret = client_secret
|
23
24
|
@server = server
|
24
25
|
@auto_refresh = false
|
25
26
|
@token = nil
|
26
27
|
@timer = nil
|
27
|
-
@faraday = Faraday.new(url: server) do |faraday|
|
28
|
+
@faraday = Faraday.new(url: server, request: { params_encoder: Faraday::FlatParamsEncoder }) do |faraday|
|
28
29
|
faraday.request :multipart
|
29
30
|
faraday.request :url_encoded
|
31
|
+
faraday.response :json, content_type: /\bjson$/
|
30
32
|
faraday.adapter Faraday.default_adapter
|
31
33
|
end
|
32
34
|
end
|
@@ -43,13 +45,21 @@ class RingCentral
|
|
43
45
|
end
|
44
46
|
end
|
45
47
|
|
46
|
-
def authorize(username: nil, extension: nil, password: nil, auth_code: nil, redirect_uri: nil)
|
48
|
+
def authorize(username: nil, extension: nil, password: nil, auth_code: nil, redirect_uri: nil, jwt: nil, verifier: nil)
|
47
49
|
if auth_code != nil
|
48
50
|
payload = {
|
49
51
|
grant_type: 'authorization_code',
|
50
52
|
code: auth_code,
|
51
53
|
redirect_uri: redirect_uri,
|
52
54
|
}
|
55
|
+
if verifier != nil
|
56
|
+
payload["code_verifier"] = verifier
|
57
|
+
end
|
58
|
+
elsif jwt != nil
|
59
|
+
payload = {
|
60
|
+
grant_type: 'urn:ietf:params:oauth:grant-type:jwt-bearer',
|
61
|
+
assertion: jwt
|
62
|
+
}
|
53
63
|
else
|
54
64
|
payload = {
|
55
65
|
grant_type: 'password',
|
@@ -60,7 +70,7 @@ class RingCentral
|
|
60
70
|
end
|
61
71
|
self.token = nil
|
62
72
|
r = self.post('/restapi/oauth/token', payload: payload)
|
63
|
-
self.token =
|
73
|
+
self.token = r.body
|
64
74
|
end
|
65
75
|
|
66
76
|
def refresh
|
@@ -71,7 +81,7 @@ class RingCentral
|
|
71
81
|
}
|
72
82
|
self.token = nil
|
73
83
|
r = self.post('/restapi/oauth/token', payload: payload)
|
74
|
-
self.token =
|
84
|
+
self.token = r.body
|
75
85
|
end
|
76
86
|
|
77
87
|
def revoke
|
@@ -81,14 +91,18 @@ class RingCentral
|
|
81
91
|
self.post('/restapi/oauth/revoke', payload: payload)
|
82
92
|
end
|
83
93
|
|
84
|
-
def authorize_uri(redirect_uri, state = '')
|
94
|
+
def authorize_uri(redirect_uri, state = '', challenge = nil, challenge_method = 'S256')
|
85
95
|
uri = Addressable::URI.parse(@server) + '/restapi/oauth/authorize'
|
86
96
|
uri.query_values = {
|
87
97
|
response_type: 'code',
|
88
98
|
state: state,
|
89
99
|
redirect_uri: redirect_uri,
|
90
|
-
client_id: @
|
100
|
+
client_id: @client_id
|
91
101
|
}
|
102
|
+
if challenge != nil
|
103
|
+
uri.query_values["code_challenge"] = challenge
|
104
|
+
uri.query_values["code_challenge_method"] = challenge_method
|
105
|
+
end
|
92
106
|
uri.to_s
|
93
107
|
end
|
94
108
|
|
@@ -150,7 +164,7 @@ class RingCentral
|
|
150
164
|
private
|
151
165
|
|
152
166
|
def basic_key
|
153
|
-
Base64.encode64("#{@
|
167
|
+
Base64.encode64("#{@client_id}:#{@client_secret}").gsub(/\s/, '')
|
154
168
|
end
|
155
169
|
|
156
170
|
def autorization_header
|
data/lib/subscription.rb
CHANGED
@@ -2,6 +2,7 @@ require 'pubnub'
|
|
2
2
|
require 'concurrent'
|
3
3
|
require 'openssl'
|
4
4
|
require 'base64'
|
5
|
+
require 'securerandom'
|
5
6
|
|
6
7
|
class PubNub
|
7
8
|
attr_accessor :events
|
@@ -47,8 +48,8 @@ class PubNub
|
|
47
48
|
|
48
49
|
def subscribe
|
49
50
|
r = @rc.post('/restapi/v1.0/subscription', payload: request_body)
|
50
|
-
self.subscription =
|
51
|
-
@pubnub = Pubnub.new(subscribe_key: @subscription['deliveryMode']['subscriberKey'])
|
51
|
+
self.subscription = r.body
|
52
|
+
@pubnub = Pubnub.new(subscribe_key: @subscription['deliveryMode']['subscriberKey'], uuid: SecureRandom.uuid)
|
52
53
|
@pubnub.add_listener(name: 'default', callback: @callback)
|
53
54
|
@pubnub.subscribe(channels: @subscription['deliveryMode']['address'])
|
54
55
|
end
|
@@ -56,7 +57,7 @@ class PubNub
|
|
56
57
|
def refresh
|
57
58
|
return if @subscription == nil
|
58
59
|
r = @rc.put("/restapi/v1.0/subscription/#{@subscription['id']}", payload: request_body)
|
59
|
-
self.subscription =
|
60
|
+
self.subscription = r.body
|
60
61
|
end
|
61
62
|
|
62
63
|
def revoke
|
data/ringcentral-sdk.gemspec
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
Gem::Specification.new do |gem|
|
2
2
|
gem.name = 'ringcentral-sdk'
|
3
|
-
gem.version = '0.
|
3
|
+
gem.version = '0.9.6'
|
4
4
|
gem.authors = ['Tyler Liu']
|
5
5
|
gem.email = ['tyler.liu@ringcentral.com']
|
6
6
|
gem.description = 'Ruby SDK for you to access RingCentral platform API.'
|
@@ -13,8 +13,9 @@ Gem::Specification.new do |gem|
|
|
13
13
|
gem.files += Dir['lib/**/*.rb']
|
14
14
|
gem.test_files = Dir['spec/**/*.rb']
|
15
15
|
|
16
|
-
gem.add_dependency('addressable', '~> 2.
|
17
|
-
gem.add_dependency('concurrent-ruby', '~> 1.
|
18
|
-
gem.add_dependency('pubnub', '~>
|
19
|
-
gem.add_dependency('faraday', '~>
|
16
|
+
gem.add_dependency('addressable', '~> 2.8', '>= 2.8.0')
|
17
|
+
gem.add_dependency('concurrent-ruby', '~> 1.1', '>= 1.1.9')
|
18
|
+
gem.add_dependency('pubnub', '~> 5.0', '>= 5.0.0')
|
19
|
+
gem.add_dependency('faraday', '~> 2.1', '>= 2.1.0')
|
20
|
+
gem.add_dependency('faraday_middleware', '~> 1.2.0', '>= 1.2.0')
|
20
21
|
end
|
data/spec/fax_spec.rb
CHANGED
@@ -5,17 +5,17 @@ RSpec.describe 'Fax' do
|
|
5
5
|
describe 'send fax' do
|
6
6
|
it 'should send a fax' do
|
7
7
|
Dotenv.load
|
8
|
-
rc = RingCentral.new(ENV['
|
9
|
-
rc.authorize(username: ENV['
|
8
|
+
rc = RingCentral.new(ENV['RINGCENTRAL_CLIENT_ID'], ENV['RINGCENTRAL_CLIENT_SECRET'], ENV['RINGCENTRAL_SERVER_URL'])
|
9
|
+
rc.authorize(username: ENV['RINGCENTRAL_USERNAME'], extension: ENV['RINGCENTRAL_EXTENSION'], password: ENV['RINGCENTRAL_PASSWORD'])
|
10
10
|
r = rc.post('/restapi/v1.0/account/~/extension/~/fax',
|
11
|
-
payload: { to: [{ phoneNumber: ENV['
|
11
|
+
payload: { to: [{ phoneNumber: ENV['RINGCENTRAL_RECEIVER'] }] },
|
12
12
|
files: [
|
13
13
|
['spec/test.txt', 'text/plain'],
|
14
14
|
['spec/test.png', 'image/png']
|
15
15
|
]
|
16
16
|
)
|
17
17
|
expect(r).not_to be_nil
|
18
|
-
message =
|
18
|
+
message = r.body
|
19
19
|
expect('Fax').to eq(message['type'])
|
20
20
|
end
|
21
21
|
end
|
data/spec/mms_spec.rb
CHANGED
@@ -5,13 +5,13 @@ RSpec.describe 'MMS' do
|
|
5
5
|
describe 'send MMS' do
|
6
6
|
it 'should send an MMS' do
|
7
7
|
Dotenv.load
|
8
|
-
rc = RingCentral.new(ENV['
|
9
|
-
rc.authorize(username: ENV['
|
8
|
+
rc = RingCentral.new(ENV['RINGCENTRAL_CLIENT_ID'], ENV['RINGCENTRAL_CLIENT_SECRET'], ENV['RINGCENTRAL_SERVER_URL'])
|
9
|
+
rc.authorize(username: ENV['RINGCENTRAL_USERNAME'], extension: ENV['RINGCENTRAL_EXTENSION'], password: ENV['RINGCENTRAL_PASSWORD'])
|
10
10
|
|
11
11
|
r = rc.post('/restapi/v1.0/account/~/extension/~/sms',
|
12
12
|
payload: {
|
13
|
-
to: [{ phoneNumber: ENV['
|
14
|
-
from: { phoneNumber: ENV['
|
13
|
+
to: [{ phoneNumber: ENV['RINGCENTRAL_RECEIVER'] }],
|
14
|
+
from: { phoneNumber: ENV['RINGCENTRAL_USERNAME'] },
|
15
15
|
text: 'hello world'
|
16
16
|
},
|
17
17
|
files: [
|
@@ -19,7 +19,7 @@ RSpec.describe 'MMS' do
|
|
19
19
|
]
|
20
20
|
)
|
21
21
|
expect(r).not_to be_nil
|
22
|
-
message =
|
22
|
+
message = r.body
|
23
23
|
expect('SMS').to eq(message['type'])
|
24
24
|
end
|
25
25
|
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require 'dotenv'
|
2
|
+
require 'ringcentral'
|
3
|
+
|
4
|
+
RSpec.describe 'query params' do
|
5
|
+
describe 'single' do
|
6
|
+
it 'contain single query param' do
|
7
|
+
Dotenv.load
|
8
|
+
rc = RingCentral.new(ENV['RINGCENTRAL_CLIENT_ID'], ENV['RINGCENTRAL_CLIENT_SECRET'], ENV['RINGCENTRAL_SERVER_URL'])
|
9
|
+
rc.authorize(username: ENV['RINGCENTRAL_USERNAME'], extension: ENV['RINGCENTRAL_EXTENSION'], password: ENV['RINGCENTRAL_PASSWORD'])
|
10
|
+
r = rc.get('/restapi/v1.0/account/~/extension/~/address-book/contact', { phoneNumber: '666' })
|
11
|
+
expect(r).not_to be_nil
|
12
|
+
message = r.body
|
13
|
+
expect(message['uri']).to include('phoneNumber=666')
|
14
|
+
|
15
|
+
r = rc.get('/restapi/v1.0/account/~/extension/~/address-book/contact', { phoneNumber: ['666', '888'] })
|
16
|
+
expect(r).not_to be_nil
|
17
|
+
message = r.body
|
18
|
+
expect(message['uri']).to include('phoneNumber=666&phoneNumber=888')
|
19
|
+
rc.revoke()
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
data/spec/ringcentral_spec.rb
CHANGED
@@ -8,25 +8,25 @@ RSpec.describe 'RingCentral' do
|
|
8
8
|
end
|
9
9
|
|
10
10
|
it 'test_initializer' do
|
11
|
-
rc = RingCentral.new('
|
12
|
-
expect('
|
13
|
-
expect('
|
11
|
+
rc = RingCentral.new('client_id', 'client_secret', RingCentral.SANDBOX_SERVER)
|
12
|
+
expect('client_id').to eq(rc.client_id)
|
13
|
+
expect('client_secret').to eq(rc.client_secret)
|
14
14
|
expect('https://platform.devtest.ringcentral.com').to eq(rc.server)
|
15
15
|
expect(false).to eq(rc.auto_refresh)
|
16
16
|
end
|
17
17
|
|
18
18
|
it 'test_authorize_uri' do
|
19
|
-
rc = RingCentral.new('
|
20
|
-
expect(RingCentral.SANDBOX_SERVER + '/restapi/oauth/authorize?client_id=
|
19
|
+
rc = RingCentral.new('client_id', 'client_secret', RingCentral.SANDBOX_SERVER)
|
20
|
+
expect(RingCentral.SANDBOX_SERVER + '/restapi/oauth/authorize?client_id=client_id&redirect_uri=https%3A%2F%2Fexample.com&response_type=code&state=mystate').to eq(rc.authorize_uri('https://example.com', 'mystate'))
|
21
21
|
end
|
22
22
|
|
23
23
|
it 'test_password_flow' do
|
24
24
|
Dotenv.load
|
25
|
-
rc = RingCentral.new(ENV['
|
25
|
+
rc = RingCentral.new(ENV['RINGCENTRAL_CLIENT_ID'], ENV['RINGCENTRAL_CLIENT_SECRET'], ENV['RINGCENTRAL_SERVER_URL'])
|
26
26
|
expect(rc.token).to be_nil
|
27
27
|
|
28
28
|
# create token
|
29
|
-
rc.authorize(username: ENV['
|
29
|
+
rc.authorize(username: ENV['RINGCENTRAL_USERNAME'], extension: ENV['RINGCENTRAL_EXTENSION'], password: ENV['RINGCENTRAL_PASSWORD'])
|
30
30
|
expect(rc.token).not_to be_nil
|
31
31
|
|
32
32
|
# refresh token
|
@@ -40,33 +40,33 @@ RSpec.describe 'RingCentral' do
|
|
40
40
|
|
41
41
|
it 'test_http_methods' do
|
42
42
|
Dotenv.load
|
43
|
-
rc = RingCentral.new(ENV['
|
44
|
-
rc.authorize(username: ENV['
|
43
|
+
rc = RingCentral.new(ENV['RINGCENTRAL_CLIENT_ID'], ENV['RINGCENTRAL_CLIENT_SECRET'], ENV['RINGCENTRAL_SERVER_URL'])
|
44
|
+
rc.authorize(username: ENV['RINGCENTRAL_USERNAME'], extension: ENV['RINGCENTRAL_EXTENSION'], password: ENV['RINGCENTRAL_PASSWORD'])
|
45
45
|
|
46
46
|
# get
|
47
47
|
r = rc.get('/restapi/v1.0/account/~/extension/~')
|
48
48
|
expect(r).not_to be_nil
|
49
|
-
expect('101').to eq(
|
49
|
+
expect('101').to eq(r.body['extensionNumber'])
|
50
50
|
|
51
51
|
# post
|
52
52
|
r = rc.post('/restapi/v1.0/account/~/extension/~/sms', payload: {
|
53
|
-
to: [{phoneNumber: ENV['
|
54
|
-
from: {phoneNumber: ENV['
|
53
|
+
to: [{phoneNumber: ENV['RINGCENTRAL_RECEIVER']}],
|
54
|
+
from: {phoneNumber: ENV['RINGCENTRAL_USERNAME']},
|
55
55
|
text: 'Hello world'
|
56
56
|
})
|
57
57
|
expect(r).not_to be_nil
|
58
|
-
message =
|
58
|
+
message = r.body
|
59
59
|
expect('SMS').to eq(message['type'])
|
60
60
|
messageUrl = "/restapi/v1.0/account/~/extension/~/message-store/#{message['id']}"
|
61
61
|
|
62
62
|
# put
|
63
63
|
r = rc.put(messageUrl, payload: { readStatus: 'Unread' })
|
64
64
|
expect(r).not_to be_nil
|
65
|
-
message =
|
65
|
+
message = r.body
|
66
66
|
expect('Unread').to eq(message['readStatus'])
|
67
67
|
r = rc.put(messageUrl, payload: { readStatus: 'Read' })
|
68
68
|
expect(r).not_to be_nil
|
69
|
-
message =
|
69
|
+
message = r.body
|
70
70
|
expect('Read').to eq(message['readStatus'])
|
71
71
|
|
72
72
|
# todo: test patch
|
@@ -76,7 +76,7 @@ RSpec.describe 'RingCentral' do
|
|
76
76
|
expect(r).not_to be_nil
|
77
77
|
r = rc.get(messageUrl)
|
78
78
|
expect(r).not_to be_nil
|
79
|
-
message =
|
79
|
+
message = r.body
|
80
80
|
expect('Deleted').to eq(message['availability'])
|
81
81
|
end
|
82
82
|
end
|
data/spec/subscription_spec.rb
CHANGED
@@ -4,8 +4,8 @@ require 'dotenv'
|
|
4
4
|
require 'rspec'
|
5
5
|
|
6
6
|
Dotenv.load
|
7
|
-
$rc = RingCentral.new(ENV['
|
8
|
-
$rc.authorize(username: ENV['
|
7
|
+
$rc = RingCentral.new(ENV['RINGCENTRAL_CLIENT_ID'], ENV['RINGCENTRAL_CLIENT_SECRET'], ENV['RINGCENTRAL_SERVER_URL'])
|
8
|
+
$rc.authorize(username: ENV['RINGCENTRAL_USERNAME'], extension: ENV['RINGCENTRAL_EXTENSION'], password: ENV['RINGCENTRAL_PASSWORD'])
|
9
9
|
|
10
10
|
def createSubscription(callback)
|
11
11
|
events = [
|
@@ -27,8 +27,8 @@ RSpec.describe 'Subscription' do
|
|
27
27
|
})
|
28
28
|
|
29
29
|
$rc.post('/restapi/v1.0/account/~/extension/~/sms', payload: {
|
30
|
-
to: [{phoneNumber: ENV['
|
31
|
-
from: {phoneNumber: ENV['
|
30
|
+
to: [{phoneNumber: ENV['RINGCENTRAL_RECEIVER']}],
|
31
|
+
from: {phoneNumber: ENV['RINGCENTRAL_USERNAME']},
|
32
32
|
text: 'Hello world'
|
33
33
|
})
|
34
34
|
sleep(20)
|
@@ -45,8 +45,8 @@ RSpec.describe 'Subscription' do
|
|
45
45
|
subscription.refresh()
|
46
46
|
|
47
47
|
$rc.post('/restapi/v1.0/account/~/extension/~/sms', payload: {
|
48
|
-
to: [{phoneNumber: ENV['
|
49
|
-
from: {phoneNumber: ENV['
|
48
|
+
to: [{phoneNumber: ENV['RINGCENTRAL_RECEIVER']}],
|
49
|
+
from: {phoneNumber: ENV['RINGCENTRAL_USERNAME']},
|
50
50
|
text: 'Hello world'
|
51
51
|
})
|
52
52
|
sleep(20)
|
@@ -63,8 +63,8 @@ RSpec.describe 'Subscription' do
|
|
63
63
|
subscription.revoke()
|
64
64
|
|
65
65
|
$rc.post('/restapi/v1.0/account/~/extension/~/sms', payload: {
|
66
|
-
to: [{phoneNumber: ENV['
|
67
|
-
from: {phoneNumber: ENV['
|
66
|
+
to: [{phoneNumber: ENV['RINGCENTRAL_RECEIVER']}],
|
67
|
+
from: {phoneNumber: ENV['RINGCENTRAL_USERNAME']},
|
68
68
|
text: 'Hello world'
|
69
69
|
})
|
70
70
|
sleep(20)
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ringcentral-sdk
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.9.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tyler Liu
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2022-01-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: addressable
|
@@ -16,80 +16,100 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '2.
|
19
|
+
version: '2.8'
|
20
20
|
- - ">="
|
21
21
|
- !ruby/object:Gem::Version
|
22
|
-
version: 2.
|
22
|
+
version: 2.8.0
|
23
23
|
type: :runtime
|
24
24
|
prerelease: false
|
25
25
|
version_requirements: !ruby/object:Gem::Requirement
|
26
26
|
requirements:
|
27
27
|
- - "~>"
|
28
28
|
- !ruby/object:Gem::Version
|
29
|
-
version: '2.
|
29
|
+
version: '2.8'
|
30
30
|
- - ">="
|
31
31
|
- !ruby/object:Gem::Version
|
32
|
-
version: 2.
|
32
|
+
version: 2.8.0
|
33
33
|
- !ruby/object:Gem::Dependency
|
34
34
|
name: concurrent-ruby
|
35
35
|
requirement: !ruby/object:Gem::Requirement
|
36
36
|
requirements:
|
37
37
|
- - "~>"
|
38
38
|
- !ruby/object:Gem::Version
|
39
|
-
version: '1.
|
39
|
+
version: '1.1'
|
40
40
|
- - ">="
|
41
41
|
- !ruby/object:Gem::Version
|
42
|
-
version: 1.
|
42
|
+
version: 1.1.9
|
43
43
|
type: :runtime
|
44
44
|
prerelease: false
|
45
45
|
version_requirements: !ruby/object:Gem::Requirement
|
46
46
|
requirements:
|
47
47
|
- - "~>"
|
48
48
|
- !ruby/object:Gem::Version
|
49
|
-
version: '1.
|
49
|
+
version: '1.1'
|
50
50
|
- - ">="
|
51
51
|
- !ruby/object:Gem::Version
|
52
|
-
version: 1.
|
52
|
+
version: 1.1.9
|
53
53
|
- !ruby/object:Gem::Dependency
|
54
54
|
name: pubnub
|
55
55
|
requirement: !ruby/object:Gem::Requirement
|
56
56
|
requirements:
|
57
57
|
- - "~>"
|
58
58
|
- !ruby/object:Gem::Version
|
59
|
-
version: '
|
59
|
+
version: '5.0'
|
60
60
|
- - ">="
|
61
61
|
- !ruby/object:Gem::Version
|
62
|
-
version:
|
62
|
+
version: 5.0.0
|
63
63
|
type: :runtime
|
64
64
|
prerelease: false
|
65
65
|
version_requirements: !ruby/object:Gem::Requirement
|
66
66
|
requirements:
|
67
67
|
- - "~>"
|
68
68
|
- !ruby/object:Gem::Version
|
69
|
-
version: '
|
69
|
+
version: '5.0'
|
70
70
|
- - ">="
|
71
71
|
- !ruby/object:Gem::Version
|
72
|
-
version:
|
72
|
+
version: 5.0.0
|
73
73
|
- !ruby/object:Gem::Dependency
|
74
74
|
name: faraday
|
75
75
|
requirement: !ruby/object:Gem::Requirement
|
76
76
|
requirements:
|
77
77
|
- - "~>"
|
78
78
|
- !ruby/object:Gem::Version
|
79
|
-
version: '
|
79
|
+
version: '2.1'
|
80
80
|
- - ">="
|
81
81
|
- !ruby/object:Gem::Version
|
82
|
-
version:
|
82
|
+
version: 2.1.0
|
83
83
|
type: :runtime
|
84
84
|
prerelease: false
|
85
85
|
version_requirements: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
87
|
- - "~>"
|
88
88
|
- !ruby/object:Gem::Version
|
89
|
-
version: '
|
89
|
+
version: '2.1'
|
90
90
|
- - ">="
|
91
91
|
- !ruby/object:Gem::Version
|
92
|
-
version:
|
92
|
+
version: 2.1.0
|
93
|
+
- !ruby/object:Gem::Dependency
|
94
|
+
name: faraday_middleware
|
95
|
+
requirement: !ruby/object:Gem::Requirement
|
96
|
+
requirements:
|
97
|
+
- - "~>"
|
98
|
+
- !ruby/object:Gem::Version
|
99
|
+
version: 1.2.0
|
100
|
+
- - ">="
|
101
|
+
- !ruby/object:Gem::Version
|
102
|
+
version: 1.2.0
|
103
|
+
type: :runtime
|
104
|
+
prerelease: false
|
105
|
+
version_requirements: !ruby/object:Gem::Requirement
|
106
|
+
requirements:
|
107
|
+
- - "~>"
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: 1.2.0
|
110
|
+
- - ">="
|
111
|
+
- !ruby/object:Gem::Version
|
112
|
+
version: 1.2.0
|
93
113
|
description: Ruby SDK for you to access RingCentral platform API.
|
94
114
|
email:
|
95
115
|
- tyler.liu@ringcentral.com
|
@@ -103,6 +123,7 @@ files:
|
|
103
123
|
- ringcentral-sdk.gemspec
|
104
124
|
- spec/fax_spec.rb
|
105
125
|
- spec/mms_spec.rb
|
126
|
+
- spec/query_params_spec.rb
|
106
127
|
- spec/ringcentral_spec.rb
|
107
128
|
- spec/spec_helper.rb
|
108
129
|
- spec/subscription_spec.rb
|
@@ -110,7 +131,7 @@ homepage: https://github.com/ringcentral/ringcentral-ruby
|
|
110
131
|
licenses:
|
111
132
|
- MIT
|
112
133
|
metadata: {}
|
113
|
-
post_install_message:
|
134
|
+
post_install_message:
|
114
135
|
rdoc_options: []
|
115
136
|
require_paths:
|
116
137
|
- lib
|
@@ -125,14 +146,14 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
125
146
|
- !ruby/object:Gem::Version
|
126
147
|
version: '0'
|
127
148
|
requirements: []
|
128
|
-
|
129
|
-
|
130
|
-
signing_key:
|
149
|
+
rubygems_version: 3.2.3
|
150
|
+
signing_key:
|
131
151
|
specification_version: 4
|
132
152
|
summary: RingCentral Ruby SDK.
|
133
153
|
test_files:
|
134
|
-
- spec/spec_helper.rb
|
135
|
-
- spec/ringcentral_spec.rb
|
136
|
-
- spec/mms_spec.rb
|
137
154
|
- spec/fax_spec.rb
|
155
|
+
- spec/mms_spec.rb
|
156
|
+
- spec/query_params_spec.rb
|
157
|
+
- spec/ringcentral_spec.rb
|
158
|
+
- spec/spec_helper.rb
|
138
159
|
- spec/subscription_spec.rb
|