restforce 5.0.1 → 5.0.6

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.
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: