ZCRMSDK 0.0.2

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.
@@ -0,0 +1,307 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'oauth_utility'
4
+ require_relative 'oauth_client'
5
+ require_relative 'restclient'
6
+ require 'uri'
7
+ require 'json'
8
+ require 'logger'
9
+ require 'net/http'
10
+ require 'cgi'
11
+ module ZCRMSDK
12
+ module Utility
13
+ # THIS CLASS IS USED TO SET PERSISTENCE HANDLER AND CREDENTIALS RELATED DETAILS
14
+ class ZCRMConfigUtil
15
+ def self.get_instance
16
+ ZCRMConfigUtil.new
17
+ end
18
+
19
+ def self.init(is_to_initialize_oauth, config_details)
20
+ $CONFIG_PROP_HASH = {}
21
+ $CONFIG_PROP_HASH = config_details
22
+ if $CONFIG_PROP_HASH[APIConstants::API_BASEURL].nil?
23
+ $CONFIG_PROP_HASH[APIConstants::API_BASEURL] = 'https://www.zohoapis.com'
24
+ end
25
+ if $CONFIG_PROP_HASH[APIConstants::API_VERSION].nil?
26
+ $CONFIG_PROP_HASH[APIConstants::API_VERSION] = 'v2'
27
+ end
28
+ if $CONFIG_PROP_HASH[APIConstants::SANDBOX].nil?
29
+ $CONFIG_PROP_HASH[APIConstants::SANDBOX] = 'false'
30
+ end
31
+ if $CONFIG_PROP_HASH[APIConstants::CONSOLE].nil? || $CONFIG_PROP_HASH[APIConstants::CONSOLE] != 'true'
32
+ $CONFIG_PROP_HASH[APIConstants::CONSOLE] = 'false'
33
+ end
34
+ if $CONFIG_PROP_HASH[APIConstants::LOGPATH].nil?
35
+ $CONFIG_PROP_HASH[APIConstants::LOGPATH] = nil
36
+ end
37
+ if is_to_initialize_oauth
38
+ ZCRMSDK::OAuthClient::ZohoOAuth.get_instance(config_details)
39
+ end
40
+ end
41
+
42
+ def self.get_config_value(key_value)
43
+ if $CONFIG_PROP_HASH.has_key?(key_value) && !$CONFIG_PROP_HASH[key_value].nil?
44
+ $CONFIG_PROP_HASH[key_value].dup
45
+ else
46
+ return ' '
47
+ end
48
+ end
49
+
50
+ def self.get_api_base_url
51
+ get_config_value(APIConstants::API_BASEURL)
52
+ end
53
+
54
+ def self.get_api_version
55
+ get_config_value(APIConstants::API_VERSION)
56
+ end
57
+
58
+ def get_access_token
59
+ user_email = RestClient::ZCRMRestClient.current_user_email
60
+ if user_email.nil?
61
+ raise ZCRMException.new('current_user_email', APIConstants::RESPONSECODE_BAD_REQUEST, 'Current user should either be set in ZCRMRestClient or in configuration array', 'CURRENT USER NOT SET')
62
+ end
63
+
64
+ client_ins = OAuthClient::ZohoOAuth.get_client_instance
65
+ client_ins.get_access_token(user_email)
66
+ end
67
+ end
68
+ # THIS CLASS IS USED TO CONSTUCT API SUPPORTED JSON
69
+ class CommonUtil
70
+ def self.create_api_supported_input_json(input_json, api_key)
71
+ input_json = {} if input_json.nil?
72
+ input_json_arr = []
73
+ input_json_arr.push(input_json)
74
+ req_body_json = {}
75
+ req_body_json[api_key] = input_json_arr
76
+ req_body_json
77
+ end
78
+ end
79
+ # THIS CLASS IS USED TO LOG THE SDK RELATED ACTIVITY
80
+ class SDKLogger
81
+ def self.add_log(message, level, exception = nil)
82
+ if $CONFIG_PROP_HASH.empty?
83
+ raise exception, 'Please Initialize the SDK before using it!'
84
+ end
85
+
86
+ unless $CONFIG_PROP_HASH[APIConstants::LOGPATH].nil?
87
+ logger = Logger.new File.new($CONFIG_PROP_HASH[APIConstants::LOGPATH].dup, 'a')
88
+ print_log(logger, message, level, exception)
89
+ end
90
+
91
+ if $CONFIG_PROP_HASH[APIConstants::CONSOLE] == 'true'
92
+ logger = Logger.new STDOUT
93
+ print_log(logger, message, level, exception)
94
+ end
95
+ end
96
+
97
+ def self.print_log(logger, message, level, exception)
98
+ unless exception.nil?
99
+ message += "; Exception Class::#{exception.class}; exception occured in #{exception.url}"
100
+ end
101
+
102
+ case level
103
+ when 'error'
104
+ logger.error(message)
105
+ when 'info'
106
+ logger.info(message)
107
+ when 'warning'
108
+ logger.warning(message)
109
+ when 'fatal'
110
+ logger.fatal(message)
111
+ end
112
+ end
113
+ end
114
+ # THIS CLASS CONSISTS OF COMMON CONSTANTS FREQUENTLY USED
115
+ class APIConstants
116
+ ERROR = 'error'
117
+ REQUEST_METHOD_GET = 'GET'
118
+ REQUEST_METHOD_POST = 'POST'
119
+ REQUEST_METHOD_PUT = 'PUT'
120
+ REQUEST_METHOD_DELETE = 'DELETE'
121
+ REQUEST_METHOD_PATCH = 'PATCH'
122
+ OAUTH_HEADER_PREFIX = 'Zoho-oauthtoken '
123
+ AUTHORIZATION = 'Authorization'
124
+ API_NAME = 'api_name'
125
+ INVALID_ID_MSG = 'The given id seems to be invalid.'
126
+ API_MAX_RECORDS_MSG = 'Cannot process more than 100 records at a time.'
127
+ INVALID_DATA = 'INVALID_DATA'
128
+ CODE_SUCCESS = 'SUCCESS'
129
+ STATUS_SUCCESS = 'success'
130
+ STATUS_ERROR = 'error'
131
+ LEADS = 'Leads'
132
+ ACCOUNTS = 'Accounts'
133
+ CONTACTS = 'Contacts'
134
+ DEALS = 'Deals'
135
+ QUOTES = 'Quotes'
136
+ SALESORDERS = 'SalesOrders'
137
+ INVOICES = 'Invoices'
138
+ PURCHASEORDERS = 'PurchaseOrders'
139
+ PER_PAGE = 'per_page'
140
+ PAGE = 'page'
141
+ COUNT = 'count'
142
+ MORE_RECORDS = 'more_records'
143
+ MESSAGE = 'message'
144
+ CODE = 'code'
145
+ STATUS = 'status'
146
+ DETAILS = 'details'
147
+ DATA = 'data'
148
+ INFO = 'info'
149
+ FIELDS = 'fields'
150
+ LAYOUTS = 'layouts'
151
+ TAG = 'tags'
152
+ CUSTOM_VIEWS = 'custom_views'
153
+ MODULES = 'modules'
154
+ RELATED_LISTS = 'related_lists'
155
+ ORG = 'org'
156
+ ROLES = 'roles'
157
+ PROFILES = 'profiles'
158
+ USERS = 'users'
159
+ TAXES = 'taxes'
160
+ CONSOLE = 'log_in_console'
161
+ LOGPATH = 'application_log_file_path'
162
+ CUSTOM_FUNCTIONS = 'custom_functions'
163
+ RESPONSECODE_OK = 200
164
+ RESPONSECODE_CREATED = 201
165
+ RESPONSECODE_ACCEPTED = 202
166
+ RESPONSECODE_NO_CONTENT = 204
167
+ RESPONSECODE_MOVED_PERMANENTLY = 301
168
+ RESPONSECODE_MOVED_TEMPORARILY = 302
169
+ RESPONSECODE_NOT_MODIFIED = 304
170
+ RESPONSECODE_BAD_REQUEST = 400
171
+ RESPONSECODE_AUTHORIZATION_ERROR = 401
172
+ RESPONSECODE_FORBIDDEN = 403
173
+ RESPONSECODE_NOT_FOUND = 404
174
+ RESPONSECODE_METHOD_NOT_ALLOWED = 405
175
+ RESPONSECODE_REQUEST_ENTITY_TOO_LARGE = 413
176
+ RESPONSECODE_UNSUPPORTED_MEDIA_TYPE = 415
177
+ RESPONSECODE_TOO_MANY_REQUEST = 429
178
+ RESPONSECODE_INTERNAL_SERVER_ERROR = 500
179
+ RESPONSECODE_INVALID_INPUT = 0
180
+ SANDBOX = 'sandbox'
181
+ API_BASEURL = 'api_base_url'
182
+ API_VERSION = 'api_version'
183
+ CURRENT_USER_EMAIL = 'current_user_email'
184
+ ACTION = 'action'
185
+ DUPLICATE_FIELD = 'duplicate_field'
186
+ NO_CONTENT = 'No Content'
187
+ FAULTY_RESPONSE_CODES = [RESPONSECODE_NO_CONTENT, RESPONSECODE_NOT_FOUND, RESPONSECODE_AUTHORIZATION_ERROR, RESPONSECODE_BAD_REQUEST, RESPONSECODE_FORBIDDEN, RESPONSECODE_INTERNAL_SERVER_ERROR, RESPONSECODE_METHOD_NOT_ALLOWED, RESPONSECODE_MOVED_PERMANENTLY, RESPONSECODE_MOVED_TEMPORARILY, RESPONSECODE_REQUEST_ENTITY_TOO_LARGE, RESPONSECODE_TOO_MANY_REQUEST, RESPONSECODE_UNSUPPORTED_MEDIA_TYPE].freeze
188
+ ATTACHMENT_URL = 'attachmentUrl'
189
+ ACCESS_TOKEN_EXPIRY = 'X-ACCESSTOKEN-RESET'
190
+ CURR_WINDOW_API_LIMIT = 'X-RATELIMIT-LIMIT'
191
+ CURR_WINDOW_REMAINING_API_COUNT = 'X-RATELIMIT-REMAINING'
192
+ CURR_WINDOW_RESET = 'X-RATELIMIT-RESET'
193
+ API_COUNT_REMAINING_FOR_THE_DAY = 'X-RATELIMIT-DAY-REMAINING'
194
+ API_LIMIT_FOR_THE_DAY = 'X-RATELIMIT-DAY-LIMIT'
195
+ end
196
+ # THIS CLASS IS USED TO FIRE THE API REQUEST
197
+ class ZohoHTTPConnector
198
+ attr_accessor :url, :req_headers, :req_method, :req_params, :req_body, :api_key, :is_bulk_req, :form_data
199
+ def self.get_instance(url, params = nil, headers = nil, body = nil, method = nil, api_key = 'data', is_bulk_req = false, form_data = nil)
200
+ ZohoHTTPConnector.new(url, params, headers, body, method, api_key, is_bulk_req, form_data)
201
+ end
202
+
203
+ def initialize(url, params, headers, body, method, api_key, is_bulk_req, form_data = nil)
204
+ @url = url
205
+ @req_headers = headers
206
+ @req_method = method
207
+ @req_params = params
208
+ @req_body = body
209
+ @api_key = api_key
210
+ @req_form_data = form_data
211
+ @is_bulk_req = is_bulk_req
212
+ end
213
+
214
+ def trigger_request
215
+ unless @req_params.nil?
216
+ @req_params.each do |param_key, value|
217
+ @req_params[param_key] = CGI.escape(value) if value.is_a? String
218
+ end
219
+ end
220
+ query_string = @req_params.to_a.map { |x| "#{x[0]}=#{x[1]}" }.join('&')
221
+ if !query_string.nil? && (query_string.strip != '')
222
+ @url += '?' + query_string
223
+ end
224
+ url = URI(@url)
225
+ http = Net::HTTP.new(url.host, url.port)
226
+ http.use_ssl = true
227
+ if @req_method == APIConstants::REQUEST_METHOD_GET
228
+ req = Net::HTTP::Get.new(url.request_uri)
229
+ elsif @req_method == APIConstants::REQUEST_METHOD_POST
230
+ req = Net::HTTP::Post.new(url.request_uri)
231
+ req.body = @req_body.to_s
232
+ elsif @req_method == APIConstants::REQUEST_METHOD_PUT
233
+ req = Net::HTTP::Put.new(url.request_uri)
234
+ req.body = @req_body.to_s
235
+ elsif @req_method == APIConstants::REQUEST_METHOD_PATCH
236
+ req = Net::HTTP::Patch.new(url.request_uri)
237
+ req.body = @req_body.to_s
238
+ elsif @req_method == APIConstants::REQUEST_METHOD_DELETE
239
+ req = Net::HTTP::Delete.new(url.request_uri)
240
+ end
241
+ @req_headers.each { |key, value| req.add_field(key, value) }
242
+ unless @req_form_data.nil?
243
+ req.set_form @req_form_data, 'multipart/form-data'
244
+ end
245
+ response = http.request(req)
246
+ response
247
+ end
248
+
249
+ def self.set_url(url)
250
+ @url = url
251
+ end
252
+
253
+ def self.get_url
254
+ @url
255
+ end
256
+
257
+ def add_http_header(key, value)
258
+ @req_headers[key] = value
259
+ end
260
+
261
+ def get_http_headers
262
+ req_headers
263
+ end
264
+
265
+ def set_http_request_method(method)
266
+ @req_method = method
267
+ end
268
+
269
+ def get_http_request_method
270
+ @req_method
271
+ end
272
+
273
+ def set_request_body(req_body)
274
+ @req_body = req_body
275
+ end
276
+
277
+ def get_request_body
278
+ @req_body
279
+ end
280
+
281
+ def add_http_request_params(key, value)
282
+ @req_params.store(key, value)
283
+ end
284
+
285
+ def get_http_request_params
286
+ @req_params
287
+ end
288
+ end
289
+ # THIS CLASS IS USED TO HANDLE ZCRM EXCEPTION
290
+ class ZCRMException < StandardError
291
+ attr_accessor :url, :status_code, :error_message, :exception_code, :error_details, :error_content
292
+ def initialize(url, status_code, err_message, exception_code = 'error', details = nil, content = nil)
293
+ @url = url
294
+ @status_code = status_code
295
+ @error_message = err_message
296
+ @exception_code = exception_code
297
+ @error_details = details
298
+ @error_content = content
299
+ SDKLogger.add_log(error_message, 'error', self)
300
+ end
301
+
302
+ def self.get_instance(url, status_code, err_message, exception_code = 'error', details = nil, content = nil)
303
+ ZCRMException.new(url, status_code, err_message, exception_code, details, content)
304
+ end
305
+ end
306
+ end
307
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ZCRMSDK
4
+ VERSION = '0.0.2'
5
+ end
metadata ADDED
@@ -0,0 +1,156 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: ZCRMSDK
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.2
5
+ platform: ruby
6
+ authors:
7
+ - ZOHO CRM API TEAM
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2019-10-11 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '2.0'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '2.0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: multipart-post
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '2.0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '2.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rest-client
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '2.0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '2.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: json
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '1.8'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '1.8'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rake
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '10.0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '10.0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: rspec
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '3.0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '3.0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: mysql2
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: 0.5.2
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: 0.5.2
111
+ description: An API client for CRM customers, with which they can call ZOHO CRM APIs
112
+ with ease
113
+ email:
114
+ - support@zohocrm.com
115
+ executables: []
116
+ extensions: []
117
+ extra_rdoc_files: []
118
+ files:
119
+ - lib/ZCRMSDK.rb
120
+ - lib/ZCRMSDK/handler.rb
121
+ - lib/ZCRMSDK/oauth_client.rb
122
+ - lib/ZCRMSDK/oauth_utility.rb
123
+ - lib/ZCRMSDK/operations.rb
124
+ - lib/ZCRMSDK/org.rb
125
+ - lib/ZCRMSDK/persistence.rb
126
+ - lib/ZCRMSDK/request.rb
127
+ - lib/ZCRMSDK/response.rb
128
+ - lib/ZCRMSDK/restclient.rb
129
+ - lib/ZCRMSDK/test.rb
130
+ - lib/ZCRMSDK/utility.rb
131
+ - lib/ZCRMSDK/version.rb
132
+ homepage: https://www.zoho.com/crm/
133
+ licenses: []
134
+ metadata:
135
+ source_code_uri: https://github.com/zoho/zcrm-ruby-sdk
136
+ post_install_message:
137
+ rdoc_options: []
138
+ require_paths:
139
+ - lib
140
+ required_ruby_version: !ruby/object:Gem::Requirement
141
+ requirements:
142
+ - - ">="
143
+ - !ruby/object:Gem::Version
144
+ version: '0'
145
+ required_rubygems_version: !ruby/object:Gem::Requirement
146
+ requirements:
147
+ - - ">="
148
+ - !ruby/object:Gem::Version
149
+ version: '0'
150
+ requirements: []
151
+ rubyforge_project:
152
+ rubygems_version: 2.7.4
153
+ signing_key:
154
+ specification_version: 4
155
+ summary: API client for Zoho CRM
156
+ test_files: []