ringcentral-sdk 1.0.0.pre.beta.2 → 1.0.0.pre.beta.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: bbfb68b0fa5c60f0ab8dd33013d773a81568e424e616be7ba8aa1b3aaa8ffc00
4
- data.tar.gz: c74ff9b328b54394693d696f186c9ef590ef3b3d5a66d0c110fcb31a85514906
3
+ metadata.gz: 8bb9f1c796f3fc2ac90aa28d1a33090d5e26fdc8445edb312fd9b1937add7add
4
+ data.tar.gz: 394c158641dfe6d4f6301eec2527107eeb3909b6aff782b1af5224f700aca7ef
5
5
  SHA512:
6
- metadata.gz: a2bb2ff1d5fb1de2217470ab049435b49fadc236c49e3da87573554d95001b517c041cc33c56a2346a92878b675b6ed855f786e8f0c1e4bd15f5493084117456
7
- data.tar.gz: 7c815de3a1679926ae14966403445217c16224702468f1807026484a4f24a8516ca12915f5f5d5d74e1be819b9cf8e60319708da174bcd120aec5e995e14b6f7
6
+ metadata.gz: 6cc88ac631aca239ecb0a644d2f399e86cd055d11a50021adb0aab66d6a3bc30be7e03c448541fa5309cfed9b336ec1ef183348b3383c29f006357093bb9c24d
7
+ data.tar.gz: 10a25f56bc1afbd4b3c04df79ccfecf9f7a1cd019023d6417b38b43f80fa829f651fea02a1fdf677f64c3ca8fa11457bd31d23d1f30d2bad190bfbd2958228d8
data/README.md CHANGED
@@ -149,6 +149,22 @@ subscription = WS.new(rc, events, lambda { |message|
149
149
  subscription.subscribe()
150
150
  ```
151
151
 
152
+ #### How to keep a subscription running 24 * 7?
153
+
154
+ There are two main cases that a subscription will be terminated:
155
+
156
+ - Absolute time out. The maximum time for a subscription to run is 24 hours. After that, the websocket connection will be closed by the server.
157
+ - Network issue. It could be your local network issue or the server's network issue. In either case, your websocket connection will be closed
158
+
159
+ In order to keep a subscription running 24 * 7, you need to re-subscribe when the connection is closed.
160
+
161
+ ```ruby
162
+ subscription.on_ws_closed = lambda { |event|
163
+ # make sure that there is no network issue and re-subscribe
164
+ subscription.subscribe()
165
+ }
166
+ ```
167
+
152
168
  ### (deprecated) PubNub Subscriptions
153
169
 
154
170
  ```ruby
data/lib/ringcentral.rb CHANGED
@@ -62,6 +62,7 @@ class RingCentral
62
62
  assertion: jwt
63
63
  }
64
64
  else
65
+ warn('Password auth is deprecated. Use JWT auth or OAuth instead.')
65
66
  payload = {
66
67
  grant_type: 'password',
67
68
  username: username,
data/lib/subscription.rb CHANGED
@@ -7,10 +7,15 @@ require 'securerandom'
7
7
  require 'eventmachine'
8
8
 
9
9
  class WS
10
- def initialize(ringcentral, events, callback)
10
+ def initialize(ringcentral, events, callback, debugMode = false)
11
11
  @rc = ringcentral
12
12
  @events = events
13
13
  @callback = callback
14
+ @debugMode = debugMode
15
+ end
16
+
17
+ def on_ws_closed=(callback)
18
+ @on_ws_closed = callback
14
19
  end
15
20
 
16
21
  def subscribe
@@ -18,18 +23,42 @@ class WS
18
23
  @t = Thread.new do
19
24
  EM.run {
20
25
  @ws = Faye::WebSocket::Client.new(r['uri'] + '?access_token=' + r['ws_access_token'])
26
+ if @debugMode
27
+ class << @ws
28
+ def send(message)
29
+ puts "Sending...\n" + message
30
+ super(message)
31
+ end
32
+ end
33
+ end
21
34
  @ws.on :open do
22
35
  @ws.send([
23
36
  { type: 'ClientRequest', method: 'POST', path: '/restapi/v1.0/subscription', messageId: SecureRandom.uuid },
24
37
  { deliveryMode: { transportType: 'WebSocket' }, eventFilters: @events }
25
38
  ].to_json())
39
+
40
+ # send a heartbeat every 10 minutes
41
+ @task = Concurrent::TimerTask.new(execution_interval: 600) do
42
+ @ws.send([
43
+ { type: 'Heartbeat', messageId: SecureRandom.uuid },
44
+ ].to_json())
45
+ end
46
+ @task.execute
26
47
  end
27
48
  @ws.on :message do |event|
49
+ if @debugMode
50
+ puts "Receiving...\n" + event.data
51
+ end
28
52
  header, body = JSON.parse(event.data)
29
53
  if header['type'] == 'ServerNotification'
30
54
  @callback.call(body)
31
55
  end
32
56
  end
57
+ @ws.on :close do |event|
58
+ if @on_ws_closed
59
+ @on_ws_closed.call(event)
60
+ end
61
+ end
33
62
  }
34
63
  end
35
64
  end
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |gem|
2
2
  gem.name = 'ringcentral-sdk'
3
- gem.version = '1.0.0-beta.2'
3
+ gem.version = '1.0.0-beta.4'
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.'
data/spec/mms_spec.rb CHANGED
@@ -8,19 +8,20 @@ RSpec.describe 'MMS' do
8
8
  rc = RingCentral.new(ENV['RINGCENTRAL_CLIENT_ID'], ENV['RINGCENTRAL_CLIENT_SECRET'], ENV['RINGCENTRAL_SERVER_URL'])
9
9
  rc.authorize(jwt: ENV['RINGCENTRAL_JWT_TOKEN'])
10
10
 
11
- r = rc.post('/restapi/v1.0/account/~/extension/~/sms',
12
- payload: {
13
- to: [{ phoneNumber: ENV['RINGCENTRAL_RECEIVER'] }],
14
- from: { phoneNumber: ENV['RINGCENTRAL_SENDER'] },
15
- text: 'hello world'
16
- },
17
- files: [
18
- ['spec/test.png', 'image/png']
19
- ]
20
- )
21
- expect(r).not_to be_nil
22
- message = r.body
23
- expect('SMS').to eq(message['type'])
11
+ # comment out because sandbox doesn't support mms any more.
12
+ # r = rc.post('/restapi/v1.0/account/~/extension/~/sms',
13
+ # payload: {
14
+ # to: [{ phoneNumber: ENV['RINGCENTRAL_RECEIVER'] }],
15
+ # from: { phoneNumber: ENV['RINGCENTRAL_SENDER'] },
16
+ # text: 'hello world'
17
+ # },
18
+ # files: [
19
+ # ['spec/test.png', 'image/png']
20
+ # ]
21
+ # )
22
+ # expect(r).not_to be_nil
23
+ # message = r.body
24
+ # expect('SMS').to eq(message['type'])
24
25
 
25
26
  rc.revoke()
26
27
  end
@@ -9,7 +9,7 @@ $rc = RingCentral.new(ENV['RINGCENTRAL_CLIENT_ID'], ENV['RINGCENTRAL_CLIENT_SECR
9
9
  RSpec.describe 'PubNub Subscription' do
10
10
  def createSubscription(callback)
11
11
  events = [
12
- '/restapi/v1.0/account/~/extension/~/message-store',
12
+ '/restapi/v1.0/account/~/extension/~/message-store?type=Pager',
13
13
  ]
14
14
  subscription = PubNub.new($rc, events, lambda { |message|
15
15
  callback.call(message)
@@ -26,9 +26,9 @@ RSpec.describe 'PubNub Subscription' do
26
26
  count += 1
27
27
  })
28
28
 
29
- $rc.post('/restapi/v1.0/account/~/extension/~/sms', payload: {
30
- to: [{phoneNumber: ENV['RINGCENTRAL_RECEIVER']}],
31
- from: {phoneNumber: ENV['RINGCENTRAL_SENDER']},
29
+ $rc.post('/restapi/v1.0/account/~/extension/~/company-pager', payload: {
30
+ to: [{extensionId: $rc.token['owner_id']}],
31
+ from: {extensionId: $rc.token['owner_id']},
32
32
  text: 'Hello world'
33
33
  })
34
34
  sleep(20)
@@ -46,9 +46,9 @@ RSpec.describe 'PubNub Subscription' do
46
46
 
47
47
  subscription.refresh()
48
48
 
49
- $rc.post('/restapi/v1.0/account/~/extension/~/sms', payload: {
50
- to: [{phoneNumber: ENV['RINGCENTRAL_RECEIVER']}],
51
- from: {phoneNumber: ENV['RINGCENTRAL_SENDER']},
49
+ $rc.post('/restapi/v1.0/account/~/extension/~/company-pager', payload: {
50
+ to: [{extensionId: $rc.token['owner_id']}],
51
+ from: {extensionId: $rc.token['owner_id']},
52
52
  text: 'Hello world'
53
53
  })
54
54
  sleep(20)
@@ -66,9 +66,9 @@ RSpec.describe 'PubNub Subscription' do
66
66
 
67
67
  subscription.revoke()
68
68
 
69
- $rc.post('/restapi/v1.0/account/~/extension/~/sms', payload: {
70
- to: [{phoneNumber: ENV['RINGCENTRAL_RECEIVER']}],
71
- from: {phoneNumber: ENV['RINGCENTRAL_SENDER']},
69
+ $rc.post('/restapi/v1.0/account/~/extension/~/company-pager', payload: {
70
+ to: [{extensionId: $rc.token['owner_id']}],
71
+ from: {extensionId: $rc.token['owner_id']},
72
72
  text: 'Hello world'
73
73
  })
74
74
  sleep(20)
@@ -49,14 +49,14 @@ RSpec.describe 'RingCentral' do
49
49
  expect('101').to eq(r.body['extensionNumber'])
50
50
 
51
51
  # post
52
- r = rc.post('/restapi/v1.0/account/~/extension/~/sms', payload: {
53
- to: [{phoneNumber: ENV['RINGCENTRAL_RECEIVER']}],
54
- from: {phoneNumber: ENV['RINGCENTRAL_SENDER']},
52
+ r = rc.post('/restapi/v1.0/account/~/extension/~/company-pager', payload: {
53
+ to: [{extensionId: rc.token['owner_id']}],
54
+ from: {extensionId: rc.token['owner_id']},
55
55
  text: 'Hello world'
56
56
  })
57
57
  expect(r).not_to be_nil
58
58
  message = r.body
59
- expect('SMS').to eq(message['type'])
59
+ expect('Pager').to eq(message['type'])
60
60
  messageUrl = "/restapi/v1.0/account/~/extension/~/message-store/#{message['id']}"
61
61
 
62
62
  # put
@@ -72,12 +72,13 @@ RSpec.describe 'RingCentral' do
72
72
  # todo: test patch
73
73
 
74
74
  # delete
75
- r = rc.delete(messageUrl)
76
- expect(r).not_to be_nil
77
- r = rc.get(messageUrl)
78
- expect(r).not_to be_nil
79
- message = r.body
80
- expect('Deleted').to eq(message['availability'])
75
+ # todo: delete "availability" is broken, because of sandbox env
76
+ # r = rc.delete(messageUrl)
77
+ # expect(r).not_to be_nil
78
+ # r = rc.get(messageUrl)
79
+ # expect(r).not_to be_nil
80
+ # message = r.body
81
+ # expect('Deleted').to eq(message['availability'])
81
82
 
82
83
  rc.revoke()
83
84
  end
@@ -15,6 +15,9 @@ RSpec.describe 'WebSocket Subscription' do
15
15
  callback.call(message)
16
16
  })
17
17
  subscription.subscribe()
18
+ # subscription.on_ws_closed = lambda { |event|
19
+ # puts 'WebSocket closed'
20
+ # }
18
21
  return subscription
19
22
  end
20
23
 
@@ -57,9 +60,9 @@ RSpec.describe 'WebSocket Subscription' do
57
60
 
58
61
  subscription.revoke()
59
62
 
60
- $rc.post('/restapi/v1.0/account/~/extension/~/sms', payload: {
61
- to: [{phoneNumber: ENV['RINGCENTRAL_RECEIVER']}],
62
- from: {phoneNumber: ENV['RINGCENTRAL_SENDER']},
63
+ $rc.post('/restapi/v1.0/account/~/extension/~/company-pager', payload: {
64
+ to: [{extensionId: $rc.token['owner_id']}],
65
+ from: {extensionId: $rc.token['owner_id']},
63
66
  text: 'Hello world'
64
67
  })
65
68
  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: 1.0.0.pre.beta.2
4
+ version: 1.0.0.pre.beta.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tyler Liu
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-06-05 00:00:00.000000000 Z
11
+ date: 2023-12-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: addressable