restforce 5.2.1 → 5.2.4

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: 891d81fbf377945b09db6058467d21da1720d985e70ad060e4bcbe35d5efc9f6
4
- data.tar.gz: 2ce207d94d49504e28680d7b854633cc3c2c0b329ed23b04769528799b71785e
3
+ metadata.gz: dfdaff5160d8845afd9c6ed3c384c7edf7d9ecb2593d562bae4d9a4812904137
4
+ data.tar.gz: 8510146b906c8f7f0869a467db96d9bd3416446338a9d237d8c2e633c911cc35
5
5
  SHA512:
6
- metadata.gz: 04e9f867ebadf6a8d61ffad3ebdb14b9924011df9b408efb9f17bb8a65c7ad5a4de1caa18b78dd365b889bf6b32801d7c30d7de02f105be38a3b4111cf83b792
7
- data.tar.gz: c72397f42ef4a4f95a053557bf8971e3eeff78994b21ccdc232638ef1847c08e7e1c8e9e33f6055725c9fbc57755de85d474cf6063094ec6e33e211a93ba14d4
6
+ metadata.gz: 592471696b0c585cb73bc26cca75267cfc7a2f3543f86449edd4e3ffc5401975cd4ded7cc7a20b63b5854434c06e6e63c48e0f49bf51839b8b8bee15e02113e8
7
+ data.tar.gz: 71c9272a0799c6e899bbdd56a0380b6ae5b7112d11e56fb3860a10ca0ba0b1dfb9cf58bb25b0bf59ad8f8b38f50360f5f8ccbed4090afa194a67a19a7ae28318
data/.circleci/config.yml CHANGED
@@ -34,23 +34,28 @@ references:
34
34
  destination: test-results
35
35
 
36
36
  jobs:
37
+ build-ruby31:
38
+ docker:
39
+ - image: cimg/ruby:3.1
40
+ steps: *steps
37
41
  build-ruby30:
38
42
  docker:
39
- - image: circleci/ruby:3.0
43
+ - image: cimg/ruby:3.0
40
44
  steps: *steps
41
45
  build-ruby27:
42
46
  docker:
43
- - image: circleci/ruby:2.7
47
+ - image: cimg/ruby:2.7
44
48
  steps: *steps
45
49
  build-ruby26:
46
50
  docker:
47
- - image: circleci/ruby:2.6
51
+ - image: cimg/ruby:2.6
48
52
  steps: *steps
49
53
 
50
54
  workflows:
51
55
  version: 2
52
56
  tests:
53
57
  jobs:
58
+ - build-ruby31
54
59
  - build-ruby30
55
60
  - build-ruby27
56
61
  - build-ruby26
data/CHANGELOG.md CHANGED
@@ -1,3 +1,17 @@
1
+ # 5.2.4 (Mar 16, 2022)
2
+
3
+ * Fix `Restforce::Collection#size` for Salesforce APIs that use the `size` property to return the total number of results, instead of `totalSize` (@kwong-yw)
4
+
5
+ # 5.2.3 (Jan 17, 2022)
6
+
7
+ * Add official support for Ruby 3.1 (@timrogers)
8
+ * Fix handling of responses from the Composite API (@robob27)
9
+ * Fix dependencies to correctly declare that the gem doesn't work with [faraday](https://github.com/lostisland/faraday) `v1.9.0` or later (@timrogers)
10
+
11
+ # 5.2.2 (Dec 16, 2021)
12
+
13
+ * Handle the `MALFORMED_SEARCH` error returned by Salesforce (@timrogers)
14
+
1
15
  # 5.2.1 (Dec 8, 2021)
2
16
 
3
17
  * Handle the `OPERATION_TOO_LARGE` error returned by Salesforce (@timrogers)
data/Gemfile CHANGED
@@ -8,10 +8,10 @@ gem 'guard-rspec'
8
8
  gem 'guard-rubocop'
9
9
  gem 'jruby-openssl', platforms: :jruby
10
10
  gem 'rake'
11
- gem 'rspec', '~> 3.10.0'
11
+ gem 'rspec', '~> 3.11.0'
12
12
  gem 'rspec-collection_matchers', '~> 1.2.0'
13
13
  gem 'rspec-its', '~> 1.3.0'
14
- gem 'rspec_junit_formatter', '~> 0.4.1'
15
- gem 'rubocop', '~> 1.23.0'
14
+ gem 'rspec_junit_formatter', '~> 0.5.1'
15
+ gem 'rubocop', '~> 1.26.0'
16
16
  gem 'simplecov', '~> 0.21.2'
17
17
  gem 'webmock', '~> 3.14.0'
data/README.md CHANGED
@@ -27,7 +27,7 @@ Features include:
27
27
 
28
28
  Add this line to your application's Gemfile:
29
29
 
30
- gem 'restforce', '~> 5.2.1'
30
+ gem 'restforce', '~> 5.2.4'
31
31
 
32
32
  And then execute:
33
33
 
@@ -30,8 +30,12 @@ module Restforce
30
30
  # Return the number of items in the Collection without making any additional
31
31
  # requests and going through all of the pages of results, one by one. Instead,
32
32
  # we can rely on the total count of results which Salesforce returns.
33
+ #
34
+ # Most of the Salesforce API returns this in the `totalSize` attribute. For
35
+ # some reason, the [List View Results](https://developer.salesforce.com/docs/atlas.en-us.api_rest.meta/api_rest/resources_listviewresults.htm)
36
+ # endpoint (and maybe others?!) uses the `size` attribute.
33
37
  def size
34
- @raw_page['totalSize']
38
+ @raw_page['totalSize'] || @raw_page['size']
35
39
  end
36
40
  alias length size
37
41
 
@@ -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 = Restforce.configuration.options.map do |option|
64
+ @options = Restforce.configuration.options.to_h do |option|
65
65
  [option, Restforce.configuration.send(option)]
66
- end.to_h
66
+ end
67
67
 
68
68
  @options.merge! opts
69
69
  yield builder if block_given?
@@ -24,12 +24,12 @@ module Restforce
24
24
  }
25
25
  response = api_post('composite', properties.to_json)
26
26
 
27
- results = response.body['CompositeResponse']
28
- has_errors = results.any? { |result| result['HttpStatusCode'].digits.last == 4 }
27
+ results = response.body['compositeResponse']
28
+ has_errors = results.any? { |result| result['httpStatusCode'].digits.last == 4 }
29
29
  if all_or_none && has_errors
30
- last_error_index = results.rindex { |result| result['HttpStatusCode'] != 412 }
30
+ last_error_index = results.rindex { |result| result['httpStatusCode'] != 412 }
31
31
  last_error = results[last_error_index]
32
- raise CompositeAPIError, last_error['Body'][0]['errorCode']
32
+ raise CompositeAPIError, last_error['body'][0]['errorCode']
33
33
  end
34
34
 
35
35
  results
@@ -277,6 +277,8 @@ module Restforce
277
277
 
278
278
  class MalformedQuery < ResponseError; end
279
279
 
280
+ class MalformedSearch < ResponseError; end
281
+
280
282
  class ManagerNotDefined < ResponseError; end
281
283
 
282
284
  class MassmailRetryLimitExceeded < ResponseError; end
@@ -551,6 +553,7 @@ module Restforce
551
553
  "LOGIN_MUST_USE_SECURITY_TOKEN" => LoginMustUseSecurityToken,
552
554
  "MALFORMED_ID" => MalformedId,
553
555
  "MALFORMED_QUERY" => MalformedQuery,
556
+ "MALFORMED_SEARCH" => MalformedSearch,
554
557
  "MANAGER_NOT_DEFINED" => ManagerNotDefined,
555
558
  "MASSMAIL_RETRY_LIMIT_EXCEEDED" => MassmailRetryLimitExceeded,
556
559
  "MASS_MAIL_LIMIT_EXCEEDED" => MassMailLimitExceeded,
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Restforce
4
- VERSION = '5.2.1'
4
+ VERSION = '5.2.4'
5
5
  end
data/restforce.gemspec CHANGED
@@ -25,7 +25,7 @@ Gem::Specification.new do |gem|
25
25
 
26
26
  gem.required_ruby_version = '>= 2.6'
27
27
 
28
- gem.add_dependency 'faraday', '<= 2.0', '>= 0.9.0'
28
+ gem.add_dependency 'faraday', '< 1.9.0', '>= 0.9.0'
29
29
  gem.add_dependency 'faraday_middleware', ['>= 0.8.8', '<= 2.0']
30
30
  gem.add_dependency 'hashie', '>= 1.2.0', '< 6.0'
31
31
  gem.add_dependency 'jwt', ['>= 1.5.6']
@@ -0,0 +1,151 @@
1
+ {
2
+ "columns" : [ {
3
+ "ascendingLabel" : "Z-A",
4
+ "descendingLabel" : "A-Z",
5
+ "fieldNameOrPath" : "Name",
6
+ "hidden" : false,
7
+ "label" : "Account Name",
8
+ "selectListItem" : "Name",
9
+ "sortDirection" : "ascending",
10
+ "sortIndex" : 0,
11
+ "sortable" : true,
12
+ "type" : "string"
13
+ }, {
14
+ "ascendingLabel" : "Z-A",
15
+ "descendingLabel" : "A-Z",
16
+ "fieldNameOrPath" : "Site",
17
+ "hidden" : false,
18
+ "label" : "Account Site",
19
+ "selectListItem" : "Site",
20
+ "sortDirection" : null,
21
+ "sortIndex" : null,
22
+ "sortable" : true,
23
+ "type" : "string"
24
+ }, {
25
+ "ascendingLabel" : "Z-A",
26
+ "descendingLabel" : "A-Z",
27
+ "fieldNameOrPath" : "BillingState",
28
+ "hidden" : false,
29
+ "label" : "Billing State/Province",
30
+ "selectListItem" : "BillingState",
31
+ "sortDirection" : null,
32
+ "sortIndex" : null,
33
+ "sortable" : true,
34
+ "type" : "string"
35
+ }, {
36
+ "ascendingLabel" : "9-0",
37
+ "descendingLabel" : "0-9",
38
+ "fieldNameOrPath" : "Phone",
39
+ "hidden" : false,
40
+ "label" : "Phone",
41
+ "selectListItem" : "Phone",
42
+ "sortDirection" : null,
43
+ "sortIndex" : null,
44
+ "sortable" : true,
45
+ "type" : "phone"
46
+ }, {
47
+ "ascendingLabel" : "Low to High",
48
+ "descendingLabel" : "High to Low",
49
+ "fieldNameOrPath" : "Type",
50
+ "hidden" : false,
51
+ "label" : "Type",
52
+ "selectListItem" : "toLabel(Type)",
53
+ "sortDirection" : null,
54
+ "sortIndex" : null,
55
+ "sortable" : true,
56
+ "type" : "picklist"
57
+ }, {
58
+ "ascendingLabel" : "Z-A",
59
+ "descendingLabel" : "A-Z",
60
+ "fieldNameOrPath" : "Owner.Alias",
61
+ "hidden" : false,
62
+ "label" : "Account Owner Alias",
63
+ "selectListItem" : "Owner.Alias",
64
+ "sortDirection" : null,
65
+ "sortIndex" : null,
66
+ "sortable" : true,
67
+ "type" : "string"
68
+ }, {
69
+ "ascendingLabel" : null,
70
+ "descendingLabel" : null,
71
+ "fieldNameOrPath" : "Id",
72
+ "hidden" : true,
73
+ "label" : "Account ID",
74
+ "selectListItem" : "Id",
75
+ "sortDirection" : null,
76
+ "sortIndex" : null,
77
+ "sortable" : false,
78
+ "type" : "id"
79
+ }, {
80
+ "ascendingLabel" : null,
81
+ "descendingLabel" : null,
82
+ "fieldNameOrPath" : "CreatedDate",
83
+ "hidden" : true,
84
+ "label" : "Created Date",
85
+ "selectListItem" : "CreatedDate",
86
+ "sortDirection" : null,
87
+ "sortIndex" : null,
88
+ "sortable" : false,
89
+ "type" : "datetime"
90
+ }, {
91
+ "ascendingLabel" : null,
92
+ "descendingLabel" : null,
93
+ "fieldNameOrPath" : "LastModifiedDate",
94
+ "hidden" : true,
95
+ "label" : "Last Modified Date",
96
+ "selectListItem" : "LastModifiedDate",
97
+ "sortDirection" : null,
98
+ "sortIndex" : null,
99
+ "sortable" : false,
100
+ "type" : "datetime"
101
+ }, {
102
+ "ascendingLabel" : null,
103
+ "descendingLabel" : null,
104
+ "fieldNameOrPath" : "SystemModstamp",
105
+ "hidden" : true,
106
+ "label" : "System Modstamp",
107
+ "selectListItem" : "SystemModstamp",
108
+ "sortDirection" : null,
109
+ "sortIndex" : null,
110
+ "sortable" : false,
111
+ "type" : "datetime"
112
+ } ],
113
+ "developerName" : "MyAccounts",
114
+ "done" : true,
115
+ "id" : "00BD0000005WcCN",
116
+ "label" : "My Accounts",
117
+ "records" : [ {
118
+ "columns" : [ {
119
+ "fieldNameOrPath" : "Name",
120
+ "value" : "Burlington Textiles Corp of America"
121
+ }, {
122
+ "fieldNameOrPath" : "Site",
123
+ "value" : null
124
+ }, {
125
+ "fieldNameOrPath" : "BillingState",
126
+ "value" : "NC"
127
+ }, {
128
+ "fieldNameOrPath" : "Phone",
129
+ "value" : "(336) 222-7000"
130
+ }, {
131
+ "fieldNameOrPath" : "Type",
132
+ "value" : "Customer - Direct"
133
+ }, {
134
+ "fieldNameOrPath" : "Owner.Alias",
135
+ "value" : "TUser"
136
+ }, {
137
+ "fieldNameOrPath" : "Id",
138
+ "value" : "001D000000JliSTIAZ"
139
+ }, {
140
+ "fieldNameOrPath" : "CreatedDate",
141
+ "value" : "Fri Aug 01 21:15:46 GMT 2014"
142
+ }, {
143
+ "fieldNameOrPath" : "LastModifiedDate",
144
+ "value" : "Fri Aug 01 21:15:46 GMT 2014"
145
+ }, {
146
+ "fieldNameOrPath" : "SystemModstamp",
147
+ "value" : "Fri Aug 01 21:15:46 GMT 2014"
148
+ } ]
149
+ } ],
150
+ "size" : 1
151
+ }
@@ -63,6 +63,24 @@ describe Restforce::Collection do
63
63
  end
64
64
  end
65
65
 
66
+ describe '#size' do
67
+ subject(:size) do
68
+ described_class.new(JSON.parse(fixture(sobject_fixture)), client).size
69
+ end
70
+
71
+ context 'when the query response contains a totalSize field' do
72
+ let(:sobject_fixture) { 'sobject/query_success_response' }
73
+
74
+ it { should eq 1 }
75
+ end
76
+
77
+ context 'when the query response contains a size field' do
78
+ let(:sobject_fixture) { 'sobject/list_view_results_success_response' }
79
+
80
+ it { should eq 1 }
81
+ end
82
+ end
83
+
66
84
  describe '#empty?' do
67
85
  subject(:empty?) do
68
86
  described_class.new(JSON.parse(fixture(sobject_fixture)), client).empty?
@@ -128,7 +128,7 @@ describe Restforce::Concerns::CompositeAPI do
128
128
  describe '#composite' do
129
129
  let(:method) { :composite }
130
130
  let(:all_or_none) { false }
131
- let(:response) { double('Faraday::Response', body: { 'CompositeResponse' => [] }) }
131
+ let(:response) { double('Faraday::Response', body: { 'compositeResponse' => [] }) }
132
132
  it_behaves_like 'composite requests'
133
133
  end
134
134
 
@@ -136,7 +136,7 @@ describe Restforce::Concerns::CompositeAPI do
136
136
  let(:method) { :composite! }
137
137
  let(:all_or_none) { true }
138
138
  let(:response) do
139
- double('Faraday::Response', body: { 'CompositeResponse' => [] })
139
+ double('Faraday::Response', body: { 'compositeResponse' => [] })
140
140
  end
141
141
  it_behaves_like 'composite requests'
142
142
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: restforce
3
3
  version: !ruby/object:Gem::Version
4
- version: 5.2.1
4
+ version: 5.2.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tim Rogers
@@ -9,15 +9,15 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2021-12-08 00:00:00.000000000 Z
12
+ date: 2022-03-16 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: faraday
16
16
  requirement: !ruby/object:Gem::Requirement
17
17
  requirements:
18
- - - "<="
18
+ - - "<"
19
19
  - !ruby/object:Gem::Version
20
- version: '2.0'
20
+ version: 1.9.0
21
21
  - - ">="
22
22
  - !ruby/object:Gem::Version
23
23
  version: 0.9.0
@@ -25,9 +25,9 @@ dependencies:
25
25
  prerelease: false
26
26
  version_requirements: !ruby/object:Gem::Requirement
27
27
  requirements:
28
- - - "<="
28
+ - - "<"
29
29
  - !ruby/object:Gem::Version
30
- version: '2.0'
30
+ version: 1.9.0
31
31
  - - ">="
32
32
  - !ruby/object:Gem::Version
33
33
  version: 0.9.0
@@ -170,6 +170,7 @@ files:
170
170
  - spec/fixtures/sobject/get_deleted_success_response.json
171
171
  - spec/fixtures/sobject/get_updated_success_response.json
172
172
  - spec/fixtures/sobject/list_sobjects_success_response.json
173
+ - spec/fixtures/sobject/list_view_results_success_response.json
173
174
  - spec/fixtures/sobject/org_query_response.json
174
175
  - spec/fixtures/sobject/query_aggregate_success_response.json
175
176
  - spec/fixtures/sobject/query_empty_response.json
@@ -254,7 +255,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
254
255
  - !ruby/object:Gem::Version
255
256
  version: '0'
256
257
  requirements: []
257
- rubygems_version: 3.2.22
258
+ rubygems_version: 3.3.3
258
259
  signing_key:
259
260
  specification_version: 4
260
261
  summary: A lightweight Ruby client for the Salesforce REST API
@@ -273,6 +274,7 @@ test_files:
273
274
  - spec/fixtures/sobject/get_deleted_success_response.json
274
275
  - spec/fixtures/sobject/get_updated_success_response.json
275
276
  - spec/fixtures/sobject/list_sobjects_success_response.json
277
+ - spec/fixtures/sobject/list_view_results_success_response.json
276
278
  - spec/fixtures/sobject/org_query_response.json
277
279
  - spec/fixtures/sobject/query_aggregate_success_response.json
278
280
  - spec/fixtures/sobject/query_empty_response.json