activesalesforce 0.2.4 → 0.2.5
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/asf_adapter.rb +41 -28
- metadata +2 -2
data/lib/asf_adapter.rb
CHANGED
@@ -87,7 +87,7 @@ module ActiveRecord
|
|
87
87
|
class SalesforceError < RuntimeError
|
88
88
|
attr :fault
|
89
89
|
|
90
|
-
def initialize(logger, message, fault)
|
90
|
+
def initialize(logger, message, fault = nil)
|
91
91
|
super message
|
92
92
|
|
93
93
|
@fault = fault
|
@@ -161,7 +161,6 @@ module ActiveRecord
|
|
161
161
|
quoted_value
|
162
162
|
end
|
163
163
|
|
164
|
-
|
165
164
|
# CONNECTION MANAGEMENT ====================================
|
166
165
|
|
167
166
|
def active?
|
@@ -215,9 +214,6 @@ module ActiveRecord
|
|
215
214
|
# Update table name references
|
216
215
|
soql.sub!(/#{raw_table_name}\./i, "#{entity_def.api_name}.")
|
217
216
|
|
218
|
-
# Remove column value prefix
|
219
|
-
soql.gsub!(/@V_/, "")
|
220
|
-
|
221
217
|
log(soql, name)
|
222
218
|
|
223
219
|
@connection.batch_size = @batch_size if @batch_size
|
@@ -239,8 +235,14 @@ module ActiveRecord
|
|
239
235
|
# Ids may be returned in an array with 2 duplicate entries...
|
240
236
|
value = value[0] if name == :Id && value.is_a?(Array)
|
241
237
|
|
242
|
-
|
243
|
-
|
238
|
+
column = entity_def.api_name_to_column[name.to_s]
|
239
|
+
attribute_name = column.name
|
240
|
+
|
241
|
+
if column.type == :boolean
|
242
|
+
row[attribute_name] = (value.casecmp("true") == 0)
|
243
|
+
else
|
244
|
+
row[attribute_name] = value
|
245
|
+
end
|
244
246
|
end
|
245
247
|
end
|
246
248
|
|
@@ -279,16 +281,11 @@ module ActiveRecord
|
|
279
281
|
|
280
282
|
# Extract arrays of values
|
281
283
|
values = sql.match(/VALUES\s*\((.+)\)/i)[1]
|
282
|
-
values = values.scan(/(((NULL))|'(([^']
|
283
|
-
|
284
|
-
|
285
|
-
|
286
|
-
|
287
|
-
value = values[n]
|
288
|
-
column = columns[name]
|
289
|
-
|
290
|
-
fields[column.api_name] = value if not column.readonly and value != "NULL"
|
291
|
-
end
|
284
|
+
values = values.scan(/(((NULL))|((TRUE))|((FALSE))|'(([^']|'')*)'),*/mi)
|
285
|
+
|
286
|
+
values.map! { |v| v[7] }
|
287
|
+
|
288
|
+
fields = get_fields(columns, names, values)
|
292
289
|
|
293
290
|
sobject = create_sobject(entity_name, nil, fields)
|
294
291
|
|
@@ -305,19 +302,15 @@ module ActiveRecord
|
|
305
302
|
columns = columns_map(table_name)
|
306
303
|
|
307
304
|
match = sql.match(/SET\s+(.+)\s+WHERE/mi)[1]
|
308
|
-
names = match.scan(/(\w+)\s
|
309
|
-
|
310
|
-
values = match.scan(/=\s+(((NULL))|'(([^']|\\')*)'),*/mi)
|
311
|
-
values.map! { |v| v[3] }
|
305
|
+
names = match.scan(/(\w+)\s*=\s*('|NULL|TRUE|FALSE)/i)
|
306
|
+
names.map! { |v| v[0] }
|
312
307
|
|
313
|
-
|
314
|
-
|
315
|
-
|
316
|
-
|
317
|
-
fields[column.api_name] = value if not column.readonly and value != "NULL"
|
318
|
-
end
|
308
|
+
values = match.scan(/=\s*(((NULL))|((TRUE))|((FALSE))|'(([^']|'')*)'),*/mi)
|
309
|
+
values.map! { |v| v[7] }
|
310
|
+
|
311
|
+
fields = get_fields(columns, names, values)
|
319
312
|
|
320
|
-
id = sql.match(/WHERE
|
313
|
+
id = sql.match(/WHERE\s+id\s*=\s*'(\w+)'/i)[1]
|
321
314
|
|
322
315
|
sobject = create_sobject(entity_name, id, fields)
|
323
316
|
|
@@ -348,6 +341,26 @@ module ActiveRecord
|
|
348
341
|
end
|
349
342
|
|
350
343
|
|
344
|
+
def get_fields(columns, names, values)
|
345
|
+
fields = {}
|
346
|
+
names.each_with_index do | name, n |
|
347
|
+
value = values[n]
|
348
|
+
|
349
|
+
if value
|
350
|
+
column = columns[name]
|
351
|
+
|
352
|
+
raise SalesforceError.new(@logger, "Column not found for #{name}!") unless column
|
353
|
+
|
354
|
+
value.gsub!(/''/, "'") if value.is_a? String
|
355
|
+
|
356
|
+
fields[column.api_name] = value unless column.readonly or value.empty?
|
357
|
+
end
|
358
|
+
end
|
359
|
+
|
360
|
+
fields
|
361
|
+
end
|
362
|
+
|
363
|
+
|
351
364
|
def get_result(response, method)
|
352
365
|
responseName = (method.to_s + "Response").to_sym
|
353
366
|
finalResponse = response[responseName]
|
metadata
CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.8.11
|
|
3
3
|
specification_version: 1
|
4
4
|
name: activesalesforce
|
5
5
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 0.2.
|
7
|
-
date: 2006-02-
|
6
|
+
version: 0.2.5
|
7
|
+
date: 2006-02-17 00:00:00 -05:00
|
8
8
|
summary: ActiveSalesforce (ASF) is a Rails connection adapter that provides direct access to Salesforce.com hosted data and metadata via the ActiveRecord model layer. Objects, fields, and relationships are all auto surfaced as active record attributes and rels.
|
9
9
|
require_paths:
|
10
10
|
- lib
|