restforce 5.0.1 → 5.0.6

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 30927d4c4482b918c5d7bce04db72c65a26dfeb6671c637310271beeead93efc
4
- data.tar.gz: 6a3925cad38fcd9b17ed7989be9a18c9e371647d84f514b99acda6c3d3af3735
3
+ metadata.gz: 6644bf699621fb5414dce1dce275e5a265fca50305bcfca98864b6c1683f1687
4
+ data.tar.gz: 5ef0177a3a91dbe1637fc493b7f0bc478fca34c49e392abb1eccdf8bf951aa66
5
5
  SHA512:
6
- metadata.gz: e06ff037a4b28de59bbe136f4bf8498057069d295f3a0b61bbc2f4cee1014fe76eaa6c1877fdafc731a19712e00c3205049da0f87229bab2111a67f0fb3894cc
7
- data.tar.gz: 9c96d213af65c81cf0f89f3583bf7faa7f39a3c71193b7412c836d80ce19149766dce3a966a00fa8cd067f773249a58a58dcfbf4b051b32d55bd30da22b9fd07
6
+ metadata.gz: 7c7d3e8b58743f8d4ae6ae9255c2d89cc78b06a5e963350784ff3c884396bf1ef03fb986f2aba7bd231d8ae9af2f0b2af78a77c98fcb62356ac09b1411753e13
7
+ data.tar.gz: 5c8bb85fdcd28e5eba8d0939ef1868d42b99d079cddd056941ec7c4cf591d3789caa2b569cafeb8415a89755e567de1a93486dc9c18c5507275adad5631374cc
@@ -0,0 +1,19 @@
1
+ version: 2
2
+ updates:
3
+ - package-ecosystem: bundler
4
+ directory: "/"
5
+ schedule:
6
+ interval: daily
7
+ open-pull-requests-limit: 10
8
+ ignore:
9
+ - dependency-name: rubocop
10
+ versions:
11
+ - 1.10.0
12
+ - 1.11.0
13
+ - 1.12.0
14
+ - 1.12.1
15
+ - 1.9.0
16
+ - dependency-name: webmock
17
+ versions:
18
+ - 3.12.0
19
+ - 3.12.1
data/CHANGELOG.md CHANGED
@@ -1,3 +1,32 @@
1
+ ## 5.0.6 (Jun 17, 2021)
2
+
3
+ * Handle the `API_DISABLED_FOR_ORG` error returned by Salesforce (@cmac)
4
+ * Handle the `METHOD_NOT_ALLOWED` error returned by Salesforce (@timrogers)
5
+ * Handle the `APEX_ERROR` error returned by Salesforce (@timrogers)
6
+
7
+ ## 5.0.5 (Feb 17, 2021)
8
+
9
+ * Handle the `CANNOT_EXECUTE_FLOW_TRIGGER` error returned by Salesforce (@almusavi, @timrogers)
10
+
11
+ ## 5.0.4 (Jan 18, 2021)
12
+
13
+ * Handle the `INVALID_QUERY_LOCATOR` error returned by Salesforce
14
+ * Handle the `INVALID_OPERATION_WITH_EXPIRED_PASSWORD` error returned by Salesforce
15
+ * Handle the `FIELD_INTEGRITY_EXCEPTION` error returned by Salesforce
16
+ * Handle the `FORBIDDEN` error returned by Salesforce
17
+ * Handle the `ILLEGAL_QUERY_PARAMETER_VALUE` error returned by Salesforce
18
+ * Handle the `JSON_PARSER_ERROR` error returned by Salesforce
19
+
20
+ ## 5.0.3 (Sep 8, 2020)
21
+
22
+ * Handle the undocumented `EXCEEDED_MAX_SEMIJOIN_SUBSELECTS` error returned by Salesforce (@embertel, @timrogers)
23
+
24
+ ## 5.0.2 (Sep 6, 2020)
25
+
26
+ * Handle the undocumented `REQUEST_LIMIT_EXCEEDED` error returned by Salesforce (@wkirkby, @timrogers)
27
+ * Handle the undocumented `SERVER_UNAVAILABLE` error returned by Salesforce (@wkirkby, @timrogers)
28
+ * Refactor the library to be compatible with Rubocop 0.90's cops (this shouldn't introduce any noticeable changes see #569 for detailed changes) (@timrogers)
29
+
1
30
  ## 5.0.1 (Aug 13, 2020)
2
31
 
3
32
  * Handle the undocumented `API_CURRENTLY_DISABLED` error returned by Salesforce (@ruipserra, @timrogers)
data/README.md CHANGED
@@ -25,7 +25,7 @@ Features include:
25
25
 
26
26
  Add this line to your application's Gemfile:
27
27
 
28
- gem 'restforce', '~> 5.0.1'
28
+ gem 'restforce', '~> 5.0.6'
29
29
 
30
30
  And then execute:
31
31
 
@@ -37,7 +37,7 @@ Or install it yourself as:
37
37
 
38
38
  __As of version 5.0.0, this gem is only compatible with Ruby 2.5.0 and later.__ If you're using an earlier Ruby version:
39
39
 
40
- * for Ruby 2.4, use version 4.2.2 or earlier
40
+ * for Ruby 2.4, use version 4.3.0 or earlier
41
41
  * for Ruby 2.3, use version 3.2.0 or earlier
42
42
  * for Ruby versions 2.2, 2.1 and 2.0, use version 2.5.3 or earlier
43
43
  * for Ruby 1.9.3, use version 2.4.2
@@ -12,12 +12,12 @@ module Restforce
12
12
  end
13
13
 
14
14
  # Yield each value on each page.
15
- def each
15
+ def each(&block)
16
16
  @raw_page['records'].each { |record| yield Restforce::Mash.build(record, @client) }
17
17
 
18
18
  np = next_page
19
19
  while np
20
- np.current_page.each { |record| yield record }
20
+ np.current_page.each(&block)
21
21
  np = np.next_page
22
22
  end
23
23
  end
@@ -61,9 +61,9 @@ module Restforce
61
61
  def initialize(opts = {})
62
62
  raise ArgumentError, 'Please specify a hash of options' unless opts.is_a?(Hash)
63
63
 
64
- @options = Hash[Restforce.configuration.options.map do |option|
64
+ @options = Restforce.configuration.options.map do |option|
65
65
  [option, Restforce.configuration.send(option)]
66
- end]
66
+ end.to_h
67
67
 
68
68
  @options.merge! opts
69
69
  yield builder if block_given?
@@ -35,7 +35,7 @@ module Restforce
35
35
  @valid_for = options.delete(:valid_for)
36
36
  raise "#{field} is not a dependent picklist" if @valid_for && !dependent?
37
37
 
38
- replace(picklist_values)
38
+ super(picklist_values)
39
39
  end
40
40
 
41
41
  private
@@ -95,9 +95,7 @@ module Restforce
95
95
 
96
96
  def replay_id(channel)
97
97
  handler = @replay_handlers[channel]
98
- if handler.is_a?(Integer)
99
- handler # treat it as a scalar
100
- elsif handler.respond_to?(:[])
98
+ if handler.respond_to?(:[]) && !handler.is_a?(Integer)
101
99
  # Ask for the latest replayId for this channel
102
100
  handler[channel]
103
101
  else
@@ -151,7 +151,7 @@ module Restforce
151
151
  option :request_headers
152
152
 
153
153
  # Set a logger for when Restforce.log is set to true, defaulting to STDOUT
154
- option :logger, default: ::Logger.new(STDOUT)
154
+ option :logger, default: ::Logger.new($stdout)
155
155
 
156
156
  # Set a log level for logging when Restforce.log is set to true, defaulting to :debug
157
157
  option :log_level, default: :debug
@@ -14,183 +14,387 @@ module Restforce
14
14
  # It is possible that we will be missing some errors, so we will handle this in
15
15
  # at least a semi-graceful manner.
16
16
  class AllOrNoneOperationRolledBack < ResponseError; end
17
+
17
18
  class AlreadyInProcess < ResponseError; end
19
+
20
+ class ApexError < ResponseError; end
21
+
18
22
  class ApiCurrentlyDisabled < ResponseError; end
23
+
24
+ class ApiDisabledForOrg < ResponseError; end
25
+
19
26
  class AssigneeTypeRequired < ResponseError; end
27
+
20
28
  class BadCustomEntityParentDomain < ResponseError; end
29
+
21
30
  class BccNotAllowedIfBccComplianceEnabled < ResponseError; end
31
+
22
32
  class BccSelfNotAllowedIfBccComplianceEnabled < ResponseError; end
33
+
23
34
  class CannotCascadeProductActive < ResponseError; end
35
+
24
36
  class CannotChangeFieldTypeOfApexReferencedField < ResponseError; end
37
+
25
38
  class CannotCreateAnotherManagedPackage < ResponseError; end
39
+
26
40
  class CannotDeactivateDivision < ResponseError; end
41
+
27
42
  class CannotDeleteLastDatedConversionRate < ResponseError; end
43
+
28
44
  class CannotDeleteManagedObject < ResponseError; end
45
+
29
46
  class CannotDisableLastAdmin < ResponseError; end
47
+
30
48
  class CannotEnableIpRestrictRequests < ResponseError; end
49
+
50
+ class CannotExecuteFlowTrigger < ResponseError; end
51
+
31
52
  class CannotInsertUpdateActivateEntity < ResponseError; end
53
+
32
54
  class CannotModifyManagedObject < ResponseError; end
55
+
33
56
  class CannotRenameApexReferencedField < ResponseError; end
57
+
34
58
  class CannotRenameApexReferencedObject < ResponseError; end
59
+
35
60
  class CannotReparentRecord < ResponseError; end
61
+
36
62
  class CannotResolveName < ResponseError; end
63
+
37
64
  class CannotUpdateConvertedLead < ResponseError; end
65
+
38
66
  class CantDisableCorpCurrency < ResponseError; end
67
+
39
68
  class CantUnsetCorpCurrency < ResponseError; end
69
+
40
70
  class ChildShareFailsParent < ResponseError; end
71
+
41
72
  class CircularDependency < ResponseError; end
73
+
42
74
  class CommunityNotAccessible < ResponseError; end
75
+
43
76
  class CustomClobFieldLimitExceeded < ResponseError; end
77
+
44
78
  class CustomEntityOrFieldLimit < ResponseError; end
79
+
45
80
  class CustomFieldIndexLimitExceeded < ResponseError; end
81
+
46
82
  class CustomIndexExists < ResponseError; end
83
+
47
84
  class CustomLinkLimitExceeded < ResponseError; end
85
+
48
86
  class CustomMetadataLimitExceeded < ResponseError; end
87
+
49
88
  class CustomSettingsLimitExceeded < ResponseError; end
89
+
50
90
  class CustomTabLimitExceeded < ResponseError; end
91
+
51
92
  class DeleteFailed < ResponseError; end
93
+
52
94
  class DependencyExists < ResponseError; end
95
+
53
96
  class DuplicateCaseSolution < ResponseError; end
97
+
54
98
  class DuplicateCustomEntityDefinition < ResponseError; end
99
+
55
100
  class DuplicateCustomTabMotif < ResponseError; end
101
+
56
102
  class DuplicateDeveloperName < ResponseError; end
103
+
57
104
  class DuplicatesDetected < ResponseError; end
105
+
58
106
  class DuplicateExternalId < ResponseError; end
107
+
59
108
  class DuplicateMasterLabel < ResponseError; end
109
+
60
110
  class DuplicateSenderDisplayName < ResponseError; end
111
+
61
112
  class DuplicateUsername < ResponseError; end
113
+
62
114
  class DuplicateValue < ResponseError; end
115
+
63
116
  class EmailAddressBounced < ResponseError; end
117
+
64
118
  class EmailNotProcessedDueToPriorError < ResponseError; end
119
+
65
120
  class EmailOptedOut < ResponseError; end
121
+
66
122
  class EmailTemplateFormulaError < ResponseError; end
123
+
67
124
  class EmailTemplateMergefieldAccessError < ResponseError; end
125
+
68
126
  class EmailTemplateMergefieldError < ResponseError; end
127
+
69
128
  class EmailTemplateMergefieldValueError < ResponseError; end
129
+
70
130
  class EmailTemplateProcessingError < ResponseError; end
131
+
71
132
  class EmptyScontrolFileName < ResponseError; end
133
+
72
134
  class EntityFailedIflastmodifiedOnUpdate < ResponseError; end
135
+
73
136
  class EntityIsArchived < ResponseError; end
137
+
74
138
  class EntityIsDeleted < ResponseError; end
139
+
75
140
  class EntityIsLocked < ResponseError; end
141
+
76
142
  class EnvironmentHubMembershipConflict < ResponseError; end
143
+
77
144
  class ErrorInMailer < ResponseError; end
145
+
146
+ class ExceededMaxSemijoinSubselects < ResponseError; end
147
+
78
148
  class FailedActivation < ResponseError; end
149
+
79
150
  class FieldCustomValidationException < ResponseError; end
151
+
80
152
  class FieldFilterValidationException < ResponseError; end
153
+
154
+ class FieldIntegrityException < ResponseError; end
155
+
81
156
  class FilteredLookupLimitExceeded < ResponseError; end
157
+
158
+ class Forbidden < ResponseError; end
159
+
82
160
  class HtmlFileUploadNotAllowed < ResponseError; end
161
+
162
+ class IllegalQueryParameterValue < ResponseError; end
163
+
83
164
  class ImageTooLarge < ResponseError; end
165
+
84
166
  class InactiveOwnerOrUser < ResponseError; end
167
+
85
168
  class InsertUpdateDeleteNotAllowedDuringMaintenance < ResponseError; end
169
+
86
170
  class InsufficientAccessOnCrossReferenceEntity < ResponseError; end
171
+
87
172
  class InsufficientAccessOrReadonly < ResponseError; end
173
+
88
174
  class InvalidAccessLevel < ResponseError; end
175
+
89
176
  class InvalidArgumentType < ResponseError; end
177
+
90
178
  class InvalidAssigneeType < ResponseError; end
179
+
91
180
  class InvalidAssignmentRule < ResponseError; end
181
+
92
182
  class InvalidBatchOperation < ResponseError; end
183
+
93
184
  class InvalidContentType < ResponseError; end
185
+
94
186
  class InvalidCreditCardInfo < ResponseError; end
187
+
95
188
  class InvalidCrossReferenceKey < ResponseError; end
189
+
96
190
  class InvalidCrossReferenceTypeForField < ResponseError; end
191
+
97
192
  class InvalidCurrencyConvRate < ResponseError; end
193
+
98
194
  class InvalidCurrencyCorpRate < ResponseError; end
195
+
99
196
  class InvalidCurrencyIso < ResponseError; end
197
+
100
198
  class InvalidEmailAddress < ResponseError; end
199
+
101
200
  class InvalidEmptyKeyOwner < ResponseError; end
201
+
102
202
  class InvalidEventSubscription < ResponseError; end
203
+
103
204
  class InvalidField < ResponseError; end
205
+
104
206
  class InvalidFieldForInsertUpdate < ResponseError; end
207
+
105
208
  class InvalidFieldWhenUsingTemplate < ResponseError; end
209
+
106
210
  class InvalidFilterAction < ResponseError; end
211
+
107
212
  class InvalidIdField < ResponseError; end
213
+
108
214
  class InvalidInetAddress < ResponseError; end
215
+
109
216
  class InvalidLineitemCloneState < ResponseError; end
217
+
110
218
  class InvalidMasterOrTranslatedSolution < ResponseError; end
219
+
111
220
  class InvalidMessageIdReference < ResponseError; end
221
+
112
222
  class InvalidOperation < ResponseError; end
223
+
224
+ class InvalidOperationWithExpiredPassword < ResponseError; end
225
+
113
226
  class InvalidOperator < ResponseError; end
227
+
114
228
  class InvalidOrNullForRestrictedPicklist < ResponseError; end
229
+
115
230
  class InvalidQueryFilterOperator < ResponseError; end
231
+
232
+ class InvalidQueryLocator < ResponseError; end
233
+
116
234
  class InvalidPartnerNetworkStatus < ResponseError; end
235
+
117
236
  class InvalidPersonAccountOperation < ResponseError; end
237
+
118
238
  class InvalidReadOnlyUserDml < ResponseError; end
239
+
119
240
  class InvalidSaveAsActivityFlag < ResponseError; end
241
+
120
242
  class InvalidSessionId < ResponseError; end
243
+
121
244
  class InvalidStatus < ResponseError; end
245
+
122
246
  class InvalidType < ResponseError; end
247
+
123
248
  class InvalidTypeForOperation < ResponseError; end
249
+
124
250
  class InvalidTypeOnFieldInRecord < ResponseError; end
251
+
125
252
  class IpRangeLimitExceeded < ResponseError; end
253
+
126
254
  class JigsawImportLimitExceeded < ResponseError; end
255
+
256
+ class JsonParserError < ResponseError; end
257
+
127
258
  class LicenseLimitExceeded < ResponseError; end
259
+
128
260
  class LightPortalUserException < ResponseError; end
261
+
129
262
  class LimitExceeded < ResponseError; end
263
+
130
264
  class LoginChallengeIssued < ResponseError; end
265
+
131
266
  class LoginChallengePending < ResponseError; end
267
+
132
268
  class LoginMustUseSecurityToken < ResponseError; end
269
+
133
270
  class MalformedId < ResponseError; end
271
+
134
272
  class MalformedQuery < ResponseError; end
273
+
135
274
  class ManagerNotDefined < ResponseError; end
275
+
136
276
  class MassmailRetryLimitExceeded < ResponseError; end
277
+
137
278
  class MassMailLimitExceeded < ResponseError; end
279
+
138
280
  class MaximumCcemailsExceeded < ResponseError; end
281
+
139
282
  class MaximumDashboardComponentsExceeded < ResponseError; end
283
+
140
284
  class MaximumHierarchyLevelsReached < ResponseError; end
285
+
141
286
  class MaximumSizeOfAttachment < ResponseError; end
287
+
142
288
  class MaximumSizeOfDocument < ResponseError; end
289
+
143
290
  class MaxActionsPerRuleExceeded < ResponseError; end
291
+
144
292
  class MaxActiveRulesExceeded < ResponseError; end
293
+
145
294
  class MaxApprovalStepsExceeded < ResponseError; end
295
+
146
296
  class MaxFormulasPerRuleExceeded < ResponseError; end
297
+
147
298
  class MaxRulesExceeded < ResponseError; end
299
+
148
300
  class MaxRuleEntriesExceeded < ResponseError; end
301
+
149
302
  class MaxTaskDescriptionExceeded < ResponseError; end
303
+
150
304
  class MaxTmRulesExceeded < ResponseError; end
305
+
151
306
  class MaxTmRuleItemsExceeded < ResponseError; end
307
+
152
308
  class MergeFailed < ResponseError; end
309
+
310
+ class MethodNotAllowed < ResponseError; end
311
+
153
312
  class MissingArgument < ResponseError; end
313
+
154
314
  class NonuniqueShippingAddress < ResponseError; end
315
+
155
316
  class NoApplicableProcess < ResponseError; end
317
+
156
318
  class NoAttachmentPermission < ResponseError; end
319
+
157
320
  class NoInactiveDivisionMembers < ResponseError; end
321
+
158
322
  class NoMassMailPermission < ResponseError; end
323
+
159
324
  class NumberOutsideValidRange < ResponseError; end
325
+
160
326
  class NumHistoryFieldsBySobjectExceeded < ResponseError; end
327
+
161
328
  class OpWithInvalidUserTypeException < ResponseError; end
329
+
162
330
  class OptedOutOfMassMail < ResponseError; end
331
+
163
332
  class PackageLicenseRequired < ResponseError; end
333
+
164
334
  class PlatformEventEncryptionError < ResponseError; end
335
+
165
336
  class PlatformEventPublishingUnavailable < ResponseError; end
337
+
166
338
  class PlatformEventPublishFailed < ResponseError; end
339
+
167
340
  class PortalUserAlreadyExistsForContact < ResponseError; end
341
+
168
342
  class PrivateContactOnAsset < ResponseError; end
343
+
169
344
  class RecordInUseByWorkflow < ResponseError; end
345
+
346
+ class RequestLimitExceeded < ResponseError; end
347
+
170
348
  class RequestRunningTooLong < ResponseError; end
349
+
171
350
  class RequiredFieldMissing < ResponseError; end
351
+
172
352
  class SelfReferenceFromTrigger < ResponseError; end
353
+
354
+ class ServerUnavailable < ResponseError; end
355
+
173
356
  class ShareNeededForChildOwner < ResponseError; end
357
+
174
358
  class SingleEmailLimitExceeded < ResponseError; end
359
+
175
360
  class StandardPriceNotDefined < ResponseError; end
361
+
176
362
  class StorageLimitExceeded < ResponseError; end
363
+
177
364
  class StringTooLong < ResponseError; end
365
+
178
366
  class TabsetLimitExceeded < ResponseError; end
367
+
179
368
  class TemplateNotActive < ResponseError; end
369
+
180
370
  class TerritoryRealignInProgress < ResponseError; end
371
+
181
372
  class TextDataOutsideSupportedCharset < ResponseError; end
373
+
182
374
  class TooManyApexRequests < ResponseError; end
375
+
183
376
  class TooManyEnumValue < ResponseError; end
377
+
184
378
  class TransferRequiresRead < ResponseError; end
379
+
185
380
  class UnableToLockRow < ResponseError; end
381
+
186
382
  class UnavailableRecordtypeException < ResponseError; end
383
+
187
384
  class UndeleteFailed < ResponseError; end
385
+
188
386
  class UnknownException < ResponseError; end
387
+
189
388
  class UnspecifiedEmailAddress < ResponseError; end
389
+
190
390
  class UnsupportedApexTriggerOperation < ResponseError; end
391
+
191
392
  class UnverifiedSenderAddress < ResponseError; end
393
+
192
394
  class WeblinkSizeLimitExceeded < ResponseError; end
395
+
193
396
  class WeblinkUrlInvalid < ResponseError; end
397
+
194
398
  class WrongControllerType < ResponseError; end
195
399
 
196
400
  # Maps `errorCode`s returned from Salesforce to the exception class
@@ -198,7 +402,9 @@ module Restforce
198
402
  ERROR_EXCEPTION_CLASSES = {
199
403
  "ALL_OR_NONE_OPERATION_ROLLED_BACK" => AllOrNoneOperationRolledBack,
200
404
  "ALREADY_IN_PROCESS" => AlreadyInProcess,
405
+ "APEX_ERROR" => ApexError,
201
406
  "API_CURRENTLY_DISABLED" => ApiCurrentlyDisabled,
407
+ "API_DISABLED_FOR_ORG" => ApiDisabledForOrg,
202
408
  "ASSIGNEE_TYPE_REQUIRED" => AssigneeTypeRequired,
203
409
  "BAD_CUSTOM_ENTITY_PARENT_DOMAIN" => BadCustomEntityParentDomain,
204
410
  "BCC_NOT_ALLOWED_IF_BCC_COMPLIANCE_ENABLED" =>
@@ -215,6 +421,7 @@ module Restforce
215
421
  "CANNOT_DELETE_MANAGED_OBJECT" => CannotDeleteManagedObject,
216
422
  "CANNOT_DISABLE_LAST_ADMIN" => CannotDisableLastAdmin,
217
423
  "CANNOT_ENABLE_IP_RESTRICT_REQUESTS" => CannotEnableIpRestrictRequests,
424
+ "CANNOT_EXECUTE_FLOW_TRIGGER" => CannotExecuteFlowTrigger,
218
425
  "CANNOT_INSERT_UPDATE_ACTIVATE_ENTITY" => CannotInsertUpdateActivateEntity,
219
426
  "CANNOT_MODIFY_MANAGED_OBJECT" => CannotModifyManagedObject,
220
427
  "CANNOT_RENAME_APEX_REFERENCED_FIELD" => CannotRenameApexReferencedField,
@@ -264,11 +471,15 @@ module Restforce
264
471
  "ENTITY_IS_LOCKED" => EntityIsLocked,
265
472
  "ENVIRONMENT_HUB_MEMBERSHIP_CONFLICT" => EnvironmentHubMembershipConflict,
266
473
  "ERROR_IN_MAILER" => ErrorInMailer,
474
+ "EXCEEDED_MAX_SEMIJOIN_SUBSELECTS" => ExceededMaxSemijoinSubselects,
267
475
  "FAILED_ACTIVATION" => FailedActivation,
268
476
  "FIELD_CUSTOM_VALIDATION_EXCEPTION" => FieldCustomValidationException,
269
477
  "FIELD_FILTER_VALIDATION_EXCEPTION" => FieldFilterValidationException,
478
+ "FIELD_INTEGRITY_EXCEPTION" => FieldIntegrityException,
270
479
  "FILTERED_LOOKUP_LIMIT_EXCEEDED" => FilteredLookupLimitExceeded,
480
+ "FORBIDDEN" => Forbidden,
271
481
  "HTML_FILE_UPLOAD_NOT_ALLOWED" => HtmlFileUploadNotAllowed,
482
+ "ILLEGAL_QUERY_PARAMETER_VALUE" => IllegalQueryParameterValue,
272
483
  "IMAGE_TOO_LARGE" => ImageTooLarge,
273
484
  "INACTIVE_OWNER_OR_USER" => InactiveOwnerOrUser,
274
485
  "INSERT_UPDATE_DELETE_NOT_ALLOWED_DURING_MAINTENANCE" =>
@@ -301,10 +512,12 @@ module Restforce
301
512
  "INVALID_MASTER_OR_TRANSLATED_SOLUTION" => InvalidMasterOrTranslatedSolution,
302
513
  "INVALID_MESSAGE_ID_REFERENCE" => InvalidMessageIdReference,
303
514
  "INVALID_OPERATION" => InvalidOperation,
515
+ "INVALID_OPERATION_WITH_EXPIRED_PASSWORD" => InvalidOperationWithExpiredPassword,
304
516
  "INVALID_OPERATOR" => InvalidOperator,
305
517
  "INVALID_OR_NULL_FOR_RESTRICTED_PICKLIST" =>
306
518
  InvalidOrNullForRestrictedPicklist,
307
519
  "INVALID_QUERY_FILTER_OPERATOR" => InvalidQueryFilterOperator,
520
+ "INVALID_QUERY_LOCATOR" => InvalidQueryLocator,
308
521
  "INVALID_PARTNER_NETWORK_STATUS" => InvalidPartnerNetworkStatus,
309
522
  "INVALID_PERSON_ACCOUNT_OPERATION" => InvalidPersonAccountOperation,
310
523
  "INVALID_READ_ONLY_USER_DML" => InvalidReadOnlyUserDml,
@@ -316,6 +529,7 @@ module Restforce
316
529
  "INVALID_TYPE_ON_FIELD_IN_RECORD" => InvalidTypeOnFieldInRecord,
317
530
  "IP_RANGE_LIMIT_EXCEEDED" => IpRangeLimitExceeded,
318
531
  "JIGSAW_IMPORT_LIMIT_EXCEEDED" => JigsawImportLimitExceeded,
532
+ "JSON_PARSER_ERROR" => JsonParserError,
319
533
  "LICENSE_LIMIT_EXCEEDED" => LicenseLimitExceeded,
320
534
  "LIGHT_PORTAL_USER_EXCEPTION" => LightPortalUserException,
321
535
  "LIMIT_EXCEEDED" => LimitExceeded,
@@ -342,6 +556,7 @@ module Restforce
342
556
  "MAX_TM_RULES_EXCEEDED" => MaxTmRulesExceeded,
343
557
  "MAX_TM_RULE_ITEMS_EXCEEDED" => MaxTmRuleItemsExceeded,
344
558
  "MERGE_FAILED" => MergeFailed,
559
+ "METHOD_NOT_ALLOWED" => MethodNotAllowed,
345
560
  "MISSING_ARGUMENT" => MissingArgument,
346
561
  "NONUNIQUE_SHIPPING_ADDRESS" => NonuniqueShippingAddress,
347
562
  "NO_APPLICABLE_PROCESS" => NoApplicableProcess,
@@ -359,9 +574,11 @@ module Restforce
359
574
  "PORTAL_USER_ALREADY_EXISTS_FOR_CONTACT" => PortalUserAlreadyExistsForContact,
360
575
  "PRIVATE_CONTACT_ON_ASSET" => PrivateContactOnAsset,
361
576
  "RECORD_IN_USE_BY_WORKFLOW" => RecordInUseByWorkflow,
577
+ "REQUEST_LIMIT_EXCEEDED" => RequestLimitExceeded,
362
578
  "REQUEST_RUNNING_TOO_LONG" => RequestRunningTooLong,
363
579
  "REQUIRED_FIELD_MISSING" => RequiredFieldMissing,
364
580
  "SELF_REFERENCE_FROM_TRIGGER" => SelfReferenceFromTrigger,
581
+ "SERVER_UNAVAILABLE" => ServerUnavailable,
365
582
  "SHARE_NEEDED_FOR_CHILD_OWNER" => ShareNeededForChildOwner,
366
583
  "SINGLE_EMAIL_LIMIT_EXCEEDED" => SingleEmailLimitExceeded,
367
584
  "STANDARD_PRICE_NOT_DEFINED" => StandardPriceNotDefined,
@@ -11,9 +11,10 @@ module Restforce
11
11
  # appropriate Restforce::Collection, Restforce::SObject and
12
12
  # Restforce::Mash objects.
13
13
  def build(val, client)
14
- if val.is_a?(Array)
14
+ case val
15
+ when Array
15
16
  val.collect { |a_val| self.build(a_val, client) }
16
- elsif val.is_a?(Hash)
17
+ when Hash
17
18
  self.klass(val).new(val, client)
18
19
  else
19
20
  val
@@ -55,6 +56,9 @@ module Restforce
55
56
  self.class.new(self, @client, self.default)
56
57
  end
57
58
 
59
+ # The #convert_value method and its signature are part of Hashie::Mash's API, so we
60
+ # can't unilaterally decide to change `duping` to be a keyword argument
61
+ # rubocop:disable Style/OptionalBooleanParameter
58
62
  def convert_value(val, duping = false)
59
63
  case val
60
64
  when self.class
@@ -68,5 +72,6 @@ module Restforce
68
72
  val
69
73
  end
70
74
  end
75
+ # rubocop:enable Style/OptionalBooleanParameter
71
76
  end
72
77
  end
@@ -16,6 +16,8 @@ module Restforce
16
16
  autoload :CustomHeaders, 'restforce/middleware/custom_headers'
17
17
 
18
18
  def initialize(app, client, options)
19
+ super(app)
20
+
19
21
  @app = app
20
22
  @client = client
21
23
  @options = options
@@ -11,7 +11,7 @@ module Restforce
11
11
  @options = options
12
12
  @logger = logger || begin
13
13
  require 'logger'
14
- ::Logger.new(STDOUT)
14
+ ::Logger.new($stdout)
15
15
  end
16
16
  end
17
17
 
@@ -20,9 +20,9 @@ module Restforce
20
20
  def call(env)
21
21
  debug('request') do
22
22
  dump url: env[:url].to_s,
23
- method: env[:method],
24
- headers: env[:request_headers],
25
- body: env[:body]
23
+ method: env[:method],
24
+ headers: env[:request_headers],
25
+ body: env[:body]
26
26
  end
27
27
  super
28
28
  end
@@ -30,13 +30,14 @@ module Restforce
30
30
  def on_complete(env)
31
31
  debug('response') do
32
32
  dump status: env[:status].to_s,
33
- headers: env[:response_headers],
34
- body: env[:body]
33
+ headers: env[:response_headers],
34
+ body: env[:body]
35
35
  end
36
36
  end
37
37
 
38
38
  def dump(hash)
39
- "\n" + hash.map { |k, v| " #{k}: #{v.inspect}" }.join("\n")
39
+ dumped_pairs = hash.map { |k, v| " #{k}: #{v.inspect}" }.join("\n")
40
+ "\n#{dumped_pairs}"
40
41
  end
41
42
  end
42
43
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Restforce
4
- VERSION = '5.0.1'
4
+ VERSION = '5.0.6'
5
5
  end
data/restforce.gemspec CHANGED
@@ -34,7 +34,8 @@ Gem::Specification.new do |gem|
34
34
  gem.add_development_dependency 'faye' unless RUBY_PLATFORM == 'java'
35
35
  gem.add_development_dependency 'rspec', '~> 2.14.0'
36
36
  gem.add_development_dependency 'rspec_junit_formatter', '~> 0.4.1'
37
- gem.add_development_dependency 'rubocop', '~> 0.87.1'
38
- gem.add_development_dependency 'simplecov', '~> 0.18.2'
39
- gem.add_development_dependency 'webmock', '~> 3.8.3'
37
+
38
+ gem.add_development_dependency 'rubocop', '~> 1.17.0'
39
+ gem.add_development_dependency 'simplecov', '~> 0.21.2'
40
+ gem.add_development_dependency 'webmock', '~> 3.13.0'
40
41
  end
@@ -437,11 +437,11 @@ shared_examples_for Restforce::AbstractClient do
437
437
  @query = stub_api_request('query\?q=SELECT%20some,%20fields%20FROM%20object').
438
438
  with(headers: { 'Authorization' => "OAuth #{oauth_token}" }).
439
439
  to_return(status: 401,
440
- body: fixture('expired_session_response'),
441
- headers: { 'Content-Type' => 'application/json' }).then.
440
+ body: fixture('expired_session_response'),
441
+ headers: { 'Content-Type' => 'application/json' }).then.
442
442
  to_return(status: 200,
443
- body: fixture('sobject/query_success_response'),
444
- headers: { 'Content-Type' => 'application/json' })
443
+ body: fixture('sobject/query_success_response'),
444
+ headers: { 'Content-Type' => 'application/json' })
445
445
 
446
446
  @login = stub_login_request(
447
447
  with_body: "grant_type=password&client_id=client_id&client_secret=" \
@@ -8,7 +8,9 @@ describe Restforce::Middleware::Authentication do
8
8
  proxy_uri: 'https://not-a-real-site.com',
9
9
  authentication_retries: retries,
10
10
  adapter: :net_http,
11
+ # rubocop:disable Naming/VariableNumber
11
12
  ssl: { version: :TLSv1_2 } }
13
+ # rubocop:enable Naming/VariableNumber
12
14
  end
13
15
 
14
16
  describe '.authenticate!' do
@@ -88,7 +90,9 @@ describe Restforce::Middleware::Authentication do
88
90
  end
89
91
 
90
92
  it "should have SSL config set" do
93
+ # rubocop:disable Naming/VariableNumber
91
94
  connection.ssl[:version].should eq(:TLSv1_2)
95
+ # rubocop:enable Naming/VariableNumber
92
96
  end
93
97
  end
94
98
 
metadata CHANGED
@@ -1,15 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: restforce
3
3
  version: !ruby/object:Gem::Version
4
- version: 5.0.1
4
+ version: 5.0.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tim Rogers
8
8
  - Eric J. Holmes
9
- autorequire:
9
+ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2020-08-13 00:00:00.000000000 Z
12
+ date: 2021-06-17 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: faraday
@@ -133,42 +133,42 @@ dependencies:
133
133
  requirements:
134
134
  - - "~>"
135
135
  - !ruby/object:Gem::Version
136
- version: 0.87.1
136
+ version: 1.17.0
137
137
  type: :development
138
138
  prerelease: false
139
139
  version_requirements: !ruby/object:Gem::Requirement
140
140
  requirements:
141
141
  - - "~>"
142
142
  - !ruby/object:Gem::Version
143
- version: 0.87.1
143
+ version: 1.17.0
144
144
  - !ruby/object:Gem::Dependency
145
145
  name: simplecov
146
146
  requirement: !ruby/object:Gem::Requirement
147
147
  requirements:
148
148
  - - "~>"
149
149
  - !ruby/object:Gem::Version
150
- version: 0.18.2
150
+ version: 0.21.2
151
151
  type: :development
152
152
  prerelease: false
153
153
  version_requirements: !ruby/object:Gem::Requirement
154
154
  requirements:
155
155
  - - "~>"
156
156
  - !ruby/object:Gem::Version
157
- version: 0.18.2
157
+ version: 0.21.2
158
158
  - !ruby/object:Gem::Dependency
159
159
  name: webmock
160
160
  requirement: !ruby/object:Gem::Requirement
161
161
  requirements:
162
162
  - - "~>"
163
163
  - !ruby/object:Gem::Version
164
- version: 3.8.3
164
+ version: 3.13.0
165
165
  type: :development
166
166
  prerelease: false
167
167
  version_requirements: !ruby/object:Gem::Requirement
168
168
  requirements:
169
169
  - - "~>"
170
170
  - !ruby/object:Gem::Version
171
- version: 3.8.3
171
+ version: 3.13.0
172
172
  description: A lightweight Ruby client for the Salesforce REST API
173
173
  email:
174
174
  - me@timrogers.co.uk
@@ -179,6 +179,7 @@ extra_rdoc_files: []
179
179
  files:
180
180
  - ".circleci/config.yml"
181
181
  - ".github/ISSUE_TEMPLATE/unhandled-salesforce-error.md"
182
+ - ".github/dependabot.yml"
182
183
  - ".gitignore"
183
184
  - ".rubocop.yml"
184
185
  - ".rubocop_todo.yml"
@@ -319,7 +320,7 @@ licenses:
319
320
  metadata:
320
321
  source_code_uri: https://github.com/restforce/restforce
321
322
  changelog_uri: https://github.com/restforce/restforce/blob/master/CHANGELOG.md
322
- post_install_message:
323
+ post_install_message:
323
324
  rdoc_options: []
324
325
  require_paths:
325
326
  - lib
@@ -334,8 +335,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
334
335
  - !ruby/object:Gem::Version
335
336
  version: '0'
336
337
  requirements: []
337
- rubygems_version: 3.1.2
338
- signing_key:
338
+ rubygems_version: 3.2.5
339
+ signing_key:
339
340
  specification_version: 4
340
341
  summary: A lightweight Ruby client for the Salesforce REST API
341
342
  test_files: