restforce 5.0.0 → 5.0.5

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: c668433781a24af5211bf9c102e5601ef69919a856928fb4a876de43bb96fa14
4
- data.tar.gz: 5d5ee573dc491e1eb38703028d2c107d28a9fa2b37616f08e3004cc20c653868
3
+ metadata.gz: 38acae68870155f93e38df159915fc242a663d02a4dbb252bb294c51763842e5
4
+ data.tar.gz: eeae1f3c32d469a435121baa0c9857b222cffea7055b4b3b50c84854191a5950
5
5
  SHA512:
6
- metadata.gz: f938c2e517cb05c33c4526c04c0384edaa70f39bed1a391a58032fb52574fd50c20fab21f859439957070506d4c03d84447134885e14d5ad59f3bff02f689545
7
- data.tar.gz: f2c466b8d4ae41bc6519dfaa27dbdbae2e302ad99c1ca52456f94bc391f243f99037bad48fc58533b83bb9cb146a30580e0cbe79a91cd9872e70fd0c9775865d
6
+ metadata.gz: e75731e44bfb826364edd12410a159d59a20c16865c4e6134736ec0ca83b06266cf8f5455772c92628fd092be94e4efb042951bbd6456865fc24d8cd2f7e3b80
7
+ data.tar.gz: af8a20544ea4f628a162d8038b8515ca2bd0333bd92f3796cbd19fcd713abfa46043395ee56a858ab5f2568b85e1961097269ac56fc29417633ead0dcbcd46f8
data/CHANGELOG.md CHANGED
@@ -1,3 +1,34 @@
1
+ ## 5.0.5 (Feb 17, 2021)
2
+
3
+ * Handle the `CANNOT_EXECUTE_FLOW_TRIGGER` error returned by Salesforce (@almusavi, @timrogers)
4
+
5
+ ## 5.0.4 (Jan 18, 2021)
6
+
7
+ * Handle the `INVALID_QUERY_LOCATOR` error returned by Salesforce
8
+ * Handle the `INVALID_OPERATION_WITH_EXPIRED_PASSWORD` error returned by Salesforce
9
+ * Handle the `FIELD_INTEGRITY_EXCEPTION` error returned by Salesforce
10
+ * Handle the `FORBIDDEN` error returned by Salesforce
11
+ * Handle the `ILLEGAL_QUERY_PARAMETER_VALUE` error returned by Salesforce
12
+ * Handle the `JSON_PARSER_ERROR` error returned by Salesforce
13
+
14
+ ## 5.0.3 (Sep 8, 2020)
15
+
16
+ * Handle the undocumented `EXCEEDED_MAX_SEMIJOIN_SUBSELECTS` error returned by Salesforce (@embertel, @timrogers)
17
+
18
+ ## 5.0.2 (Sep 6, 2020)
19
+
20
+ * Handle the undocumented `REQUEST_LIMIT_EXCEEDED` error returned by Salesforce (@wkirkby, @timrogers)
21
+ * Handle the undocumented `SERVER_UNAVAILABLE` error returned by Salesforce (@wkirkby, @timrogers)
22
+ * 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)
23
+
24
+ ## 5.0.1 (Aug 13, 2020)
25
+
26
+ * Handle the undocumented `API_CURRENTLY_DISABLED` error returned by Salesforce (@ruipserra, @timrogers)
27
+ * Handle the undocumented `MALFORMED_QUERY` error returned by Salesforce (@scottserok, @timrogers)
28
+ * Handle the undocumented `INVALID_QUERY_FILTER_OPERATOR` error returned by Salesforce (@Dantemss, @timrogers)
29
+ * Add documentation and scripts for running the
30
+ library's tests using Docker (@ryansch)
31
+
1
32
  ## 5.0.0 (Jul 10, 2020)
2
33
 
3
34
  For instructions on upgrading from Restforce 4.x to 5.x, see our ["Upgrading from Restforce 4.x to 5.x"](https://github.com/restforce/restforce/blob/master/UPGRADING.md) guide.
data/CONTRIBUTING.md CHANGED
@@ -35,3 +35,23 @@ Some things that will increase the chance that your pull request is accepted:
35
35
  * Write a [good commit message](http://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html).
36
36
 
37
37
  *Adapted from [factory_bot_rails's CONTRIBUTING.md](https://github.com/thoughtbot/factory_bot_rails/blob/master/CONTRIBUTING.md).*
38
+
39
+ ## Docker
40
+
41
+ If you'd rather use a docker container to run the tests, you can use the following instructions.
42
+
43
+ To set up the container image:
44
+
45
+ `docker-compose build --pull`
46
+
47
+ To run specs:
48
+
49
+ `docker-compose run --rm restforce rspec`
50
+
51
+ To run rubocop:
52
+
53
+ `docker-compose run --rm restforce rubocop`
54
+
55
+ To reset the bundler cache:
56
+
57
+ `docker-compose down -v`
data/Dockerfile ADDED
@@ -0,0 +1,31 @@
1
+ FROM ruby:2.6.5-alpine
2
+
3
+ RUN apk add --no-cache \
4
+ ca-certificates \
5
+ wget \
6
+ openssl \
7
+ bash \
8
+ build-base \
9
+ git \
10
+ sqlite-dev \
11
+ tzdata \
12
+ tini
13
+
14
+ ENV LANG en_US.UTF-8
15
+ ENV LANGUAGE en_US:en
16
+ ENV LC_ALL en_US.UTF-8
17
+
18
+ ENV BUNDLER_VERSION 2.1.4
19
+ RUN gem install bundler -v ${BUNDLER_VERSION} -i /usr/local/lib/ruby/gems/$(ls /usr/local/lib/ruby/gems) --force
20
+
21
+ WORKDIR /srv
22
+
23
+ COPY Gemfile restforce.gemspec /srv/
24
+ COPY lib/restforce/version.rb /srv/lib/restforce/version.rb
25
+
26
+ RUN bundle install
27
+
28
+ COPY . /srv/
29
+
30
+ ENTRYPOINT ["/sbin/tini", "-g", "--", "bundle", "exec"]
31
+ CMD ["rspec"]
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.0'
28
+ gem 'restforce', '~> 5.0.5'
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
@@ -333,8 +333,11 @@ client.update('Account', Id: '0016000000MRatd', Name: 'Whizbang Corp')
333
333
  ```ruby
334
334
  # Update the record with external `External__c` external ID set to '12'
335
335
  client.upsert('Account', 'External__c', External__c: 12, Name: 'Foobar')
336
+ # => true or "RecordId"
336
337
  ```
337
338
 
339
+ The upsert method will return the record Id if included in the response body from the Salesforce API; otherwise, it returns true. Currently the Salesforce API only returns the Id for newly created records.
340
+
338
341
  ### destroy
339
342
 
340
343
  ```ruby
@@ -0,0 +1,7 @@
1
+ version: "3.6"
2
+ services:
3
+ restforce:
4
+ build: .
5
+ image: restforce:dev
6
+ volumes:
7
+ - .:/srv
@@ -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
@@ -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,180 +14,381 @@ 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 ApiCurrentlyDisabled < ResponseError; end
21
+
18
22
  class AssigneeTypeRequired < ResponseError; end
23
+
19
24
  class BadCustomEntityParentDomain < ResponseError; end
25
+
20
26
  class BccNotAllowedIfBccComplianceEnabled < ResponseError; end
27
+
21
28
  class BccSelfNotAllowedIfBccComplianceEnabled < ResponseError; end
29
+
22
30
  class CannotCascadeProductActive < ResponseError; end
31
+
23
32
  class CannotChangeFieldTypeOfApexReferencedField < ResponseError; end
33
+
24
34
  class CannotCreateAnotherManagedPackage < ResponseError; end
35
+
25
36
  class CannotDeactivateDivision < ResponseError; end
37
+
26
38
  class CannotDeleteLastDatedConversionRate < ResponseError; end
39
+
27
40
  class CannotDeleteManagedObject < ResponseError; end
41
+
28
42
  class CannotDisableLastAdmin < ResponseError; end
43
+
29
44
  class CannotEnableIpRestrictRequests < ResponseError; end
45
+
46
+ class CannotExecuteFlowTrigger < ResponseError; end
47
+
30
48
  class CannotInsertUpdateActivateEntity < ResponseError; end
49
+
31
50
  class CannotModifyManagedObject < ResponseError; end
51
+
32
52
  class CannotRenameApexReferencedField < ResponseError; end
53
+
33
54
  class CannotRenameApexReferencedObject < ResponseError; end
55
+
34
56
  class CannotReparentRecord < ResponseError; end
57
+
35
58
  class CannotResolveName < ResponseError; end
59
+
36
60
  class CannotUpdateConvertedLead < ResponseError; end
61
+
37
62
  class CantDisableCorpCurrency < ResponseError; end
63
+
38
64
  class CantUnsetCorpCurrency < ResponseError; end
65
+
39
66
  class ChildShareFailsParent < ResponseError; end
67
+
40
68
  class CircularDependency < ResponseError; end
69
+
41
70
  class CommunityNotAccessible < ResponseError; end
71
+
42
72
  class CustomClobFieldLimitExceeded < ResponseError; end
73
+
43
74
  class CustomEntityOrFieldLimit < ResponseError; end
75
+
44
76
  class CustomFieldIndexLimitExceeded < ResponseError; end
77
+
45
78
  class CustomIndexExists < ResponseError; end
79
+
46
80
  class CustomLinkLimitExceeded < ResponseError; end
81
+
47
82
  class CustomMetadataLimitExceeded < ResponseError; end
83
+
48
84
  class CustomSettingsLimitExceeded < ResponseError; end
85
+
49
86
  class CustomTabLimitExceeded < ResponseError; end
87
+
50
88
  class DeleteFailed < ResponseError; end
89
+
51
90
  class DependencyExists < ResponseError; end
91
+
52
92
  class DuplicateCaseSolution < ResponseError; end
93
+
53
94
  class DuplicateCustomEntityDefinition < ResponseError; end
95
+
54
96
  class DuplicateCustomTabMotif < ResponseError; end
97
+
55
98
  class DuplicateDeveloperName < ResponseError; end
99
+
56
100
  class DuplicatesDetected < ResponseError; end
101
+
57
102
  class DuplicateExternalId < ResponseError; end
103
+
58
104
  class DuplicateMasterLabel < ResponseError; end
105
+
59
106
  class DuplicateSenderDisplayName < ResponseError; end
107
+
60
108
  class DuplicateUsername < ResponseError; end
109
+
61
110
  class DuplicateValue < ResponseError; end
111
+
62
112
  class EmailAddressBounced < ResponseError; end
113
+
63
114
  class EmailNotProcessedDueToPriorError < ResponseError; end
115
+
64
116
  class EmailOptedOut < ResponseError; end
117
+
65
118
  class EmailTemplateFormulaError < ResponseError; end
119
+
66
120
  class EmailTemplateMergefieldAccessError < ResponseError; end
121
+
67
122
  class EmailTemplateMergefieldError < ResponseError; end
123
+
68
124
  class EmailTemplateMergefieldValueError < ResponseError; end
125
+
69
126
  class EmailTemplateProcessingError < ResponseError; end
127
+
70
128
  class EmptyScontrolFileName < ResponseError; end
129
+
71
130
  class EntityFailedIflastmodifiedOnUpdate < ResponseError; end
131
+
72
132
  class EntityIsArchived < ResponseError; end
133
+
73
134
  class EntityIsDeleted < ResponseError; end
135
+
74
136
  class EntityIsLocked < ResponseError; end
137
+
75
138
  class EnvironmentHubMembershipConflict < ResponseError; end
139
+
76
140
  class ErrorInMailer < ResponseError; end
141
+
142
+ class ExceededMaxSemijoinSubselects < ResponseError; end
143
+
77
144
  class FailedActivation < ResponseError; end
145
+
78
146
  class FieldCustomValidationException < ResponseError; end
147
+
79
148
  class FieldFilterValidationException < ResponseError; end
149
+
150
+ class FieldIntegrityException < ResponseError; end
151
+
80
152
  class FilteredLookupLimitExceeded < ResponseError; end
153
+
154
+ class Forbidden < ResponseError; end
155
+
81
156
  class HtmlFileUploadNotAllowed < ResponseError; end
157
+
158
+ class IllegalQueryParameterValue < ResponseError; end
159
+
82
160
  class ImageTooLarge < ResponseError; end
161
+
83
162
  class InactiveOwnerOrUser < ResponseError; end
163
+
84
164
  class InsertUpdateDeleteNotAllowedDuringMaintenance < ResponseError; end
165
+
85
166
  class InsufficientAccessOnCrossReferenceEntity < ResponseError; end
167
+
86
168
  class InsufficientAccessOrReadonly < ResponseError; end
169
+
87
170
  class InvalidAccessLevel < ResponseError; end
171
+
88
172
  class InvalidArgumentType < ResponseError; end
173
+
89
174
  class InvalidAssigneeType < ResponseError; end
175
+
90
176
  class InvalidAssignmentRule < ResponseError; end
177
+
91
178
  class InvalidBatchOperation < ResponseError; end
179
+
92
180
  class InvalidContentType < ResponseError; end
181
+
93
182
  class InvalidCreditCardInfo < ResponseError; end
183
+
94
184
  class InvalidCrossReferenceKey < ResponseError; end
185
+
95
186
  class InvalidCrossReferenceTypeForField < ResponseError; end
187
+
96
188
  class InvalidCurrencyConvRate < ResponseError; end
189
+
97
190
  class InvalidCurrencyCorpRate < ResponseError; end
191
+
98
192
  class InvalidCurrencyIso < ResponseError; end
193
+
99
194
  class InvalidEmailAddress < ResponseError; end
195
+
100
196
  class InvalidEmptyKeyOwner < ResponseError; end
197
+
101
198
  class InvalidEventSubscription < ResponseError; end
199
+
102
200
  class InvalidField < ResponseError; end
201
+
103
202
  class InvalidFieldForInsertUpdate < ResponseError; end
203
+
104
204
  class InvalidFieldWhenUsingTemplate < ResponseError; end
205
+
105
206
  class InvalidFilterAction < ResponseError; end
207
+
106
208
  class InvalidIdField < ResponseError; end
209
+
107
210
  class InvalidInetAddress < ResponseError; end
211
+
108
212
  class InvalidLineitemCloneState < ResponseError; end
213
+
109
214
  class InvalidMasterOrTranslatedSolution < ResponseError; end
215
+
110
216
  class InvalidMessageIdReference < ResponseError; end
217
+
111
218
  class InvalidOperation < ResponseError; end
219
+
220
+ class InvalidOperationWithExpiredPassword < ResponseError; end
221
+
112
222
  class InvalidOperator < ResponseError; end
223
+
113
224
  class InvalidOrNullForRestrictedPicklist < ResponseError; end
225
+
226
+ class InvalidQueryFilterOperator < ResponseError; end
227
+
228
+ class InvalidQueryLocator < ResponseError; end
229
+
114
230
  class InvalidPartnerNetworkStatus < ResponseError; end
231
+
115
232
  class InvalidPersonAccountOperation < ResponseError; end
233
+
116
234
  class InvalidReadOnlyUserDml < ResponseError; end
235
+
117
236
  class InvalidSaveAsActivityFlag < ResponseError; end
237
+
118
238
  class InvalidSessionId < ResponseError; end
239
+
119
240
  class InvalidStatus < ResponseError; end
241
+
120
242
  class InvalidType < ResponseError; end
243
+
121
244
  class InvalidTypeForOperation < ResponseError; end
245
+
122
246
  class InvalidTypeOnFieldInRecord < ResponseError; end
247
+
123
248
  class IpRangeLimitExceeded < ResponseError; end
249
+
124
250
  class JigsawImportLimitExceeded < ResponseError; end
251
+
252
+ class JsonParserError < ResponseError; end
253
+
125
254
  class LicenseLimitExceeded < ResponseError; end
255
+
126
256
  class LightPortalUserException < ResponseError; end
257
+
127
258
  class LimitExceeded < ResponseError; end
259
+
128
260
  class LoginChallengeIssued < ResponseError; end
261
+
129
262
  class LoginChallengePending < ResponseError; end
263
+
130
264
  class LoginMustUseSecurityToken < ResponseError; end
265
+
131
266
  class MalformedId < ResponseError; end
267
+
268
+ class MalformedQuery < ResponseError; end
269
+
132
270
  class ManagerNotDefined < ResponseError; end
271
+
133
272
  class MassmailRetryLimitExceeded < ResponseError; end
273
+
134
274
  class MassMailLimitExceeded < ResponseError; end
275
+
135
276
  class MaximumCcemailsExceeded < ResponseError; end
277
+
136
278
  class MaximumDashboardComponentsExceeded < ResponseError; end
279
+
137
280
  class MaximumHierarchyLevelsReached < ResponseError; end
281
+
138
282
  class MaximumSizeOfAttachment < ResponseError; end
283
+
139
284
  class MaximumSizeOfDocument < ResponseError; end
285
+
140
286
  class MaxActionsPerRuleExceeded < ResponseError; end
287
+
141
288
  class MaxActiveRulesExceeded < ResponseError; end
289
+
142
290
  class MaxApprovalStepsExceeded < ResponseError; end
291
+
143
292
  class MaxFormulasPerRuleExceeded < ResponseError; end
293
+
144
294
  class MaxRulesExceeded < ResponseError; end
295
+
145
296
  class MaxRuleEntriesExceeded < ResponseError; end
297
+
146
298
  class MaxTaskDescriptionExceeded < ResponseError; end
299
+
147
300
  class MaxTmRulesExceeded < ResponseError; end
301
+
148
302
  class MaxTmRuleItemsExceeded < ResponseError; end
303
+
149
304
  class MergeFailed < ResponseError; end
305
+
150
306
  class MissingArgument < ResponseError; end
307
+
151
308
  class NonuniqueShippingAddress < ResponseError; end
309
+
152
310
  class NoApplicableProcess < ResponseError; end
311
+
153
312
  class NoAttachmentPermission < ResponseError; end
313
+
154
314
  class NoInactiveDivisionMembers < ResponseError; end
315
+
155
316
  class NoMassMailPermission < ResponseError; end
317
+
156
318
  class NumberOutsideValidRange < ResponseError; end
319
+
157
320
  class NumHistoryFieldsBySobjectExceeded < ResponseError; end
321
+
158
322
  class OpWithInvalidUserTypeException < ResponseError; end
323
+
159
324
  class OptedOutOfMassMail < ResponseError; end
325
+
160
326
  class PackageLicenseRequired < ResponseError; end
327
+
161
328
  class PlatformEventEncryptionError < ResponseError; end
329
+
162
330
  class PlatformEventPublishingUnavailable < ResponseError; end
331
+
163
332
  class PlatformEventPublishFailed < ResponseError; end
333
+
164
334
  class PortalUserAlreadyExistsForContact < ResponseError; end
335
+
165
336
  class PrivateContactOnAsset < ResponseError; end
337
+
166
338
  class RecordInUseByWorkflow < ResponseError; end
339
+
340
+ class RequestLimitExceeded < ResponseError; end
341
+
167
342
  class RequestRunningTooLong < ResponseError; end
343
+
168
344
  class RequiredFieldMissing < ResponseError; end
345
+
169
346
  class SelfReferenceFromTrigger < ResponseError; end
347
+
348
+ class ServerUnavailable < ResponseError; end
349
+
170
350
  class ShareNeededForChildOwner < ResponseError; end
351
+
171
352
  class SingleEmailLimitExceeded < ResponseError; end
353
+
172
354
  class StandardPriceNotDefined < ResponseError; end
355
+
173
356
  class StorageLimitExceeded < ResponseError; end
357
+
174
358
  class StringTooLong < ResponseError; end
359
+
175
360
  class TabsetLimitExceeded < ResponseError; end
361
+
176
362
  class TemplateNotActive < ResponseError; end
363
+
177
364
  class TerritoryRealignInProgress < ResponseError; end
365
+
178
366
  class TextDataOutsideSupportedCharset < ResponseError; end
367
+
179
368
  class TooManyApexRequests < ResponseError; end
369
+
180
370
  class TooManyEnumValue < ResponseError; end
371
+
181
372
  class TransferRequiresRead < ResponseError; end
373
+
182
374
  class UnableToLockRow < ResponseError; end
375
+
183
376
  class UnavailableRecordtypeException < ResponseError; end
377
+
184
378
  class UndeleteFailed < ResponseError; end
379
+
185
380
  class UnknownException < ResponseError; end
381
+
186
382
  class UnspecifiedEmailAddress < ResponseError; end
383
+
187
384
  class UnsupportedApexTriggerOperation < ResponseError; end
385
+
188
386
  class UnverifiedSenderAddress < ResponseError; end
387
+
189
388
  class WeblinkSizeLimitExceeded < ResponseError; end
389
+
190
390
  class WeblinkUrlInvalid < ResponseError; end
391
+
191
392
  class WrongControllerType < ResponseError; end
192
393
 
193
394
  # Maps `errorCode`s returned from Salesforce to the exception class
@@ -195,6 +396,7 @@ module Restforce
195
396
  ERROR_EXCEPTION_CLASSES = {
196
397
  "ALL_OR_NONE_OPERATION_ROLLED_BACK" => AllOrNoneOperationRolledBack,
197
398
  "ALREADY_IN_PROCESS" => AlreadyInProcess,
399
+ "API_CURRENTLY_DISABLED" => ApiCurrentlyDisabled,
198
400
  "ASSIGNEE_TYPE_REQUIRED" => AssigneeTypeRequired,
199
401
  "BAD_CUSTOM_ENTITY_PARENT_DOMAIN" => BadCustomEntityParentDomain,
200
402
  "BCC_NOT_ALLOWED_IF_BCC_COMPLIANCE_ENABLED" =>
@@ -211,6 +413,7 @@ module Restforce
211
413
  "CANNOT_DELETE_MANAGED_OBJECT" => CannotDeleteManagedObject,
212
414
  "CANNOT_DISABLE_LAST_ADMIN" => CannotDisableLastAdmin,
213
415
  "CANNOT_ENABLE_IP_RESTRICT_REQUESTS" => CannotEnableIpRestrictRequests,
416
+ "CANNOT_EXECUTE_FLOW_TRIGGER" => CannotExecuteFlowTrigger,
214
417
  "CANNOT_INSERT_UPDATE_ACTIVATE_ENTITY" => CannotInsertUpdateActivateEntity,
215
418
  "CANNOT_MODIFY_MANAGED_OBJECT" => CannotModifyManagedObject,
216
419
  "CANNOT_RENAME_APEX_REFERENCED_FIELD" => CannotRenameApexReferencedField,
@@ -260,11 +463,15 @@ module Restforce
260
463
  "ENTITY_IS_LOCKED" => EntityIsLocked,
261
464
  "ENVIRONMENT_HUB_MEMBERSHIP_CONFLICT" => EnvironmentHubMembershipConflict,
262
465
  "ERROR_IN_MAILER" => ErrorInMailer,
466
+ "EXCEEDED_MAX_SEMIJOIN_SUBSELECTS" => ExceededMaxSemijoinSubselects,
263
467
  "FAILED_ACTIVATION" => FailedActivation,
264
468
  "FIELD_CUSTOM_VALIDATION_EXCEPTION" => FieldCustomValidationException,
265
469
  "FIELD_FILTER_VALIDATION_EXCEPTION" => FieldFilterValidationException,
470
+ "FIELD_INTEGRITY_EXCEPTION" => FieldIntegrityException,
266
471
  "FILTERED_LOOKUP_LIMIT_EXCEEDED" => FilteredLookupLimitExceeded,
472
+ "FORBIDDEN" => Forbidden,
267
473
  "HTML_FILE_UPLOAD_NOT_ALLOWED" => HtmlFileUploadNotAllowed,
474
+ "ILLEGAL_QUERY_PARAMETER_VALUE" => IllegalQueryParameterValue,
268
475
  "IMAGE_TOO_LARGE" => ImageTooLarge,
269
476
  "INACTIVE_OWNER_OR_USER" => InactiveOwnerOrUser,
270
477
  "INSERT_UPDATE_DELETE_NOT_ALLOWED_DURING_MAINTENANCE" =>
@@ -297,9 +504,12 @@ module Restforce
297
504
  "INVALID_MASTER_OR_TRANSLATED_SOLUTION" => InvalidMasterOrTranslatedSolution,
298
505
  "INVALID_MESSAGE_ID_REFERENCE" => InvalidMessageIdReference,
299
506
  "INVALID_OPERATION" => InvalidOperation,
507
+ "INVALID_OPERATION_WITH_EXPIRED_PASSWORD" => InvalidOperationWithExpiredPassword,
300
508
  "INVALID_OPERATOR" => InvalidOperator,
301
509
  "INVALID_OR_NULL_FOR_RESTRICTED_PICKLIST" =>
302
510
  InvalidOrNullForRestrictedPicklist,
511
+ "INVALID_QUERY_FILTER_OPERATOR" => InvalidQueryFilterOperator,
512
+ "INVALID_QUERY_LOCATOR" => InvalidQueryLocator,
303
513
  "INVALID_PARTNER_NETWORK_STATUS" => InvalidPartnerNetworkStatus,
304
514
  "INVALID_PERSON_ACCOUNT_OPERATION" => InvalidPersonAccountOperation,
305
515
  "INVALID_READ_ONLY_USER_DML" => InvalidReadOnlyUserDml,
@@ -311,6 +521,7 @@ module Restforce
311
521
  "INVALID_TYPE_ON_FIELD_IN_RECORD" => InvalidTypeOnFieldInRecord,
312
522
  "IP_RANGE_LIMIT_EXCEEDED" => IpRangeLimitExceeded,
313
523
  "JIGSAW_IMPORT_LIMIT_EXCEEDED" => JigsawImportLimitExceeded,
524
+ "JSON_PARSER_ERROR" => JsonParserError,
314
525
  "LICENSE_LIMIT_EXCEEDED" => LicenseLimitExceeded,
315
526
  "LIGHT_PORTAL_USER_EXCEPTION" => LightPortalUserException,
316
527
  "LIMIT_EXCEEDED" => LimitExceeded,
@@ -318,6 +529,7 @@ module Restforce
318
529
  "LOGIN_CHALLENGE_PENDING" => LoginChallengePending,
319
530
  "LOGIN_MUST_USE_SECURITY_TOKEN" => LoginMustUseSecurityToken,
320
531
  "MALFORMED_ID" => MalformedId,
532
+ "MALFORMED_QUERY" => MalformedQuery,
321
533
  "MANAGER_NOT_DEFINED" => ManagerNotDefined,
322
534
  "MASSMAIL_RETRY_LIMIT_EXCEEDED" => MassmailRetryLimitExceeded,
323
535
  "MASS_MAIL_LIMIT_EXCEEDED" => MassMailLimitExceeded,
@@ -353,9 +565,11 @@ module Restforce
353
565
  "PORTAL_USER_ALREADY_EXISTS_FOR_CONTACT" => PortalUserAlreadyExistsForContact,
354
566
  "PRIVATE_CONTACT_ON_ASSET" => PrivateContactOnAsset,
355
567
  "RECORD_IN_USE_BY_WORKFLOW" => RecordInUseByWorkflow,
568
+ "REQUEST_LIMIT_EXCEEDED" => RequestLimitExceeded,
356
569
  "REQUEST_RUNNING_TOO_LONG" => RequestRunningTooLong,
357
570
  "REQUIRED_FIELD_MISSING" => RequiredFieldMissing,
358
571
  "SELF_REFERENCE_FROM_TRIGGER" => SelfReferenceFromTrigger,
572
+ "SERVER_UNAVAILABLE" => ServerUnavailable,
359
573
  "SHARE_NEEDED_FOR_CHILD_OWNER" => ShareNeededForChildOwner,
360
574
  "SINGLE_EMAIL_LIMIT_EXCEEDED" => SingleEmailLimitExceeded,
361
575
  "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
 
@@ -36,7 +36,8 @@ module Restforce
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.0'
4
+ VERSION = '5.0.5'
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.9.1'
39
+ gem.add_development_dependency 'simplecov', '~> 0.21.2'
40
+ gem.add_development_dependency 'webmock', '~> 3.11.1'
40
41
  end
@@ -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.0
4
+ version: 5.0.5
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-07-10 00:00:00.000000000 Z
12
+ date: 2021-02-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.9.1
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.9.1
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.11.1
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.11.1
172
172
  description: A lightweight Ruby client for the Salesforce REST API
173
173
  email:
174
174
  - me@timrogers.co.uk
@@ -185,12 +185,14 @@ files:
185
185
  - CHANGELOG.md
186
186
  - CODE_OF_CONDUCT.md
187
187
  - CONTRIBUTING.md
188
+ - Dockerfile
188
189
  - Gemfile
189
190
  - Guardfile
190
191
  - LICENSE
191
192
  - README.md
192
193
  - Rakefile
193
194
  - UPGRADING.md
195
+ - docker-compose.yml
194
196
  - lib/restforce.rb
195
197
  - lib/restforce/abstract_client.rb
196
198
  - lib/restforce/attachment.rb
@@ -317,7 +319,7 @@ licenses:
317
319
  metadata:
318
320
  source_code_uri: https://github.com/restforce/restforce
319
321
  changelog_uri: https://github.com/restforce/restforce/blob/master/CHANGELOG.md
320
- post_install_message:
322
+ post_install_message:
321
323
  rdoc_options: []
322
324
  require_paths:
323
325
  - lib
@@ -332,8 +334,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
332
334
  - !ruby/object:Gem::Version
333
335
  version: '0'
334
336
  requirements: []
335
- rubygems_version: 3.1.2
336
- signing_key:
337
+ rubygems_version: 3.2.5
338
+ signing_key:
337
339
  specification_version: 4
338
340
  summary: A lightweight Ruby client for the Salesforce REST API
339
341
  test_files: