ZOHOCRMSDK2_0 1.0.0 → 2.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.
Files changed (37) hide show
  1. checksums.yaml +4 -4
  2. data/src/ZOHOCRMSDK2_0.rb +6 -0
  3. data/src/com/zoho/api/authenticator/oauth_token.rb +86 -32
  4. data/src/com/zoho/api/authenticator/store/db_store.rb +71 -29
  5. data/src/com/zoho/api/authenticator/store/file_store.rb +95 -24
  6. data/src/com/zoho/api/authenticator/store/token_store.rb +7 -0
  7. data/src/com/zoho/api/logger/sdk_logger.rb +19 -9
  8. data/src/com/zoho/crm/api/contact_roles/api_exception.rb +4 -0
  9. data/src/com/zoho/crm/api/contact_roles/contact_role_wrapper.rb +61 -0
  10. data/src/com/zoho/crm/api/contact_roles/contact_roles_operations.rb +118 -0
  11. data/src/com/zoho/crm/api/contact_roles/record_action_handler.rb +10 -0
  12. data/src/com/zoho/crm/api/contact_roles/record_action_wrapper.rb +63 -0
  13. data/src/com/zoho/crm/api/contact_roles/record_body_wrapper.rb +61 -0
  14. data/src/com/zoho/crm/api/contact_roles/record_response_handler.rb +10 -0
  15. data/src/com/zoho/crm/api/contact_roles/record_response_wrapper.rb +84 -0
  16. data/src/com/zoho/crm/api/dc/au_datacenter.rb +3 -3
  17. data/src/com/zoho/crm/api/dc/cn_datacenter.rb +3 -3
  18. data/src/com/zoho/crm/api/dc/datacenter.rb +3 -2
  19. data/src/com/zoho/crm/api/dc/eu_datacenter.rb +3 -3
  20. data/src/com/zoho/crm/api/dc/in_datacenter.rb +3 -3
  21. data/src/com/zoho/crm/api/dc/us_datacenter.rb +3 -3
  22. data/src/com/zoho/crm/api/initializer.rb +44 -16
  23. data/src/com/zoho/crm/api/record/record_operations.rb +198 -1
  24. data/src/com/zoho/crm/api/related_records/related_records_operations.rb +299 -40
  25. data/src/com/zoho/crm/api/request_proxy.rb +3 -4
  26. data/src/com/zoho/crm/api/sdk_config.rb +2 -68
  27. data/src/com/zoho/crm/api/util/api_http_connector.rb +6 -6
  28. data/src/com/zoho/crm/api/util/constants.rb +113 -16
  29. data/src/com/zoho/crm/api/util/converter.rb +21 -4
  30. data/src/com/zoho/crm/api/util/data_type_converter.rb +8 -2
  31. data/src/com/zoho/crm/api/util/form_data_converter.rb +4 -16
  32. data/src/com/zoho/crm/api/util/json_converter.rb +7 -9
  33. data/src/com/zoho/crm/api/util/module_fields_handler.rb +1 -1
  34. data/src/com/zoho/crm/api/util/utility.rb +197 -82
  35. data/src/resources/JSONDetails.json +1 -1
  36. data/src/version.rb +2 -2
  37. metadata +8 -2
@@ -1,16 +1,15 @@
1
1
  require_relative 'util/constants'
2
2
 
3
3
  class RequestProxy
4
- attr_accessor :host, :port, :user_name, :password
5
- def initialize(host, port, user_name = nil, password = nil)
4
+ attr_reader :host , :port ,:user_name ,:password
5
+ def initialize(host:, port:, user_name:, password:"")
6
+
6
7
  raise SDKException.new(Constants::REQUEST_PROXY_ERROR, Constants::HOST_ERROR_MESSAGE) if host.nil?
7
8
 
8
9
  raise SDKException.new(Constants::REQUEST_PROXY_ERROR, Constants::PORT_ERROR_MESSAGE) if port.nil?
9
-
10
10
  @host = host
11
11
  @port = port
12
12
  @user_name = user_name
13
13
  @password = password
14
- @password = '' if password.nil?
15
14
  end
16
15
  end
@@ -1,49 +1,7 @@
1
1
  class SDKConfig
2
- class Builder
3
- def initialize
4
- @auto_refresh_fields = false
5
- @pick_list_validation = true
6
- @open_timeout = 60
7
- @read_timeout = 60
8
- @write_timeout = 60
9
- @keep_alive_timeout = 2
10
- end
2
+ attr_reader :auto_refresh_fields , :pick_list_validation ,:open_timeout ,:read_timeout ,:write_timeout ,:keep_alive_timeout
11
3
 
12
- def auto_refresh_fields(auto_refresh_fields)
13
- @auto_refresh_fields = auto_refresh_fields
14
- self
15
- end
16
-
17
- def pick_list_validation(pick_list_validation)
18
- @pick_list_validation = pick_list_validation
19
- self
20
- end
21
-
22
- def open_timeout(open_timeout)
23
- @open_timeout = open_timeout
24
- self
25
- end
26
-
27
- def read_timeout(read_timeout)
28
- @read_timeout = read_timeout
29
- self
30
- end
31
-
32
- def write_timeout(write_timeout)
33
- @write_timeout = write_timeout
34
- self
35
- end
36
-
37
- def keep_alive_timeout(keep_alive_timeout)
38
- @keep_alive_timeout = keep_alive_timeout
39
- self
40
- end
41
-
42
- def build
43
- SDKConfig.new(@auto_refresh_fields, @pick_list_validation,@open_timeout,@read_timeout,@write_timeout,@keep_alive_timeout)
44
- end
45
- end
46
- def initialize(auto_refresh_fields, pick_list_validation,open_timeout,read_timeout,write_timeout,keep_alive_timeout)
4
+ def initialize(auto_refresh_fields: false, pick_list_validation: true,open_timeout: 60,read_timeout: 60,write_timeout: 60,keep_alive_timeout: 2)
47
5
  @auto_refresh_fields = auto_refresh_fields
48
6
  @pick_list_validation = pick_list_validation
49
7
  @open_timeout = open_timeout
@@ -51,28 +9,4 @@ class SDKConfig
51
9
  @write_timeout = write_timeout
52
10
  @keep_alive_timeout = keep_alive_timeout
53
11
  end
54
-
55
- def auto_refresh_fields
56
- @auto_refresh_fields
57
- end
58
-
59
- def pick_list_validation
60
- @pick_list_validation
61
- end
62
-
63
- def open_timeout
64
- @open_timeout
65
- end
66
-
67
- def read_timeout
68
- @read_timeout
69
- end
70
-
71
- def write_timeout
72
- @write_timeout
73
- end
74
-
75
- def keep_alive_timeout
76
- @keep_alive_timeout
77
- end
78
12
  end
@@ -24,7 +24,7 @@ module Util
24
24
  end
25
25
 
26
26
  def set_content_type_header
27
- Constants::SET_TO_CONTENT_TYPE.each do |content_type|
27
+ Constants::SET_CONTENT_TYPE_HEADER.each do |content_type|
28
28
  if @url.include? content_type
29
29
  @headers[Constants::CONTENT_TYPE] = @content_type
30
30
  break
@@ -49,7 +49,6 @@ module Util
49
49
  http = nil
50
50
  initializer = Initializer.get_initializer
51
51
  request_proxy = initializer.request_proxy
52
-
53
52
  if request_proxy.nil?
54
53
  http = Net::HTTP.new(url.host, url.port)
55
54
  else
@@ -97,16 +96,17 @@ module Util
97
96
 
98
97
  def to_s
99
98
  req_headers = @headers.clone
100
- req_headers [Constants::AUTHORIZATION] = Constants::CANT_DISCLOSE
99
+ req_headers[Constants::AUTHORIZATION] = Constants::CANT_DISCLOSE
101
100
  @request_method + ' - ' + Constants::URL + ' = ' + @url + ', ' + Constants::HEADERS + ' = ' + req_headers.to_s + ', ' + Constants::PARAMS + ' = ' + @parameters.to_s
102
101
  end
103
102
 
104
103
  def proxy_log(request_proxy)
104
+ proxy_log = Constants::PROXY_SETTINGS + Constants::PROXY_HOST + request_proxy.host + " , "
105
+ proxy_log += Constants::PROXY_PORT + request_proxy.port.to_s
105
106
  if request_proxy.user_name.nil?
106
- 'Proxy settings - Host : ' + request_proxy.host + ' , Port : ' + request_proxy.port.to_s
107
- else
108
- 'Proxy settings - Host : ' + request_proxy.host + ' , Port : ' + request_proxy.port.to_s + ' , Proxy User : ' + request_proxy.user_name
107
+ proxy_log += " , " + Constants::PROXY_USER + request_proxy.user_name
109
108
  end
109
+ proxy_log
110
110
  end
111
111
  end
112
112
  end
@@ -26,6 +26,8 @@ class Constants
26
26
 
27
27
  RESPONSECODE_BAD_REQUEST = 400
28
28
 
29
+ JSON_DETAILS_ERROR = "ERROR IN READING JSONDETAILS FILE"
30
+
29
31
  RESPONSECODE_AUTHORIZATION_ERROR = 401
30
32
 
31
33
  RESPONSECODE_FORBIDDEN = 403
@@ -94,17 +96,73 @@ class Constants
94
96
 
95
97
  HTTP = 'http'
96
98
 
99
+ DEFAULT_MODULENAME_VS_APINAME = {
100
+
101
+ "leads" => "Leads",
102
+
103
+ "contacts" => "Contacts",
104
+
105
+ "accounts" => "Accounts",
106
+
107
+ "deals" => "Deals",
108
+
109
+ "tasks" => "Tasks",
110
+
111
+ "events" => "Events",
112
+
113
+ "activities" => "Activities",
114
+
115
+ "calls" => "Calls",
116
+
117
+ "products" => "Products",
118
+
119
+ "quotes" => "Quotes",
120
+
121
+ "sales_orders" => "Sales_Orders",
122
+
123
+ "purchase_orders" => "Purchase_Orders",
124
+
125
+ "invoices" => "Invoices",
126
+
127
+ "campaigns" => "Campaigns",
128
+
129
+ "vendors" => "Vendors",
130
+
131
+ "price_books" => "Price_Books",
132
+
133
+ "cases" => "Cases",
134
+
135
+ "solutions" => "Solutions",
136
+
137
+ "visits" => "Visits",
138
+
139
+ "approvals" => "Approvals",
140
+
141
+ "notes" => "Notes",
142
+
143
+ "attachments" => "Attachments",
144
+
145
+ "actions_performed" => "Actions_Performed",
146
+
147
+ }
148
+
149
+ USER_AGENT = "Mozilla/5.0"
150
+
151
+ USER_AGENT_KEY = "user-agent"
152
+
97
153
  CONTENT_API_URL = 'content.zohoapis.com'
98
154
 
99
155
  INVALID_URL_ERROR = 'Invalid URI Error'
100
156
 
101
157
  ZOHO_SDK = 'X-ZOHO-SDK'
102
158
 
103
- SDK_VERSION = '1.0.0'
159
+ SDK_VERSION = '2.0.0'
104
160
 
105
161
  ZOHO_API_VERSION = '2.0'
106
162
 
107
- SET_TO_CONTENT_TYPE = ['/crm/bulk/v2/read', '/crm/bulk/v2/write']
163
+ SET_CONTENT_TYPE_HEADER = ['/crm/bulk/v2/read', '/crm/bulk/v2/write']
164
+
165
+ RESOURCE_PATH_INVALID_ERROR_MESSAGE = "Resource Path MUST be a valid directory."
108
166
 
109
167
  IS_GENERATE_REQUEST_BODY =[REQUEST_METHOD_POST,REQUEST_METHOD_PUT,REQUEST_METHOD_PATCH]
110
168
 
@@ -114,9 +172,7 @@ class Constants
114
172
 
115
173
  CRM = "crm"
116
174
 
117
- API_VERSION = "v2"
118
-
119
- PHOTO_SUPPORTED_MODULES = ["leads", "contacts", "accounts", "products", "vendors"]
175
+ PHOTO_SUPPORTED_MODULES = ["leads", "contacts", "accounts", "products", "vendors", "deals", "cases", "solutions"]
120
176
 
121
177
  PARAMETER_NULL_ERROR = 'NULL PARAMETER ERROR'
122
178
 
@@ -144,9 +200,9 @@ class Constants
144
200
 
145
201
  NULL_VALUE_ERROR_MESSAGE = ' MUST NOT be null'
146
202
 
147
- PARAM_INSTANCE_NULL_ERROR = 'Param<T> Instance MUST NOT be null'
203
+ PARAM_INSTANCE_NULL_ERROR = 'Param Instance MUST NOT be null'
148
204
 
149
- HEADER_INSTANCE_NULL_ERROR = 'Header<T> Instance MUST NOT be null'
205
+ HEADER_INSTANCE_NULL_ERROR = 'Header Instance MUST NOT be null'
150
206
 
151
207
  SDK_UNINITIALIZATION_ERROR = 'SDK UNINITIALIZED ERROR'
152
208
 
@@ -170,6 +226,16 @@ class Constants
170
226
 
171
227
  EXPIRY_TIME = 'expiry_time'
172
228
 
229
+ PROXY_SETTINGS = "Proxy settings - "
230
+
231
+ PROXY_HOST = "Host: "
232
+
233
+ PROXY_PORT = "Port: "
234
+
235
+ PROXY_USER = "User: "
236
+
237
+ PROXY_DOMAIN = "Domain: "
238
+
173
239
  USER_MAIL_NULL_ERROR = 'USER MAIL NULL ERROR'
174
240
 
175
241
  USER_MAIL_NULL_ERROR_MESSAGE = 'User Mail MUST NOT be null. Use setUserMail() to set value.'
@@ -180,6 +246,10 @@ class Constants
180
246
 
181
247
  GET_TOKEN_DB_ERROR = 'Exception in get_token - DBStore:'
182
248
 
249
+ GET_TOKEN_BY_ID_DB_ERROR = "Exception in getTokenById - DBStore : Given ID is invalid"
250
+
251
+ GET_TOKEN_BY_ID_FILE_ERROR = "Exception in getTokenById - FileStore : Given ID is invalid"
252
+
183
253
  GET_TOKENS_DB_ERROR = 'Exception in get_tokens - DBStore:'
184
254
 
185
255
  DELETE_TOKEN_DB_ERROR = 'Exception in delete_token - DBStore:'
@@ -190,6 +260,8 @@ class Constants
190
260
 
191
261
  GET_TOKEN_FILE_ERROR = 'Exception in get_token - FileStore:'
192
262
 
263
+ LOGGER_INITIALIZATION_ERROR = "Exception in Logger Initialization : "
264
+
193
265
  REFRESH_SINGLE_MODULE_FIELDS_ERROR = 'Exception in refreshing fields of module : '
194
266
 
195
267
  REFRESH_ALL_MODULE_FIELDS_ERROR = 'Exception in refreshing fields of all modules : '
@@ -216,8 +288,6 @@ class Constants
216
288
 
217
289
  DELETE_TOKENS_FILE_ERROR = 'Exception in delete_tokens - FileStore:'
218
290
 
219
- SDK_LOGGER_INITIALIZE = 'Exception in Logger Initialization'
220
-
221
291
  DELETE_MODULE_FROM_FIELDFILE_ERROR = 'Exception in deleting module from Fields file'
222
292
 
223
293
  DELETE_FIELD_FILE_ERROR = 'Exception in deleting Current User Fields file'
@@ -232,7 +302,19 @@ class Constants
232
302
 
233
303
  GIVEN_VALUE = "given-value"
234
304
 
235
- PHOTO_UPLOAD_ERROR_MESSAGE = "The given module is not supported in API.";
305
+ GENERATED_TYPE = "generated_type"
306
+
307
+ GENERATED_TYPE_CUSTOM = "custom"
308
+
309
+ UPLOAD_PHOTO_UNSUPPORTED_MESSAGE = "Photo Upload Operation is not supported by the module: "
310
+
311
+ SDK_MODULE_METADATA = "SDK-MODULE-METADATA"
312
+
313
+ INVALID_MODULE_API_NAME_ERROR = "INVALID MODULE API NAME ERROR"
314
+
315
+ PROVIDE_VALID_MODULE_API_NAME = "PROVIDE VALID MODULE API NAME: "
316
+
317
+ UPLOAD_PHOTO_UNSUPPORTED_ERROR = "UPLOAD PHOTO UNSUPPORTED MODULE"
236
318
 
237
319
  INVALID_MODULE = "INVALID_MODULE"
238
320
 
@@ -263,6 +345,8 @@ class Constants
263
345
  REQUEST_CATEGORY_UPDATE = 'UPDATE'
264
346
 
265
347
  MODULEPACKAGENAME = 'modulePackageName'
348
+
349
+ MYSQL_TABLE_NAME = "oauthtoken"
266
350
 
267
351
  INITIALIZATION_SUCCESSFUL = 'Initialization successful'
268
352
 
@@ -495,19 +579,23 @@ class Constants
495
579
  HOST_ERROR_MESSAGE = 'Host MUST NOT be null.'
496
580
 
497
581
  PORT_ERROR_MESSAGE = 'Port MUST NOT be null.'
582
+
583
+ REQUEST_PROXY_ERROR_MESSAGE = "request_proxy must be instance of Request Proxy"
584
+
585
+ USER_SIGNATURE_ERROR_MESSAGE = "user must be instance of UserSignature."
498
586
 
499
- USERSIGNATURE_ERROR_MESSAGE = "UserSignature MUST NOT be null."
500
-
501
- ENVIRONMENT_ERROR_MESSAGE = "Environment MUST NOT be null."
587
+ ENVIRONMENT_ERROR_MESSAGE = "environment must be instance of Environment."
502
588
 
503
- SDK_CONFIG_ERROR_MESSAGE = "sdkConfig MUST NOT be null."
589
+ SDK_CONFIG_ERROR_MESSAGE = "sdk_config must be instance of sdkConfig."
504
590
 
505
- TOKEN_ERROR_MESSAGE = "Token MUST NOT be null."
591
+ TOKEN_ERROR_MESSAGE = "token must be instance of Token."
506
592
 
507
- STORE_ERROR_MESSAGE = "Store MUST NOT be null."
593
+ STORE_ERROR_MESSAGE = "store must be instance of Store."
508
594
 
509
595
  INITIALIZATION_EXCEPTION = 'Exception in initialization'
510
596
 
597
+ SWITCH_USER_EXCEPTION = 'Exception in Switch user'
598
+
511
599
  SWITCH_USER_ERROR = "SWITCH USER ERROR"
512
600
 
513
601
  EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i
@@ -535,4 +623,13 @@ class Constants
535
623
  PICKLIST = 'picklist'
536
624
 
537
625
  CONSENT_NAMESPACE = 'com.zoho.crm.api.record.Consent'
626
+
627
+ INVALID_TOKEN_ERROR = "INVALID TOKEN ERROR"
628
+
629
+ NO_ACCESS_TOKEN_ERROR = "ACCESS TOKEN IS NOT PRESENT IN RESPONSE"
630
+
631
+ CLIENT_ID_NULL_ERROR_MESSAGE = "ClientID MUST NOT be null"
632
+
633
+ CLIENT_SECRET_NULL_ERROR_MESSAGE = "ClientSecret MUST NOT be null"
634
+
538
635
  end
@@ -56,7 +56,23 @@ module Util
56
56
  check = true
57
57
 
58
58
  unless value.nil?
59
- var_type = value.class.name
59
+ if key_details.key? Constants::INTERFACE and key_details[Constants::INTERFACE] == true
60
+ json_details = Initializer.get_initializer.json_details
61
+ interface_details = json_details[key_details[Constants::STRUCTURE_NAME]]
62
+ classes = interface_details[Constants::CLASSES]
63
+ check = false
64
+ classes.each do |each_class_name|
65
+ class_name_lower = each_class_name.to_s.downcase
66
+ value_class_name = til::Utility.path_to_package(value.class.name).downcase
67
+
68
+ if class_name_lower.downcase == value_class_name
69
+ check = true
70
+ break
71
+ end
72
+ end
73
+ else
74
+ var_type = value.class.name
75
+ end
60
76
  end
61
77
 
62
78
  if Constants::DATA_TYPE.key? type
@@ -70,7 +86,6 @@ module Util
70
86
  instance_number = index
71
87
  type = Constants::LIST_NAMESPACE + '(' + structure_name + ')'
72
88
  var_type = Constants::LIST_NAMESPACE + '(' + class_name + ')'
73
- expected_list_type = false
74
89
  check = false
75
90
 
76
91
  break
@@ -108,7 +123,9 @@ module Util
108
123
 
109
124
  if key_details.key?(Constants::VALUES) && (!key_details.key?(Constants::PICKLIST) || (key_details[Constants::PICKLIST] && Initializer.get_initializer.sdk_config.pick_list_validation))
110
125
  value = value.value if value.is_a? Util::Choice
111
- unless key_details[Constants::VALUES].include? value
126
+
127
+ values_ja = key_details[Constants::VALUES]
128
+ unless values_ja.include? value
112
129
 
113
130
  unless instance_number.nil?
114
131
  error[Constants::INDEX] = instance_number
@@ -120,7 +137,7 @@ module Util
120
137
 
121
138
  error[Constants::ERROR_HASH_FIELD] = member_name
122
139
 
123
- error[Constants::ACCEPTED_VALUES] = key_details[Constants::VALUES]
140
+ error[Constants::ACCEPTED_VALUES] = values_ja
124
141
 
125
142
  raise SDKException.new(Constants::UNACCEPTED_VALUES_ERROR, nil, error, nil)
126
143
  end
@@ -108,7 +108,10 @@ module Util
108
108
  # @raise Exception
109
109
  def self.pre_convert(obj, type)
110
110
  init
111
- @@pre_converter_map[type].call(obj)
111
+ if @@pre_converter_map.key? type
112
+ return @@pre_converter_map[type].call(obj)
113
+ end
114
+ obj
112
115
  end
113
116
 
114
117
  # This method is to convert Java data to JSON data value.
@@ -118,7 +121,10 @@ module Util
118
121
  # @raise Exception
119
122
  def self.post_convert(obj, type)
120
123
  init
121
- @@post_converter_map[type].call(obj)
124
+ if @@post_converter_map.key? type
125
+ return @@post_converter_map[type].call(obj)
126
+ end
127
+ obj
122
128
  end
123
129
 
124
130
  def self.pre_convert_object_data(obj)
@@ -13,10 +13,10 @@ module Util
13
13
  end
14
14
 
15
15
  def append_to_request(request_base, request_object)
16
- request_base.set_form(set_file_fody(request_object), Constants::MULTIPART_FORM_DATA) if request_object.is_a?(Hash)
16
+ request_base.set_form(set_file_body(request_object), Constants::MULTIPART_FORM_DATA) if request_object.is_a?(Hash)
17
17
  end
18
18
 
19
- def set_file_fody(request_object)
19
+ def set_file_body(request_object)
20
20
  data = []
21
21
  request_object.each do |key, value|
22
22
  if value.is_a? Array
@@ -38,19 +38,7 @@ module Util
38
38
 
39
39
  def form_request(request_instance, class_path, instance_no, member_json_details = nil)
40
40
  require_relative '../initializer'
41
- if @common_api_handler.api_path.include? Constants::PHOTO
42
- path = @common_api_handler.api_path.split("/")
43
- if path.length == 6
44
- module_api_name = path[3].downcase
45
- if path[1].downcase == Constants::CRM && path[2].downcase == Constants::API_VERSION && path[5].downcase == Constants::PHOTO && !(Constants::PHOTO_SUPPORTED_MODULES.include? module_api_name)
46
- api_supported_module = Utility::api_supported_module
47
- if api_supported_module.key?(module_api_name) && api_supported_module[module_api_name].downcase != "custom"
48
- raise SDKException.new(Constants::INVALID_MODULE, Constants::PHOTO_UPLOAD_ERROR_MESSAGE)
49
- end
50
- end
51
- end
52
- end
53
-
41
+
54
42
  package_name = Utility.path_to_package(class_path)
55
43
  class_details = Initializer.json_details[package_name]
56
44
  request_hash = {}
@@ -73,7 +61,7 @@ module Util
73
61
 
74
62
  member_data = request_instance.instance_variable_get(Constants::AT + member_name)
75
63
 
76
- if !modified.nil? && (modified != 0) && value_checker(request_instance.class.name, member_name, member_details, member_data, @unique_hash, instance_no)
64
+ if !modified.nil? && (modified != 0) && !member_data.nil? && value_checker(request_instance.class.name, member_name, member_details, member_data, @unique_hash, instance_no)
77
65
  key_name = member_details[Constants::NAME]
78
66
  type = member_details[Constants::TYPE]
79
67
  if type.downcase == Constants::LIST_NAMESPACE.downcase