restforce 4.2.2 → 5.0.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.circleci/config.yml +9 -9
- data/.github/ISSUE_TEMPLATE/unhandled-salesforce-error.md +17 -0
- data/.rubocop.yml +4 -3
- data/CHANGELOG.md +37 -0
- data/CONTRIBUTING.md +21 -1
- data/Dockerfile +31 -0
- data/Gemfile +0 -1
- data/README.md +43 -19
- data/UPGRADING.md +38 -0
- data/docker-compose.yml +7 -0
- data/lib/restforce.rb +4 -7
- data/lib/restforce/collection.rb +7 -2
- data/lib/restforce/concerns/api.rb +1 -1
- data/lib/restforce/concerns/caching.rb +7 -0
- data/lib/restforce/concerns/picklists.rb +1 -1
- data/lib/restforce/config.rb +4 -1
- data/lib/restforce/error_code.rb +418 -0
- data/lib/restforce/file_part.rb +24 -0
- data/lib/restforce/mash.rb +7 -2
- data/lib/restforce/middleware.rb +2 -0
- data/lib/restforce/middleware/caching.rb +1 -1
- data/lib/restforce/middleware/logger.rb +3 -2
- data/lib/restforce/middleware/raise_error.rb +3 -4
- data/lib/restforce/version.rb +1 -1
- data/restforce.gemspec +11 -12
- data/spec/integration/abstract_client_spec.rb +16 -4
- data/spec/spec_helper.rb +14 -1
- data/spec/support/fixture_helpers.rb +1 -3
- data/spec/unit/collection_spec.rb +18 -0
- data/spec/unit/concerns/caching_spec.rb +26 -0
- data/spec/unit/concerns/connection_spec.rb +2 -2
- data/spec/unit/error_code_spec.rb +61 -0
- data/spec/unit/middleware/authentication_spec.rb +7 -5
- data/spec/unit/middleware/raise_error_spec.rb +9 -0
- data/spec/unit/signed_request_spec.rb +1 -1
- metadata +31 -38
- data/lib/restforce/upload_io.rb +0 -9
data/lib/restforce/mash.rb
CHANGED
@@ -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
|
-
|
14
|
+
case val
|
15
|
+
when Array
|
15
16
|
val.collect { |a_val| self.build(a_val, client) }
|
16
|
-
|
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
|
data/lib/restforce/middleware.rb
CHANGED
@@ -11,7 +11,7 @@ module Restforce
|
|
11
11
|
@options = options
|
12
12
|
@logger = logger || begin
|
13
13
|
require 'logger'
|
14
|
-
::Logger.new(
|
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
|
-
|
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
|
@@ -11,9 +11,9 @@ module Restforce
|
|
11
11
|
response_values
|
12
12
|
)
|
13
13
|
when 401
|
14
|
-
raise Restforce::UnauthorizedError,
|
14
|
+
raise Restforce::UnauthorizedError.new(message, response_values)
|
15
15
|
when 404
|
16
|
-
raise Restforce::NotFoundError,
|
16
|
+
raise Restforce::NotFoundError.new(message, response_values)
|
17
17
|
when 413
|
18
18
|
raise Restforce::EntityTooLargeError.new(
|
19
19
|
"413: Request Entity Too Large",
|
@@ -56,8 +56,7 @@ module Restforce
|
|
56
56
|
def exception_class_for_error_code(error_code)
|
57
57
|
return Restforce::ResponseError unless ERROR_CODE_MATCHER.match?(error_code)
|
58
58
|
|
59
|
-
|
60
|
-
Restforce::ErrorCode.const_get(constant_name)
|
59
|
+
Restforce::ErrorCode.get_exception_class(error_code)
|
61
60
|
end
|
62
61
|
end
|
63
62
|
end
|
data/lib/restforce/version.rb
CHANGED
data/restforce.gemspec
CHANGED
@@ -3,11 +3,11 @@
|
|
3
3
|
require File.expand_path('lib/restforce/version', __dir__)
|
4
4
|
|
5
5
|
Gem::Specification.new do |gem|
|
6
|
-
gem.authors = ["Eric J. Holmes"
|
7
|
-
gem.email = ["
|
8
|
-
gem.description = 'A lightweight
|
9
|
-
gem.summary = 'A lightweight
|
10
|
-
gem.homepage = "
|
6
|
+
gem.authors = ["Tim Rogers", "Eric J. Holmes"]
|
7
|
+
gem.email = ["me@timrogers.co.uk", "eric@ejholmes.net"]
|
8
|
+
gem.description = 'A lightweight Ruby client for the Salesforce REST API'
|
9
|
+
gem.summary = 'A lightweight Ruby client for the Salesforce REST API'
|
10
|
+
gem.homepage = "https://restforce.github.io/"
|
11
11
|
gem.license = "MIT"
|
12
12
|
|
13
13
|
gem.files = `git ls-files`.split($OUTPUT_RECORD_SEPARATOR)
|
@@ -22,12 +22,11 @@ Gem::Specification.new do |gem|
|
|
22
22
|
'changelog_uri' => 'https://github.com/restforce/restforce/blob/master/CHANGELOG.md'
|
23
23
|
}
|
24
24
|
|
25
|
-
gem.required_ruby_version = '>= 2.
|
25
|
+
gem.required_ruby_version = '>= 2.5'
|
26
26
|
|
27
|
-
gem.add_dependency 'faraday', '<=
|
28
|
-
gem.add_dependency 'faraday_middleware', ['>= 0.8.8', '<=
|
27
|
+
gem.add_dependency 'faraday', '<= 2.0', '>= 0.9.0'
|
28
|
+
gem.add_dependency 'faraday_middleware', ['>= 0.8.8', '<= 2.0']
|
29
29
|
|
30
|
-
gem.add_dependency 'json', '>= 1.7.5'
|
31
30
|
gem.add_dependency 'jwt', ['>= 1.5.6']
|
32
31
|
|
33
32
|
gem.add_dependency 'hashie', '>= 1.2.0', '< 5.0'
|
@@ -35,7 +34,7 @@ Gem::Specification.new do |gem|
|
|
35
34
|
gem.add_development_dependency 'faye' unless RUBY_PLATFORM == 'java'
|
36
35
|
gem.add_development_dependency 'rspec', '~> 2.14.0'
|
37
36
|
gem.add_development_dependency 'rspec_junit_formatter', '~> 0.4.1'
|
38
|
-
gem.add_development_dependency 'rubocop', '~> 0.
|
39
|
-
gem.add_development_dependency 'simplecov', '~> 0.
|
40
|
-
gem.add_development_dependency 'webmock', '~> 3.
|
37
|
+
gem.add_development_dependency 'rubocop', '~> 0.90.0'
|
38
|
+
gem.add_development_dependency 'simplecov', '~> 0.19.0'
|
39
|
+
gem.add_development_dependency 'webmock', '~> 3.8.3'
|
41
40
|
end
|
@@ -86,22 +86,34 @@ shared_examples_for Restforce::AbstractClient do
|
|
86
86
|
end
|
87
87
|
|
88
88
|
context 'with multipart' do
|
89
|
-
# rubocop:disable
|
89
|
+
# rubocop:disable Layout/LineLength
|
90
90
|
requests 'sobjects/Account',
|
91
91
|
method: :post,
|
92
|
-
with_body: %r(----boundary_string\r\nContent-Disposition: form-data; name
|
92
|
+
with_body: %r(----boundary_string\r\nContent-Disposition: form-data; name="entity_content"\r\nContent-Type: application/json\r\n\r\n{"Name":"Foobar"}\r\n----boundary_string\r\nContent-Disposition: form-data; name="Blob"; filename="blob.jpg"\r\nContent-Length: 42171\r\nContent-Type: image/jpeg\r\nContent-Transfer-Encoding: binary),
|
93
93
|
fixture: 'sobject/create_success_response'
|
94
|
-
# rubocop:enable
|
94
|
+
# rubocop:enable Layout/LineLength
|
95
95
|
|
96
96
|
subject do
|
97
97
|
client.create('Account', Name: 'Foobar',
|
98
|
-
Blob: Restforce::
|
98
|
+
Blob: Restforce::FilePart.new(
|
99
99
|
File.expand_path('../fixtures/blob.jpg', __dir__),
|
100
100
|
'image/jpeg'
|
101
101
|
))
|
102
102
|
end
|
103
103
|
|
104
104
|
it { should eq 'some_id' }
|
105
|
+
|
106
|
+
context 'with deprecated UploadIO' do
|
107
|
+
subject do
|
108
|
+
client.create('Account', Name: 'Foobar',
|
109
|
+
Blob: Restforce::UploadIO.new(
|
110
|
+
File.expand_path('../fixtures/blob.jpg', __dir__),
|
111
|
+
'image/jpeg'
|
112
|
+
))
|
113
|
+
end
|
114
|
+
|
115
|
+
it { should eq 'some_id' }
|
116
|
+
end
|
105
117
|
end
|
106
118
|
end
|
107
119
|
|
data/spec/spec_helper.rb
CHANGED
@@ -15,8 +15,21 @@ RSpec.configure do |config|
|
|
15
15
|
config.order = 'random'
|
16
16
|
config.filter_run focus: true
|
17
17
|
config.run_all_when_everything_filtered = true
|
18
|
+
|
19
|
+
original_stderr = $stderr
|
20
|
+
original_stdout = $stdout
|
21
|
+
config.before(:all) do
|
22
|
+
# Redirect stderr and stdout
|
23
|
+
$stderr = File.open(File::NULL, "w")
|
24
|
+
$stdout = File.open(File::NULL, "w")
|
25
|
+
end
|
26
|
+
config.after(:all) do
|
27
|
+
$stderr = original_stderr
|
28
|
+
$stdout = original_stdout
|
29
|
+
end
|
18
30
|
end
|
19
31
|
|
20
32
|
# Requires supporting ruby files with custom matchers and macros, etc,
|
21
33
|
# in spec/support/ and its subdirectories.
|
22
|
-
Dir[File.join(File.dirname(__FILE__), "support/**/*.rb")]
|
34
|
+
paths = Dir[File.join(File.dirname(__FILE__), "support/**/*.rb")]
|
35
|
+
paths.sort.each { |f| require f }
|
@@ -22,9 +22,7 @@ module FixtureHelpers
|
|
22
22
|
end
|
23
23
|
|
24
24
|
def stub_login_request(*)
|
25
|
-
|
26
|
-
|
27
|
-
stub
|
25
|
+
stub_request(:post, "https://login.salesforce.com/services/oauth2/token")
|
28
26
|
end
|
29
27
|
|
30
28
|
def fixture(filename)
|
@@ -62,4 +62,22 @@ describe Restforce::Collection do
|
|
62
62
|
end
|
63
63
|
end
|
64
64
|
end
|
65
|
+
|
66
|
+
describe '#empty?' do
|
67
|
+
subject(:empty?) do
|
68
|
+
described_class.new(JSON.parse(fixture(sobject_fixture)), client).empty?
|
69
|
+
end
|
70
|
+
|
71
|
+
context 'with size 1' do
|
72
|
+
let(:sobject_fixture) { 'sobject/query_success_response' }
|
73
|
+
|
74
|
+
it { should be_false }
|
75
|
+
end
|
76
|
+
|
77
|
+
context 'with size 0' do
|
78
|
+
let(:sobject_fixture) { 'sobject/query_empty_response' }
|
79
|
+
|
80
|
+
it { should be_true }
|
81
|
+
end
|
82
|
+
end
|
65
83
|
end
|
@@ -28,4 +28,30 @@ describe Restforce::Concerns::Caching do
|
|
28
28
|
end
|
29
29
|
end
|
30
30
|
end
|
31
|
+
|
32
|
+
describe '.with_caching' do
|
33
|
+
let(:options) { double('Options') }
|
34
|
+
|
35
|
+
before do
|
36
|
+
client.stub options: options
|
37
|
+
end
|
38
|
+
|
39
|
+
it 'runs the block with caching enabled' do
|
40
|
+
options.should_receive(:[]=).with(:use_cache, true)
|
41
|
+
options.should_receive(:[]=).with(:use_cache, false)
|
42
|
+
expect { |b| client.with_caching(&b) }.to yield_control
|
43
|
+
end
|
44
|
+
|
45
|
+
context 'when an exception is raised' do
|
46
|
+
it 'ensures the :use_cache is set to false' do
|
47
|
+
options.should_receive(:[]=).with(:use_cache, true)
|
48
|
+
options.should_receive(:[]=).with(:use_cache, false)
|
49
|
+
expect {
|
50
|
+
client.with_caching do
|
51
|
+
raise 'Foo'
|
52
|
+
end
|
53
|
+
}.to raise_error 'Foo'
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
31
57
|
end
|
@@ -73,9 +73,9 @@ describe Restforce::Concerns::Connection do
|
|
73
73
|
Restforce.stub(log?: true)
|
74
74
|
end
|
75
75
|
|
76
|
-
it "must always be used
|
76
|
+
it "must always be used as the last handler" do
|
77
77
|
client.middleware.handlers.reverse.index(Restforce::Middleware::Logger).
|
78
|
-
should eq
|
78
|
+
should eq 0
|
79
79
|
end
|
80
80
|
end
|
81
81
|
end
|
@@ -0,0 +1,61 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
describe Restforce::ErrorCode do
|
6
|
+
describe "mapping of error codes to classes" do
|
7
|
+
subject(:error_exception_classes) { described_class::ERROR_EXCEPTION_CLASSES }
|
8
|
+
|
9
|
+
let(:exception_classes) do
|
10
|
+
described_class.constants.
|
11
|
+
map { |constant_name| described_class.const_get(constant_name) }.
|
12
|
+
select { |constant| constant.is_a?(Class) }
|
13
|
+
end
|
14
|
+
|
15
|
+
it "maps all defined exception classes to an error code" do
|
16
|
+
exception_classes.each do |exception_class|
|
17
|
+
expect(error_exception_classes.values).to include(exception_class)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
it "maps all error codes to a defined exception class" do
|
22
|
+
error_exception_classes.each_value do |mapped_exception_class|
|
23
|
+
expect(exception_classes).to include(mapped_exception_class)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
describe '.get_exception_class' do
|
29
|
+
context 'when a non-existent error code is looked up' do
|
30
|
+
let(:new_error_code) { 'ANOTHER_NEW_ERROR_CODE' }
|
31
|
+
subject { described_class.get_exception_class(new_error_code) }
|
32
|
+
|
33
|
+
it { should be Restforce::ResponseError }
|
34
|
+
|
35
|
+
it 'outputs a warning' do
|
36
|
+
expect(Warning).to receive(:warn)
|
37
|
+
subject
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
context 'when a known error code is looked up' do
|
42
|
+
let(:existing_error_code) { "ALL_OR_NONE_OPERATION_ROLLED_BACK" }
|
43
|
+
let(:existing_error) { described_class::AllOrNoneOperationRolledBack }
|
44
|
+
|
45
|
+
subject do
|
46
|
+
described_class.get_exception_class(existing_error_code)
|
47
|
+
end
|
48
|
+
|
49
|
+
it { should < Restforce::ResponseError }
|
50
|
+
|
51
|
+
it 'returns existing error' do
|
52
|
+
should be(existing_error)
|
53
|
+
end
|
54
|
+
|
55
|
+
it 'does not output a warning' do
|
56
|
+
expect(Warning).to_not receive(:warn)
|
57
|
+
subject
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
@@ -57,10 +57,10 @@ describe Restforce::Middleware::Authentication do
|
|
57
57
|
end
|
58
58
|
|
59
59
|
its(:handlers) {
|
60
|
-
should include FaradayMiddleware::ParseJson
|
61
|
-
Faraday::Adapter::NetHttp
|
60
|
+
should include FaradayMiddleware::ParseJson
|
62
61
|
}
|
63
62
|
its(:handlers) { should_not include Restforce::Middleware::Logger }
|
63
|
+
its(:adapter) { should eq Faraday::Adapter::NetHttp }
|
64
64
|
end
|
65
65
|
|
66
66
|
context 'with logging enabled' do
|
@@ -70,8 +70,9 @@ describe Restforce::Middleware::Authentication do
|
|
70
70
|
|
71
71
|
its(:handlers) {
|
72
72
|
should include FaradayMiddleware::ParseJson,
|
73
|
-
Restforce::Middleware::Logger
|
73
|
+
Restforce::Middleware::Logger
|
74
74
|
}
|
75
|
+
its(:adapter) { should eq Faraday::Adapter::NetHttp }
|
75
76
|
end
|
76
77
|
|
77
78
|
context 'with specified adapter' do
|
@@ -80,8 +81,9 @@ describe Restforce::Middleware::Authentication do
|
|
80
81
|
end
|
81
82
|
|
82
83
|
its(:handlers) {
|
83
|
-
should include FaradayMiddleware::ParseJson
|
84
|
+
should include FaradayMiddleware::ParseJson
|
84
85
|
}
|
86
|
+
its(:adapter) { should eq Faraday::Adapter::Typhoeus }
|
85
87
|
end
|
86
88
|
end
|
87
89
|
|
@@ -94,7 +96,7 @@ describe Restforce::Middleware::Authentication do
|
|
94
96
|
context 'when response.body is present' do
|
95
97
|
let(:response) {
|
96
98
|
Faraday::Response.new(
|
97
|
-
|
99
|
+
response_body: { 'error' => 'error', 'error_description' => 'description' },
|
98
100
|
status: 401
|
99
101
|
)
|
100
102
|
}
|
@@ -85,5 +85,14 @@ describe Restforce::Middleware::RaiseError do
|
|
85
85
|
"(error code missing): #{body}"
|
86
86
|
end
|
87
87
|
end
|
88
|
+
|
89
|
+
context 'when error code is not already defined' do
|
90
|
+
let(:body) { { 'errorCode' => 'SOMETHING_UNDEFINED' } }
|
91
|
+
let(:status) { 400 }
|
92
|
+
|
93
|
+
it 'raises a generic Restforce::ResponseError' do
|
94
|
+
expect { on_complete }.to raise_error Restforce::ResponseError
|
95
|
+
end
|
96
|
+
end
|
88
97
|
end
|
89
98
|
end
|
metadata
CHANGED
@@ -1,36 +1,36 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: restforce
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 5.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
|
-
- Eric J. Holmes
|
8
7
|
- Tim Rogers
|
8
|
+
- Eric J. Holmes
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2020-
|
12
|
+
date: 2020-09-08 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
|
+
- - "<="
|
19
|
+
- !ruby/object:Gem::Version
|
20
|
+
version: '2.0'
|
18
21
|
- - ">="
|
19
22
|
- !ruby/object:Gem::Version
|
20
23
|
version: 0.9.0
|
21
|
-
- - "<="
|
22
|
-
- !ruby/object:Gem::Version
|
23
|
-
version: '1.0'
|
24
24
|
type: :runtime
|
25
25
|
prerelease: false
|
26
26
|
version_requirements: !ruby/object:Gem::Requirement
|
27
27
|
requirements:
|
28
|
+
- - "<="
|
29
|
+
- !ruby/object:Gem::Version
|
30
|
+
version: '2.0'
|
28
31
|
- - ">="
|
29
32
|
- !ruby/object:Gem::Version
|
30
33
|
version: 0.9.0
|
31
|
-
- - "<="
|
32
|
-
- !ruby/object:Gem::Version
|
33
|
-
version: '1.0'
|
34
34
|
- !ruby/object:Gem::Dependency
|
35
35
|
name: faraday_middleware
|
36
36
|
requirement: !ruby/object:Gem::Requirement
|
@@ -40,7 +40,7 @@ dependencies:
|
|
40
40
|
version: 0.8.8
|
41
41
|
- - "<="
|
42
42
|
- !ruby/object:Gem::Version
|
43
|
-
version: '
|
43
|
+
version: '2.0'
|
44
44
|
type: :runtime
|
45
45
|
prerelease: false
|
46
46
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -50,21 +50,7 @@ dependencies:
|
|
50
50
|
version: 0.8.8
|
51
51
|
- - "<="
|
52
52
|
- !ruby/object:Gem::Version
|
53
|
-
version: '
|
54
|
-
- !ruby/object:Gem::Dependency
|
55
|
-
name: json
|
56
|
-
requirement: !ruby/object:Gem::Requirement
|
57
|
-
requirements:
|
58
|
-
- - ">="
|
59
|
-
- !ruby/object:Gem::Version
|
60
|
-
version: 1.7.5
|
61
|
-
type: :runtime
|
62
|
-
prerelease: false
|
63
|
-
version_requirements: !ruby/object:Gem::Requirement
|
64
|
-
requirements:
|
65
|
-
- - ">="
|
66
|
-
- !ruby/object:Gem::Version
|
67
|
-
version: 1.7.5
|
53
|
+
version: '2.0'
|
68
54
|
- !ruby/object:Gem::Dependency
|
69
55
|
name: jwt
|
70
56
|
requirement: !ruby/object:Gem::Requirement
|
@@ -147,62 +133,66 @@ dependencies:
|
|
147
133
|
requirements:
|
148
134
|
- - "~>"
|
149
135
|
- !ruby/object:Gem::Version
|
150
|
-
version: 0.
|
136
|
+
version: 0.90.0
|
151
137
|
type: :development
|
152
138
|
prerelease: false
|
153
139
|
version_requirements: !ruby/object:Gem::Requirement
|
154
140
|
requirements:
|
155
141
|
- - "~>"
|
156
142
|
- !ruby/object:Gem::Version
|
157
|
-
version: 0.
|
143
|
+
version: 0.90.0
|
158
144
|
- !ruby/object:Gem::Dependency
|
159
145
|
name: simplecov
|
160
146
|
requirement: !ruby/object:Gem::Requirement
|
161
147
|
requirements:
|
162
148
|
- - "~>"
|
163
149
|
- !ruby/object:Gem::Version
|
164
|
-
version: 0.
|
150
|
+
version: 0.19.0
|
165
151
|
type: :development
|
166
152
|
prerelease: false
|
167
153
|
version_requirements: !ruby/object:Gem::Requirement
|
168
154
|
requirements:
|
169
155
|
- - "~>"
|
170
156
|
- !ruby/object:Gem::Version
|
171
|
-
version: 0.
|
157
|
+
version: 0.19.0
|
172
158
|
- !ruby/object:Gem::Dependency
|
173
159
|
name: webmock
|
174
160
|
requirement: !ruby/object:Gem::Requirement
|
175
161
|
requirements:
|
176
162
|
- - "~>"
|
177
163
|
- !ruby/object:Gem::Version
|
178
|
-
version: 3.
|
164
|
+
version: 3.8.3
|
179
165
|
type: :development
|
180
166
|
prerelease: false
|
181
167
|
version_requirements: !ruby/object:Gem::Requirement
|
182
168
|
requirements:
|
183
169
|
- - "~>"
|
184
170
|
- !ruby/object:Gem::Version
|
185
|
-
version: 3.
|
186
|
-
description: A lightweight
|
171
|
+
version: 3.8.3
|
172
|
+
description: A lightweight Ruby client for the Salesforce REST API
|
187
173
|
email:
|
174
|
+
- me@timrogers.co.uk
|
188
175
|
- eric@ejholmes.net
|
189
|
-
- tim@gocardless.com
|
190
176
|
executables: []
|
191
177
|
extensions: []
|
192
178
|
extra_rdoc_files: []
|
193
179
|
files:
|
194
180
|
- ".circleci/config.yml"
|
181
|
+
- ".github/ISSUE_TEMPLATE/unhandled-salesforce-error.md"
|
195
182
|
- ".gitignore"
|
196
183
|
- ".rubocop.yml"
|
197
184
|
- ".rubocop_todo.yml"
|
198
185
|
- CHANGELOG.md
|
199
186
|
- CODE_OF_CONDUCT.md
|
200
187
|
- CONTRIBUTING.md
|
188
|
+
- Dockerfile
|
201
189
|
- Gemfile
|
202
190
|
- Guardfile
|
203
191
|
- LICENSE
|
204
192
|
- README.md
|
205
193
|
- Rakefile
|
194
|
+
- UPGRADING.md
|
195
|
+
- docker-compose.yml
|
206
196
|
- lib/restforce.rb
|
207
197
|
- lib/restforce/abstract_client.rb
|
208
198
|
- lib/restforce/attachment.rb
|
@@ -221,6 +211,8 @@ files:
|
|
221
211
|
- lib/restforce/config.rb
|
222
212
|
- lib/restforce/data/client.rb
|
223
213
|
- lib/restforce/document.rb
|
214
|
+
- lib/restforce/error_code.rb
|
215
|
+
- lib/restforce/file_part.rb
|
224
216
|
- lib/restforce/mash.rb
|
225
217
|
- lib/restforce/middleware.rb
|
226
218
|
- lib/restforce/middleware/authentication.rb
|
@@ -240,7 +232,6 @@ files:
|
|
240
232
|
- lib/restforce/signed_request.rb
|
241
233
|
- lib/restforce/sobject.rb
|
242
234
|
- lib/restforce/tooling/client.rb
|
243
|
-
- lib/restforce/upload_io.rb
|
244
235
|
- lib/restforce/version.rb
|
245
236
|
- restforce.gemspec
|
246
237
|
- script/bootstrap
|
@@ -306,6 +297,7 @@ files:
|
|
306
297
|
- spec/unit/config_spec.rb
|
307
298
|
- spec/unit/data/client_spec.rb
|
308
299
|
- spec/unit/document_spec.rb
|
300
|
+
- spec/unit/error_code_spec.rb
|
309
301
|
- spec/unit/mash_spec.rb
|
310
302
|
- spec/unit/middleware/authentication/jwt_bearer_spec.rb
|
311
303
|
- spec/unit/middleware/authentication/password_spec.rb
|
@@ -321,7 +313,7 @@ files:
|
|
321
313
|
- spec/unit/signed_request_spec.rb
|
322
314
|
- spec/unit/sobject_spec.rb
|
323
315
|
- spec/unit/tooling/client_spec.rb
|
324
|
-
homepage:
|
316
|
+
homepage: https://restforce.github.io/
|
325
317
|
licenses:
|
326
318
|
- MIT
|
327
319
|
metadata:
|
@@ -335,17 +327,17 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
335
327
|
requirements:
|
336
328
|
- - ">="
|
337
329
|
- !ruby/object:Gem::Version
|
338
|
-
version: '2.
|
330
|
+
version: '2.5'
|
339
331
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
340
332
|
requirements:
|
341
333
|
- - ">="
|
342
334
|
- !ruby/object:Gem::Version
|
343
335
|
version: '0'
|
344
336
|
requirements: []
|
345
|
-
rubygems_version: 3.
|
337
|
+
rubygems_version: 3.1.2
|
346
338
|
signing_key:
|
347
339
|
specification_version: 4
|
348
|
-
summary: A lightweight
|
340
|
+
summary: A lightweight Ruby client for the Salesforce REST API
|
349
341
|
test_files:
|
350
342
|
- spec/fixtures/auth_error_response.json
|
351
343
|
- spec/fixtures/auth_success_response.json
|
@@ -406,6 +398,7 @@ test_files:
|
|
406
398
|
- spec/unit/config_spec.rb
|
407
399
|
- spec/unit/data/client_spec.rb
|
408
400
|
- spec/unit/document_spec.rb
|
401
|
+
- spec/unit/error_code_spec.rb
|
409
402
|
- spec/unit/mash_spec.rb
|
410
403
|
- spec/unit/middleware/authentication/jwt_bearer_spec.rb
|
411
404
|
- spec/unit/middleware/authentication/password_spec.rb
|