soap-object 0.6.5 → 0.6.6
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 +4 -4
- data/.gitignore +20 -20
- data/.rspec +1 -1
- data/.ruby-gemset +1 -1
- data/.ruby-version +1 -1
- data/ChangeLog +59 -59
- data/Gemfile +11 -11
- data/Guardfile +17 -17
- data/LICENSE.txt +21 -21
- data/README.md +102 -42
- data/Rakefile +20 -21
- data/cucumber.yml +6 -6
- data/features/basic_functionality.feature +40 -40
- data/features/step_definitions/basic_functionality_steps.rb +89 -89
- data/features/support/env.rb +5 -5
- data/features/wsdl/uszip.asmx.wsdl.xml +394 -394
- data/lib/soap-object.rb +133 -133
- data/lib/soap-object/class_methods.rb +131 -138
- data/lib/soap-object/factory.rb +22 -22
- data/lib/soap-object/ssl_options.rb +22 -0
- data/lib/soap-object/version.rb +5 -5
- data/soap-object.gemspec +24 -24
- data/spec/lib/client_options_spec.rb +132 -0
- data/spec/lib/factory_spec.rb +35 -35
- data/spec/lib/soap_object_spec.rb +31 -150
- data/spec/lib/ssl_options_spec.rb +37 -0
- data/spec/spec_helper.rb +6 -6
- metadata +8 -3
data/lib/soap-object/factory.rb
CHANGED
@@ -1,22 +1,22 @@
|
|
1
|
-
|
2
|
-
module SoapObject
|
3
|
-
module Factory
|
4
|
-
|
5
|
-
def using(cls, &block)
|
6
|
-
@the_service = find_service(cls)
|
7
|
-
block.call @the_service if block
|
8
|
-
@the_service
|
9
|
-
end
|
10
|
-
|
11
|
-
private
|
12
|
-
|
13
|
-
def find_service(cls)
|
14
|
-
services[cls] = cls.new unless services[cls]
|
15
|
-
services[cls]
|
16
|
-
end
|
17
|
-
|
18
|
-
def services
|
19
|
-
@services ||= {}
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|
1
|
+
|
2
|
+
module SoapObject
|
3
|
+
module Factory
|
4
|
+
|
5
|
+
def using(cls, &block)
|
6
|
+
@the_service = find_service(cls)
|
7
|
+
block.call @the_service if block
|
8
|
+
@the_service
|
9
|
+
end
|
10
|
+
|
11
|
+
private
|
12
|
+
|
13
|
+
def find_service(cls)
|
14
|
+
services[cls] = cls.new(Savon) unless services[cls]
|
15
|
+
services[cls]
|
16
|
+
end
|
17
|
+
|
18
|
+
def services
|
19
|
+
@services ||= {}
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module SoapObject
|
2
|
+
class SslOptions
|
3
|
+
attr_accessor :verify_mode, :version
|
4
|
+
|
5
|
+
def initialize
|
6
|
+
yield self if block_given?
|
7
|
+
end
|
8
|
+
|
9
|
+
def options
|
10
|
+
build_options
|
11
|
+
end
|
12
|
+
|
13
|
+
private
|
14
|
+
|
15
|
+
def build_options
|
16
|
+
options = {}
|
17
|
+
options[:ssl_verify_mode] = verify_mode if verify_mode
|
18
|
+
options[:ssl_version] = version if version
|
19
|
+
options
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
data/lib/soap-object/version.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
|
-
module Soap
|
2
|
-
module Object
|
3
|
-
VERSION = "0.6.
|
4
|
-
end
|
5
|
-
end
|
1
|
+
module Soap
|
2
|
+
module Object
|
3
|
+
VERSION = "0.6.6"
|
4
|
+
end
|
5
|
+
end
|
data/soap-object.gemspec
CHANGED
@@ -1,24 +1,24 @@
|
|
1
|
-
# -*- encoding: utf-8 -*-
|
2
|
-
lib = File.expand_path('../lib', __FILE__)
|
3
|
-
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
-
require 'soap-object/version'
|
5
|
-
|
6
|
-
Gem::Specification.new do |gem|
|
7
|
-
gem.name = "soap-object"
|
8
|
-
gem.version = Soap::Object::VERSION
|
9
|
-
gem.authors = ["Jeffrey S. Morgan", "Doug Morgan"]
|
10
|
-
gem.email = ["jeff.morgan@leandog.com", "douglas.morgan3405@gmail.com"]
|
11
|
-
gem.description = %q{Wrapper around SOAP service calls to make it easy to test}
|
12
|
-
gem.summary = %q{Wrapper around SOAP service calls to make it easy to test}
|
13
|
-
gem.homepage = "http://github.com/cheezy/soap-object"
|
14
|
-
|
15
|
-
gem.files = `git ls-files`.split($/)
|
16
|
-
gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
|
17
|
-
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
18
|
-
gem.require_paths = ["lib"]
|
19
|
-
|
20
|
-
gem.add_dependency 'savon', '>= 2.2.0'
|
21
|
-
|
22
|
-
gem.add_development_dependency 'rspec', '>= 2.12.0'
|
23
|
-
gem.add_development_dependency 'cucumber', '>= 1.2.0'
|
24
|
-
end
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'soap-object/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |gem|
|
7
|
+
gem.name = "soap-object"
|
8
|
+
gem.version = Soap::Object::VERSION
|
9
|
+
gem.authors = ["Jeffrey S. Morgan", "Doug Morgan"]
|
10
|
+
gem.email = ["jeff.morgan@leandog.com", "douglas.morgan3405@gmail.com"]
|
11
|
+
gem.description = %q{Wrapper around SOAP service calls to make it easy to test}
|
12
|
+
gem.summary = %q{Wrapper around SOAP service calls to make it easy to test}
|
13
|
+
gem.homepage = "http://github.com/cheezy/soap-object"
|
14
|
+
|
15
|
+
gem.files = `git ls-files`.split($/)
|
16
|
+
gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
|
17
|
+
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
18
|
+
gem.require_paths = ["lib"]
|
19
|
+
|
20
|
+
gem.add_dependency 'savon', '>= 2.2.0'
|
21
|
+
|
22
|
+
gem.add_development_dependency 'rspec', '>= 2.12.0'
|
23
|
+
gem.add_development_dependency 'cucumber', '>= 1.2.0'
|
24
|
+
end
|
@@ -0,0 +1,132 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
class TestSoapObjectWithProperties
|
4
|
+
include SoapObject
|
5
|
+
|
6
|
+
wsdl 'http://blah.com'
|
7
|
+
proxy 'http://proxy.com:8080'
|
8
|
+
open_timeout 10
|
9
|
+
read_timeout 20
|
10
|
+
soap_header 'Token' => 'secret'
|
11
|
+
encoding 'UTF-16'
|
12
|
+
basic_auth 'steve', 'secret'
|
13
|
+
digest_auth 'digest', 'auth'
|
14
|
+
log_level :error
|
15
|
+
soap_version 2
|
16
|
+
end
|
17
|
+
|
18
|
+
class WithoutClientProperties
|
19
|
+
include SoapObject
|
20
|
+
end
|
21
|
+
|
22
|
+
describe SoapObject do
|
23
|
+
let(:client) { double('client') }
|
24
|
+
let(:platform) {double('savon')}
|
25
|
+
|
26
|
+
before do
|
27
|
+
allow(platform).to receive(:client).and_return(client)
|
28
|
+
end
|
29
|
+
|
30
|
+
context 'when creating new instances' do
|
31
|
+
|
32
|
+
it 'should know when it is connected to service' do
|
33
|
+
subject = TestSoapObjectWithProperties.new(platform)
|
34
|
+
|
35
|
+
expect(subject).to be_connected
|
36
|
+
end
|
37
|
+
|
38
|
+
it 'should initialize the client using the wsdl' do
|
39
|
+
expect(platform).to receive(:client).with(hash_including(wsdl: 'http://blah.com'))
|
40
|
+
|
41
|
+
TestSoapObjectWithProperties.new(platform)
|
42
|
+
end
|
43
|
+
|
44
|
+
it 'should allow one to setup a proxy' do
|
45
|
+
expect(platform).to receive(:client).with(hash_including(proxy: 'http://proxy.com:8080'))
|
46
|
+
|
47
|
+
TestSoapObjectWithProperties.new(platform)
|
48
|
+
end
|
49
|
+
|
50
|
+
it 'should allow one to set an open timeout' do
|
51
|
+
expect(platform).to receive(:client).with(hash_including(open_timeout: 10))
|
52
|
+
|
53
|
+
TestSoapObjectWithProperties.new(platform)
|
54
|
+
end
|
55
|
+
|
56
|
+
it 'should allow one to set a read timeout' do
|
57
|
+
expect(platform).to receive(:client).with(hash_including(read_timeout: 20))
|
58
|
+
|
59
|
+
TestSoapObjectWithProperties.new(platform)
|
60
|
+
end
|
61
|
+
|
62
|
+
it 'should allow one to set a soap header' do
|
63
|
+
expect(platform).to receive(:client).with(hash_including(soap_header: {'Token' => 'secret'}))
|
64
|
+
|
65
|
+
TestSoapObjectWithProperties.new(platform)
|
66
|
+
end
|
67
|
+
|
68
|
+
it 'should allow one to set the encoding' do
|
69
|
+
expect(platform).to receive(:client).with(hash_including(encoding: 'UTF-16'))
|
70
|
+
|
71
|
+
TestSoapObjectWithProperties.new(platform)
|
72
|
+
end
|
73
|
+
|
74
|
+
it 'should allow one to use basic authentication' do
|
75
|
+
expect(platform).to receive(:client).with(hash_including(basic_auth: ['steve', 'secret']))
|
76
|
+
|
77
|
+
TestSoapObjectWithProperties.new(platform)
|
78
|
+
end
|
79
|
+
|
80
|
+
it 'should allow one to use digest authentication' do
|
81
|
+
expect(platform).to receive(:client).with(hash_including(digest_auth: ['digest', 'auth']))
|
82
|
+
|
83
|
+
TestSoapObjectWithProperties.new(platform)
|
84
|
+
end
|
85
|
+
|
86
|
+
it 'should enable logging when logging level set' do
|
87
|
+
expect(platform).to receive(:client).with(hash_including(log: true))
|
88
|
+
|
89
|
+
TestSoapObjectWithProperties.new(platform)
|
90
|
+
end
|
91
|
+
|
92
|
+
it 'should allow one to set the log level' do
|
93
|
+
expect(platform).to receive(:client).with(hash_including(log_level: :error))
|
94
|
+
|
95
|
+
TestSoapObjectWithProperties.new(platform)
|
96
|
+
end
|
97
|
+
|
98
|
+
it 'should use pretty format for xml when logging' do
|
99
|
+
expect(platform).to receive(:client).with(hash_including(pretty_print_xml: true))
|
100
|
+
|
101
|
+
TestSoapObjectWithProperties.new(platform)
|
102
|
+
end
|
103
|
+
|
104
|
+
it 'should allow one to set the soap version' do
|
105
|
+
expect(platform).to receive(:client).with(hash_including(soap_version: 2))
|
106
|
+
|
107
|
+
TestSoapObjectWithProperties.new(platform)
|
108
|
+
end
|
109
|
+
|
110
|
+
end
|
111
|
+
|
112
|
+
context 'when creating new instances with out client property overrides' do
|
113
|
+
|
114
|
+
it 'should set SSL version to 3 by default' do
|
115
|
+
expect(platform).to receive(:client).with(hash_including(ssl_version: :SSLv3))
|
116
|
+
|
117
|
+
WithoutClientProperties.new(platform)
|
118
|
+
end
|
119
|
+
|
120
|
+
it 'should disable SSL verification by default' do
|
121
|
+
expect(platform).to receive(:client).with(hash_including(ssl_verify_mode: :none))
|
122
|
+
|
123
|
+
WithoutClientProperties.new(platform)
|
124
|
+
end
|
125
|
+
|
126
|
+
it 'should disable logging by default' do
|
127
|
+
expect(platform).to receive(:client).with(hash_including(log: false))
|
128
|
+
|
129
|
+
WithoutClientProperties.new(platform)
|
130
|
+
end
|
131
|
+
end
|
132
|
+
end
|
data/spec/lib/factory_spec.rb
CHANGED
@@ -1,35 +1,35 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
class TestSoapObject
|
4
|
-
include SoapObject
|
5
|
-
|
6
|
-
wsdl 'http://blah.com'
|
7
|
-
end
|
8
|
-
|
9
|
-
class TestWorld
|
10
|
-
include SoapObject::Factory
|
11
|
-
end
|
12
|
-
|
13
|
-
describe
|
14
|
-
context "when using the factory to create to service" do
|
15
|
-
let(:world) { TestWorld.new }
|
16
|
-
|
17
|
-
it "should create a valid service object" do
|
18
|
-
service = world.using(TestSoapObject)
|
19
|
-
expect(service).to be_instance_of TestSoapObject
|
20
|
-
end
|
21
|
-
|
22
|
-
it "should create a valid service and invoke a block" do
|
23
|
-
world.using(TestSoapObject) do |service|
|
24
|
-
expect(service).to be_instance_of TestSoapObject
|
25
|
-
end
|
26
|
-
end
|
27
|
-
|
28
|
-
it "should create the service the first time we use it" do
|
29
|
-
obj = TestSoapObject
|
30
|
-
expect(TestSoapObject).to receive(:new).once.and_return(obj)
|
31
|
-
world.using(TestSoapObject)
|
32
|
-
world.using(TestSoapObject)
|
33
|
-
end
|
34
|
-
end
|
35
|
-
end
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
class TestSoapObject
|
4
|
+
include SoapObject
|
5
|
+
|
6
|
+
wsdl 'http://blah.com'
|
7
|
+
end
|
8
|
+
|
9
|
+
class TestWorld
|
10
|
+
include SoapObject::Factory
|
11
|
+
end
|
12
|
+
|
13
|
+
describe SoapObject::Factory do
|
14
|
+
context "when using the factory to create to service" do
|
15
|
+
let(:world) { TestWorld.new }
|
16
|
+
|
17
|
+
it "should create a valid service object" do
|
18
|
+
service = world.using(TestSoapObject)
|
19
|
+
expect(service).to be_instance_of TestSoapObject
|
20
|
+
end
|
21
|
+
|
22
|
+
it "should create a valid service and invoke a block" do
|
23
|
+
world.using(TestSoapObject) do |service|
|
24
|
+
expect(service).to be_instance_of TestSoapObject
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
it "should create the service the first time we use it" do
|
29
|
+
obj = TestSoapObject
|
30
|
+
expect(TestSoapObject).to receive(:new).with(Savon).once.and_return(obj)
|
31
|
+
world.using(TestSoapObject)
|
32
|
+
world.using(TestSoapObject)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -1,150 +1,31 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
class
|
4
|
-
include SoapObject
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
end
|
30
|
-
|
31
|
-
|
32
|
-
expect(subject.send(:client_properties)[:wsdl]).to eq('http://blah.com')
|
33
|
-
end
|
34
|
-
|
35
|
-
it 'should know when it is connected to service' do
|
36
|
-
expect(subject).to be_connected
|
37
|
-
end
|
38
|
-
|
39
|
-
it 'should allow one to setup a proxy' do
|
40
|
-
expect(subject.send(:client_properties)[:proxy]).to eq('http://proxy.com:8080')
|
41
|
-
end
|
42
|
-
|
43
|
-
it 'should allow one to set an open timeout' do
|
44
|
-
expect(subject.send(:client_properties)[:open_timeout]).to eq(10)
|
45
|
-
end
|
46
|
-
|
47
|
-
it 'should allow one to set a read timeout' do
|
48
|
-
expect(subject.send(:client_properties)[:read_timeout]).to eq(20)
|
49
|
-
end
|
50
|
-
|
51
|
-
it 'should allow one to set a soap header' do
|
52
|
-
expect(subject.send(:client_properties)[:soap_header]).to eq({'Token' => 'secret'})
|
53
|
-
end
|
54
|
-
|
55
|
-
it 'should allow one to set the encoding' do
|
56
|
-
expect(subject.send(:client_properties)[:encoding]).to eq('UTF-16')
|
57
|
-
end
|
58
|
-
|
59
|
-
it 'should allow one to use basic authentication' do
|
60
|
-
expect(subject.send(:client_properties)[:basic_auth]).to eq(['steve', 'secret'])
|
61
|
-
end
|
62
|
-
|
63
|
-
it 'should allow one to use digest authentication' do
|
64
|
-
expect(subject.send(:client_properties)[:digest_auth]).to eq(['digest', 'auth'])
|
65
|
-
end
|
66
|
-
|
67
|
-
it 'should disable logging when no logging level set' do
|
68
|
-
expect(WithoutClientProperties.new.send(:client_properties)[:log]).to eq(false)
|
69
|
-
end
|
70
|
-
|
71
|
-
it 'should enable logging when logging level set' do
|
72
|
-
expect(subject.send(:client_properties)[:log]).to eq(true)
|
73
|
-
end
|
74
|
-
|
75
|
-
it 'should allow one to set the log level' do
|
76
|
-
expect(subject.send(:client_properties)[:log_level]).to eq(:error)
|
77
|
-
end
|
78
|
-
|
79
|
-
it 'should use pretty format for xml when logging' do
|
80
|
-
expect(subject.send(:client_properties)[:pretty_print_xml]).to eq(true)
|
81
|
-
end
|
82
|
-
|
83
|
-
it 'should allow one to set the soap version' do
|
84
|
-
expect(subject.send(:client_properties)[:soap_version]).to eq(2)
|
85
|
-
end
|
86
|
-
|
87
|
-
it 'should disable SSL verification by default' do
|
88
|
-
expect(WithoutClientProperties.new.send(:client_properties)[:ssl_verify_mode]).to eq(:none)
|
89
|
-
end
|
90
|
-
|
91
|
-
it 'should set SSL version to 3 by default' do
|
92
|
-
expect(WithoutClientProperties.new.send(:client_properties)[:ssl_version]).to eq(:SSLv3)
|
93
|
-
end
|
94
|
-
|
95
|
-
context 'with ssl_verification' do
|
96
|
-
|
97
|
-
class WithSslVerification
|
98
|
-
include SoapObject
|
99
|
-
ssl_verification true
|
100
|
-
end
|
101
|
-
|
102
|
-
class WithoutSslVerification
|
103
|
-
include SoapObject
|
104
|
-
ssl_verification false
|
105
|
-
end
|
106
|
-
|
107
|
-
it 'should allow one to explicitly disable SSL verification' do
|
108
|
-
expect(WithoutSslVerification.new.send(:client_properties)[:ssl_verify_mode]).to eq(:none)
|
109
|
-
end
|
110
|
-
|
111
|
-
it 'should allow one to enable SSL verification' do
|
112
|
-
expect(WithSslVerification.new.send(:client_properties)[:ssl_verify_mode]).to be_nil
|
113
|
-
end
|
114
|
-
end
|
115
|
-
|
116
|
-
context 'with ssl version' do
|
117
|
-
class WithSslVersion
|
118
|
-
include SoapObject
|
119
|
-
ssl_version :SSLv2
|
120
|
-
|
121
|
-
end
|
122
|
-
|
123
|
-
it 'should allow one to set SSL version' do
|
124
|
-
expect(WithSslVersion.new.send(:client_properties)[:ssl_version]).to eq(:SSLv2)
|
125
|
-
end
|
126
|
-
end
|
127
|
-
|
128
|
-
end
|
129
|
-
|
130
|
-
|
131
|
-
context 'when calling methods on the service' do
|
132
|
-
let(:response) { double('response') }
|
133
|
-
|
134
|
-
before do
|
135
|
-
expect(Savon).to receive(:client).and_return(client)
|
136
|
-
expect(response).to receive(:to_xml)
|
137
|
-
end
|
138
|
-
|
139
|
-
it 'should make a valid request' do
|
140
|
-
expect(client).to receive(:call).with(:fake_call, message: {data_key: 'some_value'}).and_return(response)
|
141
|
-
subject.fake_call data_key: 'some_value'
|
142
|
-
end
|
143
|
-
|
144
|
-
it 'should make a valid request with custom xml' do
|
145
|
-
expected_xml = '<xml><envelope/><data></data></envelope></xml>'
|
146
|
-
expect(client).to receive(:call).with(anything, xml: expected_xml).and_return(response)
|
147
|
-
subject.fake_call expected_xml
|
148
|
-
end
|
149
|
-
end
|
150
|
-
end
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
class WithoutClientProperties
|
4
|
+
include SoapObject
|
5
|
+
end
|
6
|
+
|
7
|
+
describe SoapObject do
|
8
|
+
|
9
|
+
context 'when calling methods on the service' do
|
10
|
+
let(:response) { double('response') }
|
11
|
+
let(:client) { double('client') }
|
12
|
+
let(:platform) {double('savon')}
|
13
|
+
let(:subject) { WithoutClientProperties.new(platform) }
|
14
|
+
|
15
|
+
before do
|
16
|
+
expect(platform).to receive(:client).and_return(client)
|
17
|
+
expect(response).to receive(:to_xml)
|
18
|
+
end
|
19
|
+
|
20
|
+
it 'should make a valid request' do
|
21
|
+
expect(client).to receive(:call).with(:fake_call, message: {data_key: 'some_value'}).and_return(response)
|
22
|
+
subject.fake_call data_key: 'some_value'
|
23
|
+
end
|
24
|
+
|
25
|
+
it 'should make a valid request with custom xml' do
|
26
|
+
expected_xml = '<xml><envelope/><data></data></envelope></xml>'
|
27
|
+
expect(client).to receive(:call).with(anything, xml: expected_xml).and_return(response)
|
28
|
+
subject.fake_call expected_xml
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|