restforce 6.1.0 → 6.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 00cd20b461c775bcec8084de1916659fbf3d6f9328624daa79dbfad47f48efbe
4
- data.tar.gz: 6de0e7734bd1a53d088107effd4ed737f8eb20d1e3c51292f098f05195f9b0b9
3
+ metadata.gz: 7f7a29ac5ff461f9db1f386570aceebfa30244ec519ccd26320e6255cdaddc57
4
+ data.tar.gz: 556b7407db043fe2a3d5e9fe9183be767693cacacd31fe8ac492aca9fd195194
5
5
  SHA512:
6
- metadata.gz: d26f78e108cd25d6358720652bcd09d125e1a91caef34c85ab2a4e033763a7a2aa4a7dada91ff393c43dc433c9c1cd68d58c6b918c88c103c2f45cd50030f1b1
7
- data.tar.gz: 930d88396329214bcf344c0fbb11210b716c3db66a645c6c4369598095d36f66a0cc6486c597fd4ebe8f225a9bd5fac0150b76a4b3f95922b9f7f14ed2ef6df3
6
+ metadata.gz: '0585185aed0e16fea289b78ccb16122306186901195daa5d2b323dedcbb4999e5760910e5d8ceb7966424b8e4d636d20c92f61bcc283f1fe75de3857ca35d68b'
7
+ data.tar.gz: b17650d7d7984b0b412c2c678a49d61d8d69fc961454aad313c4a8c1ed25ea49f04d68b1d658bb4464b4514f81118f1e69392465a541f0431571d60096e9d9c0
@@ -6,7 +6,7 @@ jobs:
6
6
  strategy:
7
7
  fail-fast: false
8
8
  matrix:
9
- ruby_version: ['2.7', '3.0', '3.1', '3.2.0-preview1']
9
+ ruby_version: ['2.7', '3.0', '3.1', '3.2']
10
10
  steps:
11
11
  - name: Checkout code
12
12
  uses: actions/checkout@v3
@@ -10,7 +10,7 @@ jobs:
10
10
  # For v2.0.x, we test v2.0.0 and v2.0.1 because v2.0.0 has a special behaviour where
11
11
  # the Net::HTTP adapter is not included. See
12
12
  # https://github.com/lostisland/faraday/blob/main/UPGRADING.md#faraday-20.
13
- faraday_version: ['1.1.0', '1.2.0', '1.3.1', '1.4.1', '1.5.1', '1.6.0', '1.7.2', '1.8.0', '1.9.3', '1.10.0', '2.0.0', '2.0.1', '2.1.0', '2.2.0', '2.3.0', '2.4.0', '2.5.0', '2.6.0']
13
+ faraday_version: ['1.1.0', '1.2.0', '1.3.1', '1.4.1', '1.5.1', '1.6.0', '1.7.2', '1.8.0', '1.9.3', '1.10.0', '2.0.0', '2.0.1', '2.1.0', '2.2.0', '2.3.0', '2.4.0', '2.5.0', '2.6.0', '2.7.0']
14
14
  env:
15
15
  FARADAY_VERSION: ~> ${{ matrix.faraday_version }}
16
16
  steps:
data/CHANGELOG.md CHANGED
@@ -1,3 +1,8 @@
1
+ # 6.2.0 (Jan 18 2023)
2
+
3
+ * Add support for `faraday` v2.7.x (@timrogers)
4
+ * Expose the Faraday `Response` on `CompositeAPIError`s (@shravan097)
5
+
1
6
  # 6.1.0 (Nov 18 2022)
2
7
 
3
8
  * Add support for `faraday` v2.5.x and v2.6.x (@marcrohloff, @timrogers)
data/Gemfile CHANGED
@@ -3,7 +3,7 @@
3
3
  source 'https://rubygems.org'
4
4
  gemspec
5
5
 
6
- faraday_version = ENV.fetch('FARADAY_VERSION', '~> 1.8.0')
6
+ faraday_version = ENV.fetch('FARADAY_VERSION', '~> 2.7.3')
7
7
 
8
8
  # Enable us to explicitly pick a Faraday version when running tests
9
9
  gem 'faraday', faraday_version
@@ -17,6 +17,6 @@ gem 'rspec', '~> 3.12.0'
17
17
  gem 'rspec-collection_matchers', '~> 1.2.0'
18
18
  gem 'rspec-its', '~> 1.3.0'
19
19
  gem 'rspec_junit_formatter', '~> 0.6.0'
20
- gem 'rubocop', '~> 1.39.0'
21
- gem 'simplecov', '~> 0.21.2'
20
+ gem 'rubocop', '~> 1.43.0'
21
+ gem 'simplecov', '~> 0.22.0'
22
22
  gem 'webmock', '~> 3.18.1'
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', '~> 6.1.0'
30
+ gem 'restforce', '~> 6.2.0'
31
31
 
32
32
  And then execute:
33
33
 
@@ -29,7 +29,7 @@ module Restforce
29
29
  if all_or_none && has_errors
30
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.new(last_error['body'][0]['errorCode'], response)
33
33
  end
34
34
 
35
35
  results
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Restforce
4
- VERSION = '6.1.0'
4
+ VERSION = '6.2.0'
5
5
  end
data/lib/restforce.rb CHANGED
@@ -49,7 +49,6 @@ module Restforce
49
49
  UnauthorizedError = Class.new(Faraday::ClientError)
50
50
  APIVersionError = Class.new(Error)
51
51
  BatchAPIError = Class.new(Error)
52
- CompositeAPIError = Class.new(Error)
53
52
 
54
53
  # Inherit from Faraday::ResourceNotFound for backwards-compatibility
55
54
  # Consumers of this library that rescue and handle Faraday::ResourceNotFound
@@ -60,6 +59,7 @@ module Restforce
60
59
  # Consumers of this library that rescue and handle Faraday::ClientError
61
60
  # can continue to do so.
62
61
  ResponseError = Class.new(Faraday::ClientError)
62
+ CompositeAPIError = Class.new(ResponseError)
63
63
  MatchesMultipleError= Class.new(ResponseError)
64
64
  EntityTooLargeError = Class.new(ResponseError)
65
65
 
data/restforce.gemspec CHANGED
@@ -24,7 +24,7 @@ Gem::Specification.new do |gem|
24
24
 
25
25
  gem.required_ruby_version = '>= 2.7'
26
26
 
27
- gem.add_dependency 'faraday', '< 2.7.0', '>= 1.1.0'
27
+ gem.add_dependency 'faraday', '< 2.8.0', '>= 1.1.0'
28
28
  gem.add_dependency 'faraday-follow_redirects', '<= 0.3.0', '< 1.0.0'
29
29
  gem.add_dependency 'faraday-multipart', '>= 1.0.0', '< 2.0.0'
30
30
  gem.add_dependency 'faraday-net_http', '< 4.0.0'
@@ -144,7 +144,10 @@ shared_examples_for Restforce::AbstractClient do
144
144
  describe '.update' do
145
145
  context 'with missing Id' do
146
146
  subject { lambda { client.update('Account', Name: 'Foobar') } }
147
- it { should raise_error ArgumentError, 'ID field missing from provided attributes' }
147
+ it {
148
+ expect { subject.call }.
149
+ to raise_error ArgumentError, 'ID field missing from provided attributes'
150
+ }
148
151
  end
149
152
 
150
153
  context 'with invalid Id' do
@@ -248,7 +251,7 @@ shared_examples_for Restforce::AbstractClient do
248
251
  status: 404
249
252
 
250
253
  subject { lambda { destroy! } }
251
- it { should raise_error Faraday::ResourceNotFound }
254
+ it { expect { subject.call }.to raise_error Faraday::ResourceNotFound }
252
255
  end
253
256
 
254
257
  context 'with success' do
@@ -431,7 +434,7 @@ shared_examples_for Restforce::AbstractClient do
431
434
  end
432
435
 
433
436
  subject { lambda { client.query('SELECT some, fields FROM object') } }
434
- it { should raise_error Restforce::UnauthorizedError }
437
+ it { expect { subject.call }.to raise_error Restforce::UnauthorizedError }
435
438
  end
436
439
  end
437
440
 
@@ -28,7 +28,7 @@ describe Restforce::Concerns::Base do
28
28
 
29
29
  describe '.options' do
30
30
  subject { lambda { client.options } }
31
- it { should_not raise_error }
31
+ it { expect { subject.call }.not_to raise_error }
32
32
  end
33
33
 
34
34
  describe '.instance_url' do
@@ -123,6 +123,32 @@ describe Restforce::Concerns::CompositeAPI do
123
123
  end
124
124
  end.to raise_error(ArgumentError)
125
125
  end
126
+
127
+ it 'has response in CompositeAPIError' do
128
+ response = double('Faraday::Response',
129
+ body: { 'compositeResponse' =>
130
+ [{ 'httpStatusCode' => 400,
131
+ 'body' => [{ 'errorCode' =>
132
+ 'DUPLICATE_VALUE' }] }] })
133
+ client.
134
+ should_receive(:api_post).
135
+ with(endpoint, { compositeRequest: [
136
+ {
137
+ method: 'POST',
138
+ url: '/services/data/v38.0/sobjects/Object',
139
+ body: { name: 'test' },
140
+ referenceId: 'create_ref'
141
+ }
142
+ ], allOrNone: true, collateSubrequests: false }.to_json).
143
+ and_return(response)
144
+ arg = method == :composite ? { all_or_none: true } : {}
145
+ expect do
146
+ client.send(method, **arg) do |subrequests|
147
+ subrequests.create('Object', 'create_ref', name: 'test')
148
+ end
149
+ end.to raise_error(an_instance_of(Restforce::CompositeAPIError).
150
+ and(having_attributes(response: response)))
151
+ end
126
152
  end
127
153
 
128
154
  describe '#composite' do
@@ -15,7 +15,7 @@ describe Restforce::Middleware::Authentication do
15
15
 
16
16
  describe '.authenticate!' do
17
17
  subject { lambda { middleware.authenticate! } }
18
- it { should raise_error NotImplementedError }
18
+ it { expect { subject.call }.to raise_error NotImplementedError }
19
19
  end
20
20
 
21
21
  describe '.call' do
@@ -26,7 +26,7 @@ describe Restforce::Middleware::Authentication do
26
26
  app.should_receive(:call).once
27
27
  end
28
28
 
29
- it { should_not raise_error }
29
+ it { expect { subject.call }.not_to raise_error }
30
30
  end
31
31
 
32
32
  context 'when an exception is thrown' do
@@ -37,7 +37,7 @@ describe Restforce::Middleware::Authentication do
37
37
  and_raise(Restforce::UnauthorizedError.new('something bad'))
38
38
  end
39
39
 
40
- it { should raise_error Restforce::UnauthorizedError }
40
+ it { expect { subject.call }.to raise_error Restforce::UnauthorizedError }
41
41
  end
42
42
  end
43
43
 
@@ -8,6 +8,10 @@ describe Restforce::Middleware::Authorization do
8
8
  describe '.call' do
9
9
  subject { lambda { middleware.call(env) } }
10
10
 
11
- it { should change { env[:request_headers]['Authorization'] }.to eq 'OAuth token' }
11
+ it {
12
+ expect { subject.call }.to change {
13
+ env[:request_headers]['Authorization']
14
+ }.to eq 'OAuth token'
15
+ }
12
16
  end
13
17
  end
@@ -9,13 +9,17 @@ describe Restforce::Middleware::CustomHeaders do
9
9
  context 'when :request_headers are a Hash' do
10
10
  let(:options) { { request_headers: { 'x-test-header' => 'Test Value' } } }
11
11
 
12
- it { should change { env[:request_headers]['x-test-header'] }.to eq 'Test Value' }
12
+ it {
13
+ expect { subject.call }.to change {
14
+ env[:request_headers]['x-test-header']
15
+ }.to eq 'Test Value'
16
+ }
13
17
  end
14
18
 
15
19
  context 'when :request_headers are not a Hash' do
16
20
  let(:options) { { request_headers: 'bad header' } }
17
21
 
18
- it { should_not(change { env[:request_headers] }) }
22
+ it { expect { subject.call }.not_to(change { env[:request_headers] }) }
19
23
  end
20
24
  end
21
25
  end
@@ -27,11 +27,16 @@ describe Restforce::Middleware::Gzip do
27
27
  end
28
28
 
29
29
  it 'decompresses the body' do
30
- should change { env[:body] }.to(fixture('sobject/query_success_response'))
30
+ expect { subject.call }.to change {
31
+ env[:body]
32
+ }.to(fixture('sobject/query_success_response'))
31
33
  end
32
34
 
33
35
  context 'when :compress is false' do
34
- it { should_not(change { env[:request_headers]['Accept-Encoding'] }) }
36
+ it {
37
+ expect { subject.call }.
38
+ not_to(change { env[:request_headers]['Accept-Encoding'] })
39
+ }
35
40
  end
36
41
 
37
42
  context 'when :compress is true' do
@@ -39,7 +44,11 @@ describe Restforce::Middleware::Gzip do
39
44
  options[:compress] = true
40
45
  end
41
46
 
42
- it { should(change { env[:request_headers]['Accept-Encoding'] }.to('gzip')) }
47
+ it {
48
+ expect { subject.call }.to change {
49
+ env[:request_headers]['Accept-Encoding']
50
+ }.to('gzip')
51
+ }
43
52
  end
44
53
  end
45
54
 
@@ -11,7 +11,7 @@ describe Restforce::Middleware::InstanceURL do
11
11
  client.stub_chain :connection, url_prefix: URI.parse('http:/')
12
12
  end
13
13
 
14
- it { should raise_error Restforce::UnauthorizedError }
14
+ it { expect { subject.call }.to raise_error Restforce::UnauthorizedError }
15
15
  end
16
16
 
17
17
  context 'when the instance url is set' do
@@ -20,7 +20,7 @@ describe Restforce::Middleware::InstanceURL do
20
20
  app.should_receive(:call).once
21
21
  end
22
22
 
23
- it { should_not raise_error }
23
+ it { expect { subject.call }.not_to raise_error }
24
24
  end
25
25
  end
26
26
  end
@@ -16,6 +16,6 @@ describe Restforce::Middleware::Logger do
16
16
  logger.should_receive(:debug).with('response')
17
17
  end
18
18
 
19
- it { should_not raise_error }
19
+ it { expect { subject.call }.not_to raise_error }
20
20
  end
21
21
  end
@@ -48,7 +48,11 @@ describe Restforce::SObject do
48
48
  subject(:send_method) { lambda { sobject.send(method) } }
49
49
 
50
50
  context 'when an Id was not queried' do
51
- it { should raise_error ArgumentError, /need to query the Id for the record/ }
51
+ it {
52
+ expect do
53
+ subject.call
54
+ end.to raise_error ArgumentError, /need to query the Id for the record/
55
+ }
52
56
  end
53
57
 
54
58
  context 'when an Id is present' do
@@ -57,7 +61,7 @@ describe Restforce::SObject do
57
61
  client.should_receive(receiver)
58
62
  end
59
63
 
60
- it { should_not raise_error }
64
+ it { expect { subject.call }.not_to raise_error }
61
65
  end
62
66
  end
63
67
  end
@@ -69,7 +73,7 @@ describe Restforce::SObject do
69
73
  client.should_receive(:describe).with('Whizbang')
70
74
  end
71
75
 
72
- it { should_not raise_error }
76
+ it { expect { subject.call }.not_to raise_error }
73
77
  end
74
78
 
75
79
  describe '.describe_layouts' do
@@ -80,13 +84,13 @@ describe Restforce::SObject do
80
84
  client.should_receive(:describe_layouts).with('Whizbang', layout_id)
81
85
  end
82
86
 
83
- it { should_not raise_error }
87
+ it { expect { subject.call }.not_to raise_error }
84
88
 
85
89
  context 'when a layout Id is specified' do
86
90
  let(:layout_id) { '012E0000000RHEp' }
87
91
  subject { lambda { sobject.describe_layouts(layout_id) } }
88
92
 
89
- it { should_not raise_error }
93
+ it { expect { subject.call }.not_to raise_error }
90
94
  end
91
95
  end
92
96
  end
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: 6.1.0
4
+ version: 6.2.0
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: 2022-11-18 00:00:00.000000000 Z
12
+ date: 2023-01-18 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: faraday
@@ -17,7 +17,7 @@ dependencies:
17
17
  requirements:
18
18
  - - "<"
19
19
  - !ruby/object:Gem::Version
20
- version: 2.7.0
20
+ version: 2.8.0
21
21
  - - ">="
22
22
  - !ruby/object:Gem::Version
23
23
  version: 1.1.0
@@ -27,7 +27,7 @@ dependencies:
27
27
  requirements:
28
28
  - - "<"
29
29
  - !ruby/object:Gem::Version
30
- version: 2.7.0
30
+ version: 2.8.0
31
31
  - - ">="
32
32
  - !ruby/object:Gem::Version
33
33
  version: 1.1.0
@@ -278,7 +278,7 @@ metadata:
278
278
  source_code_uri: https://github.com/restforce/restforce
279
279
  changelog_uri: https://github.com/restforce/restforce/blob/master/CHANGELOG.md
280
280
  rubygems_mfa_required: 'true'
281
- post_install_message:
281
+ post_install_message:
282
282
  rdoc_options: []
283
283
  require_paths:
284
284
  - lib
@@ -293,8 +293,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
293
293
  - !ruby/object:Gem::Version
294
294
  version: '0'
295
295
  requirements: []
296
- rubygems_version: 3.1.6
297
- signing_key:
296
+ rubygems_version: 3.4.1
297
+ signing_key:
298
298
  specification_version: 4
299
299
  summary: A lightweight Ruby client for the Salesforce REST API
300
300
  test_files: []