soybean 2.5.3 → 2.5.4
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.
- data/Gemfile.lock +3 -3
- data/VERSION +1 -1
- data/lib/soybean.rb +3 -0
- data/lib/soybean/cli.rb +1 -1
- data/lib/soybean/complex_type.rb +1 -1
- data/lib/soybean/generators/model_generator.rb +3 -1
- data/lib/soybean/generators/types_generator.rb +2 -2
- data/lib/soybean/interface.rb +9 -3
- data/lib/soybean/literal_mapping_registry_creator.rb +13 -18
- data/soybean.gemspec +2 -2
- data/vendor/soap4r/soap/mapping/literalregistry.rb +319 -319
- data/vendor/soap4r/wsdl/xml_schema/simple_restriction.rb +1 -1
- metadata +23 -23
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
GEM
|
2
2
|
remote: http://rubygems.org/
|
3
3
|
specs:
|
4
|
-
activesupport (3.1.
|
4
|
+
activesupport (3.1.3)
|
5
5
|
multi_json (~> 1.0)
|
6
6
|
diff-lcs (1.1.3)
|
7
7
|
git (1.2.5)
|
@@ -12,10 +12,10 @@ GEM
|
|
12
12
|
rake
|
13
13
|
multi_json (1.0.3)
|
14
14
|
nokogiri (1.5.0)
|
15
|
-
rack (1.3.
|
15
|
+
rack (1.3.5)
|
16
16
|
rack-mount (0.8.3)
|
17
17
|
rack (>= 1.0.0)
|
18
|
-
rake (0.9.2)
|
18
|
+
rake (0.9.2.2)
|
19
19
|
rspec (2.3.0)
|
20
20
|
rspec-core (~> 2.3.0)
|
21
21
|
rspec-expectations (~> 2.3.0)
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
2.5.
|
1
|
+
2.5.4
|
data/lib/soybean.rb
CHANGED
data/lib/soybean/cli.rb
CHANGED
@@ -27,7 +27,6 @@ class Soybean::CLI < Thor
|
|
27
27
|
full_path = File.expand_path wsdl, FileUtils.pwd
|
28
28
|
if File.directory? full_path
|
29
29
|
Dir["#{full_path}/*.wsdl"].each do |file|
|
30
|
-
puts file.inspect
|
31
30
|
generate_service(file, dir, opts)
|
32
31
|
end
|
33
32
|
else
|
@@ -42,6 +41,7 @@ class Soybean::CLI < Thor
|
|
42
41
|
|
43
42
|
no_tasks do
|
44
43
|
def generate_service(wsdl, dir, options)
|
44
|
+
Soybean.cache.clear
|
45
45
|
Soybean::Generators::ServiceGenerator.new(dir, wsdl, spec_dir(dir)).generate do |filename, content, generator|
|
46
46
|
opts = options
|
47
47
|
if generator.is_a? Soybean::Generators::ModelGenerator
|
data/lib/soybean/complex_type.rb
CHANGED
@@ -18,7 +18,9 @@ module Soybean
|
|
18
18
|
@wsdl.importedschema.map do |uri, schema|
|
19
19
|
"require 'mappings/#{URI.parse(schema.targetnamespace).path[1..-2].underscore}'\n"
|
20
20
|
end.join +
|
21
|
-
"class #{class_name} < #{interface_name}
|
21
|
+
"class #{class_name} < #{interface_name}" +
|
22
|
+
"include #{URI.parse(@wsdl.importedschema.values.last.targetnamespace).path[1..-2].camelize}"
|
23
|
+
"end"
|
22
24
|
end
|
23
25
|
|
24
26
|
def class_name
|
@@ -2,7 +2,7 @@ module Soybean
|
|
2
2
|
module Generators
|
3
3
|
class TypesGenerator < WSDL::SOAP::ClassDefCreator
|
4
4
|
class_attribute :classes_cache, :instance_reader => true, :instance_writer => true
|
5
|
-
self.classes_cache =
|
5
|
+
self.classes_cache = Soybean.cache[:classes]
|
6
6
|
include BaseGenerator
|
7
7
|
|
8
8
|
attr_reader :name
|
@@ -51,7 +51,7 @@ module Soybean
|
|
51
51
|
|
52
52
|
def with_cache
|
53
53
|
result = yield
|
54
|
-
if !classes_cache.key?(result.name)
|
54
|
+
if result && !classes_cache.key?(result.name)
|
55
55
|
classes_cache[result.name] = true
|
56
56
|
result.dump
|
57
57
|
end
|
data/lib/soybean/interface.rb
CHANGED
@@ -1,5 +1,8 @@
|
|
1
1
|
module Soybean
|
2
2
|
class Interface
|
3
|
+
include ActiveSupport::Callbacks
|
4
|
+
NO_ACTIONS = [:endpoint]
|
5
|
+
|
3
6
|
class_attribute :interfaces, :instance_reader => false, :instance_writer => false
|
4
7
|
|
5
8
|
def self.inherited(subclass)
|
@@ -8,11 +11,14 @@ module Soybean
|
|
8
11
|
Soybean.services << subclass if subclass.superclass < Soybean::Interface
|
9
12
|
end
|
10
13
|
|
11
|
-
def self.actions
|
12
|
-
|
14
|
+
def self.actions(implemented=true)
|
15
|
+
if implemented
|
16
|
+
self.public_instance_methods(false) - NO_ACTIONS
|
17
|
+
else
|
18
|
+
self::Methods.map(&:second).map(&:to_sym)
|
19
|
+
end
|
13
20
|
end
|
14
21
|
|
15
|
-
|
16
22
|
attr_reader :logger
|
17
23
|
|
18
24
|
def initialize(logger=Soybean.logger)
|
@@ -9,24 +9,19 @@ module Soybean
|
|
9
9
|
private
|
10
10
|
|
11
11
|
def dump_entry(regname, var)
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
dump_entry_item(var, :schema_element),
|
26
|
-
dump_entry_item(var, :schema_attribute)
|
27
|
-
].compact.join(",\n ") +
|
28
|
-
"\n)\n"
|
29
|
-
end
|
12
|
+
"#{regname}.register(\n " +
|
13
|
+
[
|
14
|
+
dump_entry_item(var, :class),
|
15
|
+
dump_entry_item(var, :soap_class),
|
16
|
+
dump_entry_item(var, :schema_name, :qname),
|
17
|
+
dump_entry_item(var, :schema_type, :qname),
|
18
|
+
dump_entry_item(var, :is_anonymous),
|
19
|
+
dump_entry_item(var, :schema_basetype, :qname),
|
20
|
+
dump_entry_item(var, :schema_qualified),
|
21
|
+
dump_entry_item(var, :schema_element),
|
22
|
+
dump_entry_item(var, :schema_attribute)
|
23
|
+
].compact.join(",\n ") +
|
24
|
+
"\n)\n"
|
30
25
|
end
|
31
26
|
end
|
32
27
|
end
|
data/soybean.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{soybean}
|
8
|
-
s.version = "2.5.
|
8
|
+
s.version = "2.5.4"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Anton Sozontov"]
|
12
|
-
s.date = %q{2011-
|
12
|
+
s.date = %q{2011-11-21}
|
13
13
|
s.default_executable = %q{soybean}
|
14
14
|
s.description = %q{Generate soap web-services from you wsdl. Generate: all classes from xsd, and other.}
|
15
15
|
s.email = %q{a.sozontov@gmail.com}
|
@@ -15,353 +15,353 @@ require 'xsd/namedelements'
|
|
15
15
|
|
16
16
|
|
17
17
|
module SOAP
|
18
|
-
module Mapping
|
18
|
+
module Mapping
|
19
19
|
|
20
20
|
|
21
|
-
class LiteralRegistry
|
22
|
-
|
21
|
+
class LiteralRegistry
|
22
|
+
include RegistrySupport
|
23
23
|
|
24
|
-
|
25
|
-
|
24
|
+
attr_accessor :excn_handler_obj2soap
|
25
|
+
attr_accessor :excn_handler_soap2obj
|
26
26
|
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
end
|
32
|
-
|
33
|
-
def obj2soap(obj, qname, obj_class = nil)
|
34
|
-
soap_obj = nil
|
35
|
-
if obj.is_a?(SOAPElement)
|
36
|
-
soap_obj = obj
|
37
|
-
else
|
38
|
-
soap_obj = any2soap(obj, qname, obj_class)
|
39
|
-
end
|
40
|
-
return soap_obj if soap_obj
|
41
|
-
if @excn_handler_obj2soap
|
42
|
-
soap_obj = @excn_handler_obj2soap.call(obj) { |yield_obj|
|
43
|
-
Mapping.obj2soap(yield_obj, nil, nil, MAPPING_OPT)
|
44
|
-
}
|
45
|
-
return soap_obj if soap_obj
|
46
|
-
end
|
47
|
-
raise MappingError.new("cannot map #{obj.class.name} as #{qname}")
|
48
|
-
end
|
49
|
-
|
50
|
-
# node should be a SOAPElement
|
51
|
-
def soap2obj(node, obj_class = nil)
|
52
|
-
cause = nil
|
53
|
-
begin
|
54
|
-
return any2obj(node, obj_class)
|
55
|
-
rescue MappingError
|
56
|
-
cause = $!
|
57
|
-
end
|
58
|
-
if @excn_handler_soap2obj
|
59
|
-
begin
|
60
|
-
return @excn_handler_soap2obj.call(node) { |yield_node|
|
61
|
-
Mapping.soap2obj(yield_node, nil, nil, MAPPING_OPT)
|
62
|
-
}
|
63
|
-
rescue Exception
|
27
|
+
def initialize
|
28
|
+
super()
|
29
|
+
@excn_handler_obj2soap = nil
|
30
|
+
@excn_handler_soap2obj = nil
|
64
31
|
end
|
65
|
-
end
|
66
|
-
raise MappingError.new("cannot map #{node.elename.name}/#{node.type.name} to Ruby object", cause)
|
67
|
-
end
|
68
32
|
|
69
|
-
|
33
|
+
def obj2soap(obj, qname, obj_class = nil)
|
34
|
+
soap_obj = nil
|
35
|
+
if obj.is_a?(SOAPElement)
|
36
|
+
soap_obj = obj
|
37
|
+
else
|
38
|
+
soap_obj = any2soap(obj, qname, obj_class)
|
39
|
+
end
|
40
|
+
return soap_obj if soap_obj
|
41
|
+
if @excn_handler_obj2soap
|
42
|
+
soap_obj = @excn_handler_obj2soap.call(obj) { |yield_obj|
|
43
|
+
Mapping.obj2soap(yield_obj, nil, nil, MAPPING_OPT)
|
44
|
+
}
|
45
|
+
return soap_obj if soap_obj
|
46
|
+
end
|
47
|
+
raise MappingError.new("cannot map #{obj.class.name} as #{qname}")
|
48
|
+
end
|
70
49
|
|
71
|
-
|
50
|
+
# node should be a SOAPElement
|
51
|
+
def soap2obj(node, obj_class = nil)
|
52
|
+
cause = nil
|
53
|
+
begin
|
54
|
+
return any2obj(node, obj_class)
|
55
|
+
rescue MappingError
|
56
|
+
cause = $!
|
57
|
+
end
|
58
|
+
if @excn_handler_soap2obj
|
59
|
+
begin
|
60
|
+
return @excn_handler_soap2obj.call(node) { |yield_node|
|
61
|
+
Mapping.soap2obj(yield_node, nil, nil, MAPPING_OPT)
|
62
|
+
}
|
63
|
+
rescue Exception
|
64
|
+
end
|
65
|
+
end
|
66
|
+
raise MappingError.new("cannot map #{node.elename.name}/#{node.type.name} to Ruby object", cause)
|
67
|
+
end
|
72
68
|
|
73
|
-
|
74
|
-
obj2soap(obj, definition.elename, definition.mapped_class)
|
75
|
-
end
|
69
|
+
private
|
76
70
|
|
77
|
-
|
78
|
-
ele = nil
|
79
|
-
if obj.is_a?(SOAP::Mapping::Object)
|
80
|
-
return mappingobj2soap(obj, qname)
|
81
|
-
end
|
82
|
-
class_definition = schema_definition_from_class(obj.class)
|
83
|
-
if class_definition.nil? and obj_class
|
84
|
-
class_definition = schema_definition_from_class(obj_class)
|
85
|
-
end
|
86
|
-
elename_definition = schema_definition_from_elename(qname)
|
87
|
-
if !class_definition and !elename_definition
|
88
|
-
# no definition found
|
89
|
-
return anyobj2soap(obj, qname)
|
90
|
-
end
|
91
|
-
if !class_definition or !elename_definition
|
92
|
-
# use found one
|
93
|
-
return stubobj2soap(obj, qname, class_definition || elename_definition)
|
94
|
-
end
|
95
|
-
# found both:
|
96
|
-
if class_definition.class_for == elename_definition.class_for
|
97
|
-
# if two definitions are for the same class, give qname a priority.
|
98
|
-
return stubobj2soap(obj, qname, elename_definition)
|
99
|
-
end
|
100
|
-
# it should be a derived class
|
101
|
-
return stubobj2soap(obj, qname, class_definition)
|
102
|
-
end
|
71
|
+
MAPPING_OPT = { :no_reference => true }
|
103
72
|
|
104
|
-
|
105
|
-
|
106
|
-
case obj
|
107
|
-
when Hash
|
108
|
-
ele = SOAPElement.from_obj(obj, nil)
|
109
|
-
ele.elename = qname
|
110
|
-
when Array
|
111
|
-
# treat as a list of simpletype
|
112
|
-
ele = SOAPElement.new(qname, obj.join(" "))
|
113
|
-
when XSD::QName
|
114
|
-
ele = SOAPElement.new(qname)
|
115
|
-
ele.text = obj
|
116
|
-
else
|
117
|
-
# expected to be a basetype or an anyType.
|
118
|
-
# SOAPStruct, etc. is used instead of SOAPElement.
|
119
|
-
begin
|
120
|
-
ele = Mapping.obj2soap(obj, nil, nil, MAPPING_OPT)
|
121
|
-
ele.elename = qname
|
122
|
-
rescue MappingError
|
123
|
-
ele = SOAPElement.new(qname, obj.to_s)
|
73
|
+
def definedobj2soap(obj, definition)
|
74
|
+
obj2soap(obj, definition.elename, definition.mapped_class)
|
124
75
|
end
|
125
|
-
end
|
126
|
-
add_attributes2soap(obj, ele)
|
127
|
-
ele
|
128
|
-
end
|
129
76
|
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
77
|
+
def any2soap(obj, qname, obj_class)
|
78
|
+
ele = nil
|
79
|
+
if obj.is_a?(SOAP::Mapping::Object)
|
80
|
+
return mappingobj2soap(obj, qname)
|
81
|
+
end
|
82
|
+
class_definition = schema_definition_from_class(obj.class)
|
83
|
+
if class_definition.nil? and obj_class
|
84
|
+
class_definition = schema_definition_from_class(obj_class)
|
85
|
+
end
|
86
|
+
elename_definition = schema_definition_from_elename(qname)
|
87
|
+
if !class_definition and !elename_definition
|
88
|
+
# no definition found
|
89
|
+
return anyobj2soap(obj, qname)
|
90
|
+
end
|
91
|
+
if !class_definition or !elename_definition
|
92
|
+
# use found one
|
93
|
+
return stubobj2soap(obj, qname, class_definition || elename_definition)
|
94
|
+
end
|
95
|
+
# found both:
|
96
|
+
if class_definition.class_for == elename_definition.class_for
|
97
|
+
# if two definitions are for the same class, give qname a priority.
|
98
|
+
return stubobj2soap(obj, qname, elename_definition)
|
99
|
+
end
|
100
|
+
# it should be a derived class
|
101
|
+
return stubobj2soap(obj, qname, class_definition)
|
145
102
|
end
|
146
|
-
end
|
147
|
-
if qname.nil? and definition.elename
|
148
|
-
ele.elename = definition.elename
|
149
|
-
end
|
150
|
-
return ele if obj.nil?
|
151
|
-
stubobj2soap_elements(obj, ele, definition.elements)
|
152
|
-
add_definedattributes2soap(obj, ele, definition)
|
153
|
-
ele
|
154
|
-
end
|
155
103
|
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
104
|
+
def anyobj2soap(obj, qname)
|
105
|
+
ele = nil
|
106
|
+
case obj
|
107
|
+
when Hash
|
108
|
+
ele = SOAPElement.from_obj(obj, nil)
|
109
|
+
ele.elename = qname
|
110
|
+
when Array
|
111
|
+
# treat as a list of simpletype
|
112
|
+
ele = SOAPElement.new(qname, obj.join(" "))
|
113
|
+
when XSD::QName
|
114
|
+
ele = SOAPElement.new(qname)
|
115
|
+
ele.text = obj
|
116
|
+
else
|
117
|
+
# expected to be a basetype or an anyType.
|
118
|
+
# SOAPStruct, etc. is used instead of SOAPElement.
|
119
|
+
begin
|
120
|
+
ele = Mapping.obj2soap(obj, nil, nil, MAPPING_OPT)
|
121
|
+
ele.elename = qname
|
122
|
+
rescue MappingError
|
123
|
+
ele = SOAPElement.new(qname, obj.to_s)
|
124
|
+
end
|
125
|
+
end
|
126
|
+
add_attributes2soap(obj, ele)
|
127
|
+
ele
|
168
128
|
end
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
elsif obj.respond_to?(:each) and definition.as_array?
|
177
|
-
obj.each do |item|
|
178
|
-
ele.add(definedobj2soap(item, definition))
|
179
|
-
end
|
180
|
-
else
|
181
|
-
child = Mapping.get_attribute(obj, definition.varname)
|
182
|
-
if child.nil? and (is_choice or definition.minoccurs == 0)
|
183
|
-
added = false
|
129
|
+
|
130
|
+
def stubobj2soap(obj, qname, definition)
|
131
|
+
if obj.nil?
|
132
|
+
ele = SOAPNil.new
|
133
|
+
ele.elename = qname
|
134
|
+
elsif obj.is_a?(::String)
|
135
|
+
ele = SOAPElement.new(qname, obj)
|
184
136
|
else
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
137
|
+
ele = SOAPElement.new(qname)
|
138
|
+
end
|
139
|
+
ele.qualified = definition.qualified
|
140
|
+
if definition.type
|
141
|
+
ele.type = definition.type
|
142
|
+
if definition.basetype or Mapping.root_type_hint
|
143
|
+
Mapping.reset_root_type_hint
|
144
|
+
ele.force_typed = true
|
145
|
+
end
|
146
|
+
end
|
147
|
+
if qname.nil? and definition.elename
|
148
|
+
ele.elename = definition.elename
|
149
|
+
end
|
150
|
+
return ele if obj.nil?
|
151
|
+
stubobj2soap_elements(obj, ele, definition.elements)
|
152
|
+
add_definedattributes2soap(obj, ele, definition)
|
153
|
+
ele
|
154
|
+
end
|
155
|
+
|
156
|
+
def stubobj2soap_elements(obj, ele, definition, is_choice = false)
|
157
|
+
added = false
|
158
|
+
case definition
|
159
|
+
when SchemaSequenceDefinition, SchemaEmptyDefinition
|
160
|
+
definition.each do |eledef|
|
161
|
+
ele_added = stubobj2soap_elements(obj, ele, eledef, is_choice)
|
162
|
+
added = true if ele_added
|
163
|
+
end
|
164
|
+
when SchemaChoiceDefinition
|
165
|
+
definition.each do |eledef|
|
166
|
+
added = stubobj2soap_elements(obj, ele, eledef, true)
|
167
|
+
break if added
|
168
|
+
end
|
169
|
+
else
|
170
|
+
added = true
|
171
|
+
if definition.as_any?
|
172
|
+
any = Mapping.get_attributes_for_any(obj)
|
173
|
+
SOAPElement.from_objs(any).each do |child|
|
174
|
+
ele.add(child)
|
175
|
+
end
|
176
|
+
elsif obj.respond_to?(:each) and definition.as_array?
|
177
|
+
obj.each do |item|
|
190
178
|
ele.add(definedobj2soap(item, definition))
|
191
179
|
end
|
180
|
+
else
|
181
|
+
child = Mapping.get_attribute(obj, definition.varname)
|
182
|
+
if child.nil? and (is_choice or definition.minoccurs == 0)
|
183
|
+
added = false
|
184
|
+
else
|
185
|
+
if child.respond_to?(:each) and definition.as_array?
|
186
|
+
if child.empty?
|
187
|
+
added = false
|
188
|
+
else
|
189
|
+
child.each do |item|
|
190
|
+
ele.add(definedobj2soap(item, definition))
|
191
|
+
end
|
192
|
+
end
|
193
|
+
else
|
194
|
+
ele.add(definedobj2soap(child, definition))
|
195
|
+
end
|
196
|
+
end
|
197
|
+
end
|
198
|
+
end
|
199
|
+
added
|
200
|
+
end
|
201
|
+
|
202
|
+
def mappingobj2soap(obj, qname)
|
203
|
+
ele = SOAPElement.new(qname)
|
204
|
+
obj.__xmlele.each do |key, value|
|
205
|
+
if value.is_a?(::Array)
|
206
|
+
value.each do |item|
|
207
|
+
ele.add(obj2soap(item, key))
|
192
208
|
end
|
193
209
|
else
|
194
|
-
ele.add(
|
210
|
+
ele.add(obj2soap(value, key))
|
195
211
|
end
|
196
212
|
end
|
213
|
+
obj.__xmlattr.each do |key, value|
|
214
|
+
ele.extraattr[key] = value
|
215
|
+
end
|
216
|
+
ele
|
197
217
|
end
|
198
|
-
end
|
199
|
-
added
|
200
|
-
end
|
201
218
|
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
219
|
+
def any2obj(node, obj_class = nil)
|
220
|
+
is_compound = node.is_a?(::SOAP::SOAPCompoundtype)
|
221
|
+
# trust xsi:type first
|
222
|
+
if is_compound and node.type
|
223
|
+
definition = schema_definition_from_type(node.type)
|
224
|
+
end
|
225
|
+
# element name next
|
226
|
+
definition ||= schema_definition_from_elename(node.elename)
|
227
|
+
# class defined in parent type last
|
228
|
+
if obj_class
|
229
|
+
definition ||= schema_definition_from_class(obj_class)
|
230
|
+
end
|
231
|
+
if definition
|
232
|
+
obj_class = definition.class_for
|
233
|
+
end
|
234
|
+
if is_compound
|
235
|
+
if definition
|
236
|
+
return elesoap2stubobj(node, obj_class, definition)
|
237
|
+
elsif node.is_a?(::SOAP::SOAPNameAccessible)
|
238
|
+
return elesoap2plainobj(node)
|
239
|
+
end
|
208
240
|
end
|
209
|
-
|
210
|
-
|
241
|
+
obj = Mapping.soap2obj(node, nil, obj_class, MAPPING_OPT)
|
242
|
+
add_attributes2obj(node, obj)
|
243
|
+
obj
|
211
244
|
end
|
212
|
-
end
|
213
|
-
obj.__xmlattr.each do |key, value|
|
214
|
-
ele.extraattr[key] = value
|
215
|
-
end
|
216
|
-
ele
|
217
|
-
end
|
218
245
|
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
|
223
|
-
|
224
|
-
|
225
|
-
|
226
|
-
|
227
|
-
|
228
|
-
|
229
|
-
|
230
|
-
|
231
|
-
if definition
|
232
|
-
obj_class = definition.class_for
|
233
|
-
end
|
234
|
-
if is_compound
|
235
|
-
if definition
|
236
|
-
return elesoap2stubobj(node, obj_class, definition)
|
237
|
-
elsif node.is_a?(::SOAP::SOAPNameAccessible)
|
238
|
-
return elesoap2plainobj(node)
|
246
|
+
def elesoap2stubobj(node, obj_class, definition)
|
247
|
+
obj = nil
|
248
|
+
if obj_class == ::String
|
249
|
+
obj = node.text
|
250
|
+
elsif obj_class < ::String and node.respond_to?(:text)
|
251
|
+
obj = obj_class.new(node.text)
|
252
|
+
else
|
253
|
+
obj = Mapping.create_empty_object(obj_class)
|
254
|
+
add_elesoap2stubobj(node, obj, definition)
|
255
|
+
end
|
256
|
+
add_attributes2stubobj(node, obj, definition)
|
257
|
+
obj
|
239
258
|
end
|
240
|
-
end
|
241
|
-
obj = Mapping.soap2obj(node, nil, obj_class, MAPPING_OPT)
|
242
|
-
add_attributes2obj(node, obj)
|
243
|
-
obj
|
244
|
-
end
|
245
|
-
|
246
|
-
def elesoap2stubobj(node, obj_class, definition)
|
247
|
-
obj = nil
|
248
|
-
if obj_class == ::String
|
249
|
-
obj = node.text
|
250
|
-
elsif obj_class < ::String and node.respond_to?(:text)
|
251
|
-
obj = obj_class.new(node.text)
|
252
|
-
else
|
253
|
-
obj = Mapping.create_empty_object(obj_class)
|
254
|
-
add_elesoap2stubobj(node, obj, definition)
|
255
|
-
end
|
256
|
-
add_attributes2stubobj(node, obj, definition)
|
257
|
-
obj
|
258
|
-
end
|
259
|
-
|
260
|
-
def elesoap2plainobj(node)
|
261
|
-
obj = nil
|
262
|
-
if !node.have_member
|
263
|
-
obj = base2obj(node, ::SOAP::SOAPString)
|
264
|
-
else
|
265
|
-
obj = anytype2obj(node)
|
266
|
-
add_elesoap2plainobj(node, obj)
|
267
|
-
end
|
268
|
-
add_attributes2obj(node, obj)
|
269
|
-
obj
|
270
|
-
end
|
271
259
|
|
272
|
-
|
273
|
-
|
274
|
-
|
275
|
-
|
276
|
-
|
277
|
-
|
278
|
-
|
279
|
-
|
280
|
-
|
281
|
-
|
282
|
-
item = definition.elements.find_element(value.elename)
|
283
|
-
if item
|
284
|
-
child = elesoapchild2obj(value, item)
|
285
|
-
else
|
286
|
-
# unknown element is treated as anyType.
|
287
|
-
child = any2obj(value)
|
260
|
+
def elesoap2plainobj(node)
|
261
|
+
obj = nil
|
262
|
+
if !node.have_member
|
263
|
+
obj = base2obj(node, ::SOAP::SOAPString)
|
264
|
+
else
|
265
|
+
obj = anytype2obj(node)
|
266
|
+
add_elesoap2plainobj(node, obj)
|
267
|
+
end
|
268
|
+
add_attributes2obj(node, obj)
|
269
|
+
obj
|
288
270
|
end
|
289
|
-
|
290
|
-
|
291
|
-
|
292
|
-
|
293
|
-
|
294
|
-
|
271
|
+
|
272
|
+
def anytype2obj(node)
|
273
|
+
if node.is_a?(::SOAP::SOAPBasetype)
|
274
|
+
return node.data
|
275
|
+
end
|
276
|
+
::SOAP::Mapping::Object.new
|
295
277
|
end
|
296
|
-
end
|
297
|
-
if obj.is_a?(::Array) and is_stubobj_elements_for_array(vars)
|
298
|
-
Array.instance_method(:replace).bind(obj).call(vars.values[0])
|
299
|
-
else
|
300
|
-
Mapping.set_attributes(obj, vars)
|
301
|
-
end
|
302
|
-
end
|
303
278
|
|
304
|
-
|
305
|
-
|
306
|
-
|
307
|
-
|
308
|
-
|
309
|
-
|
279
|
+
def add_elesoap2stubobj(node, obj, definition)
|
280
|
+
vars = { }
|
281
|
+
node.each do |name, value|
|
282
|
+
item = definition.elements.find_element(value.elename)
|
283
|
+
if item
|
284
|
+
child = elesoapchild2obj(value, item)
|
285
|
+
else
|
286
|
+
# unknown element is treated as anyType.
|
287
|
+
child = any2obj(value)
|
288
|
+
end
|
289
|
+
if item and item.as_array?
|
290
|
+
(vars[name] ||= []) << child
|
291
|
+
elsif vars.key?(name)
|
292
|
+
vars[name] = [vars[name], child].flatten
|
293
|
+
else
|
294
|
+
vars[name] = child
|
295
|
+
end
|
296
|
+
end
|
297
|
+
if obj.is_a?(::Array) and is_stubobj_elements_for_array(vars)
|
298
|
+
Array.instance_method(:replace).bind(obj).call(vars.values[0])
|
299
|
+
else
|
300
|
+
Mapping.set_attributes(obj, vars)
|
301
|
+
end
|
310
302
|
end
|
311
|
-
|
312
|
-
|
313
|
-
|
314
|
-
|
315
|
-
|
316
|
-
|
317
|
-
|
303
|
+
|
304
|
+
def elesoapchild2obj(value, eledef)
|
305
|
+
if eledef.mapped_class
|
306
|
+
if eledef.mapped_class.include?(::SOAP::SOAPBasetype)
|
307
|
+
base2obj(value, eledef.mapped_class)
|
308
|
+
else
|
309
|
+
any2obj(value, eledef.mapped_class)
|
310
|
+
end
|
311
|
+
else
|
312
|
+
child_definition = schema_definition_from_elename(eledef.elename)
|
313
|
+
if child_definition
|
314
|
+
any2obj(value, child_definition.class_for)
|
315
|
+
else
|
316
|
+
# untyped element is treated as anyType.
|
317
|
+
any2obj(value)
|
318
|
+
end
|
319
|
+
end
|
318
320
|
end
|
319
|
-
end
|
320
|
-
end
|
321
321
|
|
322
|
-
|
323
|
-
|
324
|
-
|
325
|
-
|
326
|
-
|
327
|
-
|
328
|
-
|
329
|
-
|
330
|
-
|
331
|
-
|
332
|
-
|
322
|
+
def add_attributes2stubobj(node, obj, definition)
|
323
|
+
return if obj.nil? or node.extraattr.empty?
|
324
|
+
if attributes = definition.attributes
|
325
|
+
define_xmlattr(obj)
|
326
|
+
attributes.each do |qname, class_name|
|
327
|
+
child = node.extraattr[qname]
|
328
|
+
next if child.nil?
|
329
|
+
if class_name
|
330
|
+
klass = Mapping.class_from_name(class_name)
|
331
|
+
if klass.include?(::SOAP::SOAPBasetype)
|
332
|
+
child = klass.to_data(child)
|
333
|
+
end
|
334
|
+
end
|
335
|
+
obj.__xmlattr[qname] = child
|
336
|
+
define_xmlattr_accessor(obj, qname)
|
333
337
|
end
|
334
338
|
end
|
335
|
-
obj.__xmlattr[qname] = child
|
336
|
-
define_xmlattr_accessor(obj, qname)
|
337
339
|
end
|
338
|
-
end
|
339
|
-
end
|
340
340
|
|
341
|
-
|
342
|
-
|
343
|
-
|
344
|
-
|
345
|
-
|
341
|
+
def add_elesoap2plainobj(node, obj)
|
342
|
+
node.each do |name, value|
|
343
|
+
obj.__add_xmlele_value(value.elename, any2obj(value))
|
344
|
+
end
|
345
|
+
end
|
346
346
|
|
347
|
-
|
348
|
-
|
349
|
-
|
350
|
-
|
351
|
-
|
352
|
-
|
353
|
-
|
354
|
-
|
347
|
+
def add_attributes2obj(node, obj)
|
348
|
+
return if obj.nil? or node.extraattr.empty?
|
349
|
+
define_xmlattr(obj)
|
350
|
+
node.extraattr.each do |qname, value|
|
351
|
+
obj.__xmlattr[qname] = value
|
352
|
+
define_xmlattr_accessor(obj, qname)
|
353
|
+
end
|
354
|
+
end
|
355
355
|
|
356
|
-
|
357
|
-
|
358
|
-
|
359
|
-
|
360
|
-
|
361
|
-
|
362
|
-
|
363
|
-
|
364
|
-
|
356
|
+
# Mapping.define_attr_accessor calls define_method with proc and it exhausts
|
357
|
+
# much memory for each singleton Object. just instance_eval instead of it.
|
358
|
+
def define_xmlattr_accessor(obj, qname)
|
359
|
+
# untaint depends GenSupport.safemethodname
|
360
|
+
name = Mapping.safemethodname('xmlattr_' + qname.name).untaint
|
361
|
+
unless obj.respond_to?(name)
|
362
|
+
# untaint depends QName#dump
|
363
|
+
qnamedump = qname.dump.untaint
|
364
|
+
obj.instance_eval <<-EOS
|
365
365
|
def #{name}
|
366
366
|
@__xmlattr[#{qnamedump}]
|
367
367
|
end
|
@@ -369,24 +369,24 @@ private
|
|
369
369
|
def #{name}=(value)
|
370
370
|
@__xmlattr[#{qnamedump}] = value
|
371
371
|
end
|
372
|
-
|
373
|
-
|
374
|
-
|
372
|
+
EOS
|
373
|
+
end
|
374
|
+
end
|
375
375
|
|
376
|
-
|
377
|
-
|
378
|
-
|
379
|
-
|
380
|
-
|
381
|
-
|
376
|
+
# Mapping.define_attr_accessor calls define_method with proc and it exhausts
|
377
|
+
# much memory for each singleton Object. just instance_eval instead of it.
|
378
|
+
def define_xmlattr(obj)
|
379
|
+
obj.instance_variable_set('@__xmlattr', { })
|
380
|
+
unless obj.respond_to?(:__xmlattr)
|
381
|
+
obj.instance_eval <<-EOS
|
382
382
|
def __xmlattr
|
383
383
|
@__xmlattr
|
384
384
|
end
|
385
|
-
|
385
|
+
EOS
|
386
|
+
end
|
387
|
+
end
|
386
388
|
end
|
387
|
-
end
|
388
|
-
end
|
389
389
|
|
390
390
|
|
391
|
-
end
|
391
|
+
end
|
392
392
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: soybean
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.5.
|
4
|
+
version: 2.5.4
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,12 +9,12 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2011-
|
12
|
+
date: 2011-11-21 00:00:00.000000000 +04:00
|
13
13
|
default_executable: soybean
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: thor
|
17
|
-
requirement: &
|
17
|
+
requirement: &12398920 !ruby/object:Gem::Requirement
|
18
18
|
none: false
|
19
19
|
requirements:
|
20
20
|
- - ! '>='
|
@@ -22,10 +22,10 @@ dependencies:
|
|
22
22
|
version: '0'
|
23
23
|
type: :runtime
|
24
24
|
prerelease: false
|
25
|
-
version_requirements: *
|
25
|
+
version_requirements: *12398920
|
26
26
|
- !ruby/object:Gem::Dependency
|
27
27
|
name: activesupport
|
28
|
-
requirement: &
|
28
|
+
requirement: &12397860 !ruby/object:Gem::Requirement
|
29
29
|
none: false
|
30
30
|
requirements:
|
31
31
|
- - ~>
|
@@ -33,10 +33,10 @@ dependencies:
|
|
33
33
|
version: '3.1'
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
|
-
version_requirements: *
|
36
|
+
version_requirements: *12397860
|
37
37
|
- !ruby/object:Gem::Dependency
|
38
38
|
name: i18n
|
39
|
-
requirement: &
|
39
|
+
requirement: &12397140 !ruby/object:Gem::Requirement
|
40
40
|
none: false
|
41
41
|
requirements:
|
42
42
|
- - ! '>='
|
@@ -44,10 +44,10 @@ dependencies:
|
|
44
44
|
version: '0'
|
45
45
|
type: :runtime
|
46
46
|
prerelease: false
|
47
|
-
version_requirements: *
|
47
|
+
version_requirements: *12397140
|
48
48
|
- !ruby/object:Gem::Dependency
|
49
49
|
name: nokogiri
|
50
|
-
requirement: &
|
50
|
+
requirement: &12370980 !ruby/object:Gem::Requirement
|
51
51
|
none: false
|
52
52
|
requirements:
|
53
53
|
- - ! '>='
|
@@ -55,10 +55,10 @@ dependencies:
|
|
55
55
|
version: '0'
|
56
56
|
type: :runtime
|
57
57
|
prerelease: false
|
58
|
-
version_requirements: *
|
58
|
+
version_requirements: *12370980
|
59
59
|
- !ruby/object:Gem::Dependency
|
60
60
|
name: rack
|
61
|
-
requirement: &
|
61
|
+
requirement: &12367140 !ruby/object:Gem::Requirement
|
62
62
|
none: false
|
63
63
|
requirements:
|
64
64
|
- - ! '>='
|
@@ -66,10 +66,10 @@ dependencies:
|
|
66
66
|
version: '0'
|
67
67
|
type: :runtime
|
68
68
|
prerelease: false
|
69
|
-
version_requirements: *
|
69
|
+
version_requirements: *12367140
|
70
70
|
- !ruby/object:Gem::Dependency
|
71
71
|
name: rack-mount
|
72
|
-
requirement: &
|
72
|
+
requirement: &12364940 !ruby/object:Gem::Requirement
|
73
73
|
none: false
|
74
74
|
requirements:
|
75
75
|
- - ! '>='
|
@@ -77,10 +77,10 @@ dependencies:
|
|
77
77
|
version: '0'
|
78
78
|
type: :runtime
|
79
79
|
prerelease: false
|
80
|
-
version_requirements: *
|
80
|
+
version_requirements: *12364940
|
81
81
|
- !ruby/object:Gem::Dependency
|
82
82
|
name: rspec
|
83
|
-
requirement: &
|
83
|
+
requirement: &12337740 !ruby/object:Gem::Requirement
|
84
84
|
none: false
|
85
85
|
requirements:
|
86
86
|
- - ~>
|
@@ -88,10 +88,10 @@ dependencies:
|
|
88
88
|
version: 2.3.0
|
89
89
|
type: :development
|
90
90
|
prerelease: false
|
91
|
-
version_requirements: *
|
91
|
+
version_requirements: *12337740
|
92
92
|
- !ruby/object:Gem::Dependency
|
93
93
|
name: yard
|
94
|
-
requirement: &
|
94
|
+
requirement: &12336620 !ruby/object:Gem::Requirement
|
95
95
|
none: false
|
96
96
|
requirements:
|
97
97
|
- - ~>
|
@@ -99,10 +99,10 @@ dependencies:
|
|
99
99
|
version: 0.6.0
|
100
100
|
type: :development
|
101
101
|
prerelease: false
|
102
|
-
version_requirements: *
|
102
|
+
version_requirements: *12336620
|
103
103
|
- !ruby/object:Gem::Dependency
|
104
104
|
name: bundler
|
105
|
-
requirement: &
|
105
|
+
requirement: &12335580 !ruby/object:Gem::Requirement
|
106
106
|
none: false
|
107
107
|
requirements:
|
108
108
|
- - ~>
|
@@ -110,10 +110,10 @@ dependencies:
|
|
110
110
|
version: 1.0.0
|
111
111
|
type: :development
|
112
112
|
prerelease: false
|
113
|
-
version_requirements: *
|
113
|
+
version_requirements: *12335580
|
114
114
|
- !ruby/object:Gem::Dependency
|
115
115
|
name: jeweler
|
116
|
-
requirement: &
|
116
|
+
requirement: &12334660 !ruby/object:Gem::Requirement
|
117
117
|
none: false
|
118
118
|
requirements:
|
119
119
|
- - ~>
|
@@ -121,7 +121,7 @@ dependencies:
|
|
121
121
|
version: 1.6.4
|
122
122
|
type: :development
|
123
123
|
prerelease: false
|
124
|
-
version_requirements: *
|
124
|
+
version_requirements: *12334660
|
125
125
|
description: ! 'Generate soap web-services from you wsdl. Generate: all classes from
|
126
126
|
xsd, and other.'
|
127
127
|
email: a.sozontov@gmail.com
|
@@ -344,7 +344,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
344
344
|
version: '0'
|
345
345
|
segments:
|
346
346
|
- 0
|
347
|
-
hash:
|
347
|
+
hash: -555538828332696193
|
348
348
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
349
349
|
none: false
|
350
350
|
requirements:
|