activeforce 1.10.5 → 2.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/.gitignore +0 -1
- data/.travis.yml +7 -8
- data/Appraisals +6 -6
- data/Rakefile +0 -1
- data/activeforce.gemspec +6 -5
- data/gemfiles/{5.2.gemfile → 4.0.gemfile} +3 -3
- data/gemfiles/{6.0.gemfile → 4.1.gemfile} +3 -3
- data/gemfiles/{5.0.gemfile → 4.2.gemfile} +3 -3
- data/lib/activeforce/version.rb +1 -1
- data/lib/salesforce/authentication.rb +1 -6
- data/lib/salesforce/bulk/batch.rb +15 -15
- data/lib/salesforce/column.rb +2 -2
- data/lib/salesforce/config.rb +5 -5
- data/lib/salesforce/connection.rb +5 -5
- data/lib/salesforce/connection/soap_api.rb +19 -15
- data/test/salesforce/authentication_test.rb +7 -42
- data/test/salesforce/column_test.rb +37 -37
- data/test/salesforce/config_test.rb +2 -6
- data/test/salesforce/connection/async_test.rb +38 -36
- data/test/salesforce/connection/http_methods_test.rb +34 -39
- data/test/salesforce/connection/soap_api_test.rb +51 -38
- data/test/salesforce/connection_test.rb +32 -38
- data/test/test_helper.rb +22 -22
- metadata +22 -14
@@ -36,6 +36,7 @@ class Salesforce::Connection::SoapApiTest < ActiveSupport::TestCase
|
|
36
36
|
|
37
37
|
def test_invoke_soap__not_login__success
|
38
38
|
options = {
|
39
|
+
:endpoint_url => Salesforce::Config.login_url,
|
39
40
|
:body => :soap_body,
|
40
41
|
:other_option => 'foo'
|
41
42
|
}
|
@@ -50,29 +51,31 @@ class Salesforce::Connection::SoapApiTest < ActiveSupport::TestCase
|
|
50
51
|
}
|
51
52
|
|
52
53
|
expected_result = result[:not_login_response][:result]
|
53
|
-
|
54
|
-
|
55
|
-
|
54
|
+
|
55
|
+
# stub savon
|
56
|
+
stub_response = stub(:http => stub(:code => 200, :headers => {}, :cookies => []), :body => result)
|
57
|
+
stub_response.stubs(:kind_of?).returns(true)
|
58
|
+
|
59
|
+
Savon::Operation.any_instance.stubs(:create_response).returns(stub_response)
|
60
|
+
|
61
|
+
HTTPI.stubs(:post).with do |request, _|
|
62
|
+
assert_includes request.body, "xmlns:ns1=\"soap:enterprise:namespace\""
|
63
|
+
xml_doc = Nokogiri::XML(request.body)
|
64
|
+
assert_equal 'soap_body', xml_doc.xpath('//wsdl:notLogin/text()').to_s
|
65
|
+
assert_equal 'boyahh_session_id', xml_doc.xpath('//env:Header/ns1:SessionHeader/ns1:sessionId/text()').to_s
|
66
|
+
assert_equal '"notLogin"', request.headers['SOAPAction']
|
67
|
+
assert_equal Salesforce::Config.login_url, request.url.to_s
|
68
|
+
end.returns(stub_response)
|
56
69
|
|
57
70
|
Salesforce::Config.stubs(:session_id).returns('boyahh_session_id')
|
58
71
|
Salesforce::Config.stubs(:soap_enterprise_namespace).returns('soap:enterprise:namespace')
|
59
|
-
|
60
|
-
soap_mock = mock
|
61
|
-
soap_mock.expects(:body=).with(:soap_body)
|
62
|
-
soap_mock.expects(:header=).with({ "ns1:SessionHeader" => { "ns1:sessionId" => 'boyahh_session_id' }})
|
63
|
-
|
64
|
-
|
65
|
-
namespaces_mock = mock
|
66
|
-
namespaces_mock.expects(:[]=).with("xmlns:ns1", 'soap:enterprise:namespace')
|
67
|
-
soap_mock.expects(:namespaces).returns(namespaces_mock)
|
68
|
-
|
69
|
-
soap_client_mock.expects(:request).with(:wsdl, :notLogin).yields(soap_mock).returns(mock(:to_hash => result))
|
70
72
|
|
71
73
|
assert_equal expected_result, Salesforce.connection.send(:invoke_soap, :notLogin, options)
|
72
74
|
end
|
73
75
|
|
74
76
|
def test_invoke_soap__not_login__not_success
|
75
77
|
options = {
|
78
|
+
:endpoint_url => Salesforce::Config.login_url,
|
76
79
|
:body => :soap_body,
|
77
80
|
:other_option => 'foo'
|
78
81
|
}
|
@@ -85,23 +88,24 @@ class Salesforce::Connection::SoapApiTest < ActiveSupport::TestCase
|
|
85
88
|
}
|
86
89
|
}
|
87
90
|
}
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
+
|
92
|
+
# stub savon
|
93
|
+
stub_response = stub(:http => stub(:code => 200, :headers => {}, :cookies => []), :body => result)
|
94
|
+
stub_response.stubs(:kind_of?).returns(true)
|
95
|
+
|
96
|
+
Savon::Operation.any_instance.stubs(:create_response).returns(stub_response)
|
97
|
+
|
98
|
+
HTTPI.stubs(:post).with do |request, _|
|
99
|
+
assert_includes request.body, "xmlns:ns1=\"soap:enterprise:namespace\""
|
100
|
+
xml_doc = Nokogiri::XML(request.body)
|
101
|
+
assert_equal 'soap_body', xml_doc.xpath('//wsdl:notLogin/text()').to_s
|
102
|
+
assert_equal 'boyahh_session_id', xml_doc.xpath('//env:Header/ns1:SessionHeader/ns1:sessionId/text()').to_s
|
103
|
+
assert_equal '"notLogin"', request.headers['SOAPAction']
|
104
|
+
assert_equal Salesforce::Config.login_url, request.url.to_s
|
105
|
+
end.returns(stub_response)
|
91
106
|
|
92
107
|
Salesforce::Config.stubs(:session_id).returns('boyahh_session_id')
|
93
108
|
Salesforce::Config.stubs(:soap_enterprise_namespace).returns('soap:enterprise:namespace')
|
94
|
-
|
95
|
-
soap_mock = mock
|
96
|
-
soap_mock.expects(:body=).with(:soap_body)
|
97
|
-
soap_mock.expects(:header=).with({ "ns1:SessionHeader" => { "ns1:sessionId" => 'boyahh_session_id' }})
|
98
|
-
|
99
|
-
|
100
|
-
namespaces_mock = mock
|
101
|
-
namespaces_mock.expects(:[]=).with("xmlns:ns1", 'soap:enterprise:namespace')
|
102
|
-
soap_mock.expects(:namespaces).returns(namespaces_mock)
|
103
|
-
|
104
|
-
soap_client_mock.expects(:request).with(:wsdl, :notLogin).yields(soap_mock).returns(mock(:to_hash => result))
|
105
109
|
|
106
110
|
assert_raises Salesforce::Connection::SoapApi::Error do
|
107
111
|
Salesforce.connection.send(:invoke_soap, :notLogin, options)
|
@@ -110,6 +114,7 @@ class Salesforce::Connection::SoapApiTest < ActiveSupport::TestCase
|
|
110
114
|
|
111
115
|
def test_invoke_soap__login
|
112
116
|
options = {
|
117
|
+
:endpoint_url => Salesforce::Config.login_url,
|
113
118
|
:body => :soap_body,
|
114
119
|
:other_option => 'foo'
|
115
120
|
}
|
@@ -123,13 +128,21 @@ class Salesforce::Connection::SoapApiTest < ActiveSupport::TestCase
|
|
123
128
|
}
|
124
129
|
|
125
130
|
expected_result = result[:login_response][:result]
|
126
|
-
|
127
|
-
soap_client_mock = mock
|
128
|
-
Salesforce.connection.expects(:soap_client).with(options).returns(soap_client_mock)
|
129
131
|
|
130
|
-
|
131
|
-
|
132
|
-
|
132
|
+
stub_response = stub(:http => stub(:code => 200, :headers => {}, :cookies => []), :body => result)
|
133
|
+
stub_response.stubs(:kind_of?).returns(true)
|
134
|
+
|
135
|
+
Savon::Operation.any_instance.stubs(:create_response).returns(stub_response)
|
136
|
+
|
137
|
+
HTTPI.stubs(:post).with do |request, _|
|
138
|
+
xml_doc = Nokogiri::XML(request.body)
|
139
|
+
assert_equal 'soap_body', xml_doc.xpath('//wsdl:login/text()').to_s
|
140
|
+
assert_equal '"login"', request.headers['SOAPAction']
|
141
|
+
assert_equal Salesforce::Config.login_url, request.url.to_s
|
142
|
+
end.returns(stub_response)
|
143
|
+
|
144
|
+
Salesforce::Config.stubs(:session_id).returns('boyahh_session_id')
|
145
|
+
Salesforce::Config.stubs(:soap_enterprise_namespace).returns('soap:enterprise:namespace')
|
133
146
|
|
134
147
|
assert_equal expected_result, Salesforce.connection.send(:invoke_soap, :login, options)
|
135
148
|
end
|
@@ -137,12 +150,12 @@ class Salesforce::Connection::SoapApiTest < ActiveSupport::TestCase
|
|
137
150
|
def test_soap_client
|
138
151
|
options = {
|
139
152
|
:namespace => 'my:name:space',
|
140
|
-
:
|
153
|
+
:endpoint => 'https://my.endpoint.url.com'
|
141
154
|
}
|
142
155
|
|
143
156
|
client = Salesforce.connection.send(:soap_client, options)
|
144
|
-
assert_equal 'https://my.endpoint.url.com', client.
|
145
|
-
assert_equal 'my:name:space', client.
|
157
|
+
assert_equal 'https://my.endpoint.url.com', client.globals[:endpoint]
|
158
|
+
assert_equal 'my:name:space', client.globals[:namespace]
|
146
159
|
end
|
147
160
|
|
148
|
-
end
|
161
|
+
end
|
@@ -5,20 +5,20 @@ class Salesforce::ConnectionTest < ActiveSupport::TestCase
|
|
5
5
|
Salesforce.connection.expects(:get).with("query.json?q=SELECT+Id+FROM+Account", :format => :json).returns({ "records" => [{ :record => 1, "attributes" => 'foo'}], "done" => true, "totalSize" => 1999})
|
6
6
|
assert_equal [{ :record => 1 }], Salesforce.connection.soql("SELECT Id FROM Account")
|
7
7
|
end
|
8
|
-
|
8
|
+
|
9
9
|
def test_query__more_than_2000_records
|
10
|
-
Salesforce.connection.expects(:get).with("query.json?q=SELECT+Id+FROM+Account", :format => :json).returns({
|
10
|
+
Salesforce.connection.expects(:get).with("query.json?q=SELECT+Id+FROM+Account", :format => :json).returns({
|
11
11
|
"records" => [ { :record => 1, "attributes" => "foo" } ], "done" => false, "totalSize" => 4999, "nextRecordsUrl" =>"/services/data/v22.0/query/01g8000000L9FSmAAN-2000"})
|
12
|
-
|
13
|
-
Salesforce.connection.expects(:get).with("/services/data/v22.0/query/01g8000000L9FSmAAN-2000.json", :format => :json).returns({
|
12
|
+
|
13
|
+
Salesforce.connection.expects(:get).with("/services/data/v22.0/query/01g8000000L9FSmAAN-2000.json", :format => :json).returns({
|
14
14
|
"records" => [ { :record => 2, "attributes" => "foo" } ], "done" => false, "totalSize" => 4999, "nextRecordsUrl" =>"/services/data/v22.0/query/01g8000000L9FSmAAN-4000"})
|
15
15
|
|
16
|
-
Salesforce.connection.expects(:get).with("/services/data/v22.0/query/01g8000000L9FSmAAN-4000.json", :format => :json).returns({
|
16
|
+
Salesforce.connection.expects(:get).with("/services/data/v22.0/query/01g8000000L9FSmAAN-4000.json", :format => :json).returns({
|
17
17
|
"records" => [ { :record => 3, "attributes" => "foo" } ], "done" => true, "totalSize" => 4999})
|
18
|
-
|
18
|
+
|
19
19
|
assert_equal [{ :record => 1}, { :record => 2}, { :record => 3}], Salesforce.connection.soql("SELECT Id FROM Account")
|
20
20
|
end
|
21
|
-
|
21
|
+
|
22
22
|
def test_as_logged_in_user__login_succeeded__calls_block
|
23
23
|
Salesforce::Authentication.expects(:session_id)
|
24
24
|
results = Salesforce.connection.as_logged_in_user do
|
@@ -26,12 +26,12 @@ class Salesforce::ConnectionTest < ActiveSupport::TestCase
|
|
26
26
|
end
|
27
27
|
assert_equal :results, results
|
28
28
|
end
|
29
|
-
|
29
|
+
|
30
30
|
def test_as_logged_in_user__logged_out__recovers
|
31
31
|
flag = nil
|
32
32
|
Salesforce::Authentication.expects(:session_id).twice
|
33
33
|
Salesforce::Authentication.expects(:logout)
|
34
|
-
error = RestClient::Unauthorized.new
|
34
|
+
error = RestClient::Request::Unauthorized.new
|
35
35
|
results = Salesforce.connection.as_logged_in_user do
|
36
36
|
unless flag
|
37
37
|
flag = true
|
@@ -41,32 +41,32 @@ class Salesforce::ConnectionTest < ActiveSupport::TestCase
|
|
41
41
|
end
|
42
42
|
assert_equal :results, results
|
43
43
|
end
|
44
|
-
|
44
|
+
|
45
45
|
def test_as_logged_in_user__authorization_failure
|
46
46
|
flag = nil
|
47
47
|
Salesforce::Authentication.expects(:session_id).times(2)
|
48
48
|
Salesforce::Authentication.expects(:logout)
|
49
|
-
error = RestClient::Unauthorized.new
|
50
|
-
assert_raises RestClient::Unauthorized do
|
49
|
+
error = RestClient::Request::Unauthorized.new
|
50
|
+
assert_raises RestClient::Request::Unauthorized do
|
51
51
|
Salesforce.connection.as_logged_in_user do
|
52
52
|
raise error
|
53
53
|
end
|
54
54
|
end
|
55
55
|
end
|
56
|
-
|
56
|
+
|
57
57
|
def test_as_logged_in_user__invalid_username_password__recovers
|
58
58
|
on_login_failure_called = false
|
59
59
|
|
60
|
-
Salesforce.configure do
|
60
|
+
Salesforce.configure do
|
61
61
|
on_login_failure { on_login_failure_called = true }
|
62
62
|
end
|
63
|
-
|
63
|
+
|
64
64
|
xml = <<-XML
|
65
65
|
<?xml version='1.0' encoding='UTF-8'?><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"><soapenv:Body><soapenv:Fault xmlns:fns="http://fault.api.zuora.com/"><faultcode>sf:INVALID_LOGIN</faultcode><faultstring>INVALID_LOGIN: Invalid username, password, security token; or user locked out.</faultstring><detail><fns:LoginFault><fns:FaultCode>INVALID_LOGIN</fns:FaultCode><fns:FaultMessage>Invalid username, password, security token; or user locked out.</fns:FaultMessage></fns:LoginFault></detail></soapenv:Fault></soapenv:Body></soapenv:Envelope>
|
66
66
|
XML
|
67
67
|
|
68
|
-
error = Savon::
|
69
|
-
|
68
|
+
error = Savon::SOAPFault.new(stub(:body => xml), Nori.new, xml)
|
69
|
+
|
70
70
|
flag = nil
|
71
71
|
Salesforce::Authentication.expects(:session_id).twice
|
72
72
|
Salesforce::Authentication.expects(:logout)
|
@@ -77,29 +77,29 @@ class Salesforce::ConnectionTest < ActiveSupport::TestCase
|
|
77
77
|
end
|
78
78
|
:results
|
79
79
|
end
|
80
|
-
|
80
|
+
|
81
81
|
assert_equal :results, results
|
82
82
|
assert on_login_failure_called, "Salesforce::Config.on_login_failure was not called upon login failure"
|
83
83
|
end
|
84
|
-
|
84
|
+
|
85
85
|
def test_as_logged_in_user__invalid_username_password__doesnt_recover
|
86
86
|
on_login_failure_called = 0
|
87
87
|
|
88
|
-
Salesforce.configure do
|
88
|
+
Salesforce.configure do
|
89
89
|
on_login_failure { on_login_failure_called += 1 }
|
90
90
|
end
|
91
|
-
|
91
|
+
|
92
92
|
xml = <<-XML
|
93
93
|
<?xml version='1.0' encoding='UTF-8'?><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"><soapenv:Body><soapenv:Fault xmlns:fns="http://fault.api.zuora.com/"><faultcode>sf:INVALID_LOGIN</faultcode><faultstring>INVALID_LOGIN: Invalid username, password, security token; or user locked out.</faultstring><detail><fns:LoginFault><fns:FaultCode>INVALID_LOGIN</fns:FaultCode><fns:FaultMessage>Invalid username, password, security token; or user locked out.</fns:FaultMessage></fns:LoginFault></detail></soapenv:Fault></soapenv:Body></soapenv:Envelope>
|
94
94
|
XML
|
95
95
|
|
96
|
-
error = Savon::
|
97
|
-
|
96
|
+
error = Savon::SOAPFault.new(stub(:body => xml), Nori.new, xml)
|
97
|
+
|
98
98
|
flag = nil
|
99
99
|
Salesforce::Authentication.expects(:session_id).twice
|
100
100
|
Salesforce::Authentication.expects(:logout)
|
101
|
-
|
102
|
-
assert_raises Savon::
|
101
|
+
|
102
|
+
assert_raises Savon::SOAPFault do
|
103
103
|
Salesforce.connection.as_logged_in_user do
|
104
104
|
raise error
|
105
105
|
end
|
@@ -107,14 +107,14 @@ class Salesforce::ConnectionTest < ActiveSupport::TestCase
|
|
107
107
|
|
108
108
|
assert_equal 1, on_login_failure_called, "Salesforce::Config.on_login_failure was not called upon login failure"
|
109
109
|
end
|
110
|
-
|
110
|
+
|
111
111
|
def test_as_logged_in_user__invalid_username_password__recovers__no_on_login_failure_hook
|
112
112
|
xml = <<-XML
|
113
113
|
<?xml version='1.0' encoding='UTF-8'?><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"><soapenv:Body><soapenv:Fault xmlns:fns="http://fault.api.zuora.com/"><faultcode>sf:INVALID_LOGIN</faultcode><faultstring>INVALID_LOGIN: Invalid username, password, security token; or user locked out.</faultstring><detail><fns:LoginFault><fns:FaultCode>INVALID_LOGIN</fns:FaultCode><fns:FaultMessage>Invalid username, password, security token; or user locked out.</fns:FaultMessage></fns:LoginFault></detail></soapenv:Fault></soapenv:Body></soapenv:Envelope>
|
114
114
|
XML
|
115
115
|
|
116
|
-
error = Savon::
|
117
|
-
|
116
|
+
error = Savon::SOAPFault.new(stub(:body => xml), Nori.new, xml)
|
117
|
+
|
118
118
|
flag = nil
|
119
119
|
Salesforce::Authentication.expects(:session_id).twice
|
120
120
|
Salesforce::Authentication.expects(:logout)
|
@@ -125,15 +125,15 @@ class Salesforce::ConnectionTest < ActiveSupport::TestCase
|
|
125
125
|
end
|
126
126
|
:results
|
127
127
|
end
|
128
|
-
|
128
|
+
|
129
129
|
assert_equal :results, results
|
130
130
|
end
|
131
|
-
|
131
|
+
|
132
132
|
def test_as_logged_in_user__other_failure
|
133
133
|
Salesforce::Authentication.stubs(:session_id)
|
134
134
|
Salesforce::Authentication.stubs(:logout)
|
135
135
|
|
136
|
-
expects(:my_method).twice.raises(RestClient::Unauthorized.new).then.raises(StandardError.new("some other error"))
|
136
|
+
expects(:my_method).twice.raises(RestClient::Request::Unauthorized.new).then.raises(StandardError.new("some other error"))
|
137
137
|
|
138
138
|
assert_raises StandardError do
|
139
139
|
Salesforce.connection.as_logged_in_user do
|
@@ -141,14 +141,8 @@ class Salesforce::ConnectionTest < ActiveSupport::TestCase
|
|
141
141
|
end
|
142
142
|
end
|
143
143
|
end
|
144
|
-
|
144
|
+
|
145
145
|
def test_convert
|
146
146
|
assert_equal "str", Salesforce.connection.convert("str", {})
|
147
147
|
end
|
148
|
-
|
149
|
-
private
|
150
|
-
|
151
|
-
def my_method
|
152
|
-
# Defined so it can be stubbed in a test
|
153
|
-
end
|
154
148
|
end
|
data/test/test_helper.rb
CHANGED
@@ -15,14 +15,14 @@ require 'activeforce'
|
|
15
15
|
Dir.glob(File.expand_path('../../app/models/salesforce/**.rb', __FILE__)).each { |file| require(file) }
|
16
16
|
|
17
17
|
require 'mocha/setup'
|
18
|
-
|
18
|
+
|
19
19
|
|
20
20
|
Time.zone = 'America/Los_Angeles'
|
21
21
|
|
22
22
|
class ActiveSupport::TestCase
|
23
23
|
setup :clean_configuration
|
24
24
|
setup :stub_soap
|
25
|
-
|
25
|
+
|
26
26
|
class ::Salesforce::BulkTable < Salesforce::Base
|
27
27
|
self.custom_object = true
|
28
28
|
end
|
@@ -30,50 +30,50 @@ class ActiveSupport::TestCase
|
|
30
30
|
def clean_configuration
|
31
31
|
Salesforce::Config.instance_variable_set(:@instance, nil)
|
32
32
|
end
|
33
|
-
|
33
|
+
|
34
34
|
def stub_soap
|
35
|
-
|
36
|
-
Savon::Client.any_instance.stubs(:request)
|
37
|
-
end
|
35
|
+
Savon::Client.any_instance.stubs(:request)
|
38
36
|
end
|
39
|
-
|
37
|
+
|
40
38
|
def clear_columns_for_bulk_table
|
41
39
|
Salesforce::BulkTable.cached_columns = nil
|
42
40
|
end
|
43
|
-
|
41
|
+
|
44
42
|
def clear_columns_for_account
|
45
43
|
Salesforce::Account.cached_columns = nil
|
46
44
|
end
|
47
|
-
|
45
|
+
|
48
46
|
def setup_columns_for_bulk_table
|
49
47
|
clear_columns_for_bulk_table
|
50
|
-
columns_hash = [
|
51
|
-
{ "name" => "Id", "type" => "id", "createable" => false, "updateable" => false},
|
52
|
-
{ "name" => "Account__c", "type" => "reference", "createable" => true, "updateable" => false, "custom" => true },
|
48
|
+
columns_hash = [
|
49
|
+
{ "name" => "Id", "type" => "id", "createable" => false, "updateable" => false},
|
50
|
+
{ "name" => "Account__c", "type" => "reference", "createable" => true, "updateable" => false, "custom" => true },
|
53
51
|
{ "name" => "Car__c", "type" => "reference", "createable" => false, "updateable" => true, "custom" => true},
|
54
52
|
{ "name" => "Name__c", "type" => "string", "createable" => true, "updateable" => true, "custom" => true},
|
55
|
-
{ "name" => "dob__c", "type" => "date", "createable" => true, "updateable" => true, "custom" => true}
|
53
|
+
{ "name" => "dob__c", "type" => "date", "createable" => true, "updateable" => true, "custom" => true}
|
56
54
|
]
|
57
|
-
|
55
|
+
|
58
56
|
Salesforce.connection.stubs(:fields).with("BulkTable__c").returns(columns_hash).twice
|
59
57
|
columns = Salesforce::Columns.new("BulkTable__c")
|
60
58
|
assert_equal columns, Salesforce::BulkTable.columns
|
61
59
|
end
|
62
|
-
|
60
|
+
|
63
61
|
def setup_columns_for_account
|
64
62
|
clear_columns_for_account
|
65
|
-
columns_hash = [
|
66
|
-
{ "name" => "Id", "type" => "id", "createable" => false, "updateable" => false},
|
67
|
-
{ "name" => "Name", "type" => "string", "createable" => true, "updateable" => true},
|
68
|
-
{ "name" => "Type", "type" => "string", "createable" => true, "updateable" => true},
|
69
|
-
{ "name" => "Address", "type" => "string", "createable" => true, "updateable" => true},
|
70
|
-
{ "name" => "City", "type" => "string", "createable" => true, "updateable" => true},
|
63
|
+
columns_hash = [
|
64
|
+
{ "name" => "Id", "type" => "id", "createable" => false, "updateable" => false},
|
65
|
+
{ "name" => "Name", "type" => "string", "createable" => true, "updateable" => true},
|
66
|
+
{ "name" => "Type", "type" => "string", "createable" => true, "updateable" => true},
|
67
|
+
{ "name" => "Address", "type" => "string", "createable" => true, "updateable" => true},
|
68
|
+
{ "name" => "City", "type" => "string", "createable" => true, "updateable" => true},
|
71
69
|
{ "name" => "State", "type" => "string", "createable" => true, "updateable" => true},
|
72
70
|
{ "name" => "Number", "type" => "string", "createable" => true, "updateable" => false}
|
73
71
|
]
|
74
|
-
|
72
|
+
|
75
73
|
Salesforce.connection.stubs(:fields).with("Account").returns(columns_hash).twice
|
76
74
|
columns = Salesforce::Columns.new("Account")
|
77
75
|
assert_equal columns, Salesforce::Account.columns
|
78
76
|
end
|
77
|
+
|
78
|
+
|
79
79
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: activeforce
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 2.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tushar Ranka
|
@@ -17,34 +17,34 @@ dependencies:
|
|
17
17
|
requirements:
|
18
18
|
- - ">="
|
19
19
|
- !ruby/object:Gem::Version
|
20
|
-
version: '4.
|
20
|
+
version: '4.0'
|
21
21
|
- - "<"
|
22
22
|
- !ruby/object:Gem::Version
|
23
|
-
version: '
|
23
|
+
version: '5.0'
|
24
24
|
type: :runtime
|
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: '4.
|
30
|
+
version: '4.0'
|
31
31
|
- - "<"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '
|
33
|
+
version: '5.0'
|
34
34
|
- !ruby/object:Gem::Dependency
|
35
35
|
name: savon
|
36
36
|
requirement: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: '
|
40
|
+
version: '2.11'
|
41
41
|
type: :runtime
|
42
42
|
prerelease: false
|
43
43
|
version_requirements: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
45
|
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: '
|
47
|
+
version: '2.11'
|
48
48
|
- !ruby/object:Gem::Dependency
|
49
49
|
name: blockenspiel
|
50
50
|
requirement: !ruby/object:Gem::Requirement
|
@@ -63,14 +63,20 @@ dependencies:
|
|
63
63
|
name: rest-client
|
64
64
|
requirement: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
|
-
- - "
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
- - "<"
|
67
70
|
- !ruby/object:Gem::Version
|
68
71
|
version: '2.0'
|
69
72
|
type: :runtime
|
70
73
|
prerelease: false
|
71
74
|
version_requirements: !ruby/object:Gem::Requirement
|
72
75
|
requirements:
|
73
|
-
- - "
|
76
|
+
- - ">="
|
77
|
+
- !ruby/object:Gem::Version
|
78
|
+
version: '0'
|
79
|
+
- - "<"
|
74
80
|
- !ruby/object:Gem::Version
|
75
81
|
version: '2.0'
|
76
82
|
- !ruby/object:Gem::Dependency
|
@@ -90,6 +96,7 @@ dependencies:
|
|
90
96
|
description: " Activeforce provides a simple to use and extend interface to Salesforce
|
91
97
|
using the REST API"
|
92
98
|
email:
|
99
|
+
- tusharranka@gmail.com
|
93
100
|
- andrew.mutz@appfolio.com
|
94
101
|
executables: []
|
95
102
|
extensions: []
|
@@ -152,9 +159,9 @@ files:
|
|
152
159
|
- app/models/salesforce/user.rb
|
153
160
|
- app/models/salesforce/user_role.rb
|
154
161
|
- app/models/salesforce/vote.rb
|
155
|
-
- gemfiles/
|
156
|
-
- gemfiles/
|
157
|
-
- gemfiles/
|
162
|
+
- gemfiles/4.0.gemfile
|
163
|
+
- gemfiles/4.1.gemfile
|
164
|
+
- gemfiles/4.2.gemfile
|
158
165
|
- lib/activeforce.rb
|
159
166
|
- lib/activeforce/version.rb
|
160
167
|
- lib/ruby_187_range_extension.rb
|
@@ -202,14 +209,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
202
209
|
requirements:
|
203
210
|
- - ">="
|
204
211
|
- !ruby/object:Gem::Version
|
205
|
-
version: '2.
|
212
|
+
version: '2.0'
|
206
213
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
207
214
|
requirements:
|
208
215
|
- - ">="
|
209
216
|
- !ruby/object:Gem::Version
|
210
217
|
version: '0'
|
211
218
|
requirements: []
|
212
|
-
|
219
|
+
rubyforge_project:
|
220
|
+
rubygems_version: 2.5.1
|
213
221
|
signing_key:
|
214
222
|
specification_version: 4
|
215
223
|
summary: A Simple gem to interact with the Salesforce REST API
|