activesalesforce 0.2.1 → 0.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -30,7 +30,6 @@ require 'pp'
30
30
  module ActiveRecord
31
31
  module StringHelper
32
32
  def column_nameize(s)
33
- #s ? s.first.downcase + s[1 .. s.length] : nil
34
33
  s.underscore
35
34
  end
36
35
  end
data/lib/rforce.rb CHANGED
@@ -120,6 +120,7 @@ module RForce
120
120
  return elements
121
121
  end
122
122
  end
123
+
123
124
 
124
125
  #Implements the connection to the SalesForce server.
125
126
  class Binding
@@ -147,17 +148,20 @@ module RForce
147
148
  </env:Envelope>
148
149
  HERE
149
150
 
151
+
150
152
  #Connect to the server securely.
151
- def initialize(url)
153
+ def initialize(url, sid = nil)
152
154
  init_server(url)
153
155
 
154
- @session_id = ''
156
+ @session_id = sid
155
157
  @batch_size = DEFAULT_BATCH_SIZE
156
158
  end
157
159
 
160
+
158
161
  def show_debug
159
162
  $DEBUG or ENV['SHOWSOAP']
160
163
  end
164
+
161
165
 
162
166
  def init_server(url)
163
167
  @url = URI.parse(url)
@@ -169,6 +173,7 @@ module RForce
169
173
  @server.set_debug_output $stderr if show_debug
170
174
  end
171
175
 
176
+
172
177
  #Log in to the server and remember the session ID
173
178
  #returned to us by SalesForce.
174
179
  def login(user, password)
@@ -186,6 +191,7 @@ module RForce
186
191
 
187
192
  response
188
193
  end
194
+
189
195
 
190
196
  #Call a method on the remote server. Arguments can be
191
197
  #a hash or (if order is important) an array of alternating
@@ -238,6 +244,7 @@ module RForce
238
244
 
239
245
  SoapResponse.new(content)
240
246
  end
247
+
241
248
 
242
249
  # decode gzip
243
250
  def decode(response)
@@ -260,6 +267,7 @@ module RForce
260
267
  response.body
261
268
  end
262
269
  end
270
+
263
271
 
264
272
  # encode gzip
265
273
  def encode(request)
@@ -275,6 +283,7 @@ module RForce
275
283
  end
276
284
  end
277
285
 
286
+
278
287
  #Turns method calls on this object into remote SOAP calls.
279
288
  def method_missing(method, *args)
280
289
  unless args.size == 1 && [Hash, Array].include?(args[0].class)
@@ -283,6 +292,7 @@ module RForce
283
292
 
284
293
  call_remote method, args[0]
285
294
  end
295
+
286
296
 
287
297
  #Expand Ruby data structures into XML.
288
298
  def expand(args, xmlns = nil)
@@ -26,7 +26,7 @@ require_gem 'rails', ">= 1.0.0"
26
26
 
27
27
  require 'thread'
28
28
 
29
- require File.dirname(__FILE__) + '/salesforce_login'
29
+ require File.dirname(__FILE__) + '/rforce'
30
30
  require File.dirname(__FILE__) + '/column_definition'
31
31
 
32
32
  class ResultArray < Array
@@ -46,20 +46,38 @@ module ActiveRecord
46
46
  puts "Using ActiveSalesforce connection!"
47
47
 
48
48
  url = config[:url]
49
- username = config[:username]
50
- password = config[:password]
49
+ sid = config[:sid]
51
50
 
52
- connection = @@cache["#{url}.#{username}.#{password}"]
53
- unless connection
54
- puts "Establishing new connection for ['#{url}', '#{username}']"
55
-
56
- connection = SalesforceLogin.new(url, username, password).proxy
57
- @@cache["#{url}.#{username}.#{password}"] = connection
51
+ if sid
52
+ connection = @@cache["sid=#{sid}"]
53
+ unless connection
54
+ puts "Establishing new connection for [sid='#{sid}']"
55
+
56
+ connection = RForce::Binding.new(url, sid)
57
+ @@cache["sid=#{sid}"] = connection
58
+
59
+ puts "Created new connection for [sid='#{sid}']"
60
+ end
61
+
62
+ ConnectionAdapters::SalesforceAdapter.new(connection, logger, [url, sid], config)
63
+ else
64
+ username = config[:username]
65
+ password = config[:password]
66
+
67
+ connection = @@cache["#{url}.#{username}.#{password}"]
68
+ unless connection
69
+ puts "Establishing new connection for ['#{url}', '#{username}']"
70
+
71
+ connection = RForce::Binding.new(url)
72
+ connection.login(username, password).result
73
+
74
+ @@cache["#{url}.#{username}.#{password}"] = connection
75
+
76
+ puts "Created new connection for ['#{url}', '#{username}']"
77
+ end
58
78
 
59
- puts "Created new connection for ['#{url}', '#{username}']"
79
+ ConnectionAdapters::SalesforceAdapter.new(connection, logger, [url, username, password], config)
60
80
  end
61
-
62
- ConnectionAdapters::SalesforceAdapter.new(connection, logger, [url, username, password], config)
63
81
  end
64
82
  end
65
83
 
@@ -72,15 +90,14 @@ module ActiveRecord
72
90
  super message
73
91
 
74
92
  @fault = fault
75
-
76
- #puts "\nSalesforceError:\n message='#{message}'\n fault='#{fault}'\n\n"
93
+
77
94
  logger.debug("\nSalesforceError:\n message='#{message}'\n fault='#{fault}'\n\n")
78
95
  end
79
96
  end
80
97
 
81
-
82
- class SalesforceAdapter < AbstractAdapter
83
98
 
99
+ class SalesforceAdapter < AbstractAdapter
100
+
84
101
  class EntityDefinition
85
102
  attr_reader :name, :columns, :column_name_to_column, :relationships
86
103
 
@@ -134,10 +151,10 @@ module ActiveRecord
134
151
 
135
152
  def quote(value, column = nil)
136
153
  case value
137
- when NilClass then quoted_value = "'NULL'"
138
- when TrueClass then quoted_value = "'TRUE'"
139
- when FalseClass then quoted_value = "'FALSE'"
140
- else quoted_value = super(value, column)
154
+ when NilClass then quoted_value = "'NULL'"
155
+ when TrueClass then quoted_value = "'TRUE'"
156
+ when FalseClass then quoted_value = "'FALSE'"
157
+ else quoted_value = super(value, column)
141
158
  end
142
159
 
143
160
  "@V_#{quoted_value}"
@@ -176,7 +193,7 @@ module ActiveRecord
176
193
  table_name = raw_table_name.singularize
177
194
  entity_name = entity_name_from_table(table_name)
178
195
  entity_def = get_entity_def(entity_name)
179
-
196
+
180
197
  column_names = api_column_names(table_name)
181
198
 
182
199
  # Always (unless COUNT*)'ing) select all columns (required for the AR attributes mechanism to work correctly
@@ -209,7 +226,7 @@ module ActiveRecord
209
226
  @batch_size = nil
210
227
 
211
228
  queryResult = get_result(@connection.query(:queryString => soql), :query)
212
- records = queryResult.records
229
+ records = queryResult[:records]
213
230
 
214
231
  result = ResultArray.new(queryResult[:size].to_i)
215
232
  return result unless records
@@ -264,7 +281,7 @@ module ActiveRecord
264
281
 
265
282
  # Extract arrays of values
266
283
  values = extract_values(sql)
267
-
284
+
268
285
  fields = {}
269
286
  names.each_with_index do | name, n |
270
287
  value = values[n]
@@ -289,14 +306,14 @@ module ActiveRecord
289
306
 
290
307
  names = extract_columns(sql)
291
308
  values = extract_values(sql)
292
-
309
+
293
310
  fields = {}
294
311
  names.each_with_index do | name, n |
295
312
  column = columns[name]
296
313
  value = values[n]
297
314
  fields[column.api_name] = value if not column.readonly and value != "NULL"
298
315
  end
299
-
316
+
300
317
  id = sql.match(/WHERE id = @V_'(\w+)'/i)[1]
301
318
 
302
319
  sobject = create_sobject(entity_name, id, fields)
@@ -332,7 +349,7 @@ module ActiveRecord
332
349
  result = [ result ] unless result.is_a?(Array)
333
350
 
334
351
  result.each do |r|
335
- raise SalesforceError.new(@logger, r[:errors], r[:errors][:message]) unless r[:success] == "true"
352
+ raise SalesforceError.new(@logger, r[:errors], r[:errors][:message]) unless r[:success] == "true"
336
353
  end
337
354
 
338
355
  result
@@ -354,7 +371,7 @@ module ActiveRecord
354
371
  metadata = get_result(@connection.describeSObject(:sObjectType => entity_name + "__c"), :describeSObject)
355
372
  custom = true
356
373
  end
357
-
374
+
358
375
  metadata.fields.each do |field|
359
376
  column = SalesforceColumn.new(field)
360
377
  cached_columns << column
@@ -375,12 +392,12 @@ module ActiveRecord
375
392
  end
376
393
  end
377
394
  end
378
-
395
+
379
396
  entity_def = EntityDefinition.new(entity_name, cached_columns, cached_relationships, custom)
380
397
  @entity_def_map[entity_name] = entity_def
381
398
 
382
399
  configure_active_record entity_def
383
-
400
+
384
401
  entity_def
385
402
  end
386
403
 
@@ -429,7 +446,7 @@ module ActiveRecord
429
446
  entity_name = entity_name_from_table(table_name)
430
447
  get_entity_def(entity_name).columns
431
448
  end
432
-
449
+
433
450
 
434
451
  def columns_map(table_name, name = nil)
435
452
  entity_name = entity_name_from_table(table_name)
metadata CHANGED
@@ -3,7 +3,7 @@ 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.1
6
+ version: 0.2.2
7
7
  date: 2006-02-06 00:00:00 -05:00
8
8
  summary: ActiveSalesforce is an extension to the Rails Framework that allows for the dynamic creation and management of ActiveRecord objects through the use of Salesforce meta-data and uses a Salesforce.com organization as the backing store.
9
9
  require_paths:
@@ -28,7 +28,6 @@ cert_chain:
28
28
  authors:
29
29
  - Doug Chasman
30
30
  files:
31
- - lib/salesforce_login.rb
32
31
  - lib/column_definition.rb
33
32
  - lib/activesalesforce.rb
34
33
  - lib/rforce.rb
@@ -1,39 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- =begin
4
- ActiveSalesforce
5
- Copyright (c) 2006 Doug Chasman
6
-
7
- Permission is hereby granted, free of charge, to any person obtaining a copy
8
- of this software and associated documentation files (the "Software"), to deal
9
- in the Software without restriction, including without limitation the rights
10
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
11
- copies of the Software, and to permit persons to whom the Software is
12
- furnished to do so, subject to the following conditions:
13
-
14
- The above copyright notice and this permission notice shall be included in
15
- all copies or substantial portions of the Software.
16
-
17
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
20
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
22
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
23
- SOFTWARE.
24
- =end
25
-
26
- require File.dirname(__FILE__) + '/rforce.rb'
27
-
28
-
29
- class SalesforceLogin
30
- attr_reader :proxy
31
-
32
- def initialize(url, username, password)
33
- puts "SalesforceLogin.initialize()"
34
-
35
- @proxy = RForce::Binding.new(url)
36
-
37
- login_result = @proxy.login(username, password).result
38
- end
39
- end