rforce 0.10 → 0.15
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.
- checksums.yaml +7 -0
- data/.gitignore +3 -0
- data/.travis.yml +15 -0
- data/{History.txt → CHANGELOG.txt} +35 -0
- data/CODE_OF_CONDUCT.md +74 -0
- data/Gemfile +4 -0
- data/Gemfile.ci +6 -0
- data/{README.txt → README.rdoc} +3 -4
- data/Rakefile +5 -29
- data/examples/oauth_setup.rb +26 -0
- data/examples/oauth_use.rb +25 -0
- data/examples/simple.rb +20 -0
- data/lib/rforce.rb +3 -3
- data/lib/rforce/binding.rb +90 -62
- data/lib/rforce/method_keys.rb +8 -3
- data/lib/rforce/soap_response.rb +0 -4
- data/lib/rforce/version.rb +1 -1
- data/rforce.gemspec +35 -0
- metadata +54 -118
- data/.gemtest +0 -0
- data/Manifest.txt +0 -19
- data/lib/rforce/soap_response_expat.rb +0 -36
- data/lib/rforce/soap_response_hpricot.rb +0 -90
- data/spec/rforce_spec.rb +0 -237
- data/spec/soap-response.xml +0 -5928
- data/spec/spec.opts +0 -1
- data/spec/spec_helper.rb +0 -4
- data/tasks/timing.rake +0 -23
data/lib/rforce/method_keys.rb
CHANGED
@@ -2,12 +2,17 @@ module RForce
|
|
2
2
|
# Allows indexing hashes like method calls: hash.key
|
3
3
|
# to supplement the traditional way of indexing: hash[key]
|
4
4
|
module MethodKeys
|
5
|
+
def respond_to_missing?(*)
|
6
|
+
return true if respond_to?(:[])
|
7
|
+
super
|
8
|
+
end
|
9
|
+
|
5
10
|
def method_missing(method, *args)
|
6
|
-
|
7
|
-
|
11
|
+
return self[method] if respond_to?(:[])
|
12
|
+
super
|
8
13
|
end
|
9
14
|
end
|
10
|
-
|
15
|
+
|
11
16
|
class MethodHash < Hash
|
12
17
|
include MethodKeys
|
13
18
|
end
|
data/lib/rforce/soap_response.rb
CHANGED
@@ -1,14 +1,10 @@
|
|
1
1
|
begin; require 'rforce/soap_response_nokogiri'; rescue LoadError; end
|
2
|
-
begin; require 'rforce/soap_response_hpricot'; rescue LoadError; end
|
3
|
-
begin; require 'rforce/soap_response_expat'; rescue LoadError; end
|
4
2
|
require 'rforce/soap_response_rexml'
|
5
3
|
|
6
4
|
|
7
5
|
module RForce
|
8
6
|
# Use the fastest XML parser available.
|
9
7
|
SoapResponse =
|
10
|
-
(RForce::const_get(:SoapResponseExpat) rescue nil) ||
|
11
8
|
(RForce::const_get(:SoapResponseNokogiri) rescue nil) ||
|
12
|
-
(RForce::const_get(:SoapResponseHpricot) rescue nil) ||
|
13
9
|
SoapResponseRexml
|
14
10
|
end
|
data/lib/rforce/version.rb
CHANGED
data/rforce.gemspec
ADDED
@@ -0,0 +1,35 @@
|
|
1
|
+
lib = File.expand_path("lib", __dir__)
|
2
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
3
|
+
require "rforce/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |spec|
|
6
|
+
spec.name = "rforce"
|
7
|
+
spec.version = RForce::VERSION
|
8
|
+
spec.authors = ["Erin Dees"]
|
9
|
+
spec.email = ["undees@gmail.com"]
|
10
|
+
|
11
|
+
spec.summary = %q{A simple, usable binding to the Salesforce API.}
|
12
|
+
spec.homepage = "https://github.com/undees/rforce"
|
13
|
+
spec.license = "MIT"
|
14
|
+
|
15
|
+
spec.metadata["homepage_uri"] = spec.homepage
|
16
|
+
spec.metadata["source_code_uri"] = "https://github.com/undees/rforce"
|
17
|
+
spec.metadata["changelog_uri"] = "https://github.com/undees/rforce/"
|
18
|
+
|
19
|
+
# Specify which files should be added to the gem when it is released.
|
20
|
+
# The `git ls-files -z` loads the files in the RubyGem that have been added into git.
|
21
|
+
spec.files = Dir.chdir(File.expand_path('..', __FILE__)) do
|
22
|
+
`git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features|lib/tasks)/}) }
|
23
|
+
end
|
24
|
+
spec.require_paths = ["lib"]
|
25
|
+
|
26
|
+
spec.add_runtime_dependency "builder", "~> 3.0"
|
27
|
+
spec.add_runtime_dependency "oauth", "~> 0.5.5"
|
28
|
+
|
29
|
+
spec.add_development_dependency "bundler", "~> 2.0"
|
30
|
+
spec.add_development_dependency "rake", "~> 12.3.3"
|
31
|
+
spec.add_development_dependency "rspec", "~> 3.0"
|
32
|
+
|
33
|
+
# Optional XML parsing engines
|
34
|
+
spec.add_development_dependency "nokogiri", "~> 1.10.8"
|
35
|
+
end
|
metadata
CHANGED
@@ -1,214 +1,150 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rforce
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: '0.
|
5
|
-
prerelease:
|
4
|
+
version: '0.15'
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
|
-
-
|
7
|
+
- Erin Dees
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date:
|
11
|
+
date: 2021-04-22 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: builder
|
16
15
|
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
16
|
requirements:
|
19
|
-
- - ~>
|
17
|
+
- - "~>"
|
20
18
|
- !ruby/object:Gem::Version
|
21
19
|
version: '3.0'
|
22
20
|
type: :runtime
|
23
21
|
prerelease: false
|
24
22
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
-
none: false
|
26
23
|
requirements:
|
27
|
-
- - ~>
|
24
|
+
- - "~>"
|
28
25
|
- !ruby/object:Gem::Version
|
29
26
|
version: '3.0'
|
30
27
|
- !ruby/object:Gem::Dependency
|
31
28
|
name: oauth
|
32
29
|
requirement: !ruby/object:Gem::Requirement
|
33
|
-
none: false
|
34
30
|
requirements:
|
35
|
-
- - ~>
|
31
|
+
- - "~>"
|
36
32
|
- !ruby/object:Gem::Version
|
37
|
-
version:
|
33
|
+
version: 0.5.5
|
38
34
|
type: :runtime
|
39
35
|
prerelease: false
|
40
36
|
version_requirements: !ruby/object:Gem::Requirement
|
41
|
-
none: false
|
42
37
|
requirements:
|
43
|
-
- - ~>
|
38
|
+
- - "~>"
|
44
39
|
- !ruby/object:Gem::Version
|
45
|
-
version:
|
40
|
+
version: 0.5.5
|
46
41
|
- !ruby/object:Gem::Dependency
|
47
|
-
name:
|
42
|
+
name: bundler
|
48
43
|
requirement: !ruby/object:Gem::Requirement
|
49
|
-
none: false
|
50
44
|
requirements:
|
51
|
-
- - ~>
|
45
|
+
- - "~>"
|
52
46
|
- !ruby/object:Gem::Version
|
53
|
-
version: '2.
|
47
|
+
version: '2.0'
|
54
48
|
type: :development
|
55
49
|
prerelease: false
|
56
50
|
version_requirements: !ruby/object:Gem::Requirement
|
57
|
-
none: false
|
58
51
|
requirements:
|
59
|
-
- - ~>
|
52
|
+
- - "~>"
|
60
53
|
- !ruby/object:Gem::Version
|
61
|
-
version: '2.
|
54
|
+
version: '2.0'
|
62
55
|
- !ruby/object:Gem::Dependency
|
63
|
-
name:
|
56
|
+
name: rake
|
64
57
|
requirement: !ruby/object:Gem::Requirement
|
65
|
-
none: false
|
66
58
|
requirements:
|
67
|
-
- - ~>
|
59
|
+
- - "~>"
|
68
60
|
- !ruby/object:Gem::Version
|
69
|
-
version:
|
61
|
+
version: 12.3.3
|
70
62
|
type: :development
|
71
63
|
prerelease: false
|
72
64
|
version_requirements: !ruby/object:Gem::Requirement
|
73
|
-
none: false
|
74
65
|
requirements:
|
75
|
-
- - ~>
|
66
|
+
- - "~>"
|
76
67
|
- !ruby/object:Gem::Version
|
77
|
-
version:
|
68
|
+
version: 12.3.3
|
78
69
|
- !ruby/object:Gem::Dependency
|
79
|
-
name:
|
70
|
+
name: rspec
|
80
71
|
requirement: !ruby/object:Gem::Requirement
|
81
|
-
none: false
|
82
72
|
requirements:
|
83
|
-
- - ~>
|
73
|
+
- - "~>"
|
84
74
|
- !ruby/object:Gem::Version
|
85
|
-
version: '0
|
75
|
+
version: '3.0'
|
86
76
|
type: :development
|
87
77
|
prerelease: false
|
88
78
|
version_requirements: !ruby/object:Gem::Requirement
|
89
|
-
none: false
|
90
79
|
requirements:
|
91
|
-
- - ~>
|
80
|
+
- - "~>"
|
92
81
|
- !ruby/object:Gem::Version
|
93
|
-
version: '0
|
82
|
+
version: '3.0'
|
94
83
|
- !ruby/object:Gem::Dependency
|
95
84
|
name: nokogiri
|
96
85
|
requirement: !ruby/object:Gem::Requirement
|
97
|
-
none: false
|
98
|
-
requirements:
|
99
|
-
- - ~>
|
100
|
-
- !ruby/object:Gem::Version
|
101
|
-
version: '1.5'
|
102
|
-
type: :development
|
103
|
-
prerelease: false
|
104
|
-
version_requirements: !ruby/object:Gem::Requirement
|
105
|
-
none: false
|
106
|
-
requirements:
|
107
|
-
- - ~>
|
108
|
-
- !ruby/object:Gem::Version
|
109
|
-
version: '1.5'
|
110
|
-
- !ruby/object:Gem::Dependency
|
111
|
-
name: xmlparser
|
112
|
-
requirement: !ruby/object:Gem::Requirement
|
113
|
-
none: false
|
114
|
-
requirements:
|
115
|
-
- - ~>
|
116
|
-
- !ruby/object:Gem::Version
|
117
|
-
version: '0.7'
|
118
|
-
type: :development
|
119
|
-
prerelease: false
|
120
|
-
version_requirements: !ruby/object:Gem::Requirement
|
121
|
-
none: false
|
122
|
-
requirements:
|
123
|
-
- - ~>
|
124
|
-
- !ruby/object:Gem::Version
|
125
|
-
version: '0.7'
|
126
|
-
- !ruby/object:Gem::Dependency
|
127
|
-
name: rdoc
|
128
|
-
requirement: !ruby/object:Gem::Requirement
|
129
|
-
none: false
|
130
|
-
requirements:
|
131
|
-
- - ~>
|
132
|
-
- !ruby/object:Gem::Version
|
133
|
-
version: '3.10'
|
134
|
-
type: :development
|
135
|
-
prerelease: false
|
136
|
-
version_requirements: !ruby/object:Gem::Requirement
|
137
|
-
none: false
|
138
|
-
requirements:
|
139
|
-
- - ~>
|
140
|
-
- !ruby/object:Gem::Version
|
141
|
-
version: '3.10'
|
142
|
-
- !ruby/object:Gem::Dependency
|
143
|
-
name: hoe
|
144
|
-
requirement: !ruby/object:Gem::Requirement
|
145
|
-
none: false
|
146
86
|
requirements:
|
147
|
-
- - ~>
|
87
|
+
- - "~>"
|
148
88
|
- !ruby/object:Gem::Version
|
149
|
-
version:
|
89
|
+
version: 1.10.8
|
150
90
|
type: :development
|
151
91
|
prerelease: false
|
152
92
|
version_requirements: !ruby/object:Gem::Requirement
|
153
|
-
none: false
|
154
93
|
requirements:
|
155
|
-
- - ~>
|
94
|
+
- - "~>"
|
156
95
|
- !ruby/object:Gem::Version
|
157
|
-
version:
|
158
|
-
description:
|
96
|
+
version: 1.10.8
|
97
|
+
description:
|
159
98
|
email:
|
160
99
|
- undees@gmail.com
|
161
100
|
executables: []
|
162
101
|
extensions: []
|
163
|
-
extra_rdoc_files:
|
164
|
-
- History.txt
|
165
|
-
- Manifest.txt
|
166
|
-
- README.txt
|
102
|
+
extra_rdoc_files: []
|
167
103
|
files:
|
168
|
-
-
|
169
|
-
-
|
170
|
-
-
|
104
|
+
- ".gitignore"
|
105
|
+
- ".travis.yml"
|
106
|
+
- CHANGELOG.txt
|
107
|
+
- CODE_OF_CONDUCT.md
|
108
|
+
- Gemfile
|
109
|
+
- Gemfile.ci
|
110
|
+
- README.rdoc
|
171
111
|
- Rakefile
|
112
|
+
- examples/oauth_setup.rb
|
113
|
+
- examples/oauth_use.rb
|
114
|
+
- examples/simple.rb
|
172
115
|
- lib/rforce.rb
|
173
116
|
- lib/rforce/binding.rb
|
174
117
|
- lib/rforce/method_keys.rb
|
175
118
|
- lib/rforce/soap_pullable.rb
|
176
119
|
- lib/rforce/soap_response.rb
|
177
|
-
- lib/rforce/soap_response_expat.rb
|
178
|
-
- lib/rforce/soap_response_hpricot.rb
|
179
120
|
- lib/rforce/soap_response_nokogiri.rb
|
180
121
|
- lib/rforce/soap_response_rexml.rb
|
181
122
|
- lib/rforce/version.rb
|
182
|
-
-
|
183
|
-
|
184
|
-
|
185
|
-
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
123
|
+
- rforce.gemspec
|
124
|
+
homepage: https://github.com/undees/rforce
|
125
|
+
licenses:
|
126
|
+
- MIT
|
127
|
+
metadata:
|
128
|
+
homepage_uri: https://github.com/undees/rforce
|
129
|
+
source_code_uri: https://github.com/undees/rforce
|
130
|
+
changelog_uri: https://github.com/undees/rforce/
|
190
131
|
post_install_message:
|
191
|
-
rdoc_options:
|
192
|
-
- --main
|
193
|
-
- README.txt
|
132
|
+
rdoc_options: []
|
194
133
|
require_paths:
|
195
134
|
- lib
|
196
135
|
required_ruby_version: !ruby/object:Gem::Requirement
|
197
|
-
none: false
|
198
136
|
requirements:
|
199
|
-
- -
|
137
|
+
- - ">="
|
200
138
|
- !ruby/object:Gem::Version
|
201
139
|
version: '0'
|
202
140
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
203
|
-
none: false
|
204
141
|
requirements:
|
205
|
-
- -
|
142
|
+
- - ">="
|
206
143
|
- !ruby/object:Gem::Version
|
207
144
|
version: '0'
|
208
145
|
requirements: []
|
209
|
-
|
210
|
-
rubygems_version: 1.8.23
|
146
|
+
rubygems_version: 3.1.4
|
211
147
|
signing_key:
|
212
|
-
specification_version:
|
213
|
-
summary:
|
148
|
+
specification_version: 4
|
149
|
+
summary: A simple, usable binding to the Salesforce API.
|
214
150
|
test_files: []
|
data/.gemtest
DELETED
File without changes
|
data/Manifest.txt
DELETED
@@ -1,19 +0,0 @@
|
|
1
|
-
History.txt
|
2
|
-
Manifest.txt
|
3
|
-
README.txt
|
4
|
-
Rakefile
|
5
|
-
lib/rforce.rb
|
6
|
-
lib/rforce/binding.rb
|
7
|
-
lib/rforce/method_keys.rb
|
8
|
-
lib/rforce/soap_pullable.rb
|
9
|
-
lib/rforce/soap_response.rb
|
10
|
-
lib/rforce/soap_response_expat.rb
|
11
|
-
lib/rforce/soap_response_hpricot.rb
|
12
|
-
lib/rforce/soap_response_nokogiri.rb
|
13
|
-
lib/rforce/soap_response_rexml.rb
|
14
|
-
lib/rforce/version.rb
|
15
|
-
spec/rforce_spec.rb
|
16
|
-
spec/soap-response.xml
|
17
|
-
spec/spec.opts
|
18
|
-
spec/spec_helper.rb
|
19
|
-
tasks/timing.rake
|
@@ -1,36 +0,0 @@
|
|
1
|
-
require 'xml/parser'
|
2
|
-
require 'rforce/soap_pullable'
|
3
|
-
|
4
|
-
module RForce
|
5
|
-
class SoapResponseExpat
|
6
|
-
include SoapPullable
|
7
|
-
include MethodKeys
|
8
|
-
|
9
|
-
def initialize(content)
|
10
|
-
@content = content
|
11
|
-
end
|
12
|
-
|
13
|
-
def parse
|
14
|
-
@current_value = nil
|
15
|
-
@stack = []
|
16
|
-
@parsed = MethodHash.new
|
17
|
-
@done = false
|
18
|
-
@namespaces = []
|
19
|
-
|
20
|
-
XML::Parser.new.parse(@content) do |type, name, data|
|
21
|
-
case type
|
22
|
-
when XML::Parser::START_ELEM then
|
23
|
-
tag_start name, data
|
24
|
-
when XML::Parser::CDATA then
|
25
|
-
text data
|
26
|
-
when XML::Parser::END_ELEM then
|
27
|
-
tag_end name
|
28
|
-
end
|
29
|
-
|
30
|
-
break if @done
|
31
|
-
end
|
32
|
-
|
33
|
-
@parsed
|
34
|
-
end
|
35
|
-
end
|
36
|
-
end
|
@@ -1,90 +0,0 @@
|
|
1
|
-
require 'hpricot'
|
2
|
-
require 'cgi'
|
3
|
-
|
4
|
-
|
5
|
-
module RForce
|
6
|
-
class SoapResponseHpricot
|
7
|
-
# Parses an XML string into structured data.
|
8
|
-
def initialize(content)
|
9
|
-
@content = content
|
10
|
-
end
|
11
|
-
|
12
|
-
# Digests an XML DOM node into nested Ruby types.
|
13
|
-
def parse
|
14
|
-
document = Hpricot.XML(@content)
|
15
|
-
node = document % 'soapenv:Body'
|
16
|
-
self.class.node_to_ruby node
|
17
|
-
end
|
18
|
-
|
19
|
-
private
|
20
|
-
|
21
|
-
def self.unescapeXML(string)
|
22
|
-
CGI.unescapeHTML(string).gsub("'", "'")
|
23
|
-
end
|
24
|
-
|
25
|
-
def self.node_to_ruby(node)
|
26
|
-
# Convert text nodes into simple strings.
|
27
|
-
children = (node.children || []).reject do |c|
|
28
|
-
c.is_a?(Hpricot::Text) && c.to_s.strip.empty?
|
29
|
-
end
|
30
|
-
|
31
|
-
if node.is_a?(Hpricot::Text)
|
32
|
-
return convert(SoapResponseHpricot.unescapeXML(node.inspect[1..-2]))
|
33
|
-
end
|
34
|
-
|
35
|
-
if children.first.is_a?(Hpricot::Text)
|
36
|
-
return convert(SoapResponseHpricot.unescapeXML(children.first.inspect[1..-2]))
|
37
|
-
end
|
38
|
-
|
39
|
-
# Convert nodes with children into MethodHashes.
|
40
|
-
elements = MethodHash.new
|
41
|
-
|
42
|
-
# Add all the element's children to the hash.
|
43
|
-
children.each do |e|
|
44
|
-
next if e.is_a?(Hpricot::Text) && e.to_s.strip.empty?
|
45
|
-
name = e.name
|
46
|
-
|
47
|
-
if name.include? ':'
|
48
|
-
name = name.split(':').last
|
49
|
-
end
|
50
|
-
|
51
|
-
name = name.to_sym
|
52
|
-
|
53
|
-
case elements[name]
|
54
|
-
# The most common case: unique child element tags.
|
55
|
-
when NilClass then
|
56
|
-
# <records> contents are always arrays
|
57
|
-
elements[name] = :records == name ? [node_to_ruby(e)] : node_to_ruby(e)
|
58
|
-
|
59
|
-
# Non-unique child elements become arrays:
|
60
|
-
|
61
|
-
# We've already created the array: just
|
62
|
-
# add the element.
|
63
|
-
when Array then
|
64
|
-
elements[name] << node_to_ruby(e)
|
65
|
-
|
66
|
-
# We haven't created the array yet: do so,
|
67
|
-
# then put the existing element in, followed
|
68
|
-
# by the new one.
|
69
|
-
else
|
70
|
-
next if :Id == name # avoid duplicate <Id> tags
|
71
|
-
elements[name] = [elements[name]]
|
72
|
-
elements[name] << node_to_ruby(e)
|
73
|
-
end
|
74
|
-
end
|
75
|
-
|
76
|
-
return elements.empty? ? nil : elements
|
77
|
-
end
|
78
|
-
|
79
|
-
def self.convert(string)
|
80
|
-
return nil if string.nil?
|
81
|
-
s = string.strip
|
82
|
-
|
83
|
-
case s
|
84
|
-
when '' then nil
|
85
|
-
when 'true', 'false' then ('true' == s)
|
86
|
-
else s
|
87
|
-
end
|
88
|
-
end
|
89
|
-
end
|
90
|
-
end
|