rforce 0.13 → 0.14

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 7f2434cd5545e6f4585b483633e52d0b172ea789
4
- data.tar.gz: c75679662a87578245a7f9d6e24187267c0551e4
2
+ SHA256:
3
+ metadata.gz: 291d2e38e8a00e2f65c8fb248790d9e78e94171b21ed1d5ec2a1602010f3c641
4
+ data.tar.gz: df51a8c4dd21ea812874f3a0389bc65f5f2187419d41658167aea8da66f95f47
5
5
  SHA512:
6
- metadata.gz: 48b8a465f2714fc8c0b1a942f9d53d64fa84c0fce4c2dd738aef7bdf43665ec30bb28dad4b4f8f24bf586526e435323c1399600fee2e3e4436203ddeb1d46a58
7
- data.tar.gz: 1bc39bd4e0258df4dad7331c59326f7dbee3826320df67423582b4a23ee695b1ed9b2bea5d73211fe92864b6a1b6b175962f5a2faa0fafcf68941c2a5fca715b
6
+ metadata.gz: 24d3d40f9bc2f3a13f07976b1b759e9eeeda20f1d29b2b040bdd431317bbb360d05d17c1209e9c3a028b2e9c3e801a9419047a23ac204f9dc160c0f1ca2d2ae8
7
+ data.tar.gz: 707e19adf5058ac34d3978dfe8891a8172e6c29b395e73eab0d77f7ed751a976363d26ba26df3a529c5d313baa4acc1432f1ea7ab0d34739626d5c72b0d24ccb
@@ -0,0 +1,2 @@
1
+ .bundle
2
+ Gemfile.lock
@@ -0,0 +1,15 @@
1
+ ---
2
+ sudo: false
3
+ language: ruby
4
+ cache: bundler
5
+ rvm:
6
+ - 2.6.0
7
+ before_install: gem install bundler -v 2.0.2
8
+ install: "bundle install"
9
+ script: "bundle exec rake spec"
10
+ rvm:
11
+ - 2.3
12
+ - 2.4
13
+ - 2.5
14
+ - 2.6
15
+ - jruby
@@ -1,3 +1,10 @@
1
+ == 0.14.0 2019-08-20
2
+
3
+ * 1 security update
4
+ * Upgraded away from vulnerable Nokogiri version
5
+ * 1 enhancement
6
+ * Slightly modernized project layout
7
+
1
8
  == 0.13.0 2015-01-05
2
9
  * 1 bug fix
3
10
  * Attempt server connection even if caller hasn't logged in yet
@@ -0,0 +1,74 @@
1
+ # Contributor Covenant Code of Conduct
2
+
3
+ ## Our Pledge
4
+
5
+ In the interest of fostering an open and welcoming environment, we as
6
+ contributors and maintainers pledge to making participation in our project and
7
+ our community a harassment-free experience for everyone, regardless of age, body
8
+ size, disability, ethnicity, gender identity and expression, level of experience,
9
+ nationality, personal appearance, race, religion, or sexual identity and
10
+ orientation.
11
+
12
+ ## Our Standards
13
+
14
+ Examples of behavior that contributes to creating a positive environment
15
+ include:
16
+
17
+ * Using welcoming and inclusive language
18
+ * Being respectful of differing viewpoints and experiences
19
+ * Gracefully accepting constructive criticism
20
+ * Focusing on what is best for the community
21
+ * Showing empathy towards other community members
22
+
23
+ Examples of unacceptable behavior by participants include:
24
+
25
+ * The use of sexualized language or imagery and unwelcome sexual attention or
26
+ advances
27
+ * Trolling, insulting/derogatory comments, and personal or political attacks
28
+ * Public or private harassment
29
+ * Publishing others' private information, such as a physical or electronic
30
+ address, without explicit permission
31
+ * Other conduct which could reasonably be considered inappropriate in a
32
+ professional setting
33
+
34
+ ## Our Responsibilities
35
+
36
+ Project maintainers are responsible for clarifying the standards of acceptable
37
+ behavior and are expected to take appropriate and fair corrective action in
38
+ response to any instances of unacceptable behavior.
39
+
40
+ Project maintainers have the right and responsibility to remove, edit, or
41
+ reject comments, commits, code, wiki edits, issues, and other contributions
42
+ that are not aligned to this Code of Conduct, or to ban temporarily or
43
+ permanently any contributor for other behaviors that they deem inappropriate,
44
+ threatening, offensive, or harmful.
45
+
46
+ ## Scope
47
+
48
+ This Code of Conduct applies both within project spaces and in public spaces
49
+ when an individual is representing the project or its community. Examples of
50
+ representing a project or community include using an official project e-mail
51
+ address, posting via an official social media account, or acting as an appointed
52
+ representative at an online or offline event. Representation of a project may be
53
+ further defined and clarified by project maintainers.
54
+
55
+ ## Enforcement
56
+
57
+ Instances of abusive, harassing, or otherwise unacceptable behavior may be
58
+ reported by contacting the project team at erin.dees@stitchfix.com. All
59
+ complaints will be reviewed and investigated and will result in a response that
60
+ is deemed necessary and appropriate to the circumstances. The project team is
61
+ obligated to maintain confidentiality with regard to the reporter of an incident.
62
+ Further details of specific enforcement policies may be posted separately.
63
+
64
+ Project maintainers who do not follow or enforce the Code of Conduct in good
65
+ faith may face temporary or permanent repercussions as determined by other
66
+ members of the project's leadership.
67
+
68
+ ## Attribution
69
+
70
+ This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,
71
+ available at [http://contributor-covenant.org/version/1/4][version]
72
+
73
+ [homepage]: http://contributor-covenant.org
74
+ [version]: http://contributor-covenant.org/version/1/4/
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "https://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in rforce.gemspec
4
+ gemspec
@@ -0,0 +1,7 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gem 'builder', '~> 3.0'
4
+ gem 'oauth', '~> 0.4'
5
+ gem 'rspec', '~> 3.0'
6
+ gem 'nokogiri', '~> 1.10.4'
7
+ gem 'xmlparser', '~> 0.7', :platforms => ['mri']
@@ -1,8 +1,6 @@
1
1
  = rforce
2
2
 
3
3
  * http://github.com/undees/rforce
4
- * http://bitbucket.org/undees/rforce
5
- * http://rdoc.info/github/undees/rforce
6
4
 
7
5
  == DESCRIPTION:
8
6
 
@@ -74,7 +72,7 @@ Rather than enforcing adherence to the sforce.com schema, RForce assumes you are
74
72
 
75
73
  == LICENSE:
76
74
 
77
- Copyright (c) 2005-2014 Ian Dees and contributors
75
+ Copyright (c) 2005-2019 Erin Dees and contributors
78
76
 
79
77
  Permission is hereby granted, free of charge, to any person obtaining
80
78
  a copy of this software and associated documentation files (the
data/Rakefile CHANGED
@@ -1,35 +1,8 @@
1
- # -*- ruby -*-
1
+ require "bundler/gem_tasks"
2
+ require "rspec/core/rake_task"
2
3
 
3
- $:.unshift './lib'
4
+ RSpec::Core::RakeTask.new(:spec)
4
5
 
5
- require 'hoe'
6
- require 'hoe/gemspec2'
6
+ task :default => :spec
7
7
 
8
- Hoe.plugin :gemspec2
9
-
10
- Hoe.spec 'rforce' do
11
- is_jruby = (RUBY_PLATFORM == 'java')
12
- is_ruby18 = (RUBY_VERSION =~ /^1.8/)
13
-
14
- developer('Ian Dees', 'undees@gmail.com')
15
- license('MIT')
16
-
17
- self.extra_deps << ['builder', '~> 3.0']
18
- self.extra_deps << ['oauth', '~> 0.4']
19
-
20
- self.extra_dev_deps << ['rspec', '~> 2.8']
21
- self.extra_dev_deps << ['hoe-gemspec2', '~> 1.1']
22
- self.extra_dev_deps << ['nokogiri', '~> 1.5'] unless is_ruby18
23
- self.extra_dev_deps << ['xmlparser', '~> 0.7'] unless is_jruby
24
-
25
- self.rdoc_locations = ['undees@rforce.rubyforge.org:/var/www/gforge-projects/rforce']
26
- self.remote_rdoc_dir = ''
27
-
28
- self.rspec_options = ['-rubygems', '--options', 'spec/spec.opts']
29
- end
30
-
31
- task :test => :spec
32
-
33
- Dir['tasks/**/*.rake'].each { |rake| load rake }
34
-
35
- # vim: syntax=Ruby
8
+ Dir['lib/tasks/**/*.rake'].each { |rake| load rake }
@@ -1,5 +1,5 @@
1
1
  =begin
2
- Copyright (c) 2005-2010 Ian Dees and contributors
2
+ Copyright (c) 2005-2019 Erin Dees and contributors
3
3
 
4
4
  Permission is hereby granted, free of charge, to any person obtaining a copy
5
5
  of this software and associated documentation files (the "Software"), to deal
@@ -1,3 +1,3 @@
1
1
  module RForce
2
- VERSION = '0.13'
2
+ VERSION = '0.14'
3
3
  end
@@ -0,0 +1,36 @@
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.4"
28
+
29
+ spec.add_development_dependency "bundler", "~> 2.0"
30
+ spec.add_development_dependency "rake", "~> 10.0"
31
+ spec.add_development_dependency "rspec", "~> 3.0"
32
+
33
+ # Optional XML parsing engines
34
+ spec.add_development_dependency "nokogiri", "~> 1.10.4"
35
+ spec.add_development_dependency("xmlparser", "~> 0.7") unless RUBY_PLATFORM == 'java'
36
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rforce
3
3
  version: !ruby/object:Gem::Version
4
- version: '0.13'
4
+ version: '0.14'
5
5
  platform: ruby
6
6
  authors:
7
- - Ian Dees
7
+ - Erin Dees
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-02-09 00:00:00.000000000 Z
11
+ date: 2019-08-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: builder
@@ -39,61 +39,61 @@ dependencies:
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0.4'
41
41
  - !ruby/object:Gem::Dependency
42
- name: rdoc
42
+ name: bundler
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '4.0'
47
+ version: '2.0'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: '4.0'
54
+ version: '2.0'
55
55
  - !ruby/object:Gem::Dependency
56
- name: rspec
56
+ name: rake
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: '2.8'
61
+ version: '10.0'
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: '2.8'
68
+ version: '10.0'
69
69
  - !ruby/object:Gem::Dependency
70
- name: hoe-gemspec2
70
+ name: rspec
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
73
  - - "~>"
74
74
  - !ruby/object:Gem::Version
75
- version: '1.1'
75
+ version: '3.0'
76
76
  type: :development
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
80
  - - "~>"
81
81
  - !ruby/object:Gem::Version
82
- version: '1.1'
82
+ version: '3.0'
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: nokogiri
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
87
  - - "~>"
88
88
  - !ruby/object:Gem::Version
89
- version: '1.5'
89
+ version: 1.10.4
90
90
  type: :development
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
94
  - - "~>"
95
95
  - !ruby/object:Gem::Version
96
- version: '1.5'
96
+ version: 1.10.4
97
97
  - !ruby/object:Gem::Dependency
98
98
  name: xmlparser
99
99
  requirement: !ruby/object:Gem::Requirement
@@ -108,36 +108,19 @@ dependencies:
108
108
  - - "~>"
109
109
  - !ruby/object:Gem::Version
110
110
  version: '0.7'
111
- - !ruby/object:Gem::Dependency
112
- name: hoe
113
- requirement: !ruby/object:Gem::Requirement
114
- requirements:
115
- - - "~>"
116
- - !ruby/object:Gem::Version
117
- version: '3.12'
118
- type: :development
119
- prerelease: false
120
- version_requirements: !ruby/object:Gem::Requirement
121
- requirements:
122
- - - "~>"
123
- - !ruby/object:Gem::Version
124
- version: '3.12'
125
- description: |-
126
- RForce is a simple, usable binding to the Salesforce API.
127
-
128
- {<img src="https://travis-ci.org/undees/rforce.png" />}[https://travis-ci.org/undees/rforce]
111
+ description:
129
112
  email:
130
113
  - undees@gmail.com
131
114
  executables: []
132
115
  extensions: []
133
- extra_rdoc_files:
134
- - History.txt
135
- - Manifest.txt
136
- - README.rdoc
116
+ extra_rdoc_files: []
137
117
  files:
138
- - ".gemtest"
139
- - History.txt
140
- - Manifest.txt
118
+ - ".gitignore"
119
+ - ".travis.yml"
120
+ - CHANGELOG.txt
121
+ - CODE_OF_CONDUCT.md
122
+ - Gemfile
123
+ - Gemfile.ci
141
124
  - README.rdoc
142
125
  - Rakefile
143
126
  - examples/oauth_setup.rb
@@ -152,19 +135,16 @@ files:
152
135
  - lib/rforce/soap_response_nokogiri.rb
153
136
  - lib/rforce/soap_response_rexml.rb
154
137
  - lib/rforce/version.rb
155
- - spec/rforce_spec.rb
156
- - spec/soap-response.xml
157
- - spec/spec.opts
158
- - spec/spec_helper.rb
159
- - tasks/timing.rake
160
- homepage: http://github.com/undees/rforce
138
+ - rforce.gemspec
139
+ homepage: https://github.com/undees/rforce
161
140
  licenses:
162
141
  - MIT
163
- metadata: {}
142
+ metadata:
143
+ homepage_uri: https://github.com/undees/rforce
144
+ source_code_uri: https://github.com/undees/rforce
145
+ changelog_uri: https://github.com/undees/rforce/
164
146
  post_install_message:
165
- rdoc_options:
166
- - "--main"
167
- - README.rdoc
147
+ rdoc_options: []
168
148
  require_paths:
169
149
  - lib
170
150
  required_ruby_version: !ruby/object:Gem::Requirement
@@ -178,9 +158,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
178
158
  - !ruby/object:Gem::Version
179
159
  version: '0'
180
160
  requirements: []
181
- rubyforge_project:
182
- rubygems_version: 2.4.5
161
+ rubygems_version: 3.0.3
183
162
  signing_key:
184
163
  specification_version: 4
185
- summary: RForce is a simple, usable binding to the Salesforce API
164
+ summary: A simple, usable binding to the Salesforce API.
186
165
  test_files: []
data/.gemtest DELETED
File without changes
@@ -1,21 +0,0 @@
1
- History.txt
2
- Manifest.txt
3
- README.rdoc
4
- Rakefile
5
- examples/oauth_setup.rb
6
- examples/oauth_use.rb
7
- examples/simple.rb
8
- lib/rforce.rb
9
- lib/rforce/binding.rb
10
- lib/rforce/method_keys.rb
11
- lib/rforce/soap_pullable.rb
12
- lib/rforce/soap_response.rb
13
- lib/rforce/soap_response_expat.rb
14
- lib/rforce/soap_response_nokogiri.rb
15
- lib/rforce/soap_response_rexml.rb
16
- lib/rforce/version.rb
17
- spec/rforce_spec.rb
18
- spec/soap-response.xml
19
- spec/spec.opts
20
- spec/spec_helper.rb
21
- tasks/timing.rake
@@ -1,246 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe MethodKeys do
4
- it 'lets you access hash keys with methods' do
5
- h = {:foo => :bar}
6
- class << h; include MethodKeys; end
7
-
8
- h.foo.should == :bar
9
- h.nonexistent.should be_nil
10
-
11
- [:foo, :nonexistent].each do |method|
12
- h.respond_to?(method).should be true
13
- end
14
- end
15
-
16
- it 'provides a Hash-like class' do
17
- mh = MethodHash.new
18
- mh[:one] = 1
19
- mh[:ten] = 10
20
-
21
- mh.one.should == 1
22
- mh.ten.should == 10
23
- mh.nothing.should be_nil
24
-
25
- [:one, :ten, :nothing].each do |method|
26
- mh.respond_to?(method).should be true
27
- end
28
- end
29
- end
30
-
31
- describe 'expand' do
32
- it 'turns Ruby into XML' do
33
- xmlns = 'urn:partner.soap.sforce.com'
34
-
35
- expanded = ''
36
- builder = Builder::XmlMarkup.new(:target => expanded)
37
-
38
- data =
39
- ['partner:create',
40
- ['partner:sObjects',
41
- ['spartner:type', 'Contact',
42
- 'AccountId', '01234567890ABCD',
43
- 'FirstName', 'Jane',
44
- 'LastName', 'Doe'],
45
- 'partner:sObjects',
46
- ['spartner:type', 'Account',
47
- 'Name', 'Acme Rockets, Inc.']]]
48
-
49
- expand(builder, data)
50
-
51
- expanded.should == CreateXml
52
- end
53
-
54
- it 'handles duplicate objects without complaint' do
55
- expanded = ''
56
- builder = Builder::XmlMarkup.new(:target => expanded)
57
- account = [:type, 'Account', :name, 'ALPHA']
58
- args = {:create=> [:sObjects, account, :sObjects, account]}
59
- urn = 'urn:partner.soap.sforce.com'
60
-
61
- # should not raise
62
- expand builder, args, urn
63
- end
64
- end
65
-
66
- describe 'a SoapResponse implementation' do
67
- before :all do
68
- fname = File.join(File.dirname(__FILE__), 'soap-response.xml')
69
- @contents = File.open(fname) {|f| f.read}
70
-
71
- [:rexml, :expat, :nokogiri].each do |processor|
72
- name = "SoapResponse#{processor.to_s.capitalize}".to_sym
73
- variable = "@#{processor}_recs".to_sym
74
-
75
- results = begin
76
- klass = RForce.const_get name
77
- klass.new(@contents).parse.queryResponse[:result][:records]
78
- rescue NameError
79
- nil
80
- end
81
-
82
- instance_variable_set(variable, results)
83
- end
84
- end
85
-
86
- it 'turns XML into objects' do
87
- @rexml_recs.size.should == 58
88
- @rexml_recs.first.keys.size.should == 99
89
- end
90
-
91
- # Special-case expat tests for CI
92
- it 'returns the same results with expat' do
93
- skip 'expat not installed' unless @expat_recs
94
- @expat_recs.should == @rexml_recs
95
- end
96
-
97
- it 'understands XML entities' do
98
- expected = "Bee's knees"
99
- @rexml_recs.first.Description.should == expected
100
-
101
- # Special-case expat tests for CI
102
- if @expat_recs
103
- @expat_recs.first.Description.should == expected
104
- end
105
- end
106
- end
107
-
108
- SOAP_WRAPPER = <<-XML
109
- <?xml version="1.0" encoding="UTF-8"?>
110
- <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns="urn:partner.soap.sforce.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:sf="urn:sobject.partner.soap.sforce.com">
111
- <soapenv:Body>
112
- %s
113
- </soapenv:Body>
114
- </soapenv:Envelope>
115
- XML
116
-
117
- shared_examples_for 'a SOAP response' do
118
- def wrap_in_salesforce_envelope(xml)
119
- SOAP_WRAPPER % xml
120
- end
121
-
122
- it 'parses nested elements into nested hashes' do
123
- xml = wrap_in_salesforce_envelope("""
124
- <foo>
125
- <bar>Bin</bar>
126
- </foo>""")
127
-
128
- klass.new(xml).parse.should == {:foo => {:bar => "Bin"}}
129
- end
130
-
131
- it 'parses repeated elements into arrays' do
132
- xml = wrap_in_salesforce_envelope("""
133
- <foo>
134
- <bar>Bin</bar>
135
- <bar>Bash</bar>
136
- </foo>""")
137
-
138
- klass.new(xml).parse.should == {:foo => {:bar => ["Bin", "Bash"]}}
139
- end
140
-
141
- it 'parses records with single record as an array' do
142
- xml = wrap_in_salesforce_envelope("""
143
- <records>
144
- <sf:type>Contact</sf:type>
145
- </records>""")
146
-
147
- klass.new(xml).parse.should == {:records => [{:type => "Contact"}]}
148
- end
149
-
150
- it 'parses records with multiple records as an array' do
151
- xml = wrap_in_salesforce_envelope("""
152
- <records>
153
- <sf:type>Contact</sf:type>
154
- </records>
155
- <records>
156
- <sf:type>Contact</sf:type>
157
- </records>""")
158
-
159
- klass.new(xml).parse.should == {:records => [{:type => "Contact"}, {:type => "Contact"}]}
160
- end
161
-
162
- it 'parses Id array as single string' do
163
- xml = wrap_in_salesforce_envelope("""
164
- <foo>
165
- <sf:Id>some_id</sf:Id>
166
- <sf:Id>some_id</sf:Id>
167
- </foo>""")
168
-
169
- klass.new(xml).parse.should == {:foo => {:Id => "some_id"}}
170
- end
171
-
172
- it 'parses booleans' do
173
- xml = wrap_in_salesforce_envelope("""
174
- <foo>
175
- <size>20</size>
176
- <done>true</done>
177
- <more>false</more>
178
- <string>normal string</string>
179
- </foo>""")
180
-
181
- klass.new(xml).parse.should == {:foo => {:size => "20", :done => true, :more => false, :string => "normal string"}}
182
- end
183
-
184
- it 'disregards namespacing when determining hash keys' do
185
- xml = wrap_in_salesforce_envelope("""
186
- <soapenv:foo>
187
- <bar>Bin</bar>
188
- <soapenv:bar>Bash</soapenv:bar>
189
- </soapenv:foo>""")
190
-
191
- klass.new(xml).parse.should == {:foo => {:bar => ["Bin", "Bash"]}}
192
- end
193
-
194
- it 'unescapes any HTML contained in text nodes' do
195
- xml = wrap_in_salesforce_envelope("""
196
- <foo>
197
- <bar>Bin</bar>
198
- <bar>&lt;tag attr=&quot;Bee&apos;s knees &amp; toes&quot;&gt;</bar>
199
- </foo>""")
200
-
201
- klass.new(xml).parse()[:foo][:bar].last.should == %q(<tag attr="Bee's knees & toes">)
202
- end
203
-
204
- it 'returns an object that can be navigated via methods in addition to keys' do
205
- xml = wrap_in_salesforce_envelope("<foo><bar><bin>bash</bin></bar></foo>")
206
- klass.new(xml).parse().foo.bar.bin.should == "bash"
207
- end
208
- end
209
-
210
- if RForce.const_defined? :SoapResponseNokogiri
211
- describe 'SoapResponseNokogiri' do
212
- it_behaves_like 'a SOAP response' do
213
- let(:klass) { SoapResponseNokogiri }
214
- end
215
- end
216
- end
217
-
218
- # Special-case expat tests for CI
219
- if RForce.const_defined? :SoapResponseExpat
220
- describe 'SoapResponseExpat' do
221
- it_behaves_like 'a SOAP response' do
222
- let(:klass) { SoapResponseExpat }
223
- end
224
- end
225
- end
226
-
227
- describe 'SoapResponseRexml' do
228
- it_behaves_like 'a SOAP response' do
229
- let(:klass) { SoapResponseRexml }
230
- end
231
- end
232
-
233
- CreateXml = <<HERE.gsub(/\n\s*/, '')
234
- <partner:create>
235
- <partner:sObjects>
236
- <spartner:type>Contact</spartner:type>
237
- <AccountId>01234567890ABCD</AccountId>
238
- <FirstName>Jane</FirstName>
239
- <LastName>Doe</LastName>
240
- </partner:sObjects>
241
- <partner:sObjects>
242
- <spartner:type>Account</spartner:type>
243
- <Name>Acme Rockets, Inc.</Name>
244
- </partner:sObjects>
245
- </partner:create>
246
- HERE