wasabi 2.2.0 → 2.3.0

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG.md CHANGED
@@ -1,3 +1,7 @@
1
+ ## 2.3.0 (2012-06-07)
2
+
3
+ * Improvement: [#3](https://github.com/rubiii/wasabi/pull/3) adds object inheritance.
4
+
1
5
  ## 2.2.0 (2012-06-06)
2
6
 
3
7
  * Improvement: [#5](https://github.com/rubiii/wasabi/pull/5) - Get input from message
data/lib/wasabi/parser.rb CHANGED
@@ -16,6 +16,7 @@ module Wasabi
16
16
  self.operations = {}
17
17
  self.namespaces = {}
18
18
  self.types = {}
19
+ self.deferred_types = []
19
20
  self.element_form_default = :unqualified
20
21
  end
21
22
 
@@ -34,6 +35,9 @@ module Wasabi
34
35
  # Returns a map from a type name to a Hash with type information.
35
36
  attr_accessor :types
36
37
 
38
+ # Returns a map of deferred type Proc objects.
39
+ attr_accessor :deferred_types
40
+
37
41
  # Returns the SOAP endpoint.
38
42
  attr_accessor :endpoint
39
43
 
@@ -45,6 +49,7 @@ module Wasabi
45
49
  parse_endpoint
46
50
  parse_operations
47
51
  parse_types
52
+ parse_deferred_types
48
53
  end
49
54
 
50
55
  def parse_namespaces
@@ -108,6 +113,31 @@ module Wasabi
108
113
 
109
114
  xpath(type, "./xs:sequence/xs:element").
110
115
  each { |inner| @types[name][inner.attribute("name").to_s] = { :type => inner.attribute("type").to_s } }
116
+
117
+ type.xpath("./xs:complexContent/xs:extension/xs:sequence/xs:element",
118
+ "xs" => "http://www.w3.org/2001/XMLSchema"
119
+ ).each do |inner_element|
120
+ @types[name][inner_element.attribute('name').to_s] = {
121
+ :type => inner_element.attribute('type').to_s
122
+ }
123
+ end
124
+
125
+ type.xpath('./xs:complexContent/xs:extension[@base]',
126
+ "xs" => "http://www.w3.org/2001/XMLSchema"
127
+ ).each do |inherits|
128
+ base = inherits.attribute('base').value.match(/\w+$/).to_s
129
+ if @types[base]
130
+ @types[name].merge! @types[base]
131
+ else
132
+ deferred_types << Proc.new do
133
+ @types[name].merge! @types[base]
134
+ end
135
+ end
136
+ end
137
+ end
138
+
139
+ def parse_deferred_types
140
+ deferred_types.each(&:call)
111
141
  end
112
142
 
113
143
  def find_namespace(type)
@@ -1,5 +1,5 @@
1
1
  module Wasabi
2
2
 
3
- VERSION = "2.2.0"
3
+ VERSION = "2.3.0"
4
4
 
5
5
  end
@@ -0,0 +1,46 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <definitions xmlns="http://schemas.xmlsoap.org/wsdl/"
3
+ xmlns:http="http://schemas.xmlsoap.org/wsdl/http/"
4
+ xmlns:xs="http://www.w3.org/2001/XMLSchema"
5
+ xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
6
+ xmlns:ens="http://api.example.com/"
7
+ xmlns:ons="http://object.api.example.com/"
8
+ xmlns:fns="http://fault.api.example.com/"
9
+ targetNamespace="http://api.example.com/">
10
+ <types>
11
+ <schema attributeFormDefault="qualified" elementFormDefault="qualified" xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://object.api.example.com/">
12
+ <complexType name="Account">
13
+ <complexContent>
14
+ <extension base="ons:baseObject">
15
+ <sequence>
16
+ <element minOccurs="0" name="Description" nillable="true" type="string" />
17
+ <element minOccurs="0" name="ProcessId" nillable="true" type="ens:ID" />
18
+ <element minOccurs="0" name="CreatedDate" nillable="true" type="dateTime" />
19
+ </sequence>
20
+ </extension>
21
+ </complexContent>
22
+ </complexType>
23
+ <complexType name="baseObject">
24
+ <sequence>
25
+ <element minOccurs="0" maxOccurs="unbounded" name="fieldsToNull" nillable="true" type="string" />
26
+ <element minOccurs="0" maxOccurs="1" name="Id" nillable="true" type="ens:ID" />
27
+ </sequence>
28
+ </complexType>
29
+ </schema>
30
+
31
+ <schema attributeFormDefault="qualified" elementFormDefault="qualified" xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://api.example.com/">
32
+ <simpleType name="ID">
33
+ <restriction base="xs:string">
34
+ <pattern value='[a-zA-Z0-9]{32}|\d+' />
35
+ </restriction>
36
+ </simpleType>
37
+ <element name="DummyHeader">
38
+ <complexType>
39
+ <sequence>
40
+ <element minOccurs="0" name="Account" nillable="true" type="ons:Account" />
41
+ </sequence>
42
+ </complexType>
43
+ </element>
44
+ </schema>
45
+ </types>
46
+ </definitions>
@@ -0,0 +1,18 @@
1
+ require "spec_helper"
2
+
3
+ describe Wasabi::Document do
4
+ context "with: inherited.xml" do
5
+
6
+ subject { Wasabi::Document.new fixture(:inherited) }
7
+
8
+ its(:type_definitions) do
9
+ should include([["Account", "Id"], "ID"])
10
+ should include([["Account", "ProcessId"], "ID"])
11
+ should include([["Account", "CreatedDate"], "dateTime"])
12
+ should include([["Account", "Description"], "string"])
13
+ should include([["Account", "fieldsToNull"], "string"])
14
+ end
15
+
16
+ end
17
+ end
18
+
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: wasabi
3
3
  version: !ruby/object:Gem::Version
4
- hash: 7
4
+ hash: 3
5
5
  prerelease:
6
6
  segments:
7
7
  - 2
8
- - 2
8
+ - 3
9
9
  - 0
10
- version: 2.2.0
10
+ version: 2.3.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Daniel Harrington
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2012-06-06 00:00:00 Z
18
+ date: 2012-06-07 00:00:00 Z
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
21
21
  version_requirements: &id001 !ruby/object:Gem::Requirement
@@ -105,6 +105,7 @@ files:
105
105
  - lib/wasabi/xpath_helper.rb
106
106
  - spec/fixtures/authentication.wsdl
107
107
  - spec/fixtures/geotrust.wsdl
108
+ - spec/fixtures/inherited.wsdl
108
109
  - spec/fixtures/lower_camel.wsdl
109
110
  - spec/fixtures/multiple_namespaces.wsdl
110
111
  - spec/fixtures/multiple_types.wsdl
@@ -119,6 +120,7 @@ files:
119
120
  - spec/wasabi/core_ext/string_spec.rb
120
121
  - spec/wasabi/document/authentication_spec.rb
121
122
  - spec/wasabi/document/geotrust_spec.rb
123
+ - spec/wasabi/document/inherited_spec.rb
122
124
  - spec/wasabi/document/multiple_namespaces_spec.rb
123
125
  - spec/wasabi/document/namespaced_actions_spec.rb
124
126
  - spec/wasabi/document/no_namespace_spec.rb
@@ -167,6 +169,7 @@ summary: A simple WSDL parser
167
169
  test_files:
168
170
  - spec/fixtures/authentication.wsdl
169
171
  - spec/fixtures/geotrust.wsdl
172
+ - spec/fixtures/inherited.wsdl
170
173
  - spec/fixtures/lower_camel.wsdl
171
174
  - spec/fixtures/multiple_namespaces.wsdl
172
175
  - spec/fixtures/multiple_types.wsdl
@@ -181,6 +184,7 @@ test_files:
181
184
  - spec/wasabi/core_ext/string_spec.rb
182
185
  - spec/wasabi/document/authentication_spec.rb
183
186
  - spec/wasabi/document/geotrust_spec.rb
187
+ - spec/wasabi/document/inherited_spec.rb
184
188
  - spec/wasabi/document/multiple_namespaces_spec.rb
185
189
  - spec/wasabi/document/namespaced_actions_spec.rb
186
190
  - spec/wasabi/document/no_namespace_spec.rb