activesalesforce 0.3.0 → 0.3.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,24 +1,18 @@
1
1
  =begin
2
2
  ActiveSalesforce
3
- Copyright (c) 2006 Doug Chasman
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining a copy
6
- of this software and associated documentation files (the "Software"), to deal
7
- in the Software without restriction, including without limitation the rights
8
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- copies of the Software, and to permit persons to whom the Software is
10
- furnished to do so, subject to the following conditions:
11
-
12
- The above copyright notice and this permission notice shall be included in
13
- all copies or substantial portions of the Software.
14
-
15
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
- SOFTWARE.
3
+ Copyright 2006 Doug Chasman
4
+
5
+ Licensed under the Apache License, Version 2.0 (the "License");
6
+ you may not use this file except in compliance with the License.
7
+ You may obtain a copy of the License at
8
+
9
+ http://www.apache.org/licenses/LICENSE-2.0
10
+
11
+ Unless required by applicable law or agreed to in writing, software
12
+ distributed under the License is distributed on an "AS IS" BASIS,
13
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ See the License for the specific language governing permissions and
15
+ limitations under the License.
22
16
  =end
23
17
 
24
18
  require 'asf_adapter'
data/lib/asf_adapter.rb CHANGED
@@ -1,24 +1,18 @@
1
1
  =begin
2
2
  ActiveSalesforce
3
- Copyright (c) 2006 Doug Chasman
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining a copy
6
- of this software and associated documentation files (the "Software"), to deal
7
- in the Software without restriction, including without limitation the rights
8
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- copies of the Software, and to permit persons to whom the Software is
10
- furnished to do so, subject to the following conditions:
11
-
12
- The above copyright notice and this permission notice shall be included in
13
- all copies or substantial portions of the Software.
14
-
15
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
- SOFTWARE.
3
+ Copyright 2006 Doug Chasman
4
+
5
+ Licensed under the Apache License, Version 2.0 (the "License");
6
+ you may not use this file except in compliance with the License.
7
+ You may obtain a copy of the License at
8
+
9
+ http://www.apache.org/licenses/LICENSE-2.0
10
+
11
+ Unless required by applicable law or agreed to in writing, software
12
+ distributed under the License is distributed on an "AS IS" BASIS,
13
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ See the License for the specific language governing permissions and
15
+ limitations under the License.
22
16
  =end
23
17
 
24
18
  require 'rubygems'
@@ -189,12 +183,31 @@ module ActiveRecord
189
183
  end
190
184
 
191
185
 
186
+ # TRANSACTIOn SUPPORT (Boxcarring really because the salesforce.com api does not support transactions)
187
+
188
+ # Begins the transaction (and turns off auto-committing).
189
+ def begin_db_transaction()
190
+ log('Opening boxcar', 'begin_db_transaction()')
191
+ end
192
+
193
+ # Commits the transaction (and turns on auto-committing).
194
+ def commit_db_transaction()
195
+ log('Committing boxcar', 'commit_db_transaction()')
196
+ end
197
+
198
+ # Rolls back the transaction (and turns on auto-committing). Must be
199
+ # done if the transaction block raises an exception or returns false.
200
+ def rollback_db_transaction()
201
+ log('Rolling back boxcar', 'rollback_db_transaction()')
202
+ end
203
+
204
+
192
205
  # DATABASE STATEMENTS ======================================
193
206
 
194
207
  def select_all(sql, name = nil) #:nodoc:
195
208
  log(sql, name) {
196
209
  # Check for SELECT COUNT(*) FROM query
197
- selectCountMatch = sql.match(/SELECT COUNT\(\*\) FROM/i)
210
+ selectCountMatch = sql.match(/SELECT\s+COUNT\(\*\)\s+FROM/i)
198
211
  if selectCountMatch
199
212
  soql = "SELECT id FROM#{selectCountMatch.post_match}"
200
213
  end
@@ -209,21 +222,24 @@ module ActiveRecord
209
222
  # Always (unless COUNT*)'ing) select all columns (required for the AR attributes mechanism to work correctly
210
223
  soql = sql.sub(/SELECT .+ FROM/i, "SELECT #{column_names.join(', ')} FROM") unless selectCountMatch
211
224
 
212
- soql.sub!(/ FROM \w+/i, " FROM #{entity_def.api_name}")
225
+ soql.sub!(/\s+FROM\s+\w+/i, " FROM #{entity_def.api_name}")
213
226
 
214
227
  # Look for a LIMIT clause
215
- soql.sub!(/LIMIT 1/i, "")
228
+ soql.sub!(/LIMIT\s+1/i, "")
216
229
 
217
230
  # Look for an OFFSET clause
218
- soql.sub!(/\d+ OFFSET \d+/i, "")
231
+ soql.sub!(/\d+\s+OFFSET\s+\d+/i, "")
219
232
 
220
233
  # Fixup column references to use api names
221
234
  columns = columns_map(table_name)
222
- while soql =~ /\w+\.(\w+)/i
223
- column_name = $~[1]
235
+ soql.gsub!(/((?:\w+\.)?\w+)(?=\s*(?:=|!=|<|>|<=|>=)\s*(?:'[^']*'|NULL|TRUE|FALSE))/mi) do |column_name|
236
+ # strip away any table alias
237
+ column_name.sub!(/\w+\./, '')
224
238
 
225
239
  column = columns[column_name]
226
- soql = $~.pre_match + column.api_name + $~.post_match
240
+ raise SalesforceError.new(@logger, "Column not found for #{column_name}!") unless column
241
+
242
+ column.api_name
227
243
  end
228
244
 
229
245
  # Update table name references
@@ -283,12 +299,12 @@ module ActiveRecord
283
299
  def insert(sql, name = nil, pk = nil, id_value = nil, sequence_name = nil)
284
300
  log(sql, name) {
285
301
  # Convert sql to sobject
286
- table_name = sql.match(/INSERT INTO (\w+) /i)[1].singularize
302
+ table_name = sql.match(/INSERT\s+INTO\s+(\w+)\s+/i)[1].singularize
287
303
  entity_name = entity_name_from_table(table_name)
288
304
  columns = columns_map(table_name)
289
305
 
290
306
  # Extract array of column names
291
- names = sql.match(/\((.+)\) VALUES/i)[1].scan(/\w+/i)
307
+ names = sql.match(/\((.+)\)\s+VALUES/i)[1].scan(/\w+/i)
292
308
 
293
309
  # Extract arrays of values
294
310
  values = sql.match(/VALUES\s*\((.+)\)/i)[1]
@@ -308,7 +324,7 @@ module ActiveRecord
308
324
  def update(sql, name = nil) #:nodoc:
309
325
  log(sql, name) {
310
326
  # Convert sql to sobject
311
- table_name = sql.match(/UPDATE (\w+) /i)[1].singularize
327
+ table_name = sql.match(/UPDATE\s+(\w+)\s+/i)[1].singularize
312
328
  entity_name = entity_name_from_table(table_name)
313
329
  columns = columns_map(table_name)
314
330
 
@@ -499,7 +515,7 @@ module ActiveRecord
499
515
  klass.belongs_to referenceName.to_sym, :class_name => reference_to, :foreign_key => foreign_key, :dependent => false
500
516
  end
501
517
 
502
- @logger.debug(" Created one-to-#{one_to_many ? 'many' : 'one' } relationship '#{referenceName}' from #{entity_name} to #{relationship.reference_to} using #{foreign_key}")
518
+ #@logger.debug(" Created one-to-#{one_to_many ? 'many' : 'one' } relationship '#{referenceName}' from #{entity_name} to #{relationship.reference_to} using #{foreign_key}")
503
519
 
504
520
  end
505
521
  end
@@ -1,24 +1,18 @@
1
1
  =begin
2
2
  ActiveSalesforce
3
- Copyright (c) 2006 Doug Chasman
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining a copy
6
- of this software and associated documentation files (the "Software"), to deal
7
- in the Software without restriction, including without limitation the rights
8
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- copies of the Software, and to permit persons to whom the Software is
10
- furnished to do so, subject to the following conditions:
11
-
12
- The above copyright notice and this permission notice shall be included in
13
- all copies or substantial portions of the Software.
14
-
15
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
- SOFTWARE.
3
+ Copyright 2006 Doug Chasman
4
+
5
+ Licensed under the Apache License, Version 2.0 (the "License");
6
+ you may not use this file except in compliance with the License.
7
+ You may obtain a copy of the License at
8
+
9
+ http://www.apache.org/licenses/LICENSE-2.0
10
+
11
+ Unless required by applicable law or agreed to in writing, software
12
+ distributed under the License is distributed on an "AS IS" BASIS,
13
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ See the License for the specific language governing permissions and
15
+ limitations under the License.
22
16
  =end
23
17
 
24
18
  require 'rubygems'
data/lib/mock_binding.rb CHANGED
@@ -1,24 +1,18 @@
1
1
  =begin
2
2
  ActiveSalesforce
3
- Copyright (c) 2006 Doug Chasman
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining a copy
6
- of this software and associated documentation files (the "Software"), to deal
7
- in the Software without restriction, including without limitation the rights
8
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- copies of the Software, and to permit persons to whom the Software is
10
- furnished to do so, subject to the following conditions:
11
-
12
- The above copyright notice and this permission notice shall be included in
13
- all copies or substantial portions of the Software.
14
-
15
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
- SOFTWARE.
3
+ Copyright 2006 Doug Chasman
4
+
5
+ Licensed under the Apache License, Version 2.0 (the "License");
6
+ you may not use this file except in compliance with the License.
7
+ You may obtain a copy of the License at
8
+
9
+ http://www.apache.org/licenses/LICENSE-2.0
10
+
11
+ Unless required by applicable law or agreed to in writing, software
12
+ distributed under the License is distributed on an "AS IS" BASIS,
13
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ See the License for the specific language governing permissions and
15
+ limitations under the License.
22
16
  =end
23
17
 
24
18
  require 'yaml'
@@ -1,24 +1,18 @@
1
1
  =begin
2
2
  ActiveSalesforce
3
- Copyright (c) 2006 Doug Chasman
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining a copy
6
- of this software and associated documentation files (the "Software"), to deal
7
- in the Software without restriction, including without limitation the rights
8
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- copies of the Software, and to permit persons to whom the Software is
10
- furnished to do so, subject to the following conditions:
11
-
12
- The above copyright notice and this permission notice shall be included in
13
- all copies or substantial portions of the Software.
14
-
15
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
- SOFTWARE.
3
+ Copyright 2006 Doug Chasman
4
+
5
+ Licensed under the Apache License, Version 2.0 (the "License");
6
+ you may not use this file except in compliance with the License.
7
+ You may obtain a copy of the License at
8
+
9
+ http://www.apache.org/licenses/LICENSE-2.0
10
+
11
+ Unless required by applicable law or agreed to in writing, software
12
+ distributed under the License is distributed on an "AS IS" BASIS,
13
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ See the License for the specific language governing permissions and
15
+ limitations under the License.
22
16
  =end
23
17
 
24
18
  require 'rubygems'
data/lib/rforce.rb CHANGED
@@ -1,12 +1,3 @@
1
- require 'net/https'
2
- require 'uri'
3
- require 'zlib'
4
- require 'stringio'
5
- require 'rexml/document'
6
- require 'rexml/xpath'
7
- require 'rubygems'
8
- require_gem 'builder'
9
-
10
1
  =begin
11
2
  RForce v0.1
12
3
  Copyright (c) 2005 Ian Dees
@@ -55,6 +46,18 @@ require_gem 'builder'
55
46
  #
56
47
  # binding.create 'sObject {"xsi:type" => "Opportunity"}' => opportunity
57
48
  #
49
+
50
+
51
+ require 'net/https'
52
+ require 'uri'
53
+ require 'zlib'
54
+ require 'stringio'
55
+ require 'rexml/document'
56
+ require 'rexml/xpath'
57
+ require 'rubygems'
58
+ require_gem 'builder'
59
+
60
+
58
61
  module RForce
59
62
 
60
63
  #Allows indexing hashes like method calls: hash.key
@@ -1,3 +1,20 @@
1
+ =begin
2
+ ActiveSalesforce
3
+ Copyright 2006 Doug Chasman
4
+
5
+ Licensed under the Apache License, Version 2.0 (the "License");
6
+ you may not use this file except in compliance with the License.
7
+ You may obtain a copy of the License at
8
+
9
+ http://www.apache.org/licenses/LICENSE-2.0
10
+
11
+ Unless required by applicable law or agreed to in writing, software
12
+ distributed under the License is distributed on an "AS IS" BASIS,
13
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ See the License for the specific language governing permissions and
15
+ limitations under the License.
16
+ =end
17
+
1
18
  require 'rubygems'
2
19
 
3
20
  #require_gem 'activesalesforce', '>= 0.2.6'
@@ -25,7 +42,7 @@ module Asf
25
42
  def initialize(test_method_name)
26
43
  super(test_method_name)
27
44
 
28
- #force_recording :test_master_detail
45
+ #force_recording :test_batch_insert
29
46
  end
30
47
 
31
48
  def setup
@@ -106,6 +123,29 @@ module Asf
106
123
 
107
124
  department.destroy
108
125
  end
126
+
127
+ def test_batch_insert
128
+ c1 = Contact.new(:first_name => 'FN1', :last_name => 'LN1')
129
+ c2 = Contact.new(:first_name => 'FN2', :last_name => 'LN2')
130
+
131
+ Contact.transaction(c1, c2) do
132
+ c1.save
133
+ c2.save
134
+ end
135
+
136
+ c1.first_name << '_2'
137
+ c2.first_name << '_2'
138
+
139
+ Contact.transaction(c1, c2) do
140
+ c1.save
141
+ c2.save
142
+ end
143
+
144
+ Contact.transaction(c1, c2) do
145
+ c2.destroy
146
+ c1.destroy
147
+ end
148
+ end
109
149
 
110
150
  end
111
151