althor880-activerecord-activesalesforce-adapter 2.3.5 → 2.3.6
Sign up to get free protection for your applications and to get access to all the features.
- data/Rakefile +0 -1
- data/VERSION +1 -1
- data/althor880-activerecord-activesalesforce-adapter.gemspec +19 -20
- data/lib/rforce.rb +5 -34
- data/lib/rforce/binding.rb +15 -5
- data/lib/rforce/soap_pullable.rb +18 -18
- data/lib/rforce/soap_response.rb +12 -0
- data/lib/rforce/soap_response_expat.rb +8 -7
- data/lib/rforce/soap_response_hpricot.rb +16 -11
- data/lib/rforce/soap_response_rexml.rb +3 -2
- data/lib/rforce/version.rb +1 -1
- metadata +16 -25
data/Rakefile
CHANGED
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
2.3.
|
1
|
+
2.3.6
|
@@ -1,15 +1,15 @@
|
|
1
1
|
# Generated by jeweler
|
2
|
-
# DO NOT EDIT THIS FILE
|
3
|
-
# Instead, edit Jeweler::Tasks in Rakefile, and run
|
2
|
+
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
+
# Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
|
4
4
|
# -*- encoding: utf-8 -*-
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{althor880-activerecord-activesalesforce-adapter}
|
8
|
-
s.version = "2.3.
|
8
|
+
s.version = "2.3.6"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Doug Chasman", "Luigi Montanez", "Senthil Nayagam", "Justin Ball", "Jesse Hallett", "Andrew Freeberg"]
|
12
|
-
s.date = %q{
|
12
|
+
s.date = %q{2010-02-25}
|
13
13
|
s.email = %q{althor880@gmail.com}
|
14
14
|
s.extra_rdoc_files = [
|
15
15
|
"README"
|
@@ -36,6 +36,7 @@ Gem::Specification.new do |s|
|
|
36
36
|
"lib/rforce/binding.rb",
|
37
37
|
"lib/rforce/method_keys.rb",
|
38
38
|
"lib/rforce/soap_pullable.rb",
|
39
|
+
"lib/rforce/soap_response.rb",
|
39
40
|
"lib/rforce/soap_response_expat.rb",
|
40
41
|
"lib/rforce/soap_response_hpricot.rb",
|
41
42
|
"lib/rforce/soap_response_rexml.rb",
|
@@ -67,26 +68,26 @@ Gem::Specification.new do |s|
|
|
67
68
|
s.summary = %q{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.}
|
68
69
|
s.test_files = [
|
69
70
|
"test/unit",
|
71
|
+
"test/unit/config.yml",
|
70
72
|
"test/unit/basic_test.rb",
|
73
|
+
"test/unit/recorded_test_case.rb",
|
71
74
|
"test/unit/recorded_results",
|
72
|
-
"test/unit/recorded_results/AsfUnitTestsBasicTest.
|
73
|
-
"test/unit/recorded_results/AsfUnitTestsBasicTest.
|
75
|
+
"test/unit/recorded_results/AsfUnitTestsBasicTest.test_save_a_contact.recording",
|
76
|
+
"test/unit/recorded_results/AsfUnitTestsBasicTest.test_create_a_contact.recording",
|
74
77
|
"test/unit/recorded_results/AsfUnitTestsBasicTest.test_master_detail.recording",
|
78
|
+
"test/unit/recorded_results/AsfUnitTestsBasicTest.test_add_notes_to_contact.recording",
|
79
|
+
"test/unit/recorded_results/AsfUnitTestsBasicTest.test_assignment_rule_id.recording",
|
80
|
+
"test/unit/recorded_results/AsfUnitTestsBasicTest.test_count_contacts.recording",
|
81
|
+
"test/unit/recorded_results/AsfUnitTestsBasicTest.test_use_update_mru.recording",
|
82
|
+
"test/unit/recorded_results/AsfUnitTestsBasicTest.test_get_created_by_from_contact.recording",
|
75
83
|
"test/unit/recorded_results/AsfUnitTestsBasicTest.test_read_all_content_columns.recording",
|
76
|
-
"test/unit/recorded_results/AsfUnitTestsBasicTest.test_batch_insert.recording",
|
77
|
-
"test/unit/recorded_results/AsfUnitTestsBasicTest.test_find_a_contact_by_first_name.recording",
|
78
84
|
"test/unit/recorded_results/AsfUnitTestsBasicTest.test_client_id.recording",
|
79
|
-
"test/unit/recorded_results/AsfUnitTestsBasicTest.test_create_a_contact.recording",
|
80
|
-
"test/unit/recorded_results/AsfUnitTestsBasicTest.test_find_a_contact_by_id.recording",
|
81
|
-
"test/unit/recorded_results/AsfUnitTestsBasicTest.test_add_notes_to_contact.recording",
|
82
85
|
"test/unit/recorded_results/AsfUnitTestsBasicTest.test_find_addresses.recording",
|
86
|
+
"test/unit/recorded_results/AsfUnitTestsBasicTest.test_find_a_contact_by_first_name.recording",
|
87
|
+
"test/unit/recorded_results/AsfUnitTestsBasicTest.test_find_a_contact_by_id.recording",
|
88
|
+
"test/unit/recorded_results/AsfUnitTestsBasicTest.test_batch_insert.recording",
|
83
89
|
"test/unit/recorded_results/AsfUnitTestsBasicTest.test_find_a_contact.recording",
|
84
|
-
"test/unit/recorded_results/AsfUnitTestsBasicTest.
|
85
|
-
"test/unit/recorded_results/AsfUnitTestsBasicTest.test_save_a_contact.recording",
|
86
|
-
"test/unit/recorded_results/AsfUnitTestsBasicTest.test_get_created_by_from_contact.recording",
|
87
|
-
"test/unit/recorded_results/AsfUnitTestsBasicTest.test_assignment_rule_id.recording",
|
88
|
-
"test/unit/config.yml",
|
89
|
-
"test/unit/recorded_test_case.rb"
|
90
|
+
"test/unit/recorded_results/AsfUnitTestsBasicTest.test_use_default_rule.recording"
|
90
91
|
]
|
91
92
|
|
92
93
|
if s.respond_to? :specification_version then
|
@@ -97,17 +98,15 @@ Gem::Specification.new do |s|
|
|
97
98
|
s.add_runtime_dependency(%q<rails>, [">= 2.3.3"])
|
98
99
|
s.add_runtime_dependency(%q<builder>, [">= 1.2.4"])
|
99
100
|
s.add_runtime_dependency(%q<xmlparser>, [">= 0.6"])
|
100
|
-
s.add_runtime_dependency(%q<facets>, [">= 2.4"])
|
101
101
|
else
|
102
102
|
s.add_dependency(%q<rails>, [">= 2.3.3"])
|
103
103
|
s.add_dependency(%q<builder>, [">= 1.2.4"])
|
104
104
|
s.add_dependency(%q<xmlparser>, [">= 0.6"])
|
105
|
-
s.add_dependency(%q<facets>, [">= 2.4"])
|
106
105
|
end
|
107
106
|
else
|
108
107
|
s.add_dependency(%q<rails>, [">= 2.3.3"])
|
109
108
|
s.add_dependency(%q<builder>, [">= 1.2.4"])
|
110
109
|
s.add_dependency(%q<xmlparser>, [">= 0.6"])
|
111
|
-
s.add_dependency(%q<facets>, [">= 2.4"])
|
112
110
|
end
|
113
111
|
end
|
112
|
+
|
data/lib/rforce.rb
CHANGED
@@ -1,6 +1,5 @@
|
|
1
1
|
=begin
|
2
|
-
|
3
|
-
Copyright (c) 2005-2008 Ian Dees and contributors
|
2
|
+
Copyright (c) 2005-2010 Ian Dees and contributors
|
4
3
|
|
5
4
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
5
|
of this software and associated documentation files (the "Software"), to deal
|
@@ -29,7 +28,7 @@ SOFTWARE.
|
|
29
28
|
#
|
30
29
|
# Example:
|
31
30
|
#
|
32
|
-
# binding = RForce::Binding.new '
|
31
|
+
# binding = RForce::Binding.new 'https://www.salesforce.com/services/Soap/u/10.0'
|
33
32
|
# binding.login 'username', 'password'
|
34
33
|
# answer = binding.search(
|
35
34
|
# :searchString =>
|
@@ -47,37 +46,10 @@ SOFTWARE.
|
|
47
46
|
# binding.create 'sObject {"xsi:type" => "Opportunity"}' => opportunity
|
48
47
|
#
|
49
48
|
|
50
|
-
|
51
|
-
require 'net/https'
|
52
|
-
require 'uri'
|
53
|
-
require 'zlib'
|
54
|
-
require 'stringio'
|
55
|
-
|
56
|
-
require 'rubygems'
|
57
|
-
|
58
|
-
gem 'builder', '>= 2.0.0'
|
59
|
-
require 'builder'
|
60
|
-
|
61
|
-
gem 'facets', '>= 2.4'
|
62
|
-
require 'facets/openhash'
|
63
|
-
|
64
49
|
require 'rforce/binding'
|
65
|
-
require 'rforce/
|
66
|
-
require 'rforce/soap_response_hpricot' rescue nil
|
67
|
-
require 'rforce/soap_response_expat' rescue nil
|
68
|
-
|
50
|
+
require 'rforce/soap_response'
|
69
51
|
|
70
52
|
module RForce
|
71
|
-
# Use the fastest XML parser available.
|
72
|
-
def self.parser(name)
|
73
|
-
RForce.const_get(name) rescue nil
|
74
|
-
end
|
75
|
-
|
76
|
-
SoapResponse =
|
77
|
-
parser(:SoapResponseExpat) ||
|
78
|
-
parser(:SoapResponseHpricot) ||
|
79
|
-
SoapResponseRexml
|
80
|
-
|
81
53
|
# Expand Ruby data structures into XML.
|
82
54
|
def expand(builder, args, xmlns = nil)
|
83
55
|
# Nest arrays: [:a, 1, :b, 2] => [[:a, 1], [:b, 2]]
|
@@ -104,13 +76,12 @@ module RForce
|
|
104
76
|
# Create an XML element and fill it with this
|
105
77
|
# value's sub-items.
|
106
78
|
case value
|
107
|
-
when Hash, Array
|
79
|
+
when Hash, Array then
|
108
80
|
builder.tag!(key, attributes) do expand builder, value; end
|
109
81
|
|
110
|
-
when String
|
82
|
+
when String then
|
111
83
|
builder.tag!(key, attributes) { builder.text! value }
|
112
84
|
end
|
113
85
|
end
|
114
86
|
end
|
115
|
-
|
116
87
|
end
|
data/lib/rforce/binding.rb
CHANGED
@@ -1,3 +1,10 @@
|
|
1
|
+
require 'net/https'
|
2
|
+
require 'uri'
|
3
|
+
require 'zlib'
|
4
|
+
require 'stringio'
|
5
|
+
require 'builder'
|
6
|
+
|
7
|
+
|
1
8
|
module RForce
|
2
9
|
# Implements the connection to the SalesForce server.
|
3
10
|
class Binding
|
@@ -69,7 +76,7 @@ module RForce
|
|
69
76
|
|
70
77
|
response = call_remote(:login, [:username, user, :password, password])
|
71
78
|
|
72
|
-
raise "Incorrect user name / password [#{response
|
79
|
+
raise "Incorrect user name / password [#{response.fault}]" unless response.loginResponse
|
73
80
|
|
74
81
|
result = response[:loginResponse][:result]
|
75
82
|
@session_id = result[:sessionId]
|
@@ -84,10 +91,13 @@ module RForce
|
|
84
91
|
# a hash or (if order is important) an array of alternating
|
85
92
|
# keys and values.
|
86
93
|
def call_remote(method, args)
|
94
|
+
|
95
|
+
urn, soap_url = block_given? ? yield : ["urn:partner.soap.sforce.com", @url.path]
|
96
|
+
|
87
97
|
# Create XML text from the arguments.
|
88
98
|
expanded = ''
|
89
99
|
@builder = Builder::XmlMarkup.new(:target => expanded)
|
90
|
-
expand(@builder, {method => args},
|
100
|
+
expand(@builder, {method => args}, urn)
|
91
101
|
|
92
102
|
extra_headers = ""
|
93
103
|
extra_headers << (AssignmentRuleHeaderUsingRuleId % assignment_rule_id) if assignment_rule_id
|
@@ -128,7 +138,7 @@ module RForce
|
|
128
138
|
end
|
129
139
|
|
130
140
|
# Send the request to the server and read the response.
|
131
|
-
response = @server.post2(
|
141
|
+
response = @server.post2(soap_url, request.lstrip, headers)
|
132
142
|
|
133
143
|
# decode if we have encoding
|
134
144
|
content = decode(response)
|
@@ -142,7 +152,7 @@ module RForce
|
|
142
152
|
request = encode(request)
|
143
153
|
|
144
154
|
# Send the request to the server and read the response.
|
145
|
-
response = @server.post2(
|
155
|
+
response = @server.post2(soap_url, request.lstrip, headers)
|
146
156
|
|
147
157
|
content = decode(response)
|
148
158
|
end
|
@@ -160,7 +170,7 @@ module RForce
|
|
160
170
|
|
161
171
|
# decode gzip
|
162
172
|
case encoding.strip
|
163
|
-
when 'gzip'
|
173
|
+
when 'gzip' then
|
164
174
|
begin
|
165
175
|
gzr = Zlib::GzipReader.new(StringIO.new(response.body))
|
166
176
|
decoded = gzr.read
|
data/lib/rforce/soap_pullable.rb
CHANGED
@@ -1,7 +1,9 @@
|
|
1
|
+
require 'rforce/method_keys'
|
2
|
+
|
1
3
|
module RForce
|
2
4
|
module SoapPullable
|
3
5
|
SOAP_ENVELOPE = 'soapenv:Envelope'
|
4
|
-
|
6
|
+
|
5
7
|
# Split off the local name portion of an XML tag.
|
6
8
|
def local(tag)
|
7
9
|
first, second = tag.split ':'
|
@@ -10,32 +12,28 @@ module RForce
|
|
10
12
|
end
|
11
13
|
|
12
14
|
def tag_start(name, attrs)
|
13
|
-
tag_name = local name
|
14
|
-
|
15
15
|
# For shorter hash keys, we can strip any namespaces of the SOAP
|
16
16
|
# envelope tag from the tags inside it.
|
17
17
|
if name == SOAP_ENVELOPE
|
18
18
|
@namespaces = attrs.keys.grep(/xmlns:/).map {|k| k.split(':').last}
|
19
19
|
return
|
20
20
|
end
|
21
|
-
|
22
|
-
@stack.push
|
21
|
+
|
22
|
+
@stack.push(MethodHash.new)
|
23
23
|
end
|
24
|
-
|
24
|
+
|
25
25
|
def text(data)
|
26
|
-
|
27
|
-
|
28
|
-
|
26
|
+
adding = data.strip.empty? ? nil : data
|
27
|
+
|
28
|
+
if adding
|
29
|
+
@current_value = (@current_value || '') + adding
|
29
30
|
end
|
30
31
|
end
|
31
|
-
|
32
|
+
|
32
33
|
def tag_end(name)
|
33
|
-
return if @done
|
34
|
+
return if @done || name == SOAP_ENVELOPE
|
34
35
|
|
35
36
|
tag_name = local name
|
36
|
-
|
37
|
-
return if tag_name == SOAP_ENVELOPE
|
38
|
-
|
39
37
|
working_hash = @stack.pop
|
40
38
|
|
41
39
|
# We are either done or working on a certain depth in the current
|
@@ -44,16 +42,18 @@ module RForce
|
|
44
42
|
@parsed = working_hash
|
45
43
|
@done = true
|
46
44
|
return
|
47
|
-
else
|
48
|
-
index = @stack.size - 1
|
49
45
|
end
|
50
46
|
|
47
|
+
index = @stack.size - 1
|
48
|
+
|
51
49
|
# working_hash and @current_value have a mutually exclusive relationship.
|
52
50
|
# If the current element doesn't have a value then it means that there
|
53
51
|
# is a nested data structure. In this case then working_hash is populated
|
54
52
|
# and @current_value is nil. Conversely, if @current_value has a value
|
55
|
-
# then we do not have a nested data
|
53
|
+
# then we do not have a nested data structure and working_hash will
|
56
54
|
# be empty.
|
55
|
+
raise 'Parser is confused' unless working_hash.empty? || @current_value.nil?
|
56
|
+
|
57
57
|
use_value = working_hash.empty? ? @current_value : working_hash
|
58
58
|
tag_sym = tag_name.to_sym
|
59
59
|
element = @stack[index][tag_sym]
|
@@ -85,7 +85,7 @@ module RForce
|
|
85
85
|
# assigned yet.
|
86
86
|
@stack[index][tag_sym] = use_value
|
87
87
|
end
|
88
|
-
|
88
|
+
|
89
89
|
# We are done with the current tag so reset the data for the next one
|
90
90
|
@current_value = nil
|
91
91
|
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
begin; require 'rforce/soap_response_hpricot'; rescue LoadError; end
|
2
|
+
begin; require 'rforce/soap_response_expat'; rescue LoadError; end
|
3
|
+
require 'rforce/soap_response_rexml'
|
4
|
+
|
5
|
+
|
6
|
+
module RForce
|
7
|
+
# Use the fastest XML parser available.
|
8
|
+
SoapResponse =
|
9
|
+
RForce::const_get(:SoapResponseExpat) ||
|
10
|
+
RForce::const_get(:SoapResponseHpricot) ||
|
11
|
+
SoapResponseRexml
|
12
|
+
end
|
@@ -4,28 +4,29 @@ require 'rforce/soap_pullable'
|
|
4
4
|
module RForce
|
5
5
|
class SoapResponseExpat
|
6
6
|
include SoapPullable
|
7
|
+
include MethodKeys
|
7
8
|
|
8
9
|
def initialize(content)
|
9
10
|
@content = content
|
10
11
|
end
|
11
|
-
|
12
|
-
def parse
|
12
|
+
|
13
|
+
def parse
|
13
14
|
@current_value = nil
|
14
15
|
@stack = []
|
15
|
-
@parsed =
|
16
|
+
@parsed = {}
|
16
17
|
@done = false
|
17
18
|
@namespaces = []
|
18
19
|
|
19
20
|
XML::Parser.new.parse(@content) do |type, name, data|
|
20
21
|
case type
|
21
|
-
when XML::Parser::START_ELEM
|
22
|
+
when XML::Parser::START_ELEM then
|
22
23
|
tag_start name, data
|
23
|
-
when XML::Parser::CDATA
|
24
|
+
when XML::Parser::CDATA then
|
24
25
|
text data
|
25
|
-
when XML::Parser::END_ELEM
|
26
|
+
when XML::Parser::END_ELEM then
|
26
27
|
tag_end name
|
27
28
|
end
|
28
|
-
|
29
|
+
|
29
30
|
break if @done
|
30
31
|
end
|
31
32
|
|
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'hpricot'
|
2
|
+
require 'cgi'
|
2
3
|
|
3
4
|
|
4
5
|
module RForce
|
@@ -14,46 +15,50 @@ module RForce
|
|
14
15
|
node = document % 'soapenv:Body'
|
15
16
|
self.class.node_to_ruby node
|
16
17
|
end
|
17
|
-
|
18
|
+
|
18
19
|
private
|
19
|
-
|
20
|
+
|
21
|
+
def self.unescapeXML(string)
|
22
|
+
CGI.unescapeHTML(string).gsub("'", "'")
|
23
|
+
end
|
24
|
+
|
20
25
|
def self.node_to_ruby(node)
|
21
26
|
# Convert text nodes into simple strings.
|
22
|
-
children = node.children.reject do |c|
|
27
|
+
children = (node.children || []).reject do |c|
|
23
28
|
c.is_a?(Hpricot::Text) && c.to_s.strip.empty?
|
24
29
|
end
|
25
30
|
|
26
31
|
if node.is_a?(Hpricot::Text)
|
27
|
-
return node.
|
32
|
+
return SoapResponseHpricot.unescapeXML(node.inspect[1..-2])
|
28
33
|
end
|
29
|
-
|
34
|
+
|
30
35
|
if children.first.is_a?(Hpricot::Text)
|
31
|
-
return children.first
|
36
|
+
return SoapResponseHpricot.unescapeXML(children.first.inspect[1..-2])
|
32
37
|
end
|
33
38
|
|
34
39
|
# Convert nodes with children into MethodHashes.
|
35
|
-
elements =
|
40
|
+
elements = MethodHash.new
|
36
41
|
|
37
42
|
# Add all the element's children to the hash.
|
38
43
|
children.each do |e|
|
39
44
|
next if e.is_a?(Hpricot::Text) && e.to_s.strip.empty?
|
40
45
|
name = e.name
|
41
|
-
|
46
|
+
|
42
47
|
if name.include? ':'
|
43
48
|
name = name.split(':').last
|
44
49
|
end
|
45
|
-
|
50
|
+
|
46
51
|
name = name.to_sym
|
47
52
|
|
48
53
|
case elements[name]
|
49
54
|
# The most common case: unique child element tags.
|
50
|
-
when NilClass
|
55
|
+
when NilClass then elements[name] = node_to_ruby(e)
|
51
56
|
|
52
57
|
# Non-unique child elements become arrays:
|
53
58
|
|
54
59
|
# We've already created the array: just
|
55
60
|
# add the element.
|
56
|
-
when Array
|
61
|
+
when Array then elements[name] << node_to_ruby(e)
|
57
62
|
|
58
63
|
# We haven't created the array yet: do so,
|
59
64
|
# then put the existing element in, followed
|
@@ -8,10 +8,11 @@ module RForce
|
|
8
8
|
# object whose methods correspond to nested XML elements.
|
9
9
|
class SoapResponseRexml
|
10
10
|
include SoapPullable
|
11
|
+
include MethodKeys
|
11
12
|
|
12
13
|
%w(attlistdecl cdata comment doctype doctype_end elementdecl
|
13
14
|
entity entitydecl instruction notationdecl xmldecl).each do |unused|
|
14
|
-
define_method(unused) {}
|
15
|
+
define_method(unused) {|*args|}
|
15
16
|
end
|
16
17
|
|
17
18
|
def initialize(content)
|
@@ -22,7 +23,7 @@ module RForce
|
|
22
23
|
def parse
|
23
24
|
@current_value = nil
|
24
25
|
@stack = []
|
25
|
-
@parsed =
|
26
|
+
@parsed = {}
|
26
27
|
@done = false
|
27
28
|
@namespaces = []
|
28
29
|
|
data/lib/rforce/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: althor880-activerecord-activesalesforce-adapter
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.3.
|
4
|
+
version: 2.3.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Doug Chasman
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date:
|
17
|
+
date: 2010-02-25 00:00:00 -05:00
|
18
18
|
default_executable:
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
@@ -47,16 +47,6 @@ dependencies:
|
|
47
47
|
- !ruby/object:Gem::Version
|
48
48
|
version: "0.6"
|
49
49
|
version:
|
50
|
-
- !ruby/object:Gem::Dependency
|
51
|
-
name: facets
|
52
|
-
type: :runtime
|
53
|
-
version_requirement:
|
54
|
-
version_requirements: !ruby/object:Gem::Requirement
|
55
|
-
requirements:
|
56
|
-
- - ">="
|
57
|
-
- !ruby/object:Gem::Version
|
58
|
-
version: "2.4"
|
59
|
-
version:
|
60
50
|
description:
|
61
51
|
email: althor880@gmail.com
|
62
52
|
executables: []
|
@@ -87,6 +77,7 @@ files:
|
|
87
77
|
- lib/rforce/binding.rb
|
88
78
|
- lib/rforce/method_keys.rb
|
89
79
|
- lib/rforce/soap_pullable.rb
|
80
|
+
- lib/rforce/soap_response.rb
|
90
81
|
- lib/rforce/soap_response_expat.rb
|
91
82
|
- lib/rforce/soap_response_hpricot.rb
|
92
83
|
- lib/rforce/soap_response_rexml.rb
|
@@ -139,22 +130,22 @@ signing_key:
|
|
139
130
|
specification_version: 3
|
140
131
|
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.
|
141
132
|
test_files:
|
133
|
+
- test/unit/config.yml
|
142
134
|
- test/unit/basic_test.rb
|
143
|
-
- test/unit/
|
144
|
-
- test/unit/recorded_results/AsfUnitTestsBasicTest.
|
135
|
+
- test/unit/recorded_test_case.rb
|
136
|
+
- test/unit/recorded_results/AsfUnitTestsBasicTest.test_save_a_contact.recording
|
137
|
+
- test/unit/recorded_results/AsfUnitTestsBasicTest.test_create_a_contact.recording
|
145
138
|
- test/unit/recorded_results/AsfUnitTestsBasicTest.test_master_detail.recording
|
139
|
+
- test/unit/recorded_results/AsfUnitTestsBasicTest.test_add_notes_to_contact.recording
|
140
|
+
- test/unit/recorded_results/AsfUnitTestsBasicTest.test_assignment_rule_id.recording
|
141
|
+
- test/unit/recorded_results/AsfUnitTestsBasicTest.test_count_contacts.recording
|
142
|
+
- test/unit/recorded_results/AsfUnitTestsBasicTest.test_use_update_mru.recording
|
143
|
+
- test/unit/recorded_results/AsfUnitTestsBasicTest.test_get_created_by_from_contact.recording
|
146
144
|
- test/unit/recorded_results/AsfUnitTestsBasicTest.test_read_all_content_columns.recording
|
147
|
-
- test/unit/recorded_results/AsfUnitTestsBasicTest.test_batch_insert.recording
|
148
|
-
- test/unit/recorded_results/AsfUnitTestsBasicTest.test_find_a_contact_by_first_name.recording
|
149
145
|
- test/unit/recorded_results/AsfUnitTestsBasicTest.test_client_id.recording
|
150
|
-
- test/unit/recorded_results/AsfUnitTestsBasicTest.test_create_a_contact.recording
|
151
|
-
- test/unit/recorded_results/AsfUnitTestsBasicTest.test_find_a_contact_by_id.recording
|
152
|
-
- test/unit/recorded_results/AsfUnitTestsBasicTest.test_add_notes_to_contact.recording
|
153
146
|
- test/unit/recorded_results/AsfUnitTestsBasicTest.test_find_addresses.recording
|
147
|
+
- test/unit/recorded_results/AsfUnitTestsBasicTest.test_find_a_contact_by_first_name.recording
|
148
|
+
- test/unit/recorded_results/AsfUnitTestsBasicTest.test_find_a_contact_by_id.recording
|
149
|
+
- test/unit/recorded_results/AsfUnitTestsBasicTest.test_batch_insert.recording
|
154
150
|
- test/unit/recorded_results/AsfUnitTestsBasicTest.test_find_a_contact.recording
|
155
|
-
- test/unit/recorded_results/AsfUnitTestsBasicTest.
|
156
|
-
- test/unit/recorded_results/AsfUnitTestsBasicTest.test_save_a_contact.recording
|
157
|
-
- test/unit/recorded_results/AsfUnitTestsBasicTest.test_get_created_by_from_contact.recording
|
158
|
-
- test/unit/recorded_results/AsfUnitTestsBasicTest.test_assignment_rule_id.recording
|
159
|
-
- test/unit/config.yml
|
160
|
-
- test/unit/recorded_test_case.rb
|
151
|
+
- test/unit/recorded_results/AsfUnitTestsBasicTest.test_use_default_rule.recording
|