ringcentral-sdk 1.0.0.pre.beta.4 → 1.0.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 8bb9f1c796f3fc2ac90aa28d1a33090d5e26fdc8445edb312fd9b1937add7add
4
- data.tar.gz: 394c158641dfe6d4f6301eec2527107eeb3909b6aff782b1af5224f700aca7ef
3
+ metadata.gz: cb3d49139090020a404bb081c1468d4439c2628afc355df576ac27c36bc29f6f
4
+ data.tar.gz: 44f29f3245d3766e87ee46b725f0f737e085e6d7e42d764fedc156b7095d503d
5
5
  SHA512:
6
- metadata.gz: 6cc88ac631aca239ecb0a644d2f399e86cd055d11a50021adb0aab66d6a3bc30be7e03c448541fa5309cfed9b336ec1ef183348b3383c29f006357093bb9c24d
7
- data.tar.gz: 10a25f56bc1afbd4b3c04df79ccfecf9f7a1cd019023d6417b38b43f80fa829f651fea02a1fdf677f64c3ca8fa11457bd31d23d1f30d2bad190bfbd2958228d8
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.
@@ -165,26 +165,11 @@ subscription.on_ws_closed = lambda { |event|
165
165
  }
166
166
  ```
167
167
 
168
- ### (deprecated) PubNub Subscriptions
169
-
170
- ```ruby
171
- events = [
172
- '/restapi/v1.0/account/~/extension/~/message-store',
173
- ]
174
- subscription = PubNub.new(rc, events, lambda { |message|
175
- puts message
176
- })
177
- subscription.subscribe()
178
- ```
179
-
180
-
181
- For more sample codes, please refer to the [test cases](/spec).
182
-
183
168
 
184
169
  ## How to test
185
170
 
186
171
  ```
187
- bundle install --path vendor/bundle
172
+ bundle install
188
173
  ```
189
174
 
190
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,7 +1,4 @@
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'
@@ -67,79 +64,3 @@ class WS
67
64
  @t.kill
68
65
  end
69
66
  end
70
-
71
- class PubNub
72
- attr_accessor :events
73
-
74
- def initialize(ringcentral, events, message_callback, status_callback = nil, presence_callback = nil)
75
- warn('PubNub is deprecated. Use WS (WebSocket) instead.')
76
- @rc = ringcentral
77
- @events = events
78
- @callback = Pubnub::SubscribeCallback.new(
79
- message: lambda { |envelope|
80
- message = envelope.result[:data][:message]
81
- cipher = OpenSSL::Cipher::AES.new(128, :ECB)
82
- cipher.decrypt
83
- cipher.key = Base64.decode64(@subscription['deliveryMode']['encryptionKey'])
84
- ciphertext = Base64.decode64(message)
85
- plaintext = cipher.update(ciphertext) + cipher.final
86
- message_callback.call(JSON.parse(plaintext))
87
- },
88
- presence: lambda { |envelope|
89
- presence_callback != nil && presence_callback.call(envelope)
90
- },
91
- status: lambda { |envelope|
92
- status_callback != nil && status_callback.call(envelope)
93
- }
94
- )
95
- @subscription = nil
96
- @timer = nil
97
- @pubnub = nil
98
- end
99
-
100
- def subscription=(value)
101
- @subscription = value
102
- if @timer != nil
103
- @timer.shutdown
104
- @timer = nil
105
- end
106
- if value != nil
107
- @timer = Concurrent::TimerTask.new(execution_interval: value['expiresIn'] - 120) do
108
- self.refresh
109
- end
110
- @timer.execute
111
- end
112
- end
113
-
114
- def subscribe
115
- r = @rc.post('/restapi/v1.0/subscription', payload: request_body)
116
- self.subscription = r.body
117
- @pubnub = Pubnub.new(subscribe_key: @subscription['deliveryMode']['subscriberKey'], user_id: @rc.token['owner_id'])
118
- @pubnub.add_listener(name: 'default', callback: @callback)
119
- @pubnub.subscribe(channels: @subscription['deliveryMode']['address'])
120
- end
121
-
122
- def refresh
123
- return if @subscription == nil
124
- r = @rc.put("/restapi/v1.0/subscription/#{@subscription['id']}", payload: request_body)
125
- self.subscription = r.body
126
- end
127
-
128
- def revoke
129
- return if @subscription == nil
130
- @pubnub.unsubscribe(channel: @subscription['deliveryMode']['address'])
131
- @pubnub.remove_listener(name: 'default')
132
- @pubnub = nil
133
- @rc.delete("/restapi/v1.0/subscription/#{@subscription['id']}")
134
- self.subscription = nil
135
- end
136
-
137
- private
138
-
139
- def request_body
140
- {
141
- 'deliveryMode': { 'transportType': 'PubNub', 'encryption': true },
142
- 'eventFilters': @events
143
- }
144
- end
145
- 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.4'
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
@@ -8,20 +10,19 @@ RSpec.describe 'MMS' do
8
10
  rc = RingCentral.new(ENV['RINGCENTRAL_CLIENT_ID'], ENV['RINGCENTRAL_CLIENT_SECRET'], ENV['RINGCENTRAL_SERVER_URL'])
9
11
  rc.authorize(jwt: ENV['RINGCENTRAL_JWT_TOKEN'])
10
12
 
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'])
13
+ r = rc.post('/restapi/v1.0/account/~/extension/~/sms',
14
+ payload: {
15
+ to: [{ phoneNumber: ENV['RINGCENTRAL_RECEIVER'] }],
16
+ from: { phoneNumber: ENV['RINGCENTRAL_SENDER'] },
17
+ text: 'hello world'
18
+ },
19
+ files: [
20
+ ['spec/test.png', 'image/png']
21
+ ]
22
+ )
23
+ expect(r).not_to be_nil
24
+ message = r.body
25
+ expect('SMS').to eq(message['type'])
25
26
 
26
27
  rc.revoke()
27
28
  end
@@ -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,7 +47,7 @@ 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
53
  r = rc.post('/restapi/v1.0/account/~/extension/~/company-pager', payload: {
@@ -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'])
@@ -34,17 +36,17 @@ RSpec.describe 'WebSocket Subscription' do
34
36
  from: {extensionId: $rc.token['owner_id']},
35
37
  text: 'Hello world'
36
38
  })
37
- sleep(20)
39
+ sleep(10)
38
40
  expect(count).to be > 0
39
41
 
40
42
  # sleep for some time and see if the websocket is still alive
41
- sleep(60)
43
+ sleep(20)
42
44
  $rc.post('/restapi/v1.0/account/~/extension/~/company-pager', payload: {
43
45
  to: [{extensionId: $rc.token['owner_id']}],
44
46
  from: {extensionId: $rc.token['owner_id']},
45
47
  text: 'Hello world'
46
48
  })
47
- sleep(20)
49
+ sleep(10)
48
50
  expect(count).to be > 1
49
51
 
50
52
  sub.revoke()
@@ -65,7 +67,7 @@ RSpec.describe 'WebSocket Subscription' do
65
67
  from: {extensionId: $rc.token['owner_id']},
66
68
  text: 'Hello world'
67
69
  })
68
- sleep(20)
70
+ sleep(10)
69
71
 
70
72
  expect(count).to eq(0)
71
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.4
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-12-11 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?type=Pager',
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/~/company-pager', payload: {
30
- to: [{extensionId: $rc.token['owner_id']}],
31
- from: {extensionId: $rc.token['owner_id']},
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/~/company-pager', payload: {
50
- to: [{extensionId: $rc.token['owner_id']}],
51
- from: {extensionId: $rc.token['owner_id']},
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/~/company-pager', payload: {
70
- to: [{extensionId: $rc.token['owner_id']}],
71
- from: {extensionId: $rc.token['owner_id']},
72
- text: 'Hello world'
73
- })
74
- sleep(20)
75
-
76
- expect(count).to eq(0)
77
- $rc.revoke()
78
- end
79
- end
80
- end