activesalesforce 0.2.4 → 0.2.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (2) hide show
  1. data/lib/asf_adapter.rb +41 -28
  2. 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
- attribute_name = entity_def.api_name_to_column[name.to_s].name
243
- row[attribute_name] = value
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))|'(([^']|\\')*)'),*/mi)
283
- values.map! { |v| v[3] }
284
-
285
- fields = {}
286
- names.each_with_index do | name, n |
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+=/).flatten
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
- fields = {}
314
- names.each_with_index do | name, n |
315
- column = columns[name]
316
- value = values[n]
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 id = '(\w+)'/i)[1]
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.4
7
- date: 2006-02-16 00:00:00 -05:00
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