rubylexer 0.6.2
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/COPYING +510 -0
- data/README +134 -0
- data/Rantfile +37 -0
- data/assert.rb +31 -0
- data/charhandler.rb +84 -0
- data/charset.rb +76 -0
- data/context.rb +174 -0
- data/howtouse.txt +136 -0
- data/io.each_til_charset.rb +247 -0
- data/require.rb +103 -0
- data/rlold.rb +12 -0
- data/rubycode.rb +44 -0
- data/rubylexer.rb +1589 -0
- data/rulexer.rb +532 -0
- data/symboltable.rb +65 -0
- data/testcode/deletewarns.rb +39 -0
- data/testcode/dumptokens.rb +38 -0
- data/testcode/locatetest +12 -0
- data/testcode/rubylexervsruby.rb +104 -0
- data/testcode/rubylexervsruby.sh +51 -0
- data/testcode/tokentest.rb +237 -0
- data/testcode/torment +51 -0
- data/testdata/1.rb.broken +729 -0
- data/testdata/23.rb +24 -0
- data/testdata/g.rb +15 -0
- data/testdata/newsyntax.rb +18 -0
- data/testdata/noeolatend.rb +1 -0
- data/testdata/p.rb +1227 -0
- data/testdata/pleac.rb.broken +6282 -0
- data/testdata/pre.rb +33 -0
- data/testdata/pre.unix.rb +33 -0
- data/testdata/regtest.rb +621 -0
- data/testdata/tokentest.assert.rb.can +7 -0
- data/testdata/untitled1.rb +1 -0
- data/testdata/w.rb +22 -0
- data/testdata/wsdlDriver.rb +499 -0
- data/testing.txt +130 -0
- data/testresults/placeholder +0 -0
- data/token.rb +486 -0
- data/tokenprinter.rb +152 -0
- metadata +76 -0
@@ -0,0 +1,7 @@
|
|
1
|
+
require "set" #; #; #; def assert ( expr , msg
|
2
|
+
= "assertion failed" ) #; $DEBUG and ( expr or
|
3
|
+
raise msg ) #; end #; #; @@printed = Set .
|
4
|
+
new #; def fixme ( s ) #; @@printed .
|
5
|
+
include? ( s ) and return #; $DEBUG and
|
6
|
+
STDERR . print "FIXME: #{s}\n" #; @@printed . add s
|
7
|
+
#; end #;
|
@@ -0,0 +1 @@
|
|
1
|
+
require 'foo'
|
data/testdata/w.rb
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
p %r{\/$}
|
2
|
+
p %r~<!include:([\/\w\.\-]+)>~m
|
3
|
+
|
4
|
+
p [].push *[1,2,3]
|
5
|
+
p /\n/
|
6
|
+
|
7
|
+
$a=1
|
8
|
+
@b=2
|
9
|
+
@@c=3
|
10
|
+
p(/\#$a \#@b \#@@c \#{$a+@b+@@c}/)
|
11
|
+
|
12
|
+
|
13
|
+
class Foo
|
14
|
+
attr :foo,true
|
15
|
+
end
|
16
|
+
f=Foo.new
|
17
|
+
p f.foo
|
18
|
+
p f.foo=9
|
19
|
+
p f.foo =19
|
20
|
+
p f.foo= 29
|
21
|
+
p f.foo = 39
|
22
|
+
p f.foo
|
@@ -0,0 +1,499 @@
|
|
1
|
+
# SOAP4R - SOAP WSDL driver
|
2
|
+
# Copyright (C) 2002, 2003 NAKAMURA, Hiroshi <nahi@ruby-lang.org>.
|
3
|
+
|
4
|
+
# This program is copyrighted free software by NAKAMURA, Hiroshi. You can
|
5
|
+
# redistribute it and/or modify it under the same terms of Ruby's license;
|
6
|
+
# either the dual license version in 2003, or any later version.
|
7
|
+
|
8
|
+
|
9
|
+
require 'wsdl/parser'
|
10
|
+
require 'wsdl/importer'
|
11
|
+
require 'xsd/qname'
|
12
|
+
require 'soap/element'
|
13
|
+
require 'soap/baseData'
|
14
|
+
require 'soap/streamHandler'
|
15
|
+
require 'soap/mapping'
|
16
|
+
require 'soap/mapping/wsdlRegistry'
|
17
|
+
require 'soap/rpc/rpc'
|
18
|
+
require 'soap/rpc/element'
|
19
|
+
require 'soap/processor'
|
20
|
+
require 'logger'
|
21
|
+
|
22
|
+
|
23
|
+
module SOAP
|
24
|
+
|
25
|
+
|
26
|
+
class WSDLDriverFactory
|
27
|
+
class FactoryError < StandardError; end
|
28
|
+
|
29
|
+
attr_reader :wsdl
|
30
|
+
|
31
|
+
def initialize(wsdl, logdev = nil)
|
32
|
+
@logdev = logdev
|
33
|
+
@wsdl = import(wsdl)
|
34
|
+
end
|
35
|
+
|
36
|
+
def inspect
|
37
|
+
"#<#{self.class}:#{@wsdl.name}>"
|
38
|
+
end
|
39
|
+
|
40
|
+
def create_driver(servicename = nil, portname = nil)
|
41
|
+
service = if servicename
|
42
|
+
@wsdl.service(XSD::QName.new(@wsdl.targetnamespace, servicename))
|
43
|
+
else
|
44
|
+
@wsdl.services[0]
|
45
|
+
end
|
46
|
+
if service.nil?
|
47
|
+
raise FactoryError.new("Service #{ servicename } not found in WSDL.")
|
48
|
+
end
|
49
|
+
port = if portname
|
50
|
+
service.ports[XSD::QName.new(@wsdl.targetnamespace, portname)]
|
51
|
+
else
|
52
|
+
service.ports[0]
|
53
|
+
end
|
54
|
+
if port.nil?
|
55
|
+
raise FactoryError.new("Port #{ portname } not found in WSDL.")
|
56
|
+
end
|
57
|
+
if port.soap_address.nil?
|
58
|
+
raise FactoryError.new("soap:address element not found in WSDL.")
|
59
|
+
end
|
60
|
+
WSDLDriver.new(@wsdl, port, @logdev)
|
61
|
+
end
|
62
|
+
|
63
|
+
# Backward compatibility.
|
64
|
+
alias createDriver create_driver
|
65
|
+
|
66
|
+
private
|
67
|
+
|
68
|
+
def import(location)
|
69
|
+
WSDL::Importer.import(location)
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
|
74
|
+
class WSDLDriver
|
75
|
+
class << self
|
76
|
+
def __attr_proxy(symbol, assignable = false)
|
77
|
+
name = symbol.to_s
|
78
|
+
module_eval <<-EOD
|
79
|
+
def #{name}
|
80
|
+
@servant.#{name}
|
81
|
+
end
|
82
|
+
EOD
|
83
|
+
if assignable
|
84
|
+
module_eval <<-EOD
|
85
|
+
def #{name}=(rhs)
|
86
|
+
@servant.#{name} = rhs
|
87
|
+
end
|
88
|
+
EOD
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
__attr_proxy :options
|
94
|
+
__attr_proxy :endpoint_url, true
|
95
|
+
__attr_proxy :mapping_registry, true # for RPC unmarshal
|
96
|
+
__attr_proxy :wsdl_mapping_registry, true # for RPC marshal
|
97
|
+
__attr_proxy :default_encodingstyle, true
|
98
|
+
__attr_proxy :allow_unqualified_element, true
|
99
|
+
__attr_proxy :generate_explicit_type, true
|
100
|
+
|
101
|
+
def httpproxy
|
102
|
+
@servant.options["protocol.http.proxy"]
|
103
|
+
end
|
104
|
+
|
105
|
+
def httpproxy=(httpproxy)
|
106
|
+
@servant.options["protocol.http.proxy"] = httpproxy
|
107
|
+
end
|
108
|
+
|
109
|
+
def wiredump_dev
|
110
|
+
@servant.options["protocol.http.wiredump_dev"]
|
111
|
+
end
|
112
|
+
|
113
|
+
def wiredump_dev=(wiredump_dev)
|
114
|
+
@servant.options["protocol.http.wiredump_dev"] = wiredump_dev
|
115
|
+
end
|
116
|
+
|
117
|
+
def mandatorycharset
|
118
|
+
@servant.options["protocol.mandatorycharset"]
|
119
|
+
end
|
120
|
+
|
121
|
+
def mandatorycharset=(mandatorycharset)
|
122
|
+
@servant.options["protocol.mandatorycharset"] = mandatorycharset
|
123
|
+
end
|
124
|
+
|
125
|
+
def wiredump_file_base
|
126
|
+
@servant.options["protocol.wiredump_file_base"]
|
127
|
+
end
|
128
|
+
|
129
|
+
def wiredump_file_base=(wiredump_file_base)
|
130
|
+
@servant.options["protocol.wiredump_file_base"] = wiredump_file_base
|
131
|
+
end
|
132
|
+
|
133
|
+
def initialize(wsdl, port, logdev)
|
134
|
+
@servant = Servant__.new(self, wsdl, port, logdev)
|
135
|
+
end
|
136
|
+
|
137
|
+
def inspect
|
138
|
+
"#<#{self.class}:#{@servant.port.name}>"
|
139
|
+
end
|
140
|
+
|
141
|
+
def reset_stream
|
142
|
+
@servant.streamhandler.reset
|
143
|
+
end
|
144
|
+
|
145
|
+
# Backward compatibility.
|
146
|
+
alias generateEncodeType= generate_explicit_type=
|
147
|
+
|
148
|
+
class Servant__
|
149
|
+
include Logger::Severity
|
150
|
+
include SOAP
|
151
|
+
|
152
|
+
attr_reader :options
|
153
|
+
attr_reader :streamhandler
|
154
|
+
attr_reader :port
|
155
|
+
|
156
|
+
attr_accessor :mapping_registry
|
157
|
+
attr_accessor :wsdl_mapping_registry
|
158
|
+
attr_accessor :default_encodingstyle
|
159
|
+
attr_accessor :allow_unqualified_element
|
160
|
+
attr_accessor :generate_explicit_type
|
161
|
+
|
162
|
+
def initialize(host, wsdl, port, logdev)
|
163
|
+
@host = host
|
164
|
+
@wsdl = wsdl
|
165
|
+
@port = port
|
166
|
+
@logdev = logdev
|
167
|
+
|
168
|
+
@options = setup_options
|
169
|
+
@mapping_registry = nil # for rpc unmarshal
|
170
|
+
@wsdl_mapping_registry = nil # for rpc marshal
|
171
|
+
@default_encodingstyle = EncodingNamespace
|
172
|
+
@allow_unqualified_element = true
|
173
|
+
@generate_explicit_type = false
|
174
|
+
@wiredump_file_base = nil
|
175
|
+
@mandatorycharset = nil
|
176
|
+
|
177
|
+
@wsdl_elements = @wsdl.collect_elements
|
178
|
+
@wsdl_types = @wsdl.collect_complextypes
|
179
|
+
@rpc_decode_typemap = @wsdl_types +
|
180
|
+
@wsdl.soap_rpc_complextypes(port.find_binding)
|
181
|
+
@wsdl_mapping_registry = Mapping::WSDLRegistry.new(@rpc_decode_typemap)
|
182
|
+
@doc_mapper = Mapper.new(@wsdl_elements, @wsdl_types)
|
183
|
+
endpoint_url = @port.soap_address.location
|
184
|
+
@streamhandler = HTTPPostStreamHandler.new(endpoint_url,
|
185
|
+
@options["protocol.http"] ||= Property.new)
|
186
|
+
# Convert a map which key is QName, to a Hash which key is String.
|
187
|
+
@operations = {}
|
188
|
+
@port.inputoperation_map.each do |op_name, op_info|
|
189
|
+
@operations[op_name.name] = op_info
|
190
|
+
add_method_interface(op_info)
|
191
|
+
end
|
192
|
+
end
|
193
|
+
|
194
|
+
def endpoint_url
|
195
|
+
@streamhandler.endpoint_url
|
196
|
+
end
|
197
|
+
|
198
|
+
def endpoint_url=(endpoint_url)
|
199
|
+
@streamhandler.endpoint_url = endpoint_url
|
200
|
+
@streamhandler.reset
|
201
|
+
end
|
202
|
+
|
203
|
+
def rpc_send(method_name, *params)
|
204
|
+
log(INFO) { "call: calling method '#{ method_name }'." }
|
205
|
+
log(DEBUG) { "call: parameters '#{ params.inspect }'." }
|
206
|
+
|
207
|
+
op_info = @operations[method_name]
|
208
|
+
parts_names = op_info.bodyparts.collect { |part| part.name }
|
209
|
+
obj = create_method_obj(parts_names, params)
|
210
|
+
method = Mapping.obj2soap(obj, @wsdl_mapping_registry, op_info.optype_name)
|
211
|
+
method.elename = op_info.op_name
|
212
|
+
method.type = XSD::QName.new # Request should not be typed.
|
213
|
+
req_header = nil
|
214
|
+
req_body = SOAPBody.new(method)
|
215
|
+
|
216
|
+
if @wiredump_file_base
|
217
|
+
@streamhandler.wiredump_file_base =
|
218
|
+
@wiredump_file_base + '_' << method_name
|
219
|
+
end
|
220
|
+
|
221
|
+
begin
|
222
|
+
opt = create_options
|
223
|
+
opt[:decode_typemap] = @rpc_decode_typemap
|
224
|
+
res_header, res_body = invoke(req_header, req_body, op_info, opt)
|
225
|
+
if res_body.fault
|
226
|
+
raise SOAP::FaultError.new(res_body.fault)
|
227
|
+
end
|
228
|
+
rescue SOAP::FaultError => e
|
229
|
+
Mapping.fault2exception(e)
|
230
|
+
end
|
231
|
+
|
232
|
+
#breakpoint
|
233
|
+
ret = res_body.response ?
|
234
|
+
Mapping.soap2obj(res_body.response, @mapping_registry) : nil
|
235
|
+
|
236
|
+
if res_body.outparams
|
237
|
+
outparams = res_body.outparams.collect { |outparam|
|
238
|
+
Mapping.soap2obj(outparam)
|
239
|
+
}
|
240
|
+
return [ret].concat(outparams)
|
241
|
+
else
|
242
|
+
return ret
|
243
|
+
end
|
244
|
+
end
|
245
|
+
|
246
|
+
# req_header: [[element, mustunderstand, encodingstyle(QName/String)], ...]
|
247
|
+
# req_body: SOAPBasetype/SOAPCompoundtype
|
248
|
+
def document_send(name, header_obj, body_obj)
|
249
|
+
log(INFO) { "document_send: sending document '#{ name }'." }
|
250
|
+
op_info = @operations[name]
|
251
|
+
req_header = header_from_obj(header_obj, op_info)
|
252
|
+
req_body = body_from_obj(body_obj, op_info)
|
253
|
+
opt = create_options
|
254
|
+
res_header, res_body = invoke(req_header, req_body, op_info, opt)
|
255
|
+
if res_body.fault
|
256
|
+
raise SOAP::FaultError.new(res_body.fault)
|
257
|
+
end
|
258
|
+
res_body_obj = res_body.response ?
|
259
|
+
Mapping.soap2obj(res_body.response, @mapping_registry) : nil
|
260
|
+
return res_header, res_body_obj
|
261
|
+
end
|
262
|
+
|
263
|
+
private
|
264
|
+
|
265
|
+
def create_method_obj(names, params)
|
266
|
+
o = Object.new
|
267
|
+
for idx in 0 ... params.length
|
268
|
+
o.instance_eval("@#{ names[idx] } = params[idx]")
|
269
|
+
end
|
270
|
+
o
|
271
|
+
end
|
272
|
+
|
273
|
+
def invoke(req_header, req_body, op_info, opt)
|
274
|
+
send_string = Processor.marshal(req_header, req_body, opt)
|
275
|
+
log(DEBUG) { "invoke: sending string #{ send_string }" }
|
276
|
+
data = @streamhandler.send(send_string, op_info.soapaction)
|
277
|
+
log(DEBUG) { "invoke: received string #{ data.receive_string }" }
|
278
|
+
if data.receive_string.empty?
|
279
|
+
return nil, nil
|
280
|
+
end
|
281
|
+
opt[:charset] = @mandatorycharset ||
|
282
|
+
StreamHandler.parse_media_type(data.receive_contenttype)
|
283
|
+
res_header, res_body = Processor.unmarshal(data.receive_string, opt)
|
284
|
+
return res_header, res_body
|
285
|
+
end
|
286
|
+
|
287
|
+
def header_from_obj(obj, op_info)
|
288
|
+
if obj.is_a?(SOAPHeader)
|
289
|
+
obj
|
290
|
+
elsif op_info.headerparts.empty?
|
291
|
+
if obj.nil?
|
292
|
+
nil
|
293
|
+
else
|
294
|
+
raise RuntimeError.new("No header definition in schema.")
|
295
|
+
end
|
296
|
+
elsif op_info.headerparts.size == 1
|
297
|
+
part = op_info.headerparts[0]
|
298
|
+
header = SOAPHeader.new()
|
299
|
+
header.add(headeritem_from_obj(obj, part.element || part.eletype))
|
300
|
+
header
|
301
|
+
else
|
302
|
+
header = SOAPHeader.new()
|
303
|
+
op_info.headerparts.each do |part|
|
304
|
+
child = obj[part.elename.name]
|
305
|
+
ele = headeritem_from_obj(child, part.element || part.eletype)
|
306
|
+
header.add(ele)
|
307
|
+
end
|
308
|
+
header
|
309
|
+
end
|
310
|
+
end
|
311
|
+
|
312
|
+
def headeritem_from_obj(obj, name)
|
313
|
+
if obj.nil?
|
314
|
+
SOAPElement.new(name)
|
315
|
+
elsif obj.is_a?(SOAPHeaderItem)
|
316
|
+
obj
|
317
|
+
else
|
318
|
+
@doc_mapper.obj2ele(obj, name)
|
319
|
+
end
|
320
|
+
end
|
321
|
+
|
322
|
+
def body_from_obj(obj, op_info)
|
323
|
+
if obj.is_a?(SOAPBody)
|
324
|
+
obj
|
325
|
+
elsif op_info.bodyparts.empty?
|
326
|
+
if obj.nil?
|
327
|
+
nil
|
328
|
+
else
|
329
|
+
raise RuntimeError.new("No body found in schema.")
|
330
|
+
end
|
331
|
+
elsif op_info.bodyparts.size == 1
|
332
|
+
part = op_info.bodyparts[0]
|
333
|
+
ele = bodyitem_from_obj(obj, part.element || part.type)
|
334
|
+
SOAPBody.new(ele)
|
335
|
+
else
|
336
|
+
body = SOAPBody.new
|
337
|
+
op_info.bodyparts.each do |part|
|
338
|
+
child = obj[part.elename.name]
|
339
|
+
ele = bodyitem_from_obj(child, part.element || part.type)
|
340
|
+
body.add(ele.elename.name, ele)
|
341
|
+
end
|
342
|
+
body
|
343
|
+
end
|
344
|
+
end
|
345
|
+
|
346
|
+
def bodyitem_from_obj(obj, name)
|
347
|
+
if obj.nil?
|
348
|
+
SOAPElement.new(name)
|
349
|
+
elsif obj.is_a?(SOAPElement)
|
350
|
+
obj
|
351
|
+
else
|
352
|
+
@doc_mapper.obj2ele(obj, name)
|
353
|
+
end
|
354
|
+
end
|
355
|
+
|
356
|
+
def add_method_interface(op_info)
|
357
|
+
case op_info.style
|
358
|
+
when :document
|
359
|
+
add_document_method_interface(op_info.op_name.name)
|
360
|
+
when :rpc
|
361
|
+
parts_names = op_info.bodyparts.collect { |part| part.name }
|
362
|
+
add_rpc_method_interface(op_info.op_name.name, parts_names)
|
363
|
+
else
|
364
|
+
raise RuntimeError.new("Unknown style: #{op_info.style}")
|
365
|
+
end
|
366
|
+
end
|
367
|
+
|
368
|
+
def add_document_method_interface(name)
|
369
|
+
@host.instance_eval <<-EOS
|
370
|
+
def #{ name }(headers, body)
|
371
|
+
@servant.document_send(#{ name.dump }, headers, body)
|
372
|
+
end
|
373
|
+
EOS
|
374
|
+
end
|
375
|
+
|
376
|
+
def add_rpc_method_interface(name, parts_names)
|
377
|
+
i = 0
|
378
|
+
param_names = parts_names.collect { |orgname| i += 1; "arg#{ i }" }
|
379
|
+
callparam = (param_names.collect { |pname| ", " + pname }).join
|
380
|
+
@host.instance_eval <<-EOS
|
381
|
+
def #{ name }(#{ param_names.join(", ") })
|
382
|
+
@servant.rpc_send(#{ name.dump }#{ callparam })
|
383
|
+
end
|
384
|
+
EOS
|
385
|
+
end
|
386
|
+
|
387
|
+
def create_options
|
388
|
+
opt = {}
|
389
|
+
opt[:default_encodingstyle] = @default_encodingstyle
|
390
|
+
opt[:allow_unqualified_element] = @allow_unqualified_element
|
391
|
+
opt[:generate_explicit_type] = @generate_explicit_type
|
392
|
+
opt
|
393
|
+
end
|
394
|
+
|
395
|
+
def log(sev)
|
396
|
+
@logdev.add(sev, nil, self.class) { yield } if @logdev
|
397
|
+
end
|
398
|
+
|
399
|
+
def setup_options
|
400
|
+
if opt = Property.loadproperty(::SOAP::PropertyName)
|
401
|
+
opt = opt["client"]
|
402
|
+
end
|
403
|
+
opt ||= Property.new
|
404
|
+
opt.add_hook("protocol.mandatorycharset") do |key, value|
|
405
|
+
@mandatorycharset = value
|
406
|
+
end
|
407
|
+
opt.add_hook("protocol.wiredump_file_base") do |key, value|
|
408
|
+
@wiredump_file_base = value
|
409
|
+
end
|
410
|
+
opt["protocol.http.charset"] ||= XSD::Charset.encoding_label
|
411
|
+
opt["protocol.http.proxy"] ||= Env::HTTP_PROXY
|
412
|
+
opt["protocol.http.no_proxy"] ||= Env::NO_PROXY
|
413
|
+
opt
|
414
|
+
end
|
415
|
+
|
416
|
+
class Mapper
|
417
|
+
def initialize(elements, types)
|
418
|
+
@elements = elements
|
419
|
+
@types = types
|
420
|
+
end
|
421
|
+
|
422
|
+
def obj2ele(obj, name)
|
423
|
+
if ele = @elements[name]
|
424
|
+
_obj2ele(obj, ele)
|
425
|
+
elsif type = @types[name]
|
426
|
+
obj2type(obj, type)
|
427
|
+
else
|
428
|
+
raise RuntimeError.new("Cannot find name #{name} in schema.")
|
429
|
+
end
|
430
|
+
end
|
431
|
+
|
432
|
+
def ele2obj(ele, *arg)
|
433
|
+
raise NotImplementedError.new
|
434
|
+
end
|
435
|
+
|
436
|
+
private
|
437
|
+
|
438
|
+
def _obj2ele(obj, ele)
|
439
|
+
o = nil
|
440
|
+
if ele.type
|
441
|
+
if type = @types[ele.type]
|
442
|
+
o = obj2type(obj, type)
|
443
|
+
elsif type = TypeMap[ele.type]
|
444
|
+
o = base2soap(obj, type)
|
445
|
+
else
|
446
|
+
raise RuntimeError.new("Cannot find type #{ele.type}.")
|
447
|
+
end
|
448
|
+
o.elename = ele.name
|
449
|
+
elsif ele.local_complextype
|
450
|
+
o = SOAPElement.new(ele.name)
|
451
|
+
ele.local_complextype.each_element do |child_name, child_ele|
|
452
|
+
o.add(_obj2ele(find_attribute(obj, child_name.name), child_ele))
|
453
|
+
end
|
454
|
+
else
|
455
|
+
raise RuntimeError.new("Illegal schema?")
|
456
|
+
end
|
457
|
+
o
|
458
|
+
end
|
459
|
+
|
460
|
+
def obj2type(obj, type)
|
461
|
+
o = SOAPElement.new(type.name)
|
462
|
+
type.each_element do |child_name, child_ele|
|
463
|
+
o.add(_obj2ele(find_attribute(obj, child_name.name), child_ele))
|
464
|
+
end
|
465
|
+
o
|
466
|
+
end
|
467
|
+
|
468
|
+
def _ele2obj(ele)
|
469
|
+
raise NotImplementedError.new
|
470
|
+
end
|
471
|
+
|
472
|
+
def base2soap(obj, type)
|
473
|
+
soap_obj = nil
|
474
|
+
if type <= XSD::XSDString
|
475
|
+
soap_obj = type.new(XSD::Charset.is_ces(obj, $KCODE) ?
|
476
|
+
XSD::Charset.encoding_conv(obj, $KCODE, XSD::Charset.encoding) : obj)
|
477
|
+
else
|
478
|
+
soap_obj = type.new(obj)
|
479
|
+
end
|
480
|
+
soap_obj
|
481
|
+
end
|
482
|
+
|
483
|
+
def find_attribute(obj, attr_name)
|
484
|
+
if obj.respond_to?(attr_name)
|
485
|
+
obj.__send__(attr_name)
|
486
|
+
elsif obj.is_a?(Hash)
|
487
|
+
obj[attr_name] || obj[attr_name.intern]
|
488
|
+
else
|
489
|
+
obj.instance_eval("@#{ attr_name }")
|
490
|
+
end
|
491
|
+
end
|
492
|
+
end
|
493
|
+
end
|
494
|
+
end
|
495
|
+
|
496
|
+
|
497
|
+
end
|
498
|
+
|
499
|
+
|