ringcentral-sdk 1.0.0.pre.beta.3 → 1.0.0

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: e2cb478670f796bb5865ad74d62d046ae085fb120bfd4f1587fcf5008d6dda43
4
- data.tar.gz: b83a678d5087bf5c957f1fa49ca339f483aa46736a1d86fc079e6f61121b8776
3
+ metadata.gz: cb3d49139090020a404bb081c1468d4439c2628afc355df576ac27c36bc29f6f
4
+ data.tar.gz: 44f29f3245d3766e87ee46b725f0f737e085e6d7e42d764fedc156b7095d503d
5
5
  SHA512:
6
- metadata.gz: 60e646c7aeec753a278004705e692cea1f018df149f8bfe5f600c6ac757c6e500cb50f56ba1d2cdf30845804ebc218df668bfb429fc7bf66668543c20979dacb
7
- data.tar.gz: 30b40d21161fd726758e6ce793853d5703cf125a6319aa6fbfb619d8e00b37b54a324fd824a768b1e7cd21abd6bfaf78b3f8025026191dd068c0152fee432636
6
+ metadata.gz: 6351380d085117dfd916d66693be085e7785de57cff373344e8800a8f204a2632ca3cfd7aa382cfb16b30d9f5c67eb18d62a4662b3437a3f4ab0bd154019c7f6
7
+ data.tar.gz: 2e4f4b03ceb67b5d8aa4df33335b395c0f2241f63c1dd2bd356afd1048d0dec0ed5bba990738e6d747721edaf69bee87db5da60be25c016875d2e492e0c82a14
data/README.md CHANGED
@@ -81,7 +81,7 @@ Access token expires. You need to call `rc.refresh()` before it expires.
81
81
  If you want the SDK to do auto refresh please `rc.auto_refresh = true` before authorization.
82
82
 
83
83
 
84
- ### Load preexisting token
84
+ ### Load pre-existing token
85
85
 
86
86
  Let's say you already have a token. Then you can load it like this: `rc.token = your_token_object`.
87
87
  The benefit of loading a preexisting token is you don't need to go through any authorization flow.
@@ -149,26 +149,27 @@ subscription = WS.new(rc, events, lambda { |message|
149
149
  subscription.subscribe()
150
150
  ```
151
151
 
152
- ### (deprecated) PubNub Subscriptions
152
+ #### How to keep a subscription running 24 * 7?
153
153
 
154
- ```ruby
155
- events = [
156
- '/restapi/v1.0/account/~/extension/~/message-store',
157
- ]
158
- subscription = PubNub.new(rc, events, lambda { |message|
159
- puts message
160
- })
161
- subscription.subscribe()
162
- ```
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
163
158
 
159
+ In order to keep a subscription running 24 * 7, you need to re-subscribe when the connection is closed.
164
160
 
165
- For more sample codes, please refer to the [test cases](/spec).
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
+ ```
166
167
 
167
168
 
168
169
  ## How to test
169
170
 
170
171
  ```
171
- bundle install --path vendor/bundle
172
+ bundle install
172
173
  ```
173
174
 
174
175
  Rename `.env.sample` to `.env`.
data/lib/ringcentral.rb CHANGED
@@ -4,13 +4,8 @@ require 'json'
4
4
  require 'concurrent'
5
5
  require 'faraday'
6
6
  require 'faraday/multipart'
7
- require 'tmpdir'
8
7
 
9
8
  class RingCentral
10
- def self.SANDBOX_SERVER
11
- 'https://platform.devtest.ringcentral.com'
12
- end
13
-
14
9
  def self.PRODUCTION_SERVER
15
10
  'https://platform.ringcentral.com'
16
11
  end
@@ -18,7 +13,7 @@ class RingCentral
18
13
  attr_reader :client_id, :client_secret, :server, :token
19
14
  attr_accessor :auto_refresh, :debug_mode
20
15
 
21
- def initialize(client_id, client_secret, server, debug_mode = false)
16
+ def initialize(client_id, client_secret, server = self.PRODUCTION_SERVER, debug_mode = false)
22
17
  @client_id = client_id
23
18
  @client_secret = client_secret
24
19
  @server = server
data/lib/subscription.rb CHANGED
@@ -1,16 +1,18 @@
1
- require 'pubnub'
2
1
  require 'concurrent'
3
- require 'openssl'
4
- require 'base64'
5
2
  require 'faye/websocket'
6
3
  require 'securerandom'
7
4
  require 'eventmachine'
8
5
 
9
6
  class WS
10
- def initialize(ringcentral, events, callback)
7
+ def initialize(ringcentral, events, callback, debugMode = false)
11
8
  @rc = ringcentral
12
9
  @events = events
13
10
  @callback = callback
11
+ @debugMode = debugMode
12
+ end
13
+
14
+ def on_ws_closed=(callback)
15
+ @on_ws_closed = callback
14
16
  end
15
17
 
16
18
  def subscribe
@@ -18,18 +20,42 @@ class WS
18
20
  @t = Thread.new do
19
21
  EM.run {
20
22
  @ws = Faye::WebSocket::Client.new(r['uri'] + '?access_token=' + r['ws_access_token'])
23
+ if @debugMode
24
+ class << @ws
25
+ def send(message)
26
+ puts "Sending...\n" + message
27
+ super(message)
28
+ end
29
+ end
30
+ end
21
31
  @ws.on :open do
22
32
  @ws.send([
23
33
  { type: 'ClientRequest', method: 'POST', path: '/restapi/v1.0/subscription', messageId: SecureRandom.uuid },
24
34
  { deliveryMode: { transportType: 'WebSocket' }, eventFilters: @events }
25
35
  ].to_json())
36
+
37
+ # send a heartbeat every 10 minutes
38
+ @task = Concurrent::TimerTask.new(execution_interval: 600) do
39
+ @ws.send([
40
+ { type: 'Heartbeat', messageId: SecureRandom.uuid },
41
+ ].to_json())
42
+ end
43
+ @task.execute
26
44
  end
27
45
  @ws.on :message do |event|
46
+ if @debugMode
47
+ puts "Receiving...\n" + event.data
48
+ end
28
49
  header, body = JSON.parse(event.data)
29
50
  if header['type'] == 'ServerNotification'
30
51
  @callback.call(body)
31
52
  end
32
53
  end
54
+ @ws.on :close do |event|
55
+ if @on_ws_closed
56
+ @on_ws_closed.call(event)
57
+ end
58
+ end
33
59
  }
34
60
  end
35
61
  end
@@ -38,79 +64,3 @@ class WS
38
64
  @t.kill
39
65
  end
40
66
  end
41
-
42
- class PubNub
43
- attr_accessor :events
44
-
45
- def initialize(ringcentral, events, message_callback, status_callback = nil, presence_callback = nil)
46
- warn('PubNub is deprecated. Use WS (WebSocket) instead.')
47
- @rc = ringcentral
48
- @events = events
49
- @callback = Pubnub::SubscribeCallback.new(
50
- message: lambda { |envelope|
51
- message = envelope.result[:data][:message]
52
- cipher = OpenSSL::Cipher::AES.new(128, :ECB)
53
- cipher.decrypt
54
- cipher.key = Base64.decode64(@subscription['deliveryMode']['encryptionKey'])
55
- ciphertext = Base64.decode64(message)
56
- plaintext = cipher.update(ciphertext) + cipher.final
57
- message_callback.call(JSON.parse(plaintext))
58
- },
59
- presence: lambda { |envelope|
60
- presence_callback != nil && presence_callback.call(envelope)
61
- },
62
- status: lambda { |envelope|
63
- status_callback != nil && status_callback.call(envelope)
64
- }
65
- )
66
- @subscription = nil
67
- @timer = nil
68
- @pubnub = nil
69
- end
70
-
71
- def subscription=(value)
72
- @subscription = value
73
- if @timer != nil
74
- @timer.shutdown
75
- @timer = nil
76
- end
77
- if value != nil
78
- @timer = Concurrent::TimerTask.new(execution_interval: value['expiresIn'] - 120) do
79
- self.refresh
80
- end
81
- @timer.execute
82
- end
83
- end
84
-
85
- def subscribe
86
- r = @rc.post('/restapi/v1.0/subscription', payload: request_body)
87
- self.subscription = r.body
88
- @pubnub = Pubnub.new(subscribe_key: @subscription['deliveryMode']['subscriberKey'], user_id: @rc.token['owner_id'])
89
- @pubnub.add_listener(name: 'default', callback: @callback)
90
- @pubnub.subscribe(channels: @subscription['deliveryMode']['address'])
91
- end
92
-
93
- def refresh
94
- return if @subscription == nil
95
- r = @rc.put("/restapi/v1.0/subscription/#{@subscription['id']}", payload: request_body)
96
- self.subscription = r.body
97
- end
98
-
99
- def revoke
100
- return if @subscription == nil
101
- @pubnub.unsubscribe(channel: @subscription['deliveryMode']['address'])
102
- @pubnub.remove_listener(name: 'default')
103
- @pubnub = nil
104
- @rc.delete("/restapi/v1.0/subscription/#{@subscription['id']}")
105
- self.subscription = nil
106
- end
107
-
108
- private
109
-
110
- def request_body
111
- {
112
- 'deliveryMode': { 'transportType': 'PubNub', 'encryption': true },
113
- 'eventFilters': @events
114
- }
115
- end
116
- 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.3'
3
+ gem.version = '1.0.0'
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,10 +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.8', '>= 2.8.4')
17
- gem.add_dependency('concurrent-ruby', '~> 1.2', '>= 1.2.2')
18
- gem.add_dependency('pubnub', '~> 5.2', '>= 5.2.2')
19
- gem.add_dependency('faraday', '~> 2.7', '>= 2.7.4')
16
+ gem.add_dependency('addressable', '~> 2.8', '>= 2.8.6')
17
+ gem.add_dependency('concurrent-ruby', '~> 1.2', '>= 1.2.3')
18
+ gem.add_dependency('faraday', '~> 2.9', '>= 2.9.0')
20
19
  gem.add_dependency('faraday-multipart', '~> 1.0', '>= 1.0.4')
21
- gem.add_dependency('faye-websocket', '~> 0.11', '>= 0.11.2')
20
+ gem.add_dependency('faye-websocket', '~> 0.11', '>= 0.11.3')
22
21
  end
data/spec/fax_spec.rb CHANGED
@@ -1,5 +1,7 @@
1
1
  require 'dotenv'
2
2
  require 'ringcentral'
3
+ require "simplecov"
4
+ SimpleCov.start
3
5
 
4
6
  RSpec.describe 'Fax' do
5
7
  describe 'send fax' do
data/spec/mms_spec.rb CHANGED
@@ -1,5 +1,7 @@
1
1
  require 'dotenv'
2
2
  require 'ringcentral'
3
+ require "simplecov"
4
+ SimpleCov.start
3
5
 
4
6
  RSpec.describe 'MMS' do
5
7
  describe 'send MMS' do
@@ -1,5 +1,7 @@
1
1
  require 'dotenv'
2
2
  require 'ringcentral'
3
+ require "simplecov"
4
+ SimpleCov.start
3
5
 
4
6
  RSpec.describe 'query params' do
5
7
  describe 'single' do
@@ -1,23 +1,24 @@
1
1
  require 'ringcentral'
2
+ require "simplecov"
3
+ SimpleCov.start
2
4
 
3
5
  RSpec.describe 'RingCentral' do
4
6
  describe 'ringcentral' do
5
7
  it 'test_class_variables' do
6
- expect('https://platform.devtest.ringcentral.com').to eq(RingCentral.SANDBOX_SERVER)
7
8
  expect('https://platform.ringcentral.com').to eq(RingCentral.PRODUCTION_SERVER)
8
9
  end
9
10
 
10
11
  it 'test_initializer' do
11
- rc = RingCentral.new('client_id', 'client_secret', RingCentral.SANDBOX_SERVER)
12
+ rc = RingCentral.new('client_id', 'client_secret', RingCentral.PRODUCTION_SERVER)
12
13
  expect('client_id').to eq(rc.client_id)
13
14
  expect('client_secret').to eq(rc.client_secret)
14
- expect('https://platform.devtest.ringcentral.com').to eq(rc.server)
15
+ expect('https://platform.ringcentral.com').to eq(rc.server)
15
16
  expect(false).to eq(rc.auto_refresh)
16
17
  end
17
18
 
18
19
  it 'test_authorize_uri' do
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', {state: 'mystate'}))
20
+ rc = RingCentral.new('client_id', 'client_secret', RingCentral.PRODUCTION_SERVER)
21
+ expect(RingCentral.PRODUCTION_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', {state: 'mystate'}))
21
22
  end
22
23
 
23
24
  it 'test_jwt_flow' do
@@ -46,17 +47,17 @@ RSpec.describe 'RingCentral' do
46
47
  # get
47
48
  r = rc.get('/restapi/v1.0/account/~/extension/~')
48
49
  expect(r).not_to be_nil
49
- expect('101').to eq(r.body['extensionNumber'])
50
+ expect(r.body['extensionNumber']).not_to be_nil
50
51
 
51
52
  # post
52
- r = rc.post('/restapi/v1.0/account/~/extension/~/sms', payload: {
53
- to: [{phoneNumber: ENV['RINGCENTRAL_RECEIVER']}],
54
- from: {phoneNumber: ENV['RINGCENTRAL_SENDER']},
53
+ r = rc.post('/restapi/v1.0/account/~/extension/~/company-pager', payload: {
54
+ to: [{extensionId: rc.token['owner_id']}],
55
+ from: {extensionId: rc.token['owner_id']},
55
56
  text: 'Hello world'
56
57
  })
57
58
  expect(r).not_to be_nil
58
59
  message = r.body
59
- expect('SMS').to eq(message['type'])
60
+ expect('Pager').to eq(message['type'])
60
61
  messageUrl = "/restapi/v1.0/account/~/extension/~/message-store/#{message['id']}"
61
62
 
62
63
  # put
@@ -72,13 +73,12 @@ RSpec.describe 'RingCentral' do
72
73
  # todo: test patch
73
74
 
74
75
  # delete
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'])
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'])
82
82
 
83
83
  rc.revoke()
84
84
  end
@@ -2,6 +2,8 @@ require 'ringcentral'
2
2
  require 'subscription'
3
3
  require 'dotenv'
4
4
  require 'rspec'
5
+ require "simplecov"
6
+ SimpleCov.start
5
7
 
6
8
  Dotenv.load
7
9
  $rc = RingCentral.new(ENV['RINGCENTRAL_CLIENT_ID'], ENV['RINGCENTRAL_CLIENT_SECRET'], ENV['RINGCENTRAL_SERVER_URL'])
@@ -15,6 +17,9 @@ RSpec.describe 'WebSocket Subscription' do
15
17
  callback.call(message)
16
18
  })
17
19
  subscription.subscribe()
20
+ # subscription.on_ws_closed = lambda { |event|
21
+ # puts 'WebSocket closed'
22
+ # }
18
23
  return subscription
19
24
  end
20
25
 
@@ -31,17 +36,17 @@ RSpec.describe 'WebSocket Subscription' do
31
36
  from: {extensionId: $rc.token['owner_id']},
32
37
  text: 'Hello world'
33
38
  })
34
- sleep(20)
39
+ sleep(10)
35
40
  expect(count).to be > 0
36
41
 
37
42
  # sleep for some time and see if the websocket is still alive
38
- sleep(60)
43
+ sleep(20)
39
44
  $rc.post('/restapi/v1.0/account/~/extension/~/company-pager', payload: {
40
45
  to: [{extensionId: $rc.token['owner_id']}],
41
46
  from: {extensionId: $rc.token['owner_id']},
42
47
  text: 'Hello world'
43
48
  })
44
- sleep(20)
49
+ sleep(10)
45
50
  expect(count).to be > 1
46
51
 
47
52
  sub.revoke()
@@ -57,12 +62,12 @@ RSpec.describe 'WebSocket Subscription' do
57
62
 
58
63
  subscription.revoke()
59
64
 
60
- $rc.post('/restapi/v1.0/account/~/extension/~/sms', payload: {
61
- to: [{phoneNumber: ENV['RINGCENTRAL_RECEIVER']}],
62
- from: {phoneNumber: ENV['RINGCENTRAL_SENDER']},
65
+ $rc.post('/restapi/v1.0/account/~/extension/~/company-pager', payload: {
66
+ to: [{extensionId: $rc.token['owner_id']}],
67
+ from: {extensionId: $rc.token['owner_id']},
63
68
  text: 'Hello world'
64
69
  })
65
- sleep(20)
70
+ sleep(10)
66
71
 
67
72
  expect(count).to eq(0)
68
73
  $rc.revoke()
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.3
4
+ version: 1.0.0
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-08-21 00:00:00.000000000 Z
11
+ date: 2024-04-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: addressable
@@ -19,7 +19,7 @@ dependencies:
19
19
  version: '2.8'
20
20
  - - ">="
21
21
  - !ruby/object:Gem::Version
22
- version: 2.8.4
22
+ version: 2.8.6
23
23
  type: :runtime
24
24
  prerelease: false
25
25
  version_requirements: !ruby/object:Gem::Requirement
@@ -29,7 +29,7 @@ dependencies:
29
29
  version: '2.8'
30
30
  - - ">="
31
31
  - !ruby/object:Gem::Version
32
- version: 2.8.4
32
+ version: 2.8.6
33
33
  - !ruby/object:Gem::Dependency
34
34
  name: concurrent-ruby
35
35
  requirement: !ruby/object:Gem::Requirement
@@ -39,7 +39,7 @@ dependencies:
39
39
  version: '1.2'
40
40
  - - ">="
41
41
  - !ruby/object:Gem::Version
42
- version: 1.2.2
42
+ version: 1.2.3
43
43
  type: :runtime
44
44
  prerelease: false
45
45
  version_requirements: !ruby/object:Gem::Requirement
@@ -49,47 +49,27 @@ dependencies:
49
49
  version: '1.2'
50
50
  - - ">="
51
51
  - !ruby/object:Gem::Version
52
- version: 1.2.2
53
- - !ruby/object:Gem::Dependency
54
- name: pubnub
55
- requirement: !ruby/object:Gem::Requirement
56
- requirements:
57
- - - "~>"
58
- - !ruby/object:Gem::Version
59
- version: '5.2'
60
- - - ">="
61
- - !ruby/object:Gem::Version
62
- version: 5.2.2
63
- type: :runtime
64
- prerelease: false
65
- version_requirements: !ruby/object:Gem::Requirement
66
- requirements:
67
- - - "~>"
68
- - !ruby/object:Gem::Version
69
- version: '5.2'
70
- - - ">="
71
- - !ruby/object:Gem::Version
72
- version: 5.2.2
52
+ version: 1.2.3
73
53
  - !ruby/object:Gem::Dependency
74
54
  name: faraday
75
55
  requirement: !ruby/object:Gem::Requirement
76
56
  requirements:
77
57
  - - "~>"
78
58
  - !ruby/object:Gem::Version
79
- version: '2.7'
59
+ version: '2.9'
80
60
  - - ">="
81
61
  - !ruby/object:Gem::Version
82
- version: 2.7.4
62
+ version: 2.9.0
83
63
  type: :runtime
84
64
  prerelease: false
85
65
  version_requirements: !ruby/object:Gem::Requirement
86
66
  requirements:
87
67
  - - "~>"
88
68
  - !ruby/object:Gem::Version
89
- version: '2.7'
69
+ version: '2.9'
90
70
  - - ">="
91
71
  - !ruby/object:Gem::Version
92
- version: 2.7.4
72
+ version: 2.9.0
93
73
  - !ruby/object:Gem::Dependency
94
74
  name: faraday-multipart
95
75
  requirement: !ruby/object:Gem::Requirement
@@ -119,7 +99,7 @@ dependencies:
119
99
  version: '0.11'
120
100
  - - ">="
121
101
  - !ruby/object:Gem::Version
122
- version: 0.11.2
102
+ version: 0.11.3
123
103
  type: :runtime
124
104
  prerelease: false
125
105
  version_requirements: !ruby/object:Gem::Requirement
@@ -129,7 +109,7 @@ dependencies:
129
109
  version: '0.11'
130
110
  - - ">="
131
111
  - !ruby/object:Gem::Version
132
- version: 0.11.2
112
+ version: 0.11.3
133
113
  description: Ruby SDK for you to access RingCentral platform API.
134
114
  email:
135
115
  - tyler.liu@ringcentral.com
@@ -143,7 +123,6 @@ files:
143
123
  - ringcentral-sdk.gemspec
144
124
  - spec/fax_spec.rb
145
125
  - spec/mms_spec.rb
146
- - spec/pubnub_subscription_spec.rb
147
126
  - spec/query_params_spec.rb
148
127
  - spec/ringcentral_spec.rb
149
128
  - spec/websocket_subscription_spec.rb
@@ -162,9 +141,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
162
141
  version: '0'
163
142
  required_rubygems_version: !ruby/object:Gem::Requirement
164
143
  requirements:
165
- - - ">"
144
+ - - ">="
166
145
  - !ruby/object:Gem::Version
167
- version: 1.3.1
146
+ version: '0'
168
147
  requirements: []
169
148
  rubygems_version: 3.4.10
170
149
  signing_key:
@@ -173,7 +152,6 @@ summary: RingCentral Ruby SDK.
173
152
  test_files:
174
153
  - spec/fax_spec.rb
175
154
  - spec/mms_spec.rb
176
- - spec/pubnub_subscription_spec.rb
177
155
  - spec/query_params_spec.rb
178
156
  - spec/ringcentral_spec.rb
179
157
  - spec/websocket_subscription_spec.rb
@@ -1,80 +0,0 @@
1
- require 'ringcentral'
2
- require 'subscription'
3
- require 'dotenv'
4
- require 'rspec'
5
-
6
- Dotenv.load
7
- $rc = RingCentral.new(ENV['RINGCENTRAL_CLIENT_ID'], ENV['RINGCENTRAL_CLIENT_SECRET'], ENV['RINGCENTRAL_SERVER_URL'])
8
-
9
- RSpec.describe 'PubNub Subscription' do
10
- def createSubscription(callback)
11
- events = [
12
- '/restapi/v1.0/account/~/extension/~/message-store',
13
- ]
14
- subscription = PubNub.new($rc, events, lambda { |message|
15
- callback.call(message)
16
- })
17
- subscription.subscribe()
18
- return subscription
19
- end
20
-
21
- describe 'PubNub Subscription' do
22
- it 'receives message notification' do
23
- $rc.authorize(jwt: ENV['RINGCENTRAL_JWT_TOKEN'])
24
- count = 0
25
- createSubscription(lambda { |message|
26
- count += 1
27
- })
28
-
29
- $rc.post('/restapi/v1.0/account/~/extension/~/sms', payload: {
30
- to: [{phoneNumber: ENV['RINGCENTRAL_RECEIVER']}],
31
- from: {phoneNumber: ENV['RINGCENTRAL_SENDER']},
32
- text: 'Hello world'
33
- })
34
- sleep(20)
35
-
36
- expect(count).to be > 0
37
- $rc.revoke()
38
- end
39
-
40
- it 'refresh' do
41
- $rc.authorize(jwt: ENV['RINGCENTRAL_JWT_TOKEN'])
42
- count = 0
43
- subscription = createSubscription(lambda { |message|
44
- count += 1
45
- })
46
-
47
- subscription.refresh()
48
-
49
- $rc.post('/restapi/v1.0/account/~/extension/~/sms', payload: {
50
- to: [{phoneNumber: ENV['RINGCENTRAL_RECEIVER']}],
51
- from: {phoneNumber: ENV['RINGCENTRAL_SENDER']},
52
- text: 'Hello world'
53
- })
54
- sleep(20)
55
-
56
- expect(count).to be > 0
57
- $rc.revoke()
58
- end
59
-
60
- it 'revoke' do
61
- $rc.authorize(jwt: ENV['RINGCENTRAL_JWT_TOKEN'])
62
- count = 0
63
- subscription = createSubscription(lambda { |message|
64
- count += 1
65
- })
66
-
67
- subscription.revoke()
68
-
69
- $rc.post('/restapi/v1.0/account/~/extension/~/sms', payload: {
70
- to: [{phoneNumber: ENV['RINGCENTRAL_RECEIVER']}],
71
- from: {phoneNumber: ENV['RINGCENTRAL_SENDER']},
72
- text: 'Hello world'
73
- })
74
- sleep(20)
75
-
76
- expect(count).to eq(0)
77
- $rc.revoke()
78
- end
79
- end
80
- end