activeforce 1.5.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (86) hide show
  1. data/Gemfile +15 -0
  2. data/Gemfile.lock +128 -0
  3. data/LICENSE.txt +20 -0
  4. data/README.md +112 -0
  5. data/Rakefile +47 -0
  6. data/VERSION +1 -0
  7. data/activeforce.gemspec +151 -0
  8. data/app/models/salesforce/account.rb +4 -0
  9. data/app/models/salesforce/activity_history.rb +4 -0
  10. data/app/models/salesforce/approval.rb +4 -0
  11. data/app/models/salesforce/campaign.rb +4 -0
  12. data/app/models/salesforce/campaign_feed.rb +4 -0
  13. data/app/models/salesforce/campaign_member.rb +4 -0
  14. data/app/models/salesforce/case.rb +4 -0
  15. data/app/models/salesforce/case_comment.rb +4 -0
  16. data/app/models/salesforce/case_contact_role.rb +4 -0
  17. data/app/models/salesforce/case_feed.rb +4 -0
  18. data/app/models/salesforce/case_history.rb +4 -0
  19. data/app/models/salesforce/case_share.rb +4 -0
  20. data/app/models/salesforce/case_solution.rb +4 -0
  21. data/app/models/salesforce/case_status.rb +4 -0
  22. data/app/models/salesforce/case_team_member.rb +4 -0
  23. data/app/models/salesforce/community.rb +4 -0
  24. data/app/models/salesforce/contact.rb +4 -0
  25. data/app/models/salesforce/contact_feed.rb +4 -0
  26. data/app/models/salesforce/contact_history.rb +4 -0
  27. data/app/models/salesforce/contract.rb +4 -0
  28. data/app/models/salesforce/document.rb +4 -0
  29. data/app/models/salesforce/event.rb +4 -0
  30. data/app/models/salesforce/feed_item.rb +4 -0
  31. data/app/models/salesforce/group.rb +4 -0
  32. data/app/models/salesforce/group_member.rb +4 -0
  33. data/app/models/salesforce/idea.rb +4 -0
  34. data/app/models/salesforce/lead.rb +4 -0
  35. data/app/models/salesforce/lead_status.rb +4 -0
  36. data/app/models/salesforce/name.rb +4 -0
  37. data/app/models/salesforce/note.rb +4 -0
  38. data/app/models/salesforce/open_activity.rb +4 -0
  39. data/app/models/salesforce/opportunity.rb +4 -0
  40. data/app/models/salesforce/organization.rb +4 -0
  41. data/app/models/salesforce/partner.rb +4 -0
  42. data/app/models/salesforce/period.rb +4 -0
  43. data/app/models/salesforce/product2.rb +4 -0
  44. data/app/models/salesforce/product2_feed.rb +4 -0
  45. data/app/models/salesforce/profile.rb +4 -0
  46. data/app/models/salesforce/quote.rb +4 -0
  47. data/app/models/salesforce/solution.rb +4 -0
  48. data/app/models/salesforce/task.rb +4 -0
  49. data/app/models/salesforce/task_feed.rb +4 -0
  50. data/app/models/salesforce/task_priority.rb +4 -0
  51. data/app/models/salesforce/task_status.rb +4 -0
  52. data/app/models/salesforce/user.rb +4 -0
  53. data/app/models/salesforce/user_role.rb +4 -0
  54. data/app/models/salesforce/vote.rb +4 -0
  55. data/lib/activeforce.rb +29 -0
  56. data/lib/salesforce/attributes.rb +13 -0
  57. data/lib/salesforce/authentication.rb +25 -0
  58. data/lib/salesforce/base.rb +240 -0
  59. data/lib/salesforce/bulk/batch.rb +77 -0
  60. data/lib/salesforce/bulk/job.rb +103 -0
  61. data/lib/salesforce/bulk/operations.rb +25 -0
  62. data/lib/salesforce/bulk/update_job.rb +24 -0
  63. data/lib/salesforce/column.rb +98 -0
  64. data/lib/salesforce/columns.rb +60 -0
  65. data/lib/salesforce/config.rb +110 -0
  66. data/lib/salesforce/connection.rb +33 -0
  67. data/lib/salesforce/connection/async.rb +36 -0
  68. data/lib/salesforce/connection/conversion.rb +37 -0
  69. data/lib/salesforce/connection/http_methods.rb +72 -0
  70. data/lib/salesforce/connection/rest_api.rb +52 -0
  71. data/lib/salesforce/connection/soap_api.rb +74 -0
  72. data/lib/salesforce/engine.rb +6 -0
  73. data/lib/salesforce/errors.rb +33 -0
  74. data/test/salesforce/authentication_test.rb +52 -0
  75. data/test/salesforce/base_test.rb +440 -0
  76. data/test/salesforce/bulk/batch_test.rb +79 -0
  77. data/test/salesforce/bulk/update_job_test.rb +125 -0
  78. data/test/salesforce/column_test.rb +115 -0
  79. data/test/salesforce/config_test.rb +163 -0
  80. data/test/salesforce/connection/async_test.rb +138 -0
  81. data/test/salesforce/connection/http_methods_test.rb +242 -0
  82. data/test/salesforce/connection/rest_api_test.rb +61 -0
  83. data/test/salesforce/connection/soap_api_test.rb +148 -0
  84. data/test/salesforce/connection_test.rb +148 -0
  85. data/test/test_helper.rb +79 -0
  86. metadata +295 -0
@@ -0,0 +1,148 @@
1
+ require 'test_helper'
2
+
3
+ class Salesforce::ConnectionTest < ActiveSupport::TestCase
4
+ def test_query__less_than_2000_records
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
+ assert_equal [{ :record => 1 }], Salesforce.connection.soql("SELECT Id FROM Account")
7
+ end
8
+
9
+ def test_query__more_than_2000_records
10
+ Salesforce.connection.expects(:get).with("query.json?q=SELECT+Id+FROM+Account", :format => :json).returns({
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({
14
+ "records" => [ { :record => 2, "attributes" => "foo" } ], "done" => false, "totalSize" => 4999, "nextRecordsUrl" =>"/services/data/v22.0/query/01g8000000L9FSmAAN-4000"})
15
+
16
+ Salesforce.connection.expects(:get).with("/services/data/v22.0/query/01g8000000L9FSmAAN-4000.json", :format => :json).returns({
17
+ "records" => [ { :record => 3, "attributes" => "foo" } ], "done" => true, "totalSize" => 4999})
18
+
19
+ assert_equal [{ :record => 1}, { :record => 2}, { :record => 3}], Salesforce.connection.soql("SELECT Id FROM Account")
20
+ end
21
+
22
+ def test_as_logged_in_user__login_succeeded__calls_block
23
+ Salesforce::Authentication.expects(:session_id)
24
+ results = Salesforce.connection.as_logged_in_user do
25
+ :results
26
+ end
27
+ assert_equal :results, results
28
+ end
29
+
30
+ def test_as_logged_in_user__logged_out__recovers
31
+ flag = nil
32
+ Salesforce::Authentication.expects(:session_id).twice
33
+ Salesforce::Authentication.expects(:logout)
34
+ error = RestClient::Request::Unauthorized.new
35
+ results = Salesforce.connection.as_logged_in_user do
36
+ unless flag
37
+ flag = true
38
+ raise error
39
+ end
40
+ :results
41
+ end
42
+ assert_equal :results, results
43
+ end
44
+
45
+ def test_as_logged_in_user__authorization_failure
46
+ flag = nil
47
+ Salesforce::Authentication.expects(:session_id).times(2)
48
+ Salesforce::Authentication.expects(:logout)
49
+ error = RestClient::Request::Unauthorized.new
50
+ assert_raises RestClient::Request::Unauthorized do
51
+ Salesforce.connection.as_logged_in_user do
52
+ raise error
53
+ end
54
+ end
55
+ end
56
+
57
+ def test_as_logged_in_user__invalid_username_password__recovers
58
+ @on_login_failure_called = false
59
+
60
+ Salesforce.configure do
61
+ on_login_failure { @on_login_failure_called = true }
62
+ end
63
+
64
+ xml = <<-XML
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
+ XML
67
+
68
+ error = Savon::SOAP::Fault.new(stub(:body => xml))
69
+
70
+ flag = nil
71
+ Salesforce::Authentication.expects(:session_id).twice
72
+ Salesforce::Authentication.expects(:logout)
73
+ results = Salesforce.connection.as_logged_in_user do
74
+ unless flag
75
+ flag = true
76
+ raise error
77
+ end
78
+ :results
79
+ end
80
+
81
+ assert_equal :results, results
82
+ assert @on_login_failure_called, "Salesforce::Config.on_login_failure was not called upon login failure"
83
+ end
84
+
85
+ def test_as_logged_in_user__invalid_username_password__doesnt_recover
86
+ @on_login_failure_called = 0
87
+
88
+ Salesforce.configure do
89
+ on_login_failure { @on_login_failure_called += 1 }
90
+ end
91
+
92
+ xml = <<-XML
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
+ XML
95
+
96
+ error = Savon::SOAP::Fault.new(stub(:body => xml))
97
+
98
+ flag = nil
99
+ Salesforce::Authentication.expects(:session_id).twice
100
+ Salesforce::Authentication.expects(:logout)
101
+
102
+ assert_raises Savon::SOAP::Fault do
103
+ Salesforce.connection.as_logged_in_user do
104
+ raise error
105
+ end
106
+ end
107
+
108
+ assert_equal 1, @on_login_failure_called, "Salesforce::Config.on_login_failure was not called upon login failure"
109
+ end
110
+
111
+ def test_as_logged_in_user__invalid_username_password__recovers__no_on_login_failure_hook
112
+ xml = <<-XML
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
+ XML
115
+
116
+ error = Savon::SOAP::Fault.new(stub(:body => xml))
117
+
118
+ flag = nil
119
+ Salesforce::Authentication.expects(:session_id).twice
120
+ Salesforce::Authentication.expects(:logout)
121
+ results = Salesforce.connection.as_logged_in_user do
122
+ unless flag
123
+ flag = true
124
+ raise error
125
+ end
126
+ :results
127
+ end
128
+
129
+ assert_equal :results, results
130
+ end
131
+
132
+ def test_as_logged_in_user__other_failure
133
+ Salesforce::Authentication.stubs(:session_id)
134
+ Salesforce::Authentication.stubs(:logout)
135
+
136
+ expects(:my_method).twice.raises(RestClient::Request::Unauthorized.new).then.raises(StandardError.new("some other error"))
137
+
138
+ assert_raises StandardError do
139
+ Salesforce.connection.as_logged_in_user do
140
+ my_method
141
+ end
142
+ end
143
+ end
144
+
145
+ def test_convert
146
+ assert_equal "str", Salesforce.connection.convert("str", {})
147
+ end
148
+ end
@@ -0,0 +1,79 @@
1
+ require 'rubygems'
2
+ require 'bundler'
3
+ begin
4
+ Bundler.setup(:default, :development)
5
+ rescue Bundler::BundlerError => e
6
+ $stderr.puts e.message
7
+ $stderr.puts "Run `bundle install` to install missing gems"
8
+ exit e.status_code
9
+ end
10
+ require 'test/unit'
11
+
12
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
13
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
14
+ require 'activeforce'
15
+ Dir.glob(File.expand_path('../../app/models/salesforce/**.rb', __FILE__)).each { |file| require(file) }
16
+
17
+ class Test::Unit::TestCase
18
+ end
19
+
20
+ Time.zone = 'America/Los_Angeles'
21
+
22
+ class ActiveSupport::TestCase
23
+ setup :clean_configuration
24
+ setup :stub_soap
25
+
26
+ class ::Salesforce::BulkTable < Salesforce::Base
27
+ self.custom_object = true
28
+ end
29
+
30
+ def clean_configuration
31
+ Salesforce::Config.instance_variable_set(:@instance, nil)
32
+ end
33
+
34
+ def stub_soap
35
+ Savon::Client.any_instance.stubs(:request)
36
+ end
37
+
38
+ def clear_columns_for_bulk_table
39
+ Salesforce::BulkTable.cached_columns = nil
40
+ end
41
+
42
+ def clear_columns_for_account
43
+ Salesforce::Account.cached_columns = nil
44
+ end
45
+
46
+ def setup_columns_for_bulk_table
47
+ clear_columns_for_bulk_table
48
+ columns_hash = [
49
+ { "name" => "Id", "type" => "id", "createable" => false, "updateable" => false},
50
+ { "name" => "Account__c", "type" => "reference", "createable" => true, "updateable" => false, "custom" => true },
51
+ { "name" => "Car__c", "type" => "reference", "createable" => false, "updateable" => true, "custom" => true},
52
+ { "name" => "Name__c", "type" => "string", "createable" => true, "updateable" => true, "custom" => true},
53
+ { "name" => "dob__c", "type" => "date", "createable" => true, "updateable" => true, "custom" => true}
54
+ ]
55
+
56
+ Salesforce.connection.stubs(:fields).with("BulkTable__c").returns(columns_hash).twice
57
+ columns = Salesforce::Columns.new("BulkTable__c")
58
+ assert_equal columns, Salesforce::BulkTable.columns
59
+ end
60
+
61
+ def setup_columns_for_account
62
+ clear_columns_for_account
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},
69
+ { "name" => "State", "type" => "string", "createable" => true, "updateable" => true},
70
+ { "name" => "Number", "type" => "string", "createable" => true, "updateable" => false}
71
+ ]
72
+
73
+ Salesforce.connection.stubs(:fields).with("Account").returns(columns_hash).twice
74
+ columns = Salesforce::Columns.new("Account")
75
+ assert_equal columns, Salesforce::Account.columns
76
+ end
77
+
78
+
79
+ end
metadata ADDED
@@ -0,0 +1,295 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: activeforce
3
+ version: !ruby/object:Gem::Version
4
+ hash: 3
5
+ prerelease:
6
+ segments:
7
+ - 1
8
+ - 5
9
+ - 0
10
+ version: 1.5.0
11
+ platform: ruby
12
+ authors:
13
+ - Tushar Ranka
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2012-06-29 00:00:00 Z
19
+ dependencies:
20
+ - !ruby/object:Gem::Dependency
21
+ type: :runtime
22
+ requirement: &id001 !ruby/object:Gem::Requirement
23
+ none: false
24
+ requirements:
25
+ - - ">="
26
+ - !ruby/object:Gem::Version
27
+ hash: 3
28
+ segments:
29
+ - 0
30
+ version: "0"
31
+ version_requirements: *id001
32
+ name: rails
33
+ prerelease: false
34
+ - !ruby/object:Gem::Dependency
35
+ type: :runtime
36
+ requirement: &id002 !ruby/object:Gem::Requirement
37
+ none: false
38
+ requirements:
39
+ - - ">="
40
+ - !ruby/object:Gem::Version
41
+ hash: 3
42
+ segments:
43
+ - 0
44
+ version: "0"
45
+ version_requirements: *id002
46
+ name: savon
47
+ prerelease: false
48
+ - !ruby/object:Gem::Dependency
49
+ type: :runtime
50
+ requirement: &id003 !ruby/object:Gem::Requirement
51
+ none: false
52
+ requirements:
53
+ - - ">="
54
+ - !ruby/object:Gem::Version
55
+ hash: 3
56
+ segments:
57
+ - 0
58
+ version: "0"
59
+ version_requirements: *id003
60
+ name: blockenspiel
61
+ prerelease: false
62
+ - !ruby/object:Gem::Dependency
63
+ type: :runtime
64
+ requirement: &id004 !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ">="
68
+ - !ruby/object:Gem::Version
69
+ hash: 3
70
+ segments:
71
+ - 0
72
+ version: "0"
73
+ version_requirements: *id004
74
+ name: rest-client
75
+ prerelease: false
76
+ - !ruby/object:Gem::Dependency
77
+ type: :runtime
78
+ requirement: &id005 !ruby/object:Gem::Requirement
79
+ none: false
80
+ requirements:
81
+ - - ">="
82
+ - !ruby/object:Gem::Version
83
+ hash: 3
84
+ segments:
85
+ - 0
86
+ version: "0"
87
+ version_requirements: *id005
88
+ name: fastercsv
89
+ prerelease: false
90
+ - !ruby/object:Gem::Dependency
91
+ type: :development
92
+ requirement: &id006 !ruby/object:Gem::Requirement
93
+ none: false
94
+ requirements:
95
+ - - ">="
96
+ - !ruby/object:Gem::Version
97
+ hash: 3
98
+ segments:
99
+ - 0
100
+ version: "0"
101
+ version_requirements: *id006
102
+ name: mocha
103
+ prerelease: false
104
+ - !ruby/object:Gem::Dependency
105
+ type: :development
106
+ requirement: &id007 !ruby/object:Gem::Requirement
107
+ none: false
108
+ requirements:
109
+ - - ~>
110
+ - !ruby/object:Gem::Version
111
+ hash: 7
112
+ segments:
113
+ - 0
114
+ - 6
115
+ - 0
116
+ version: 0.6.0
117
+ version_requirements: *id007
118
+ name: yard
119
+ prerelease: false
120
+ - !ruby/object:Gem::Dependency
121
+ type: :development
122
+ requirement: &id008 !ruby/object:Gem::Requirement
123
+ none: false
124
+ requirements:
125
+ - - ~>
126
+ - !ruby/object:Gem::Version
127
+ hash: 23
128
+ segments:
129
+ - 1
130
+ - 0
131
+ - 0
132
+ version: 1.0.0
133
+ version_requirements: *id008
134
+ name: bundler
135
+ prerelease: false
136
+ - !ruby/object:Gem::Dependency
137
+ type: :development
138
+ requirement: &id009 !ruby/object:Gem::Requirement
139
+ none: false
140
+ requirements:
141
+ - - ~>
142
+ - !ruby/object:Gem::Version
143
+ hash: 7
144
+ segments:
145
+ - 1
146
+ - 6
147
+ - 4
148
+ version: 1.6.4
149
+ version_requirements: *id009
150
+ name: jeweler
151
+ prerelease: false
152
+ - !ruby/object:Gem::Dependency
153
+ type: :development
154
+ requirement: &id010 !ruby/object:Gem::Requirement
155
+ none: false
156
+ requirements:
157
+ - - ">="
158
+ - !ruby/object:Gem::Version
159
+ hash: 3
160
+ segments:
161
+ - 0
162
+ version: "0"
163
+ version_requirements: *id010
164
+ name: rcov
165
+ prerelease: false
166
+ description: " Activeforce provides a simple to use and extend interface to Salesforce using the REST API"
167
+ email: tusharranka@gmail.com
168
+ executables: []
169
+
170
+ extensions: []
171
+
172
+ extra_rdoc_files:
173
+ - LICENSE.txt
174
+ - README.md
175
+ files:
176
+ - Gemfile
177
+ - Gemfile.lock
178
+ - LICENSE.txt
179
+ - README.md
180
+ - Rakefile
181
+ - VERSION
182
+ - activeforce.gemspec
183
+ - app/models/salesforce/account.rb
184
+ - app/models/salesforce/activity_history.rb
185
+ - app/models/salesforce/approval.rb
186
+ - app/models/salesforce/campaign.rb
187
+ - app/models/salesforce/campaign_feed.rb
188
+ - app/models/salesforce/campaign_member.rb
189
+ - app/models/salesforce/case.rb
190
+ - app/models/salesforce/case_comment.rb
191
+ - app/models/salesforce/case_contact_role.rb
192
+ - app/models/salesforce/case_feed.rb
193
+ - app/models/salesforce/case_history.rb
194
+ - app/models/salesforce/case_share.rb
195
+ - app/models/salesforce/case_solution.rb
196
+ - app/models/salesforce/case_status.rb
197
+ - app/models/salesforce/case_team_member.rb
198
+ - app/models/salesforce/community.rb
199
+ - app/models/salesforce/contact.rb
200
+ - app/models/salesforce/contact_feed.rb
201
+ - app/models/salesforce/contact_history.rb
202
+ - app/models/salesforce/contract.rb
203
+ - app/models/salesforce/document.rb
204
+ - app/models/salesforce/event.rb
205
+ - app/models/salesforce/feed_item.rb
206
+ - app/models/salesforce/group.rb
207
+ - app/models/salesforce/group_member.rb
208
+ - app/models/salesforce/idea.rb
209
+ - app/models/salesforce/lead.rb
210
+ - app/models/salesforce/lead_status.rb
211
+ - app/models/salesforce/name.rb
212
+ - app/models/salesforce/note.rb
213
+ - app/models/salesforce/open_activity.rb
214
+ - app/models/salesforce/opportunity.rb
215
+ - app/models/salesforce/organization.rb
216
+ - app/models/salesforce/partner.rb
217
+ - app/models/salesforce/period.rb
218
+ - app/models/salesforce/product2.rb
219
+ - app/models/salesforce/product2_feed.rb
220
+ - app/models/salesforce/profile.rb
221
+ - app/models/salesforce/quote.rb
222
+ - app/models/salesforce/solution.rb
223
+ - app/models/salesforce/task.rb
224
+ - app/models/salesforce/task_feed.rb
225
+ - app/models/salesforce/task_priority.rb
226
+ - app/models/salesforce/task_status.rb
227
+ - app/models/salesforce/user.rb
228
+ - app/models/salesforce/user_role.rb
229
+ - app/models/salesforce/vote.rb
230
+ - lib/activeforce.rb
231
+ - lib/salesforce/attributes.rb
232
+ - lib/salesforce/authentication.rb
233
+ - lib/salesforce/base.rb
234
+ - lib/salesforce/bulk/batch.rb
235
+ - lib/salesforce/bulk/job.rb
236
+ - lib/salesforce/bulk/operations.rb
237
+ - lib/salesforce/bulk/update_job.rb
238
+ - lib/salesforce/column.rb
239
+ - lib/salesforce/columns.rb
240
+ - lib/salesforce/config.rb
241
+ - lib/salesforce/connection.rb
242
+ - lib/salesforce/connection/async.rb
243
+ - lib/salesforce/connection/conversion.rb
244
+ - lib/salesforce/connection/http_methods.rb
245
+ - lib/salesforce/connection/rest_api.rb
246
+ - lib/salesforce/connection/soap_api.rb
247
+ - lib/salesforce/engine.rb
248
+ - lib/salesforce/errors.rb
249
+ - test/salesforce/authentication_test.rb
250
+ - test/salesforce/base_test.rb
251
+ - test/salesforce/bulk/batch_test.rb
252
+ - test/salesforce/bulk/update_job_test.rb
253
+ - test/salesforce/column_test.rb
254
+ - test/salesforce/config_test.rb
255
+ - test/salesforce/connection/async_test.rb
256
+ - test/salesforce/connection/http_methods_test.rb
257
+ - test/salesforce/connection/rest_api_test.rb
258
+ - test/salesforce/connection/soap_api_test.rb
259
+ - test/salesforce/connection_test.rb
260
+ - test/test_helper.rb
261
+ homepage: http://github.com/appfolio/activeforce
262
+ licenses:
263
+ - MIT
264
+ post_install_message:
265
+ rdoc_options: []
266
+
267
+ require_paths:
268
+ - lib
269
+ required_ruby_version: !ruby/object:Gem::Requirement
270
+ none: false
271
+ requirements:
272
+ - - ">="
273
+ - !ruby/object:Gem::Version
274
+ hash: 3
275
+ segments:
276
+ - 0
277
+ version: "0"
278
+ required_rubygems_version: !ruby/object:Gem::Requirement
279
+ none: false
280
+ requirements:
281
+ - - ">="
282
+ - !ruby/object:Gem::Version
283
+ hash: 3
284
+ segments:
285
+ - 0
286
+ version: "0"
287
+ requirements: []
288
+
289
+ rubyforge_project:
290
+ rubygems_version: 1.8.12
291
+ signing_key:
292
+ specification_version: 3
293
+ summary: A Simple gem to interact with the Salesforce REST API
294
+ test_files: []
295
+