ringcentral_sdk 0.4.0 → 0.5.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +7 -0
- data/Gemfile +26 -0
- data/README.md +80 -41
- data/lib/ringcentral_sdk.rb +13 -4
- data/lib/ringcentral_sdk/helpers/fax.rb +7 -8
- data/lib/ringcentral_sdk/platform.rb +38 -7
- data/lib/ringcentral_sdk/subscription.rb +31 -23
- data/test/test_helper.rb +12 -0
- data/test/test_helper_fax.rb +84 -0
- data/test/test_helper_inflator_contact_info.rb +21 -0
- data/test/test_helper_request.rb +14 -0
- data/test/test_platform.rb +209 -0
- data/test/test_setup.rb +42 -9
- data/test/test_subscription.rb +202 -0
- metadata +16 -13
- data/VERSION.txt +0 -1
- data/lib/ringcentral_sdk/pubnub_factory.rb +0 -33
- data/lib/ringcentral_sdk/sdk.rb +0 -29
- data/lib/ringcentral_sdk/version.rb +0 -3
@@ -1,6 +1,9 @@
|
|
1
1
|
require 'base64'
|
2
|
+
require 'logger'
|
2
3
|
require 'multi_json'
|
3
4
|
require 'observer'
|
5
|
+
require 'openssl'
|
6
|
+
require 'pubnub'
|
4
7
|
require 'timers'
|
5
8
|
|
6
9
|
module RingCentralSdk
|
@@ -11,9 +14,8 @@ module RingCentralSdk
|
|
11
14
|
|
12
15
|
attr_reader :event_filters
|
13
16
|
|
14
|
-
def initialize(platform
|
17
|
+
def initialize(platform)
|
15
18
|
@_platform = platform
|
16
|
-
@_pubnub_factory = pubnub_factory
|
17
19
|
@event_filters = []
|
18
20
|
@_timeout = nil
|
19
21
|
@_subscription = nil_subscription()
|
@@ -73,7 +75,7 @@ module RingCentralSdk
|
|
73
75
|
response = @_platform.client.post do |req|
|
74
76
|
req.url 'subscription'
|
75
77
|
req.body = {
|
76
|
-
:eventFilters =>
|
78
|
+
:eventFilters => @_platform.create_urls(@event_filters),
|
77
79
|
:deliveryMode => {
|
78
80
|
:transportType => 'PubNub'
|
79
81
|
}
|
@@ -91,7 +93,6 @@ module RingCentralSdk
|
|
91
93
|
raise 'Subscribe HTTP Request Error'
|
92
94
|
end
|
93
95
|
|
94
|
-
return nil
|
95
96
|
end
|
96
97
|
|
97
98
|
def renew(events=nil)
|
@@ -109,9 +110,9 @@ module RingCentralSdk
|
|
109
110
|
|
110
111
|
begin
|
111
112
|
response = @_platform.client.put do |req|
|
112
|
-
req.url 'subscription' + @_subscription['id']
|
113
|
+
req.url 'subscription/' + @_subscription['id'].to_s
|
113
114
|
req.body = {
|
114
|
-
:eventFilters =>
|
115
|
+
:eventFilters => @_platform.create_urls(@event_filters),
|
115
116
|
}
|
116
117
|
end
|
117
118
|
|
@@ -133,6 +134,7 @@ module RingCentralSdk
|
|
133
134
|
end
|
134
135
|
|
135
136
|
begin
|
137
|
+
url = 'subscription/' + @_subscription['id'].to_s
|
136
138
|
response = @_platform.client.delete do |req|
|
137
139
|
req.url = 'subscription' + @_subscription['id']
|
138
140
|
end
|
@@ -183,7 +185,8 @@ module RingCentralSdk
|
|
183
185
|
end
|
184
186
|
|
185
187
|
s_key = @_subscription['deliveryMode']['subscriberKey']
|
186
|
-
|
188
|
+
|
189
|
+
@_pubnub = new_pubnub(s_key, false, '')
|
187
190
|
|
188
191
|
callback = lambda { |envelope|
|
189
192
|
_notify(envelope.msg)
|
@@ -214,14 +217,13 @@ module RingCentralSdk
|
|
214
217
|
|
215
218
|
if _encrypted?()
|
216
219
|
delivery_mode = @_subscription['deliveryMode']
|
217
|
-
key = Base64.decode64(delivery_mode['encryptionKey'])
|
218
|
-
ciphertext = Base64.decode64(message)
|
219
220
|
|
220
|
-
|
221
|
-
|
222
|
-
|
221
|
+
cipher = OpenSSL::Cipher::AES.new(128, :ECB)
|
222
|
+
cipher.decrypt
|
223
|
+
cipher.key = Base64.decode64(delivery_mode['encryptionKey'].to_s)
|
223
224
|
|
224
|
-
|
225
|
+
ciphertext = Base64.decode64(message)
|
226
|
+
plaintext = cipher.update(ciphertext) + cipher.final
|
225
227
|
|
226
228
|
message = MultiJson.decode(plaintext)
|
227
229
|
end
|
@@ -244,16 +246,6 @@ module RingCentralSdk
|
|
244
246
|
end
|
245
247
|
end
|
246
248
|
|
247
|
-
def _get_full_events_filter()
|
248
|
-
full_events_filter = []
|
249
|
-
@event_filters.each do |filter|
|
250
|
-
if filter.to_s
|
251
|
-
full_events_filter.push(@_platform.create_url(filter.to_s))
|
252
|
-
end
|
253
|
-
end
|
254
|
-
return full_events_filter
|
255
|
-
end
|
256
|
-
|
257
249
|
def _set_timeout()
|
258
250
|
time_to_expiration = @_subscription['expiresIn'] - RENEW_HANDICAP
|
259
251
|
@_timeout = Timers::Group.new
|
@@ -268,5 +260,21 @@ module RingCentralSdk
|
|
268
260
|
end
|
269
261
|
end
|
270
262
|
|
263
|
+
def new_pubnub(subscribe_key='', ssl_on=false, publish_key='', my_logger=nil)
|
264
|
+
my_logger = Logger.new(STDOUT) if my_logger.nil?
|
265
|
+
|
266
|
+
return Pubnub.new(
|
267
|
+
:subscribe_key => subscribe_key.to_s,
|
268
|
+
:publish_key => publish_key.to_s,
|
269
|
+
:error_callback => lambda { |msg|
|
270
|
+
puts "Error callback says: #{msg.inspect}"
|
271
|
+
},
|
272
|
+
:connect_callback => lambda { |msg|
|
273
|
+
puts "CONNECTED: #{msg.inspect}"
|
274
|
+
},
|
275
|
+
:logger => my_logger
|
276
|
+
)
|
277
|
+
end
|
278
|
+
|
271
279
|
end
|
272
280
|
end
|
data/test/test_helper.rb
ADDED
@@ -0,0 +1,84 @@
|
|
1
|
+
require './test/test_helper.rb'
|
2
|
+
|
3
|
+
class RingCentralSdkHelperFaxTest < Test::Unit::TestCase
|
4
|
+
def testSetup
|
5
|
+
|
6
|
+
fax = RingCentralSdk::Helpers::CreateFaxRequest.new(
|
7
|
+
nil, # Can be nil or {} for defaults '~'
|
8
|
+
{
|
9
|
+
# phone numbers are in E.164 format with or without leading '+'
|
10
|
+
:to => '+16505551212',
|
11
|
+
:faxResolution => 'High',
|
12
|
+
:coverPageText => 'RingCentral fax demo using Ruby SDK!'
|
13
|
+
},
|
14
|
+
:text => 'RingCentral fax demo using Ruby SDK!'
|
15
|
+
)
|
16
|
+
|
17
|
+
assert_equal "RingCentralSdk::Helpers::CreateFaxRequest", fax.class.name
|
18
|
+
assert_equal 'account/~/extension/~/fax', fax.url()
|
19
|
+
|
20
|
+
fax2 = RingCentralSdk::Helpers::CreateFaxRequest.new(
|
21
|
+
{ :account_id => '111111111', :extension_id => '222222222' }, # Can be nil or {} for defaults '~'
|
22
|
+
{
|
23
|
+
# phone numbers are in E.164 format with or without leading '+'
|
24
|
+
"to" => { :phoneNumber => '+16505551212' },
|
25
|
+
:faxResolution => 'High',
|
26
|
+
:coverPageText => 'RingCentral fax demo using Ruby SDK!'
|
27
|
+
},
|
28
|
+
:file_name => './scripts/test_file.pdf'
|
29
|
+
)
|
30
|
+
|
31
|
+
assert_equal 'account/111111111/extension/222222222/fax', fax2.url()
|
32
|
+
|
33
|
+
assert_raise do
|
34
|
+
fax2.add_file('non-existent_file_path')
|
35
|
+
end
|
36
|
+
|
37
|
+
fax3 = RingCentralSdk::Helpers::CreateFaxRequest.new(
|
38
|
+
{ :account_id => 111111111, :extension_id => 222222222 }, # Can be nil or {} for defaults '~'
|
39
|
+
{
|
40
|
+
# phone numbers are in E.164 format with or without leading '+'
|
41
|
+
:to => [{ :phoneNumber => '+16505551212' }],
|
42
|
+
:faxResolution => 'High',
|
43
|
+
:coverPageText => 'RingCentral fax demo using Ruby SDK!'
|
44
|
+
},
|
45
|
+
:text => 'RingCentral fax demo using Ruby SDK!'
|
46
|
+
)
|
47
|
+
|
48
|
+
assert_equal 'account/111111111/extension/222222222/fax', fax3.url()
|
49
|
+
|
50
|
+
fax4 = RingCentralSdk::Helpers::CreateFaxRequest.new(
|
51
|
+
{ :account_id => 111111111, :extension_id => 222222222 }, # Can be nil or {} for defaults '~'
|
52
|
+
'{"to":"+16505551212","coverPageText":"RingCentral fax demo using Ruby SDK!"}',
|
53
|
+
:text => 'RingCentral fax demo using Ruby SDK!'
|
54
|
+
)
|
55
|
+
assert_equal 'account/111111111/extension/222222222/fax', fax4.url()
|
56
|
+
|
57
|
+
fax5 = RingCentralSdk::Helpers::CreateFaxRequest.new(
|
58
|
+
{ :account_id => 111111111, :extension_id => 222222222 }, # Can be nil or {} for defaults '~'
|
59
|
+
'{"coverPageText":"RingCentral fax demo using Ruby SDK!"}',
|
60
|
+
:text => 'RingCentral fax demo using Ruby SDK!'
|
61
|
+
)
|
62
|
+
assert_equal 'account/111111111/extension/222222222/fax', fax5.url()
|
63
|
+
|
64
|
+
assert_equal 'application/pdf', fax.get_file_content_type('example.pdf')
|
65
|
+
assert_equal 'attachment', fax.get_attachment_content_disposition()
|
66
|
+
assert_equal 'attachment; filename="example.pdf"', fax.get_attachment_content_disposition('example.pdf')
|
67
|
+
assert_equal 'attachment; filename="example.pdf"', fax.get_attachment_content_disposition('/path/to/example.pdf')
|
68
|
+
assert_equal 'post', fax.method()
|
69
|
+
|
70
|
+
content_type = fax.content_type()
|
71
|
+
content_type_prefix = ''
|
72
|
+
boundary = ''
|
73
|
+
if content_type =~ /^(multipart\/mixed;\s+boundary=)(.*)$/
|
74
|
+
content_type_prefix = $1
|
75
|
+
boundary = $2
|
76
|
+
end
|
77
|
+
assert_equal 'multipart/mixed; boundary=', content_type_prefix
|
78
|
+
|
79
|
+
lines = fax.body.split(/\r?\n/)
|
80
|
+
assert_equal '--' + boundary, lines[0]
|
81
|
+
assert_equal '--' + boundary + '--', lines[-1]
|
82
|
+
|
83
|
+
end
|
84
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require './test/test_helper.rb'
|
2
|
+
|
3
|
+
class RingCentralSdkHelperInflatorContactInfoTest < Test::Unit::TestCase
|
4
|
+
def testSetup
|
5
|
+
|
6
|
+
inf = RingCentralSdk::Helpers::Inflator::ContactInfo.new
|
7
|
+
|
8
|
+
arr1 = inf.inflate_to_array(16505551212)
|
9
|
+
assert_equal 16505551212, arr1[0][:phoneNumber]
|
10
|
+
|
11
|
+
arr2 = inf.inflate_to_array('+16505551212')
|
12
|
+
assert_equal '+16505551212', arr2[0][:phoneNumber]
|
13
|
+
|
14
|
+
arr3 = inf.inflate_to_array({:phoneNumber=>16505551212})
|
15
|
+
assert_equal 16505551212, arr3[0][:phoneNumber]
|
16
|
+
|
17
|
+
arr4 = inf.inflate_to_array([{:phoneNumber=>16505551212}])
|
18
|
+
assert_equal 16505551212, arr4[0][:phoneNumber]
|
19
|
+
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
require './test/test_helper.rb'
|
2
|
+
|
3
|
+
class RingCentralSdkHelperRequestTest < Test::Unit::TestCase
|
4
|
+
def testSetup
|
5
|
+
|
6
|
+
req = RingCentralSdk::Helpers::Request.new
|
7
|
+
|
8
|
+
assert_equal 'get', req.method()
|
9
|
+
assert_equal '', req.url()
|
10
|
+
assert_equal '', req.content_type()
|
11
|
+
assert_equal '', req.body()
|
12
|
+
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,209 @@
|
|
1
|
+
require './test/test_helper.rb'
|
2
|
+
|
3
|
+
require 'faraday'
|
4
|
+
require 'oauth2'
|
5
|
+
|
6
|
+
class RingCentralSdkPlatformTest < Test::Unit::TestCase
|
7
|
+
def setup
|
8
|
+
@rcsdk = RingCentralSdk.new(
|
9
|
+
'my_app_key',
|
10
|
+
'my_app_secret',
|
11
|
+
RingCentralSdk::RC_SERVER_SANDBOX
|
12
|
+
)
|
13
|
+
end
|
14
|
+
|
15
|
+
def test_main
|
16
|
+
assert_equal "bXlfYXBwX2tleTpteV9hcHBfc2VjcmV0", @rcsdk.send(:get_api_key)
|
17
|
+
end
|
18
|
+
|
19
|
+
def test_set_client
|
20
|
+
rcsdk = new_rcsdk()
|
21
|
+
assert_equal true, rcsdk.oauth2client.is_a?(OAuth2::Client)
|
22
|
+
|
23
|
+
rcsdk.set_oauth2_client()
|
24
|
+
assert_equal true, rcsdk.oauth2client.is_a?(OAuth2::Client)
|
25
|
+
|
26
|
+
rcsdk = new_rcsdk()
|
27
|
+
oauth2client = OAuth2::Client.new(
|
28
|
+
'my_app_key',
|
29
|
+
'my_app_secret',
|
30
|
+
:site => RingCentralSdk::RC_SERVER_SANDBOX,
|
31
|
+
:token_url => rcsdk.class::TOKEN_ENDPOINT)
|
32
|
+
rcsdk.set_oauth2_client(oauth2client)
|
33
|
+
assert_equal true, rcsdk.oauth2client.is_a?(OAuth2::Client)
|
34
|
+
|
35
|
+
assert_raise do
|
36
|
+
@rcsdk.set_oauth2_client('test')
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
def test_set_token
|
41
|
+
token_data = {:access_token => 'test_token'}
|
42
|
+
|
43
|
+
@rcsdk.set_token(token_data)
|
44
|
+
|
45
|
+
assert_equal 'OAuth2::AccessToken', @rcsdk.token.class.name
|
46
|
+
assert_equal 'Faraday::Connection', @rcsdk.client.class.name
|
47
|
+
|
48
|
+
assert_raise do
|
49
|
+
@rcsdk.set_token('test')
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
def test_authorize_url_default
|
54
|
+
rcsdk = RingCentralSdk.new(
|
55
|
+
'my_app_key',
|
56
|
+
'my_app_secret',
|
57
|
+
RingCentralSdk::RC_SERVER_PRODUCTION,
|
58
|
+
{:redirect_uri => 'http://localhost:4567/oauth'}
|
59
|
+
)
|
60
|
+
authorize_url = rcsdk.authorize_url()
|
61
|
+
|
62
|
+
assert_equal true, authorize_url.is_a?(String)
|
63
|
+
assert_equal 0, authorize_url.index(RingCentralSdk::RC_SERVER_PRODUCTION)
|
64
|
+
assert_equal true, (authorize_url.index('localhost') > 0) ? true : false
|
65
|
+
end
|
66
|
+
|
67
|
+
def test_authorize_url_explicit
|
68
|
+
authorize_url = @rcsdk.authorize_url({:redirect_uri => 'http://localhost:4567/oauth'})
|
69
|
+
|
70
|
+
assert_equal 0, authorize_url.index(RingCentralSdk::RC_SERVER_SANDBOX)
|
71
|
+
assert_equal true, (authorize_url.index('localhost') > 0) ? true : false
|
72
|
+
end
|
73
|
+
|
74
|
+
def test_create_url
|
75
|
+
assert_equal '/restapi/v1.0/subscribe', @rcsdk.create_url('subscribe')
|
76
|
+
assert_equal '/restapi/v1.0/subscribe', @rcsdk.create_url('/subscribe')
|
77
|
+
assert_equal RingCentralSdk::RC_SERVER_SANDBOX + '/restapi/v1.0/subscribe', @rcsdk.create_url('subscribe', true)
|
78
|
+
assert_equal RingCentralSdk::RC_SERVER_SANDBOX + '/restapi/v1.0/subscribe', @rcsdk.create_url('/subscribe', true)
|
79
|
+
assert_equal RingCentralSdk::RC_SERVER_SANDBOX + '/restapi/v1.0/subscribe', @rcsdk.create_url('subscribe', true)
|
80
|
+
assert_equal RingCentralSdk::RC_SERVER_SANDBOX + '/restapi/v1.0/subscribe', @rcsdk.create_url('/subscribe', true)
|
81
|
+
end
|
82
|
+
|
83
|
+
def test_create_urls
|
84
|
+
urls = @rcsdk.create_urls(['subscribe'])
|
85
|
+
assert_equal '/restapi/v1.0/subscribe', urls[0]
|
86
|
+
assert_raise do
|
87
|
+
@rcsdk.create_urls(nil)
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
def test_authorize_code
|
92
|
+
rcsdk = new_rcsdk()
|
93
|
+
rcsdk.set_oauth2_client()
|
94
|
+
|
95
|
+
stub_token_hash = data_auth_token
|
96
|
+
stub_token = OAuth2::AccessToken::from_hash(rcsdk.oauth2client, stub_token_hash)
|
97
|
+
|
98
|
+
rcsdk.oauth2client.auth_code.stubs(:get_token).returns(stub_token)
|
99
|
+
|
100
|
+
token = rcsdk.authorize_code('my_test_auth_code')
|
101
|
+
assert_equal 'OAuth2::AccessToken', token.class.name
|
102
|
+
assert_equal 'OAuth2::AccessToken', rcsdk.token.class.name
|
103
|
+
|
104
|
+
rcsdk = new_rcsdk({:redirect_uri => 'http://localhost:4567/oauth'})
|
105
|
+
rcsdk.set_oauth2_client()
|
106
|
+
|
107
|
+
stub_token_hash = data_auth_token
|
108
|
+
stub_token = OAuth2::AccessToken::from_hash(rcsdk.oauth2client, stub_token_hash)
|
109
|
+
|
110
|
+
rcsdk.oauth2client.auth_code.stubs(:get_token).returns(stub_token)
|
111
|
+
|
112
|
+
token = rcsdk.authorize_code('my_test_auth_code')
|
113
|
+
assert_equal 'OAuth2::AccessToken', token.class.name
|
114
|
+
assert_equal 'OAuth2::AccessToken', rcsdk.token.class.name
|
115
|
+
|
116
|
+
rcsdk = new_rcsdk()
|
117
|
+
rcsdk.set_oauth2_client()
|
118
|
+
|
119
|
+
stub_token_hash = data_auth_token
|
120
|
+
stub_token = OAuth2::AccessToken::from_hash(rcsdk.oauth2client, stub_token_hash)
|
121
|
+
|
122
|
+
rcsdk.oauth2client.auth_code.stubs(:get_token).returns(stub_token)
|
123
|
+
|
124
|
+
token = rcsdk.authorize_code('my_test_auth_code')
|
125
|
+
assert_equal 'OAuth2::AccessToken', token.class.name
|
126
|
+
assert_equal 'OAuth2::AccessToken', rcsdk.token.class.name
|
127
|
+
|
128
|
+
rcsdk = new_rcsdk()
|
129
|
+
rcsdk.set_oauth2_client()
|
130
|
+
|
131
|
+
stub_token_hash = data_auth_token
|
132
|
+
stub_token = OAuth2::AccessToken::from_hash(rcsdk.oauth2client, stub_token_hash)
|
133
|
+
|
134
|
+
rcsdk.oauth2client.auth_code.stubs(:get_token).returns(stub_token)
|
135
|
+
|
136
|
+
token = rcsdk.authorize_code('my_test_auth_code', {:redirect_uri => 'http://localhost:4567/oauth'})
|
137
|
+
assert_equal 'OAuth2::AccessToken', token.class.name
|
138
|
+
assert_equal 'OAuth2::AccessToken', rcsdk.token.class.name
|
139
|
+
end
|
140
|
+
|
141
|
+
def test_authorize_password
|
142
|
+
rcsdk = new_rcsdk()
|
143
|
+
rcsdk.set_oauth2_client()
|
144
|
+
|
145
|
+
stub_token_hash = data_auth_token
|
146
|
+
stub_token = OAuth2::AccessToken::from_hash(rcsdk.oauth2client, stub_token_hash)
|
147
|
+
|
148
|
+
rcsdk.oauth2client.password.stubs(:get_token).returns(stub_token)
|
149
|
+
|
150
|
+
token = rcsdk.authorize('my_test_username', 'my_test_extension', 'my_test_password')
|
151
|
+
assert_equal 'OAuth2::AccessToken', token.class.name
|
152
|
+
assert_equal 'OAuth2::AccessToken', rcsdk.token.class.name
|
153
|
+
end
|
154
|
+
|
155
|
+
def test_request
|
156
|
+
assert_raise do
|
157
|
+
@rcsdk.request()
|
158
|
+
end
|
159
|
+
|
160
|
+
rcsdk = new_rcsdk()
|
161
|
+
rcsdk.set_oauth2_client()
|
162
|
+
|
163
|
+
stub_token_hash = data_auth_token
|
164
|
+
stub_token = OAuth2::AccessToken::from_hash(rcsdk.oauth2client, stub_token_hash)
|
165
|
+
|
166
|
+
rcsdk.oauth2client.password.stubs(:get_token).returns(stub_token)
|
167
|
+
|
168
|
+
token = rcsdk.authorize('my_test_username', 'my_test_extension', 'my_test_password')
|
169
|
+
|
170
|
+
#@rcsdk.client.stubs(:post).returns(Faraday::Response.new)
|
171
|
+
Faraday::Connection.any_instance.stubs(:post).returns(Faraday::Response.new)
|
172
|
+
|
173
|
+
fax = RingCentralSdk::Helpers::CreateFaxRequest.new(
|
174
|
+
nil, # Can be nil or {} for defaults '~'
|
175
|
+
{
|
176
|
+
# phone numbers are in E.164 format with or without leading '+'
|
177
|
+
:to => '+16505551212',
|
178
|
+
:faxResolution => 'High',
|
179
|
+
:coverPageText => 'RingCentral fax demo using Ruby SDK!'
|
180
|
+
},
|
181
|
+
:text => 'RingCentral fax demo using Ruby SDK!'
|
182
|
+
)
|
183
|
+
res = rcsdk.request(fax)
|
184
|
+
assert_equal 'Faraday::Response', res.class.name
|
185
|
+
end
|
186
|
+
|
187
|
+
def new_rcsdk(opts={})
|
188
|
+
return RingCentralSdk.new(
|
189
|
+
'my_app_key',
|
190
|
+
'my_app_secret',
|
191
|
+
RingCentralSdk::RC_SERVER_PRODUCTION,
|
192
|
+
opts
|
193
|
+
)
|
194
|
+
end
|
195
|
+
|
196
|
+
def data_auth_token
|
197
|
+
json = '{
|
198
|
+
"access_token": "my_test_access_token",
|
199
|
+
"token_type": "bearer",
|
200
|
+
"expires_in": 3599,
|
201
|
+
"refresh_token": "my_test_refresh_token",
|
202
|
+
"refresh_token_expires_in": 604799,
|
203
|
+
"scope": "ReadCallLog DirectRingOut EditCallLog ReadAccounts Contacts EditExtensions ReadContacts SMS EditPresence RingOut EditCustomData ReadPresence EditPaymentInfo Interoperability Accounts NumberLookup InternalMessages ReadCallRecording EditAccounts Faxes EditReportingSettings ReadClientInfo EditMessages VoipCalling ReadMessages",
|
204
|
+
"owner_id": "1234567890"
|
205
|
+
}'
|
206
|
+
data = JSON.parse(json, :symbolize_names=>true)
|
207
|
+
return data
|
208
|
+
end
|
209
|
+
end
|