ringcentral_sdk 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 53f1dff65956dcafa9e3bd77501e187cf7c67e98
4
+ data.tar.gz: 8176d3c80e94ff445be20793393d48e6fae8d0f1
5
+ SHA512:
6
+ metadata.gz: 9e1742a2c45d5c7764a9623f435c674cce3b9f6a4140a2f7c9738a9b43c89ecbb55cdc74a330839ff6de139aca7d4a4db52acfe249e3ac21ef911b6574a44d03
7
+ data.tar.gz: f8eb9a7e19aeb738fec47dc18af2c5825fe701ff34b8aaf7690258efbd58398ed2f0fcf3604088c511468985f6e299dc27e3b2d4900486ed537a096906d2b206
data/CHANGELOG.md ADDED
@@ -0,0 +1,8 @@
1
+ CHANGELOG
2
+ ---------
3
+ - **2015-05-14**: 0.0.3
4
+ - First public release
5
+ - **2015-03-08**: 0.0.2
6
+ - Convert methods from camelCase to under_scores
7
+ - **2015-03-07**: 0.0.1
8
+ - Initial release
data/LICENSE.txt ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2015 John Wang
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,194 @@
1
+ RingCentral SDK
2
+ ===============
3
+
4
+ This is an unofficial Ruby SDK for the RingCentral Connect Platform REST API (https://developers.ringcentral.com).
5
+
6
+ The core SDK objects follow the general design of the [official RingCentral SDKs](https://github.com/ringcentral). The SDK helper additions are included to make it easier to interact with features of the API.
7
+
8
+ This SDK is an early stage library and subject to breaking changes.
9
+
10
+ ## Included
11
+
12
+ * OAuth authorization
13
+ * Faraday client with OAuth bearer token handling
14
+ * Fax helper to create multipart/mixed messages
15
+
16
+ ## To Do
17
+
18
+ The following items are still needed for this SDK. Contributions are most welcome.
19
+
20
+ * Token refresh
21
+ * Subscriptions
22
+ * Additional tests
23
+
24
+ Installation
25
+ ============
26
+
27
+ ## RubyGems
28
+
29
+ ```sh
30
+ $ gem install ringcentral_sdk
31
+ ```
32
+
33
+ Usage
34
+ =====
35
+
36
+ ## Initialization
37
+
38
+ The RingCentral server URLs can be populated manually or via the included constants:
39
+
40
+ * `RingCentralSdk::Sdk::RC_SERVER_PRODUCTION`
41
+ * `RingCentralSdk::Sdk::RC_SERVER_SANDBOX`
42
+
43
+ ```ruby
44
+ ## Initialization ##
45
+
46
+ require 'ringcentral_sdk'
47
+
48
+ rcsdk = RingCentralSdk::Sdk.new(
49
+ "myAppKey",
50
+ "myAppSecret",
51
+ RingCentralSdk::Sdk::RC_SERVER_SANDBOX
52
+ )
53
+ platform = rcsdk.platform
54
+ ```
55
+
56
+ ## Authentication
57
+
58
+ ```ruby
59
+ # Initialize using user phone number without extension number
60
+
61
+ platform.authorize("myUsername", nil, "myPassword")
62
+
63
+ # Initialize using main phone number and extension number
64
+
65
+ platform.authorize("myUsername", "myExtension", "myPassword")
66
+ ```
67
+
68
+ ## Creating Requests
69
+
70
+ Requests are made using the inclued Faraday client.
71
+
72
+ ```ruby
73
+ client = rcsdk.platform.client
74
+ ```
75
+
76
+ ## Create SMS Message
77
+
78
+ SMS and other requests are directly without helpers.
79
+
80
+ ```ruby
81
+ # Send SMS - POST request
82
+
83
+ response = client.post do |req|
84
+ req.url 'account/~/extension/~/sms'
85
+ req.headers['Content-Type'] = 'application/json'
86
+ req.body = {
87
+ :from => { :phoneNumber => '16505551212' },
88
+ :to => [ { :phoneNumber => '14155551212'} ],
89
+ :text => 'RingCentral SMS demo using Ruby!'
90
+ }
91
+ end
92
+ ```
93
+
94
+ ## Create Fax Message
95
+
96
+ A fax helper is included that can be used to create the `multipart/mixed` HTTP request.
97
+
98
+ This consists of instantiating a fax helper object and then executing a Faraday POST request.
99
+
100
+ ```ruby
101
+ # 1) Fax Helper for Text Message
102
+
103
+ fax = RingCentralSdk::Helpers::CreateFaxRequest.new(
104
+ { account_id => '~', extension_id => '~' }, # Can be nil or {} for defaults '~'
105
+ {
106
+ # phone numbers are in E.164 format with or without leading '+'
107
+ :to => [{ :phoneNumber => '+16505551212' }],
108
+ :faxResolution => 'High',
109
+ :coverPageText => 'RingCentral fax text demo using Ruby!'
110
+ },
111
+ :text => 'RingCentral Fax via Ruby!'
112
+ )
113
+ # send the fax using Faraday below
114
+
115
+ # 2) Fax Helper for File as Raw Bytes (e.g. PDF or TIFF)
116
+
117
+ # Sending a file as a plain octet-stream is useful in
118
+ # production as it can decrease file size by 30%.
119
+
120
+ fax = RingCentralSdk::Helpers::CreateFaxRequest.new(
121
+ { account_id => '~', extension_id => '~' }, # Can be nil or {} for defaults '~'
122
+ {
123
+ # phone numbers are in E.164 format with or without leading '+'
124
+ :to => [{ :phoneNumber => '+16505551212' }],
125
+ :faxResolution => 'High',
126
+ :coverPageText => 'RingCentral fax PDF demo using Ruby!'
127
+ },
128
+ :file_name => '/path/to/my_file.pdf'
129
+ )
130
+ # send the fax using Faraday below
131
+
132
+ # 3) Fax Helper for File Base64 Encoded (e.g. PDF or TIFF)
133
+
134
+ # Sending a file base64 encoded is useful for debugging
135
+ # purposes as the file can be copy and pasted.
136
+
137
+ fax = RingCentralSdk::Helpers::CreateFaxRequest.new(
138
+ { account_id => '~', extension_id => '~' }, # Can be nil or {} for defaults '~'
139
+ {
140
+ # phone numbers are in E.164 format with or without leading '+'
141
+ :to => [{ :phoneNumber => '+16505551212' }],
142
+ :faxResolution => 'High',
143
+ :coverPageText => 'RingCentral fax TIFF base64 demo using Ruby!'
144
+ },
145
+ :file_name => '/path/to/my_file.tif',
146
+ :base64_encode => true
147
+ )
148
+ # send the fax using Faraday below
149
+
150
+ # Sending the fax
151
+
152
+ response = client.post do |req|
153
+ req.url fax.url
154
+ req.headers['Content-Type'] = fax.content_type
155
+ req.body = fax.body
156
+ end
157
+ ```
158
+
159
+ Change Log
160
+ ==========
161
+
162
+ - **2015-05-13**: 0.0.3
163
+ - Initial public release
164
+
165
+ Links
166
+ =====
167
+
168
+ Project Repo
169
+
170
+ * https://github.com/grokify/ringcentral-sdk-ruby
171
+
172
+ RingCentral API Docs
173
+
174
+ * https://developers.ringcentral.com/library.html
175
+
176
+ RingCentral API Explorer
177
+
178
+ * http://ringcentral.github.io/api-explorer
179
+
180
+ RingCentral Official SDKs
181
+
182
+ * https://github.com/ringcentral
183
+
184
+ Problems, Comments, Suggestions?
185
+ ================================
186
+
187
+ All of the above are most welcome. johncwang@gmail.com
188
+
189
+ License
190
+ =======
191
+
192
+ RingCentral SDK is available under an MIT-style license. See {file:LICENSE.txt} for details.
193
+
194
+ RingCentral SDK © 2015 by John Wang
data/Rakefile ADDED
@@ -0,0 +1,19 @@
1
+ require 'rake'
2
+ require 'rake/testtask'
3
+
4
+ desc 'Default: run unit tests.'
5
+ task :default => :test
6
+
7
+ desc 'Test the library.'
8
+ Rake::TestTask.new do |t|
9
+ t.libs << 'lib'
10
+ t.pattern = 'test/**/test_*.rb'
11
+ t.verbose = false
12
+ end
13
+
14
+ desc 'Generate YARD documentation.'
15
+ task :gendoc do
16
+ # puts 'yard doc generation disabled until JRuby build native extensions for redcarpet or yard removes the dependency.'
17
+ system "yardoc"
18
+ system "yard stats --list-undoc"
19
+ end
data/VERSION.txt ADDED
@@ -0,0 +1 @@
1
+ 0.0.3
@@ -0,0 +1,5 @@
1
+ module RingCentralSdk
2
+ autoload :Helpers, 'ringcentral_sdk/helpers'
3
+ autoload :Platform, 'ringcentral_sdk/platform'
4
+ autoload :Sdk, 'ringcentral_sdk/sdk'
5
+ end
@@ -0,0 +1,3 @@
1
+ module RingCentralSdk::Helpers
2
+ autoload :CreateFaxRequest, 'ringcentral_sdk/helpers/fax'
3
+ end
@@ -0,0 +1,130 @@
1
+ require 'base64'
2
+ require 'mime'
3
+ require 'mime-types'
4
+ require 'multi_json'
5
+
6
+ module RingCentralSdk::Helpers
7
+ class CreateFaxRequest
8
+ attr_reader :msg
9
+
10
+ def initialize(path_params=nil,metadata=nil,options=nil)
11
+
12
+ @msg = MIME::Multipart::Mixed.new
13
+ @msg.headers.delete('Content-Id')
14
+
15
+ @path_params = path_params
16
+
17
+ if metadata.is_a?(Hash) || metadata.is_a?(String)
18
+ add_metadata(metadata)
19
+ end
20
+
21
+ if options.is_a?(Hash)
22
+ if options.has_key?(:file_name)
23
+ if options.has_key?(:base64_encode) && options[:base64_encode]
24
+ add_file_base64(options[:file_name],options[:file_content_type])
25
+ else
26
+ add_file_octet_stream(options[:file_name])
27
+ end
28
+ elsif options.has_key?(:text)
29
+ add_file_text(options[:text])
30
+ end
31
+ end
32
+ end
33
+
34
+ def add_metadata(json=nil)
35
+ if json.is_a?(Hash)
36
+ json = MultiJson.encode(json)
37
+ end
38
+ if json.is_a?(String)
39
+ json_part = MIME::Text.new(json)
40
+ json_part.headers.delete('Content-Id')
41
+ json_part.headers.set('Content-Type','application/json')
42
+ @msg.add(json_part)
43
+ return true
44
+ end
45
+ return false
46
+ end
47
+
48
+ def add_file_text(text=nil,charset='UTF-8')
49
+ return unless text.is_a?(String)
50
+ text_part = MIME::Text.new(text,'plain')
51
+ text_part.headers.delete('Content-Id')
52
+ @msg.add(text_part)
53
+ end
54
+
55
+ def add_file_base64(file_name=nil,content_type=nil)
56
+ unless file_name.is_a?(String) && File.file?(file_name)
57
+ return false
58
+ end
59
+
60
+ content_type = (content_type.is_a?(String) && content_type =~ /^[^\/\s]+\/[^\/\s]+/) \
61
+ ? content_type : MIME::Types.type_for(file_name).first.content_type
62
+
63
+ file_base64 = Base64.encode64(File.binread(file_name))
64
+
65
+ base64_part = MIME::Text.new(file_base64)
66
+ base64_part.headers.delete('Content-Id')
67
+ base64_part.headers.set('Content-Type',content_type)
68
+ base64_part.headers.set('Content-Transfer-Encoding','base64')
69
+
70
+ @msg.add(base64_part)
71
+ return true
72
+ end
73
+
74
+ def add_file_octet_stream(file_name=nil)
75
+ unless file_name.is_a?(String) && File.file?(file_name)
76
+ return false
77
+ end
78
+
79
+ base_name = File.basename(file_name)
80
+ file_bytes = File.binread(file_name)
81
+
82
+ file_part = MIME::Application.new(file_bytes)
83
+ file_part.headers.delete('Content-Id')
84
+ file_part.headers.set('Content-Type','application/octet-stream')
85
+ if base_name.is_a?(String) && base_name.length>0
86
+ file_part.headers.set('Content-Disposition', "attachment; filename=\"#{base_name}\"")
87
+ else
88
+ file_part.headers.set('Content-Disposition', 'attachment')
89
+ end
90
+
91
+ @msg.add(file_part)
92
+ return true
93
+ end
94
+
95
+ def url()
96
+ account_id = "~"
97
+ extension_id = "~"
98
+ if @path_params.is_a?(Hash)
99
+ if @path_params.has?(:account_id) && @path_params[:account_id].length>0
100
+ account_id = @path_params[:account_id]
101
+ end
102
+ if @path_params.has?(:extension_id) && @path_params[:extension_id].length>0
103
+ account_id = @path_params[:extension_id]
104
+ end
105
+ end
106
+ url = "account/#{account_id}/extension/#{extension_id}/fax"
107
+ return url
108
+ end
109
+
110
+ def content_type()
111
+ return @msg.headers.get('Content-Type').to_s
112
+ end
113
+
114
+ def body()
115
+ return @msg.body.to_s
116
+ end
117
+
118
+ # Experimental
119
+ def _add_file(file_name=nil)
120
+ if file_name.is_a?(String) && File.file?(file_name)
121
+ file_msg = MIME::DiscreteMediaFactory.create(file_name)
122
+ file_msg.headers.delete('Content-Id')
123
+ @msg.add(file_msg)
124
+ return true
125
+ end
126
+ return false
127
+ end
128
+ private :_add_file
129
+ end
130
+ end
@@ -0,0 +1,5 @@
1
+ module RingCentralSdk::Platform
2
+ autoload :Auth, 'ringcentral_sdk/platform/auth'
3
+ autoload :Parser, 'ringcentral_sdk/platform/parser'
4
+ autoload :Platform, 'ringcentral_sdk/platform/platform'
5
+ end
@@ -0,0 +1,20 @@
1
+ module RingCentralSdk::Platform
2
+ class Auth
3
+ attr_accessor :data
4
+ attr_accessor :remember
5
+
6
+ attr_reader :access_token
7
+
8
+ def initialize()
9
+ @data = nil
10
+ @remember = nil
11
+ end
12
+ def set_data(data={})
13
+ return unless data.is_a?(Hash)
14
+
15
+ @access_token = data["access_token"] ? data["access_token"] : ''
16
+ @token_type = data["token_type"] ? data["token_type"] : ''
17
+
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,5 @@
1
+ module RingCentralSdk::Platform
2
+ class Parser
3
+
4
+ end
5
+ end
@@ -0,0 +1,89 @@
1
+ require 'base64'
2
+ require 'faraday'
3
+ require 'faraday_middleware'
4
+
5
+ module RingCentralSdk::Platform
6
+ class Platform
7
+
8
+ ACCESS_TOKEN_TTL = 600 # 10 minutes
9
+ REFRESH_TOKEN_TTL = 36000 # 10 hours
10
+ REFRESH_TOKEN_TTL_REMEMBER = 604800 # 1 week
11
+ ACCOUNT_PREFIX = '/account/'
12
+ ACCOUNT_ID = '~'
13
+ TOKEN_ENDPOINT = '/restapi/oauth/token'
14
+ REVOKE_ENDPOINT = '/restapi/oauth/revoke'
15
+ API_VERSION = 'v1.0'
16
+ URL_PREFIX = '/restapi'
17
+
18
+ attr_reader :client
19
+
20
+ def initialize(app_key='',app_secret='',server_url='https://platform.devtest.ringcentral.com')
21
+
22
+ @app_key = app_key
23
+ @app_secret = app_secret
24
+ @server_url = server_url
25
+ @auth = RingCentralSdk::Platform::Auth.new
26
+
27
+ @client = Faraday.new(:url => get_api_version_url()) do |conn|
28
+ conn.request :json
29
+ conn.request :url_encoded
30
+ conn.response :json, :content_type => 'application/json'
31
+ conn.adapter Faraday.default_adapter
32
+ end
33
+
34
+ end
35
+
36
+ def get_api_version_url()
37
+ return @server_url + URL_PREFIX + '/' + API_VERSION
38
+ end
39
+
40
+ def authorize(username='',extension='',password='',remember=false)
41
+
42
+ response = auth_call({}, {
43
+ :grant_type => 'password',
44
+ :username => username,
45
+ :extension => extension.is_a?(String) || extension.is_a?(Integer) ? extension : '',
46
+ :password => password,
47
+ :access_token_ttl => ACCESS_TOKEN_TTL,
48
+ :refresh_token_ttl => remember ? REFRESH_TOKEN_TTL_REMEMBER : REFRESH_TOKEN_TTL
49
+ })
50
+
51
+ @auth.set_data( response.body )
52
+ @auth.remember = remember
53
+
54
+ if response.body.has_key?("access_token") && response.body["access_token"].is_a?(String)
55
+ @client.headers['Authorization'] = 'Bearer ' + response.body["access_token"]
56
+ end
57
+
58
+ return response
59
+ end
60
+
61
+ def get_api_key()
62
+ if @app_key.is_a?(String) && @app_secret.is_a?(String)
63
+ return Base64.encode64(@app_key + ":" + @app_secret).gsub(/[\s\r\n]/,"")
64
+ else
65
+ return ''
66
+ end
67
+ end
68
+
69
+ def get_auth_header()
70
+ if @auth.token_type.is_a?(String) && @auth.access_token.is_a?(String)
71
+ return @auth.token_type + ' ' + @auth.access_token
72
+ end
73
+ return ''
74
+ end
75
+
76
+ def auth_call(queryParams={},body={})
77
+ return @client.post do |req|
78
+ req.url TOKEN_ENDPOINT
79
+ req.headers['Authorization'] = 'Basic ' + get_api_key()
80
+ req.headers['Content-Type'] = 'application/x-www-form-urlencoded;charset=UTF-8'
81
+ if body.is_a?(Hash) && body.size > 0
82
+ req.body = body
83
+ end
84
+ end
85
+ end
86
+
87
+ private :auth_call, :get_api_key, :get_api_version_url, :get_auth_header
88
+ end
89
+ end
@@ -0,0 +1,15 @@
1
+ module RingCentralSdk
2
+ class Sdk
3
+
4
+ RC_SERVER_PRODUCTION = 'https://platform.ringcentral.com'
5
+ RC_SERVER_SANDBOX = 'https://platform.devtest.ringcentral.com'
6
+
7
+ attr_reader :parser
8
+ attr_reader :platform
9
+
10
+ def initialize(app_key=nil,app_secret=nil,server_url=nil)
11
+ @parser = RingCentralSdk::Platform::Parser.new
12
+ @platform = RingCentralSdk::Platform::Platform.new(app_key, app_secret, server_url)
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,18 @@
1
+ require 'test/unit'
2
+ require 'ringcentral_sdk'
3
+
4
+ class RingCentralSdkTest < Test::Unit::TestCase
5
+ def testSetup
6
+
7
+ rcsdk = RingCentralSdk::Sdk.new(
8
+ "myAppKey",
9
+ "myAppSecret",
10
+ RingCentralSdk::Sdk::RC_SERVER_SANDBOX
11
+ )
12
+
13
+ assert_equal "RingCentralSdk::Sdk", rcsdk.class.name
14
+ assert_equal "RingCentralSdk::Platform::Platform", rcsdk.platform.class.name
15
+ assert_equal "Faraday::Connection", rcsdk.platform.client.class.name
16
+
17
+ end
18
+ end
metadata ADDED
@@ -0,0 +1,137 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: ringcentral_sdk
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.3
5
+ platform: ruby
6
+ authors:
7
+ - John Wang
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-05-13 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: faraday
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: '0'
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - "~>"
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: '0'
33
+ - !ruby/object:Gem::Dependency
34
+ name: faraday_middleware
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: '0'
40
+ - - ">="
41
+ - !ruby/object:Gem::Version
42
+ version: '0'
43
+ type: :runtime
44
+ prerelease: false
45
+ version_requirements: !ruby/object:Gem::Requirement
46
+ requirements:
47
+ - - "~>"
48
+ - !ruby/object:Gem::Version
49
+ version: '0'
50
+ - - ">="
51
+ - !ruby/object:Gem::Version
52
+ version: '0'
53
+ - !ruby/object:Gem::Dependency
54
+ name: mime
55
+ requirement: !ruby/object:Gem::Requirement
56
+ requirements:
57
+ - - "~>"
58
+ - !ruby/object:Gem::Version
59
+ version: '0'
60
+ - - ">="
61
+ - !ruby/object:Gem::Version
62
+ version: '0'
63
+ type: :runtime
64
+ prerelease: false
65
+ version_requirements: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - "~>"
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
70
+ - - ">="
71
+ - !ruby/object:Gem::Version
72
+ version: '0'
73
+ - !ruby/object:Gem::Dependency
74
+ name: mime-types
75
+ requirement: !ruby/object:Gem::Requirement
76
+ requirements:
77
+ - - "~>"
78
+ - !ruby/object:Gem::Version
79
+ version: '2.5'
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '2.5'
83
+ type: :runtime
84
+ prerelease: false
85
+ version_requirements: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '2.5'
90
+ - - ">="
91
+ - !ruby/object:Gem::Version
92
+ version: '2.5'
93
+ description: An unofficial Ruby SDK for the RingCentral Connect Platform API
94
+ email: johncwang@gmail.com
95
+ executables: []
96
+ extensions: []
97
+ extra_rdoc_files: []
98
+ files:
99
+ - CHANGELOG.md
100
+ - LICENSE.txt
101
+ - README.md
102
+ - Rakefile
103
+ - VERSION.txt
104
+ - lib/ringcentral_sdk.rb
105
+ - lib/ringcentral_sdk/helpers.rb
106
+ - lib/ringcentral_sdk/helpers/fax.rb
107
+ - lib/ringcentral_sdk/platform.rb
108
+ - lib/ringcentral_sdk/platform/auth.rb
109
+ - lib/ringcentral_sdk/platform/parser.rb
110
+ - lib/ringcentral_sdk/platform/platform.rb
111
+ - lib/ringcentral_sdk/sdk.rb
112
+ - test/test_setup.rb
113
+ homepage: https://github.com/grokify/
114
+ licenses: []
115
+ metadata: {}
116
+ post_install_message:
117
+ rdoc_options: []
118
+ require_paths:
119
+ - lib
120
+ required_ruby_version: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
125
+ required_rubygems_version: !ruby/object:Gem::Requirement
126
+ requirements:
127
+ - - ">="
128
+ - !ruby/object:Gem::Version
129
+ version: '0'
130
+ requirements: []
131
+ rubyforge_project:
132
+ rubygems_version: 2.2.1
133
+ signing_key:
134
+ specification_version: 4
135
+ summary: RingCentral SDK - Unofficial Ruby SDK for the RingCentral Connect Platform
136
+ API
137
+ test_files: []