restforce 6.1.0 → 6.2.0

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: 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: []