wasabi 3.2.3 → 3.3.0
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/CHANGELOG.md +3 -0
- data/lib/wasabi/document.rb +4 -3
- data/lib/wasabi/parser.rb +18 -6
- data/lib/wasabi/resolver.rb +4 -3
- data/lib/wasabi/version.rb +1 -1
- data/spec/fixtures/multiple_parts_in_message.wsdl +66 -0
- data/spec/fixtures/no_message_parts.wsdl +82 -56
- data/spec/support/adapter.rb +18 -0
- data/spec/wasabi/parser/multiple_parts_in_message_spec.rb +31 -0
- data/spec/wasabi/parser/no_message_parts_spec.rb +6 -0
- data/spec/wasabi/resolver_spec.rb +11 -0
- metadata +9 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e1decaff87ba9c70512facbf036cb51ce14de471
|
4
|
+
data.tar.gz: fb1d53ef00af219bae14499bfb8ecc51b0924945
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 24823fdbb179b5194940b4d9ee55a09a6e7086df3f983caec0cdb3f26fa559b3f8e749df2426cce84947a04a346eba097ca757da5ad6f070d215df077488db07
|
7
|
+
data.tar.gz: 8e186b92225fac1fa32c71103c2116e08fd2c613a12b4f9fbd800df241fa71950ce5c64ac05fca14c0ad2ec28e0bbce246b195c11e2a2c89aad75d6a125a28e2
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,6 @@
|
|
1
|
+
# 3.3.0 (2014-05-03)
|
2
|
+
* Feature: [#44](https://github.com/savonrb/wasabi/pull/44) adds a feature to specify the HTTPI adapter you'd like to use.
|
3
|
+
|
1
4
|
# 3.2.3 (2013-12-16)
|
2
5
|
* Fix [#39](https://github.com/savonrb/wasabi/pull/39) fixes new regression in operation names. Huge thank you to #leoping for investigating this and issuing a pull request.
|
3
6
|
|
data/lib/wasabi/document.rb
CHANGED
@@ -21,11 +21,12 @@ module Wasabi
|
|
21
21
|
end
|
22
22
|
|
23
23
|
# Accepts a WSDL +document+ to parse.
|
24
|
-
def initialize(document = nil)
|
24
|
+
def initialize(document = nil, adapter = nil)
|
25
25
|
self.document = document
|
26
|
+
self.adapter = adapter
|
26
27
|
end
|
27
28
|
|
28
|
-
attr_accessor :document, :request
|
29
|
+
attr_accessor :document, :request, :adapter
|
29
30
|
|
30
31
|
attr_writer :xml
|
31
32
|
|
@@ -138,7 +139,7 @@ module Wasabi
|
|
138
139
|
# Returns the raw WSDL document.
|
139
140
|
# Can be used as a hook to extend the library.
|
140
141
|
def xml
|
141
|
-
@xml ||= Resolver.new(document, request).resolve
|
142
|
+
@xml ||= Resolver.new(document, request, adapter).resolve
|
142
143
|
end
|
143
144
|
|
144
145
|
# Parses the WSDL document and returns the <tt>Wasabi::Parser</tt>.
|
data/lib/wasabi/parser.rb
CHANGED
@@ -257,13 +257,25 @@ module Wasabi
|
|
257
257
|
|
258
258
|
message_ns_id, message_type = nil
|
259
259
|
|
260
|
-
#
|
261
|
-
message
|
262
|
-
|
260
|
+
# When there is a parts attribute in soap:body element, we should use that value
|
261
|
+
# to look up the message part from messages array.
|
262
|
+
input_output_element = operation.element_children.find { |node| node.name == input_output }
|
263
|
+
if input_output_element
|
264
|
+
soap_body_element = input_output_element.element_children.find { |node| node.name == 'body' }
|
265
|
+
soap_body_parts = soap_body_element['parts'] if soap_body_element
|
266
|
+
end
|
263
267
|
|
264
|
-
|
265
|
-
|
266
|
-
|
268
|
+
message = @messages[port_message_type]
|
269
|
+
port_message_part = message.element_children.find do |node|
|
270
|
+
soap_body_parts.nil? ? (node.name == 'part') : ( node.name == 'part' && node['name'] == soap_body_parts)
|
271
|
+
end
|
272
|
+
|
273
|
+
if port_message_part && port_element = port_message_part.attribute('element')
|
274
|
+
port_message_part = port_element.to_s
|
275
|
+
if port_message_part.include?(':')
|
276
|
+
message_ns_id, message_type = port_message_part.split(':')
|
277
|
+
else
|
278
|
+
message_type = port_message_part
|
267
279
|
end
|
268
280
|
end
|
269
281
|
|
data/lib/wasabi/resolver.rb
CHANGED
@@ -18,12 +18,13 @@ module Wasabi
|
|
18
18
|
URL = /^http[s]?:/
|
19
19
|
XML = /^</
|
20
20
|
|
21
|
-
def initialize(document, request = nil)
|
21
|
+
def initialize(document, request = nil, adapter = nil)
|
22
22
|
@document = document
|
23
23
|
@request = request || HTTPI::Request.new
|
24
|
+
@adapter = adapter
|
24
25
|
end
|
25
26
|
|
26
|
-
attr_reader :document, :request
|
27
|
+
attr_reader :document, :request, :adapter
|
27
28
|
|
28
29
|
def resolve
|
29
30
|
raise ArgumentError, "Unable to resolve: #{document.inspect}" unless document
|
@@ -39,7 +40,7 @@ module Wasabi
|
|
39
40
|
|
40
41
|
def load_from_remote
|
41
42
|
request.url = document
|
42
|
-
response = HTTPI.get(request)
|
43
|
+
response = HTTPI.get(request, adapter)
|
43
44
|
|
44
45
|
raise HTTPError.new("Error: #{response.code}", response) if response.error?
|
45
46
|
|
data/lib/wasabi/version.rb
CHANGED
@@ -0,0 +1,66 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<definitions
|
3
|
+
xmlns="http://schemas.xmlsoap.org/wsdl/"
|
4
|
+
xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"
|
5
|
+
xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/"
|
6
|
+
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
|
7
|
+
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
|
8
|
+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
9
|
+
xmlns:s="http://www.w3.org/2001/XMLSchema"
|
10
|
+
xmlns:actions="http://example.com/actions"
|
11
|
+
targetNamespace="http://example.com/topLevelNamespace">
|
12
|
+
<types>
|
13
|
+
<s:schema elementFormDefault="qualified" targetNamespace="http://example.com/actions">
|
14
|
+
<s:element name="SomeRequest">
|
15
|
+
<s:complexType>
|
16
|
+
<s:sequence>
|
17
|
+
<s:element name="status" type="s:string"/>
|
18
|
+
</s:sequence>
|
19
|
+
</s:complexType>
|
20
|
+
</s:element>
|
21
|
+
</s:schema>
|
22
|
+
</types>
|
23
|
+
<message name="SomeInput">
|
24
|
+
<part name="parameters" element="actions:SomeRequest"/>
|
25
|
+
<part name="requestBody" element="actions:SomeRequestBody"/>
|
26
|
+
</message>
|
27
|
+
<message name="SomeOutput">
|
28
|
+
<part name="parameters" element="actions:SomeResponse"/>
|
29
|
+
</message>
|
30
|
+
<portType name="ExamplePortType">
|
31
|
+
<operation name="SomeOperation">
|
32
|
+
<input message="actions:SomeInput"/>
|
33
|
+
<output message="actions:SomeOutput"/>
|
34
|
+
</operation>
|
35
|
+
<operation name="OtherOperation">
|
36
|
+
<input message="actions:SomeInput"/>
|
37
|
+
<output message="actions:SomeOutput"/>
|
38
|
+
</operation>
|
39
|
+
</portType>
|
40
|
+
<binding name="ExampleBinding" type="actions:ExamplePortType">
|
41
|
+
<soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/>
|
42
|
+
<operation name="SomeOperation">
|
43
|
+
<soap:operation soapAction="http://example.com/actions.SomeOperation" style="document"/>
|
44
|
+
<input>
|
45
|
+
<soap:body parts="requestBody" use="literal"/>
|
46
|
+
</input>
|
47
|
+
<output>
|
48
|
+
<soap:body use="literal"/>
|
49
|
+
</output>
|
50
|
+
</operation>
|
51
|
+
<operation name="OtherOperation">
|
52
|
+
<soap:operation soapAction="http://example.com/actions.SomeOperation" style="document"/>
|
53
|
+
<input>
|
54
|
+
<soap:body use="literal"/>
|
55
|
+
</input>
|
56
|
+
<output>
|
57
|
+
<soap:body use="literal"/>
|
58
|
+
</output>
|
59
|
+
</operation>
|
60
|
+
</binding>
|
61
|
+
<service name="ExampleService">
|
62
|
+
<port name="ExamplePort" binding="actions:ExampleBinding">
|
63
|
+
<soap:address location="http://localhost/soapservice/execute?path=%2Fbase%2Fincludes%2FTest+Soap%2FReturn+Rows"/>
|
64
|
+
</port>
|
65
|
+
</service>
|
66
|
+
</definitions>
|
@@ -1,59 +1,85 @@
|
|
1
1
|
<?xml version="1.0" encoding="UTF-8"?>
|
2
2
|
<definitions
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
<s:
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
<
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
</
|
54
|
-
<
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
3
|
+
xmlns="http://schemas.xmlsoap.org/wsdl/"
|
4
|
+
xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"
|
5
|
+
xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/"
|
6
|
+
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
|
7
|
+
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
|
8
|
+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
9
|
+
xmlns:s="http://www.w3.org/2001/XMLSchema"
|
10
|
+
xmlns:article="http://example.com/article"
|
11
|
+
xmlns:actions="http://example.com/actions"
|
12
|
+
targetNamespace="http://example.com/actions">
|
13
|
+
<types>
|
14
|
+
<s:schema elementFormDefault="qualified" targetNamespace="http://example.com/actions">
|
15
|
+
<s:element name="Save">
|
16
|
+
<s:complexType>
|
17
|
+
<s:sequence>
|
18
|
+
<s:element name="article" type="article:Article"/>
|
19
|
+
</s:sequence>
|
20
|
+
</s:complexType>
|
21
|
+
</s:element>
|
22
|
+
<s:element name="Delete">
|
23
|
+
<s:complexType>
|
24
|
+
<s:sequence>
|
25
|
+
<s:element name="article" type="article:Article"/>
|
26
|
+
</s:sequence>
|
27
|
+
</s:complexType>
|
28
|
+
</s:element>
|
29
|
+
|
30
|
+
</s:schema>
|
31
|
+
<s:schema elementFormDefault="qualified" targetNamespace="http://example.com/article">
|
32
|
+
<s:complexType name="Article">
|
33
|
+
<s:sequence>
|
34
|
+
<s:element minOccurs="0" name="Author" type="s:string"/>
|
35
|
+
<s:element minOccurs="0" name="Title" type="s:string"/>
|
36
|
+
</s:sequence>
|
37
|
+
</s:complexType>
|
38
|
+
</s:schema>
|
39
|
+
</types>
|
40
|
+
<message name="SaveSoapIn"/>
|
41
|
+
<message name="SaveSoapOut">
|
42
|
+
<part name="parameters" element="actions:SaveResponse"/>
|
43
|
+
</message>
|
44
|
+
<message name="DeleteSoapIn"/>
|
45
|
+
<message name="DeleteSoapOut">
|
46
|
+
<part name="parameters" element="DeleteResponse"/>
|
47
|
+
</message>
|
48
|
+
|
49
|
+
<portType name="ArticleSoap">
|
50
|
+
<operation name="Save">
|
51
|
+
<input message="actions:SaveSoapIn"/>
|
52
|
+
<output message="actions:SaveSoapOut"/>
|
53
|
+
</operation>
|
54
|
+
<operation name="Delete">
|
55
|
+
<input message="DeleteSoapIn"/>
|
56
|
+
<output message="DeleteSoapOut"/>
|
57
|
+
</operation>
|
58
|
+
</portType>
|
59
|
+
<binding name="ArticleSoap" type="actions:ArticleSoap">
|
60
|
+
<soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/>
|
61
|
+
<operation name="Save">
|
62
|
+
<soap:operation soapAction="http://example.com/actions.Save" style="document"/>
|
63
|
+
<input>
|
64
|
+
<soap:body use="literal"/>
|
65
|
+
</input>
|
66
|
+
<output>
|
67
|
+
<soap:body use="literal"/>
|
68
|
+
</output>
|
69
|
+
</operation>
|
70
|
+
<operation name="Delete">
|
71
|
+
<soap:operation soapAction="http://example.com/actions.Delete" style="document"/>
|
72
|
+
<input>
|
73
|
+
<soap:body use="literal"/>
|
74
|
+
</input>
|
75
|
+
<output>
|
76
|
+
<soap:body use="literal"/>
|
77
|
+
</output>
|
78
|
+
</operation>
|
79
|
+
</binding>
|
80
|
+
<service name="StudyMDL">
|
81
|
+
<port name="StudyMDLSoap" binding="actions:StudyMDLSoap">
|
82
|
+
<soap:address location="http://example.com:1234/soap"/>
|
83
|
+
</port>
|
84
|
+
</service>
|
59
85
|
</definitions>
|
@@ -0,0 +1,18 @@
|
|
1
|
+
class FakeAdapterForTest < HTTPI::Adapter::Base
|
2
|
+
|
3
|
+
register :fake_adapter_for_test
|
4
|
+
|
5
|
+
def initialize(request)
|
6
|
+
@@requests ||= []
|
7
|
+
@@requests.push request
|
8
|
+
@request = request
|
9
|
+
end
|
10
|
+
|
11
|
+
attr_reader :client
|
12
|
+
|
13
|
+
def request(method)
|
14
|
+
@@methods ||= []
|
15
|
+
@@methods.push method
|
16
|
+
HTTPI::Response.new(200, {}, 'wsdl_by_adapter')
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe Wasabi::Parser do
|
4
|
+
context 'with: multiple_parts_in_message.wsdl' do
|
5
|
+
|
6
|
+
subject do
|
7
|
+
parser = Wasabi::Parser.new Nokogiri::XML(xml)
|
8
|
+
parser.parse
|
9
|
+
parser
|
10
|
+
end
|
11
|
+
|
12
|
+
let(:xml) { fixture(:multiple_parts_in_message).read }
|
13
|
+
|
14
|
+
context "with a parts attribute in soap:body element" do
|
15
|
+
it 'uses the part specified in parts attribute' do
|
16
|
+
request = subject.operations[:some_operation][:input]
|
17
|
+
|
18
|
+
request.should == "SomeRequestBody"
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
context "with no parts attribute in soap:body element" do
|
23
|
+
it 'uses the first part element in message' do
|
24
|
+
request = subject.operations[:other_operation][:input]
|
25
|
+
|
26
|
+
request.should == "SomeRequest"
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
31
|
+
end
|
@@ -22,5 +22,11 @@ describe Wasabi::Parser do
|
|
22
22
|
it 'falls back to using the namespace ID in the port element' do
|
23
23
|
subject.operations[:save][:namespace_identifier].should == 'actions'
|
24
24
|
end
|
25
|
+
|
26
|
+
it 'gracefully handles port messages without a colon' do
|
27
|
+
subject.operations[:delete][:input].should == 'Delete'
|
28
|
+
subject.operations[:delete][:output].should == 'DeleteResponse'
|
29
|
+
subject.operations[:delete][:namespace_identifier].should be_nil
|
30
|
+
end
|
25
31
|
end
|
26
32
|
end
|
@@ -9,6 +9,17 @@ describe Wasabi::Resolver do
|
|
9
9
|
xml.should == "wsdl"
|
10
10
|
end
|
11
11
|
|
12
|
+
it "resolves remote documents with custom adapter" do
|
13
|
+
prev_logging = HTTPI.instance_variable_get(:@log)
|
14
|
+
HTTPI.log = false # Don't pollute rspec output by request logging
|
15
|
+
xml = Wasabi::Resolver.new("http://example.com?wsdl", nil, :fake_adapter_for_test).resolve
|
16
|
+
xml.should == "wsdl_by_adapter"
|
17
|
+
expect(FakeAdapterForTest.class_variable_get(:@@requests).size).to eq(1)
|
18
|
+
expect(FakeAdapterForTest.class_variable_get(:@@requests).first.url).to eq(URI.parse("http://example.com?wsdl"))
|
19
|
+
expect(FakeAdapterForTest.class_variable_get(:@@methods)).to eq([:get])
|
20
|
+
HTTPI.log = prev_logging
|
21
|
+
end
|
22
|
+
|
12
23
|
it "resolves local documents" do
|
13
24
|
xml = Wasabi::Resolver.new(fixture(:authentication).path).resolve
|
14
25
|
xml.should == fixture(:authentication).read
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: wasabi
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.
|
4
|
+
version: 3.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Daniel Harrington
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2014-05-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: httpi
|
@@ -111,6 +111,7 @@ files:
|
|
111
111
|
- spec/fixtures/lower_camel.wsdl
|
112
112
|
- spec/fixtures/marketo.wsdl
|
113
113
|
- spec/fixtures/multiple_namespaces.wsdl
|
114
|
+
- spec/fixtures/multiple_parts_in_message.wsdl
|
114
115
|
- spec/fixtures/multiple_types.wsdl
|
115
116
|
- spec/fixtures/namespaced_actions.wsdl
|
116
117
|
- spec/fixtures/no_message_parts.wsdl
|
@@ -121,6 +122,7 @@ files:
|
|
121
122
|
- spec/fixtures/tradetracker.wsdl
|
122
123
|
- spec/fixtures/two_bindings.wsdl
|
123
124
|
- spec/spec_helper.rb
|
125
|
+
- spec/support/adapter.rb
|
124
126
|
- spec/support/fixture.rb
|
125
127
|
- spec/support/profiling.rb
|
126
128
|
- spec/wasabi/core_ext/string_spec.rb
|
@@ -141,6 +143,7 @@ files:
|
|
141
143
|
- spec/wasabi/parser/juniper_spec.rb
|
142
144
|
- spec/wasabi/parser/marketo_spec.rb
|
143
145
|
- spec/wasabi/parser/multiple_namespaces_spec.rb
|
146
|
+
- spec/wasabi/parser/multiple_parts_in_message_spec.rb
|
144
147
|
- spec/wasabi/parser/no_message_parts_spec.rb
|
145
148
|
- spec/wasabi/parser/no_namespace_spec.rb
|
146
149
|
- spec/wasabi/parser/no_target_namespace_spec.rb
|
@@ -169,7 +172,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
169
172
|
version: '0'
|
170
173
|
requirements: []
|
171
174
|
rubyforge_project: wasabi
|
172
|
-
rubygems_version: 2.
|
175
|
+
rubygems_version: 2.1.11
|
173
176
|
signing_key:
|
174
177
|
specification_version: 4
|
175
178
|
summary: A simple WSDL parser
|
@@ -184,6 +187,7 @@ test_files:
|
|
184
187
|
- spec/fixtures/lower_camel.wsdl
|
185
188
|
- spec/fixtures/marketo.wsdl
|
186
189
|
- spec/fixtures/multiple_namespaces.wsdl
|
190
|
+
- spec/fixtures/multiple_parts_in_message.wsdl
|
187
191
|
- spec/fixtures/multiple_types.wsdl
|
188
192
|
- spec/fixtures/namespaced_actions.wsdl
|
189
193
|
- spec/fixtures/no_message_parts.wsdl
|
@@ -194,6 +198,7 @@ test_files:
|
|
194
198
|
- spec/fixtures/tradetracker.wsdl
|
195
199
|
- spec/fixtures/two_bindings.wsdl
|
196
200
|
- spec/spec_helper.rb
|
201
|
+
- spec/support/adapter.rb
|
197
202
|
- spec/support/fixture.rb
|
198
203
|
- spec/support/profiling.rb
|
199
204
|
- spec/wasabi/core_ext/string_spec.rb
|
@@ -214,6 +219,7 @@ test_files:
|
|
214
219
|
- spec/wasabi/parser/juniper_spec.rb
|
215
220
|
- spec/wasabi/parser/marketo_spec.rb
|
216
221
|
- spec/wasabi/parser/multiple_namespaces_spec.rb
|
222
|
+
- spec/wasabi/parser/multiple_parts_in_message_spec.rb
|
217
223
|
- spec/wasabi/parser/no_message_parts_spec.rb
|
218
224
|
- spec/wasabi/parser/no_namespace_spec.rb
|
219
225
|
- spec/wasabi/parser/no_target_namespace_spec.rb
|