lolsoap 0.7.0 → 0.8.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/.travis.yml +3 -3
- data/README.md +5 -0
- data/lib/lolsoap/version.rb +1 -1
- data/lib/lolsoap/wsdl_parser.rb +47 -11
- data/test/fixtures/stock_quote.wsdl +4 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0b9bc4b76b05a3d31cba1d44dfbdcbe1ec345374
|
4
|
+
data.tar.gz: 3bc623601587f2e60ca3443767c02e73b69f2f60
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ccf49a609716134ab68a817fc59ee1e872767d812b5e35ae148d244c8a9a882afe96499ddacaf7c49c6f17c79c5c3d82f910da77f448cb6ada62f22b9d0083b5
|
7
|
+
data.tar.gz: c8b787f474363da4d866cfb6f1ba8419dc8275fed43f23667835f97112aa5d7495c666172a4f9127c8d789b4cd86eb274d3feeff94a4004fc87aab80695ffe3e
|
data/.travis.yml
CHANGED
data/README.md
CHANGED
@@ -114,6 +114,11 @@ Development sponsored by [Loco2](http://loco2.com/).
|
|
114
114
|
|
115
115
|
## Changelog ##
|
116
116
|
|
117
|
+
### 0.8 ###
|
118
|
+
|
119
|
+
* Use namespaces when looking up definitions
|
120
|
+
* Added support for referenced attribute groups
|
121
|
+
|
117
122
|
### 0.7 ###
|
118
123
|
|
119
124
|
* Added support for element references in type definitions
|
data/lib/lolsoap/version.rb
CHANGED
data/lib/lolsoap/wsdl_parser.rb
CHANGED
@@ -82,8 +82,8 @@ module LolSoap
|
|
82
82
|
|
83
83
|
def base_type
|
84
84
|
@base_type ||= begin
|
85
|
-
if extension = node.at_xpath('*/xs:extension
|
86
|
-
parser.type(extension.to_s)
|
85
|
+
if extension = node.at_xpath('*/xs:extension', parser.ns)
|
86
|
+
parser.type(*parser.namespace_and_name(extension, extension.attribute('base').to_s))
|
87
87
|
end
|
88
88
|
end
|
89
89
|
end
|
@@ -110,7 +110,7 @@ module LolSoap
|
|
110
110
|
node.xpath('*/xs:element | */*/xs:element | xs:complexContent/xs:extension/*/xs:element | xs:complexContent/xs:extension/*/*/xs:element', parser.ns).map { |el|
|
111
111
|
element = Element.new(parser, el, target_namespace)
|
112
112
|
if reference = el.attribute('ref')
|
113
|
-
ReferencedElement.new(element, parser.element(reference.to_s))
|
113
|
+
ReferencedElement.new(element, parser.element(*parser.namespace_and_name(el, reference.to_s)))
|
114
114
|
else
|
115
115
|
element
|
116
116
|
end
|
@@ -122,14 +122,40 @@ module LolSoap
|
|
122
122
|
end
|
123
123
|
|
124
124
|
def own_attributes
|
125
|
+
defined_attributes + referenced_attributes
|
126
|
+
end
|
127
|
+
|
128
|
+
def defined_attributes
|
125
129
|
node.xpath('xs:attribute/@name | */xs:extension/xs:attribute/@name', parser.ns).map(&:text)
|
126
130
|
end
|
127
131
|
|
132
|
+
def referenced_attributes
|
133
|
+
node.xpath('xs:attributeGroup[@ref] | */xs:extension/xs:attributeGroup[@ref]', parser.ns).map { |group|
|
134
|
+
parser.attribute_group(*parser.namespace_and_name(group, group.attribute('ref').to_s))
|
135
|
+
}.flat_map(&:attributes)
|
136
|
+
end
|
137
|
+
|
128
138
|
def parent_attributes
|
129
139
|
base_type ? base_type.attributes : []
|
130
140
|
end
|
131
141
|
end
|
132
142
|
|
143
|
+
class AttributeGroup < Node
|
144
|
+
def attributes
|
145
|
+
own_attributes + referenced_attributes
|
146
|
+
end
|
147
|
+
|
148
|
+
def own_attributes
|
149
|
+
node.xpath('xs:attribute/@name', parser.ns).map(&:text)
|
150
|
+
end
|
151
|
+
|
152
|
+
def referenced_attributes
|
153
|
+
node.xpath('xs:attributeGroup[@ref]', parser.ns).map { |group|
|
154
|
+
parser.attribute_group(*parser.namespace_and_name(group, group.attribute('ref').to_s))
|
155
|
+
}.flat_map(&:attributes)
|
156
|
+
end
|
157
|
+
end
|
158
|
+
|
133
159
|
class Operation
|
134
160
|
attr_reader :parser, :node
|
135
161
|
|
@@ -241,8 +267,8 @@ module LolSoap
|
|
241
267
|
end
|
242
268
|
end
|
243
269
|
|
244
|
-
def type(name)
|
245
|
-
find_node name, Type, 'complexType'
|
270
|
+
def type(namespace, name)
|
271
|
+
find_node namespace, name, Type, 'complexType'
|
246
272
|
end
|
247
273
|
|
248
274
|
def elements
|
@@ -260,8 +286,12 @@ module LolSoap
|
|
260
286
|
end
|
261
287
|
end
|
262
288
|
|
263
|
-
def element(name)
|
264
|
-
find_node name, Element, 'element'
|
289
|
+
def element(namespace, name)
|
290
|
+
find_node namespace, name, Element, 'element'
|
291
|
+
end
|
292
|
+
|
293
|
+
def attribute_group(namespace, name)
|
294
|
+
find_node namespace, name, AttributeGroup, 'attributeGroup'
|
265
295
|
end
|
266
296
|
|
267
297
|
def messages
|
@@ -338,7 +368,11 @@ module LolSoap
|
|
338
368
|
def namespace_and_name(node, prefixed_name, default_namespace = nil)
|
339
369
|
if prefixed_name.include? ':'
|
340
370
|
prefix, name = prefixed_name.split(':')
|
341
|
-
|
371
|
+
if prefix == 'tns' && schema = node.at_xpath('ancestor::xs:schema', ns)
|
372
|
+
namespace = schema.attribute('targetNamespace').to_s
|
373
|
+
else
|
374
|
+
namespace = node.namespaces.fetch("xmlns:#{prefix}")
|
375
|
+
end
|
342
376
|
else
|
343
377
|
name = prefixed_name
|
344
378
|
namespace = default_namespace
|
@@ -357,9 +391,11 @@ module LolSoap
|
|
357
391
|
end
|
358
392
|
end
|
359
393
|
|
360
|
-
def find_node(name, node_class, selector)
|
361
|
-
|
362
|
-
|
394
|
+
def find_node(namespace, name, node_class, selector)
|
395
|
+
target = schemas.xpath("../xs:schema[@targetNamespace='#{namespace}']", ns)
|
396
|
+
target = schemas if target.size == 0
|
397
|
+
|
398
|
+
if node = target.at_xpath("xs:#{selector}[@name='#{name.split(':').last}']", ns)
|
363
399
|
target_namespace = node.at_xpath('parent::xs:schema/@targetNamespace', ns).to_s
|
364
400
|
node_class.new(self, node, target_namespace)
|
365
401
|
end
|
@@ -13,6 +13,9 @@
|
|
13
13
|
<schema targetNamespace="http://example.com/stockquote.xsd"
|
14
14
|
xmlns:xsd3="http://example.com/stockquote.xsd"
|
15
15
|
xmlns="http://www.w3.org/2001/XMLSchema">
|
16
|
+
<attributeGroup name="BaseRequestAttributes">
|
17
|
+
<attribute name="signature" type="xs:string"/>
|
18
|
+
</attributeGroup>
|
16
19
|
<complexType name="Price">
|
17
20
|
<simpleContent>
|
18
21
|
<extension base="xs:string">
|
@@ -80,7 +83,7 @@
|
|
80
83
|
<sequence>
|
81
84
|
<element name="accountId" type="xs:string" maxOccurs="1"/>
|
82
85
|
</sequence>
|
83
|
-
<
|
86
|
+
<attributeGroup ref="tns:BaseRequestAttributes" />
|
84
87
|
</complexType>
|
85
88
|
</schema>
|
86
89
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: lolsoap
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.8.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jon Leighton
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2016-03-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: nokogiri
|
@@ -157,7 +157,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
157
157
|
version: '0'
|
158
158
|
requirements: []
|
159
159
|
rubyforge_project:
|
160
|
-
rubygems_version: 2.
|
160
|
+
rubygems_version: 2.5.1
|
161
161
|
signing_key:
|
162
162
|
specification_version: 4
|
163
163
|
summary: A library for dealing with SOAP requests and responses.
|