soap4r_es 0.0.1
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 +7 -0
- data/bin/wsdl2ruby.rb +140 -0
- data/bin/wsdl2ruby_rails.rb +140 -0
- data/bin/xsd2ruby.rb +92 -0
- data/lib/soap/attachment.rb +109 -0
- data/lib/soap/attrproxy.rb +35 -0
- data/lib/soap/baseData.rb +1095 -0
- data/lib/soap/element.rb +278 -0
- data/lib/soap/encodingstyle/aspDotNetHandler.rb +208 -0
- data/lib/soap/encodingstyle/handler.rb +121 -0
- data/lib/soap/encodingstyle/literalHandler.rb +196 -0
- data/lib/soap/encodingstyle/soapHandler.rb +560 -0
- data/lib/soap/filter/filterchain.rb +52 -0
- data/lib/soap/filter/handler.rb +32 -0
- data/lib/soap/filter/streamhandler.rb +30 -0
- data/lib/soap/filter.rb +14 -0
- data/lib/soap/generator.rb +299 -0
- data/lib/soap/header/handler.rb +64 -0
- data/lib/soap/header/handlerset.rb +78 -0
- data/lib/soap/header/mappinghandler.rb +48 -0
- data/lib/soap/header/simplehandler.rb +45 -0
- data/lib/soap/httpconfigloader.rb +140 -0
- data/lib/soap/mapping/encodedregistry.rb +541 -0
- data/lib/soap/mapping/factory.rb +389 -0
- data/lib/soap/mapping/literalregistry.rb +392 -0
- data/lib/soap/mapping/mapping.rb +577 -0
- data/lib/soap/mapping/registry.rb +297 -0
- data/lib/soap/mapping/rubytypeFactory.rb +446 -0
- data/lib/soap/mapping/schemadefinition.rb +171 -0
- data/lib/soap/mapping/typeMap.rb +107 -0
- data/lib/soap/mapping/wsdlencodedregistry.rb +212 -0
- data/lib/soap/mapping/wsdlliteralregistry.rb +249 -0
- data/lib/soap/mapping.rb +13 -0
- data/lib/soap/marshal.rb +60 -0
- data/lib/soap/mimemessage.rb +243 -0
- data/lib/soap/nestedexception.rb +43 -0
- data/lib/soap/netHttpClient.rb +242 -0
- data/lib/soap/ns.rb +39 -0
- data/lib/soap/parser.rb +253 -0
- data/lib/soap/processor.rb +67 -0
- data/lib/soap/property.rb +330 -0
- data/lib/soap/proxy.rb +15 -0
- data/lib/soap/rpc/cgistub.rb +249 -0
- data/lib/soap/rpc/driver.rb +222 -0
- data/lib/soap/rpc/element.rb +375 -0
- data/lib/soap/rpc/httpserver.rb +144 -0
- data/lib/soap/rpc/methodDef.rb +69 -0
- data/lib/soap/rpc/proxy.rb +573 -0
- data/lib/soap/rpc/router.rb +672 -0
- data/lib/soap/rpc/rpc.rb +26 -0
- data/lib/soap/rpc/soaplet.rb +201 -0
- data/lib/soap/rpc/standaloneServer.rb +44 -0
- data/lib/soap/soap.rb +163 -0
- data/lib/soap/streamHandler.rb +302 -0
- data/lib/soap/version.rb +12 -0
- data/lib/soap/wsdlDriver.rb +165 -0
- data/lib/wsdl/binding.rb +66 -0
- data/lib/wsdl/data.rb +65 -0
- data/lib/wsdl/definitions.rb +237 -0
- data/lib/wsdl/documentation.rb +33 -0
- data/lib/wsdl/import.rb +81 -0
- data/lib/wsdl/importer.rb +39 -0
- data/lib/wsdl/info.rb +51 -0
- data/lib/wsdl/message.rb +55 -0
- data/lib/wsdl/operation.rb +152 -0
- data/lib/wsdl/operationBinding.rb +241 -0
- data/lib/wsdl/param.rb +94 -0
- data/lib/wsdl/parser.rb +180 -0
- data/lib/wsdl/part.rb +53 -0
- data/lib/wsdl/port.rb +67 -0
- data/lib/wsdl/portType.rb +76 -0
- data/lib/wsdl/service.rb +62 -0
- data/lib/wsdl/soap/address.rb +41 -0
- data/lib/wsdl/soap/binding.rb +50 -0
- data/lib/wsdl/soap/body.rb +59 -0
- data/lib/wsdl/soap/cgiStubCreator.rb +93 -0
- data/lib/wsdl/soap/classDefCreator.rb +529 -0
- data/lib/wsdl/soap/classDefCreatorSupport.rb +242 -0
- data/lib/wsdl/soap/classNameCreator.rb +57 -0
- data/lib/wsdl/soap/clientSkeltonCreator.rb +107 -0
- data/lib/wsdl/soap/complexType.rb +174 -0
- data/lib/wsdl/soap/data.rb +43 -0
- data/lib/wsdl/soap/definitions.rb +201 -0
- data/lib/wsdl/soap/driverCreator.rb +121 -0
- data/lib/wsdl/soap/element.rb +34 -0
- data/lib/wsdl/soap/encodedMappingRegistryCreator.rb +74 -0
- data/lib/wsdl/soap/fault.rb +57 -0
- data/lib/wsdl/soap/header.rb +87 -0
- data/lib/wsdl/soap/headerfault.rb +57 -0
- data/lib/wsdl/soap/literalMappingRegistryCreator.rb +116 -0
- data/lib/wsdl/soap/mappingRegistryCreator.rb +59 -0
- data/lib/wsdl/soap/mappingRegistryCreatorSupport.rb +380 -0
- data/lib/wsdl/soap/methodDefCreator.rb +200 -0
- data/lib/wsdl/soap/operation.rb +113 -0
- data/lib/wsdl/soap/servantSkeltonCreator.rb +92 -0
- data/lib/wsdl/soap/servletStubCreator.rb +105 -0
- data/lib/wsdl/soap/standaloneServerStubCreator.rb +101 -0
- data/lib/wsdl/soap/wsdl2ruby.rb +249 -0
- data/lib/wsdl/types.rb +45 -0
- data/lib/wsdl/wsdl.rb +25 -0
- data/lib/wsdl/xmlSchema/all.rb +25 -0
- data/lib/wsdl/xmlSchema/annotation.rb +35 -0
- data/lib/wsdl/xmlSchema/any.rb +62 -0
- data/lib/wsdl/xmlSchema/anyAttribute.rb +49 -0
- data/lib/wsdl/xmlSchema/attribute.rb +105 -0
- data/lib/wsdl/xmlSchema/attributeGroup.rb +69 -0
- data/lib/wsdl/xmlSchema/choice.rb +59 -0
- data/lib/wsdl/xmlSchema/complexContent.rb +98 -0
- data/lib/wsdl/xmlSchema/complexExtension.rb +120 -0
- data/lib/wsdl/xmlSchema/complexRestriction.rb +105 -0
- data/lib/wsdl/xmlSchema/complexType.rb +194 -0
- data/lib/wsdl/xmlSchema/content.rb +96 -0
- data/lib/wsdl/xmlSchema/data.rb +117 -0
- data/lib/wsdl/xmlSchema/element.rb +154 -0
- data/lib/wsdl/xmlSchema/enumeration.rb +37 -0
- data/lib/wsdl/xmlSchema/fractiondigits.rb +38 -0
- data/lib/wsdl/xmlSchema/group.rb +101 -0
- data/lib/wsdl/xmlSchema/import.rb +53 -0
- data/lib/wsdl/xmlSchema/importHandler.rb +45 -0
- data/lib/wsdl/xmlSchema/importer.rb +103 -0
- data/lib/wsdl/xmlSchema/include.rb +48 -0
- data/lib/wsdl/xmlSchema/length.rb +38 -0
- data/lib/wsdl/xmlSchema/list.rb +49 -0
- data/lib/wsdl/xmlSchema/maxexclusive.rb +38 -0
- data/lib/wsdl/xmlSchema/maxinclusive.rb +38 -0
- data/lib/wsdl/xmlSchema/maxlength.rb +38 -0
- data/lib/wsdl/xmlSchema/minexclusive.rb +38 -0
- data/lib/wsdl/xmlSchema/mininclusive.rb +38 -0
- data/lib/wsdl/xmlSchema/minlength.rb +38 -0
- data/lib/wsdl/xmlSchema/parser.rb +168 -0
- data/lib/wsdl/xmlSchema/pattern.rb +37 -0
- data/lib/wsdl/xmlSchema/ref.rb +34 -0
- data/lib/wsdl/xmlSchema/schema.rb +179 -0
- data/lib/wsdl/xmlSchema/sequence.rb +55 -0
- data/lib/wsdl/xmlSchema/simpleContent.rb +70 -0
- data/lib/wsdl/xmlSchema/simpleExtension.rb +63 -0
- data/lib/wsdl/xmlSchema/simpleRestriction.rb +133 -0
- data/lib/wsdl/xmlSchema/simpleType.rb +88 -0
- data/lib/wsdl/xmlSchema/totaldigits.rb +38 -0
- data/lib/wsdl/xmlSchema/union.rb +36 -0
- data/lib/wsdl/xmlSchema/unique.rb +35 -0
- data/lib/wsdl/xmlSchema/whitespace.rb +38 -0
- data/lib/wsdl/xmlSchema/xsd2ruby.rb +177 -0
- data/lib/xsd/charset.rb +190 -0
- data/lib/xsd/codegen/classdef.rb +230 -0
- data/lib/xsd/codegen/commentdef.rb +35 -0
- data/lib/xsd/codegen/gensupport.rb +277 -0
- data/lib/xsd/codegen/methoddef.rb +71 -0
- data/lib/xsd/codegen/moduledef.rb +209 -0
- data/lib/xsd/codegen.rb +13 -0
- data/lib/xsd/datatypes.rb +1465 -0
- data/lib/xsd/datatypes1999.rb +21 -0
- data/lib/xsd/iconvcharset.rb +33 -0
- data/lib/xsd/mapping.rb +69 -0
- data/lib/xsd/namedelements.rb +133 -0
- data/lib/xsd/ns.rb +183 -0
- data/lib/xsd/qname.rb +80 -0
- data/lib/xsd/xmlparser/libxmlparser.rb +136 -0
- data/lib/xsd/xmlparser/nokogiriparser.rb +63 -0
- data/lib/xsd/xmlparser/ogaparser.rb +53 -0
- data/lib/xsd/xmlparser/oxparser.rb +97 -0
- data/lib/xsd/xmlparser/parser.rb +101 -0
- data/lib/xsd/xmlparser/rexmlparser.rb +54 -0
- data/lib/xsd/xmlparser.rb +81 -0
- metadata +240 -0
|
@@ -0,0 +1,277 @@
|
|
|
1
|
+
# encoding: UTF-8
|
|
2
|
+
# XSD4R - Code generation support
|
|
3
|
+
# Copyright (C) 2000-2007 NAKAMURA, Hiroshi <nahi@ruby-lang.org>.
|
|
4
|
+
|
|
5
|
+
# This program is copyrighted free software by NAKAMURA, Hiroshi. You can
|
|
6
|
+
# redistribute it and/or modify it under the same terms of Ruby's license;
|
|
7
|
+
# either the dual license version in 2003, or any later version.
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
module XSD
|
|
11
|
+
module CodeGen
|
|
12
|
+
|
|
13
|
+
# from the file 'keywords' in 1.9.
|
|
14
|
+
KEYWORDS = {}
|
|
15
|
+
%w(
|
|
16
|
+
__LINE__
|
|
17
|
+
__FILE__
|
|
18
|
+
BEGIN
|
|
19
|
+
END
|
|
20
|
+
alias
|
|
21
|
+
and
|
|
22
|
+
begin
|
|
23
|
+
break
|
|
24
|
+
case
|
|
25
|
+
class
|
|
26
|
+
def
|
|
27
|
+
defined?
|
|
28
|
+
do
|
|
29
|
+
else
|
|
30
|
+
elsif
|
|
31
|
+
end
|
|
32
|
+
ensure
|
|
33
|
+
false
|
|
34
|
+
for
|
|
35
|
+
if
|
|
36
|
+
in
|
|
37
|
+
module
|
|
38
|
+
next
|
|
39
|
+
nil
|
|
40
|
+
not
|
|
41
|
+
or
|
|
42
|
+
redo
|
|
43
|
+
rescue
|
|
44
|
+
retry
|
|
45
|
+
return
|
|
46
|
+
self
|
|
47
|
+
super
|
|
48
|
+
then
|
|
49
|
+
true
|
|
50
|
+
undef
|
|
51
|
+
unless
|
|
52
|
+
until
|
|
53
|
+
when
|
|
54
|
+
while
|
|
55
|
+
yield
|
|
56
|
+
).each { |k| KEYWORDS[k] = nil }
|
|
57
|
+
|
|
58
|
+
# from Module.constants from 1.8 & 1.9
|
|
59
|
+
CONSTANTS = {}
|
|
60
|
+
%w(
|
|
61
|
+
ARGF
|
|
62
|
+
ARGV
|
|
63
|
+
ArgumentError
|
|
64
|
+
Array
|
|
65
|
+
BasicObject
|
|
66
|
+
Bignum
|
|
67
|
+
Binding
|
|
68
|
+
Class
|
|
69
|
+
Comparable
|
|
70
|
+
Continuation
|
|
71
|
+
Data
|
|
72
|
+
Dir
|
|
73
|
+
ENV
|
|
74
|
+
EOFError
|
|
75
|
+
Enumerable
|
|
76
|
+
Errno
|
|
77
|
+
Exception
|
|
78
|
+
FALSE
|
|
79
|
+
FalseClass
|
|
80
|
+
File
|
|
81
|
+
FileTest
|
|
82
|
+
Fixnum
|
|
83
|
+
Float
|
|
84
|
+
FloatDomainError
|
|
85
|
+
GC
|
|
86
|
+
Hash
|
|
87
|
+
IO
|
|
88
|
+
IOError
|
|
89
|
+
IndexError
|
|
90
|
+
Integer
|
|
91
|
+
Interrupt
|
|
92
|
+
Kernel
|
|
93
|
+
KeyError
|
|
94
|
+
LoadError
|
|
95
|
+
LocalJumpError
|
|
96
|
+
Marshal
|
|
97
|
+
MatchData
|
|
98
|
+
MatchingData
|
|
99
|
+
Math
|
|
100
|
+
Method
|
|
101
|
+
Module
|
|
102
|
+
Mutex
|
|
103
|
+
NIL
|
|
104
|
+
NameError
|
|
105
|
+
NilClass
|
|
106
|
+
NoMemoryError
|
|
107
|
+
NoMethodError
|
|
108
|
+
NotImplementedError
|
|
109
|
+
Numeric
|
|
110
|
+
Object
|
|
111
|
+
ObjectSpace
|
|
112
|
+
PLATFORM
|
|
113
|
+
Precision
|
|
114
|
+
Proc
|
|
115
|
+
Process
|
|
116
|
+
RELEASE_DATE
|
|
117
|
+
RUBY_PATCHLEVEL
|
|
118
|
+
RUBY_PLATFORM
|
|
119
|
+
RUBY_RELEASE_DATE
|
|
120
|
+
RUBY_VERSION
|
|
121
|
+
Range
|
|
122
|
+
RangeError
|
|
123
|
+
Regexp
|
|
124
|
+
RegexpError
|
|
125
|
+
RuntimeError
|
|
126
|
+
STDERR
|
|
127
|
+
STDIN
|
|
128
|
+
STDOUT
|
|
129
|
+
ScriptError
|
|
130
|
+
SecurityError
|
|
131
|
+
Signal
|
|
132
|
+
SignalException
|
|
133
|
+
StandardError
|
|
134
|
+
String
|
|
135
|
+
Struct
|
|
136
|
+
Symbol
|
|
137
|
+
SyntaxError
|
|
138
|
+
SystemCallError
|
|
139
|
+
SystemExit
|
|
140
|
+
SystemStackError
|
|
141
|
+
TOPLEVEL_BINDING
|
|
142
|
+
TRUE
|
|
143
|
+
Thread
|
|
144
|
+
ThreadError
|
|
145
|
+
ThreadGroup
|
|
146
|
+
Time
|
|
147
|
+
TrueClass
|
|
148
|
+
TypeError
|
|
149
|
+
UnboundMethod
|
|
150
|
+
VERSION
|
|
151
|
+
VM
|
|
152
|
+
ZeroDivisionError
|
|
153
|
+
).each { |c| CONSTANTS[c] = nil }
|
|
154
|
+
|
|
155
|
+
|
|
156
|
+
module GenSupport
|
|
157
|
+
def capitalize(target)
|
|
158
|
+
target.sub(/^([a-z])/) { $1.upcase }
|
|
159
|
+
end
|
|
160
|
+
module_function :capitalize
|
|
161
|
+
|
|
162
|
+
def uncapitalize(target)
|
|
163
|
+
target.sub(/^([A-Z])/) { $1.downcase }
|
|
164
|
+
end
|
|
165
|
+
module_function :uncapitalize
|
|
166
|
+
|
|
167
|
+
def safeconstname(name)
|
|
168
|
+
safename = name.scan(/[a-zA-Z0-9_]+/).collect { |ele|
|
|
169
|
+
GenSupport.capitalize(ele)
|
|
170
|
+
}.join
|
|
171
|
+
if /\A[A-Z]/ !~ safename or keyword?(safename) or constant?(safename)
|
|
172
|
+
"C_#{safename}"
|
|
173
|
+
else
|
|
174
|
+
safename
|
|
175
|
+
end
|
|
176
|
+
end
|
|
177
|
+
module_function :safeconstname
|
|
178
|
+
|
|
179
|
+
def safeconstname?(name)
|
|
180
|
+
/\A[A-Z][a-zA-Z0-9_]*\z/ =~ name and !keyword?(name)
|
|
181
|
+
end
|
|
182
|
+
module_function :safeconstname?
|
|
183
|
+
|
|
184
|
+
def safemethodname(name)
|
|
185
|
+
postfix = name[/[=?!]$/]
|
|
186
|
+
safename = name.scan(/[a-zA-Z0-9_]+/).join('_')
|
|
187
|
+
safename = uncapitalize(safename)
|
|
188
|
+
safename += postfix if postfix
|
|
189
|
+
if /\A[a-z]/ !~ safename or keyword?(safename)
|
|
190
|
+
"m_#{safename}"
|
|
191
|
+
else
|
|
192
|
+
safename
|
|
193
|
+
end
|
|
194
|
+
end
|
|
195
|
+
module_function :safemethodname
|
|
196
|
+
|
|
197
|
+
def safemethodname?(name)
|
|
198
|
+
/\A[a-zA-Z_][a-zA-Z0-9_]*[=!?]?\z/ =~ name and !keyword?(name)
|
|
199
|
+
end
|
|
200
|
+
module_function :safemethodname?
|
|
201
|
+
|
|
202
|
+
def safevarname(name)
|
|
203
|
+
safename = uncapitalize(name.scan(/[a-zA-Z0-9_]+/).join('_'))
|
|
204
|
+
if /\A[a-z]/ !~ safename or keyword?(safename)
|
|
205
|
+
"v_#{safename}"
|
|
206
|
+
else
|
|
207
|
+
safename
|
|
208
|
+
end
|
|
209
|
+
end
|
|
210
|
+
module_function :safevarname
|
|
211
|
+
|
|
212
|
+
def safevarname?(name)
|
|
213
|
+
/\A[a-z_][a-zA-Z0-9_]*\z/ =~ name and !keyword?(name)
|
|
214
|
+
end
|
|
215
|
+
module_function :safevarname?
|
|
216
|
+
|
|
217
|
+
def keyword?(word)
|
|
218
|
+
KEYWORDS.key?(word)
|
|
219
|
+
end
|
|
220
|
+
module_function :keyword?
|
|
221
|
+
|
|
222
|
+
def constant?(word)
|
|
223
|
+
CONSTANTS.key?(word)
|
|
224
|
+
end
|
|
225
|
+
module_function :constant?
|
|
226
|
+
|
|
227
|
+
def format(str, indent = nil)
|
|
228
|
+
str = trim_eol(str)
|
|
229
|
+
str = trim_indent(str)
|
|
230
|
+
if indent
|
|
231
|
+
str.to_s.gsub(/^/, " " * indent)
|
|
232
|
+
else
|
|
233
|
+
str
|
|
234
|
+
end
|
|
235
|
+
end
|
|
236
|
+
|
|
237
|
+
private
|
|
238
|
+
|
|
239
|
+
def trim_eol(str)
|
|
240
|
+
str = str.lines if str.respond_to?(:lines) # RubyJedi: compatible with Ruby 1.8.6 and above
|
|
241
|
+
str.collect { |line|
|
|
242
|
+
line.sub(/\r?\n\z/, "") + "\n"
|
|
243
|
+
}.join
|
|
244
|
+
end
|
|
245
|
+
|
|
246
|
+
def trim_indent(str)
|
|
247
|
+
indent = nil
|
|
248
|
+
str = str.lines if str.respond_to?(:lines) # RubyJedi: compatible with Ruby 1.8.6 and above
|
|
249
|
+
str = str.collect { |line| untab(line) }.join
|
|
250
|
+
str = str.lines if str.respond_to?(:lines) # RubyJedi: compatible with Ruby 1.8.6 and above
|
|
251
|
+
str.each do |line|
|
|
252
|
+
head = line.index(/\S/)
|
|
253
|
+
if !head.nil? and (indent.nil? or head < indent)
|
|
254
|
+
indent = head
|
|
255
|
+
end
|
|
256
|
+
end
|
|
257
|
+
return str unless indent
|
|
258
|
+
str.collect { |line|
|
|
259
|
+
line.sub(/^ {0,#{indent}}/, "")
|
|
260
|
+
}.join
|
|
261
|
+
end
|
|
262
|
+
|
|
263
|
+
def untab(line, ts = 8)
|
|
264
|
+
while pos = line.index(/\t/)
|
|
265
|
+
line = line.sub(/\t/, " " * (ts - (pos % ts)))
|
|
266
|
+
end
|
|
267
|
+
line
|
|
268
|
+
end
|
|
269
|
+
|
|
270
|
+
def dump_emptyline
|
|
271
|
+
"\n"
|
|
272
|
+
end
|
|
273
|
+
end
|
|
274
|
+
|
|
275
|
+
|
|
276
|
+
end
|
|
277
|
+
end
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
# encoding: UTF-8
|
|
2
|
+
# XSD4R - Generating method definition code
|
|
3
|
+
# Copyright (C) 2000-2007 NAKAMURA, Hiroshi <nahi@ruby-lang.org>.
|
|
4
|
+
|
|
5
|
+
# This program is copyrighted free software by NAKAMURA, Hiroshi. You can
|
|
6
|
+
# redistribute it and/or modify it under the same terms of Ruby's license;
|
|
7
|
+
# either the dual license version in 2003, or any later version.
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
require 'xsd/codegen/gensupport'
|
|
11
|
+
require 'xsd/codegen/commentdef'
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
module XSD
|
|
15
|
+
module CodeGen
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
class MethodDef
|
|
19
|
+
include GenSupport
|
|
20
|
+
include CommentDef
|
|
21
|
+
|
|
22
|
+
attr_accessor :definition
|
|
23
|
+
|
|
24
|
+
def initialize(name, *params)
|
|
25
|
+
klass, mname = name.split('.', 2)
|
|
26
|
+
if mname.nil?
|
|
27
|
+
mname, klass = klass, mname
|
|
28
|
+
end
|
|
29
|
+
unless safemethodname?(mname)
|
|
30
|
+
raise ArgumentError.new("name '#{name}' seems to be unsafe")
|
|
31
|
+
end
|
|
32
|
+
if klass and klass != 'self' and !safeconstname(klass)
|
|
33
|
+
raise ArgumentError.new("name '#{name}' seems to be unsafe")
|
|
34
|
+
end
|
|
35
|
+
@name = name
|
|
36
|
+
@params = params
|
|
37
|
+
@comment = nil
|
|
38
|
+
@definition = yield if block_given?
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def dump
|
|
42
|
+
buf = ""
|
|
43
|
+
buf << dump_comment if @comment
|
|
44
|
+
buf << dump_method_def
|
|
45
|
+
buf << dump_definition if @definition and !@definition.empty?
|
|
46
|
+
buf << dump_method_def_end
|
|
47
|
+
buf
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
private
|
|
51
|
+
|
|
52
|
+
def dump_method_def
|
|
53
|
+
if @params.empty?
|
|
54
|
+
format("def #{@name}")
|
|
55
|
+
else
|
|
56
|
+
format("def #{@name}(#{@params.join(", ")})")
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
def dump_method_def_end
|
|
61
|
+
format("end")
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
def dump_definition
|
|
65
|
+
format(@definition, 2)
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
end
|
|
71
|
+
end
|
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
# encoding: UTF-8
|
|
2
|
+
# XSD4R - Generating module definition code
|
|
3
|
+
# Copyright (C) 2000-2007 NAKAMURA, Hiroshi <nahi@ruby-lang.org>.
|
|
4
|
+
|
|
5
|
+
# This program is copyrighted free software by NAKAMURA, Hiroshi. You can
|
|
6
|
+
# redistribute it and/or modify it under the same terms of Ruby's license;
|
|
7
|
+
# either the dual license version in 2003, or any later version.
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
require 'xsd/codegen/gensupport'
|
|
11
|
+
require 'xsd/codegen/methoddef'
|
|
12
|
+
require 'xsd/codegen/commentdef'
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
module XSD
|
|
16
|
+
module CodeGen
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
class ModuleDef
|
|
20
|
+
include GenSupport
|
|
21
|
+
include CommentDef
|
|
22
|
+
|
|
23
|
+
attr_reader :name
|
|
24
|
+
attr_reader :innermodule
|
|
25
|
+
|
|
26
|
+
def initialize(name)
|
|
27
|
+
@name = name
|
|
28
|
+
@comment = nil
|
|
29
|
+
@const = []
|
|
30
|
+
@code = []
|
|
31
|
+
@requirepath = []
|
|
32
|
+
@methoddef = []
|
|
33
|
+
@innermodule = []
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def def_require(path)
|
|
37
|
+
@requirepath << path
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def def_const(const, value)
|
|
41
|
+
unless safeconstname?(const)
|
|
42
|
+
raise ArgumentError.new("#{const} seems to be unsafe")
|
|
43
|
+
end
|
|
44
|
+
@const << [const, value]
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def def_code(code)
|
|
48
|
+
@code << code
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def def_method(name, *params)
|
|
52
|
+
add_method(MethodDef.new(name, *params) { yield if block_given? }, :public)
|
|
53
|
+
end
|
|
54
|
+
alias def_publicmethod def_method
|
|
55
|
+
|
|
56
|
+
def def_protectedmethod(name, *params)
|
|
57
|
+
add_method(MethodDef.new(name, *params) { yield if block_given? },
|
|
58
|
+
:protected)
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
def def_privatemethod(name, *params)
|
|
62
|
+
add_method(MethodDef.new(name, *params) { yield if block_given? }, :private)
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
def add_method(m, visibility = :public)
|
|
66
|
+
@methoddef << [visibility, m]
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
def dump
|
|
70
|
+
buf = ""
|
|
71
|
+
unless @requirepath.empty?
|
|
72
|
+
buf << dump_requirepath
|
|
73
|
+
end
|
|
74
|
+
buf << dump_emptyline unless buf.empty?
|
|
75
|
+
package = @name.split(/::/)[0..-2]
|
|
76
|
+
buf << dump_package_def(package) unless package.empty?
|
|
77
|
+
buf << dump_comment if @comment
|
|
78
|
+
buf << dump_module_def
|
|
79
|
+
spacer = false
|
|
80
|
+
unless @const.empty?
|
|
81
|
+
buf << dump_emptyline if spacer
|
|
82
|
+
spacer = true
|
|
83
|
+
buf << dump_const
|
|
84
|
+
end
|
|
85
|
+
unless @innermodule.empty?
|
|
86
|
+
buf << dump_emptyline # always add 1 empty line
|
|
87
|
+
spacer = true
|
|
88
|
+
buf << dump_innermodule
|
|
89
|
+
end
|
|
90
|
+
unless @code.empty?
|
|
91
|
+
buf << dump_emptyline if spacer
|
|
92
|
+
spacer = true
|
|
93
|
+
buf << dump_code
|
|
94
|
+
end
|
|
95
|
+
unless @methoddef.empty?
|
|
96
|
+
buf << dump_emptyline if spacer
|
|
97
|
+
spacer = true
|
|
98
|
+
buf << dump_methods
|
|
99
|
+
end
|
|
100
|
+
buf << dump_module_def_end
|
|
101
|
+
buf << dump_package_def_end(package) unless package.empty?
|
|
102
|
+
buf.gsub(/^\s+$/, '')
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
private
|
|
106
|
+
|
|
107
|
+
def dump_requirepath
|
|
108
|
+
format(
|
|
109
|
+
@requirepath.collect { |path|
|
|
110
|
+
%Q(require '#{path}')
|
|
111
|
+
}.join("\n")
|
|
112
|
+
)
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
def dump_const
|
|
116
|
+
dump_static(
|
|
117
|
+
@const.sort.collect { |var, value|
|
|
118
|
+
%Q(#{var} = #{dump_value(value)})
|
|
119
|
+
}.join("\n")
|
|
120
|
+
)
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
def dump_innermodule
|
|
124
|
+
dump_static(
|
|
125
|
+
@innermodule.collect { |moduledef|
|
|
126
|
+
moduledef.dump
|
|
127
|
+
}.join("\n")
|
|
128
|
+
)
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
def dump_code
|
|
132
|
+
dump_static(@code.join("\n"))
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
def dump_static(str)
|
|
136
|
+
format(str, 2)
|
|
137
|
+
end
|
|
138
|
+
|
|
139
|
+
def dump_methods
|
|
140
|
+
methods = {}
|
|
141
|
+
@methoddef.each do |visibility, method|
|
|
142
|
+
(methods[visibility] ||= []) << method
|
|
143
|
+
end
|
|
144
|
+
str = ""
|
|
145
|
+
[:public, :protected, :private].each do |visibility|
|
|
146
|
+
if methods[visibility]
|
|
147
|
+
str << "\n" unless str.empty?
|
|
148
|
+
str << visibility.to_s << "\n\n" unless visibility == :public
|
|
149
|
+
str << methods[visibility].collect { |m| format(m.dump, 2) }.join("\n")
|
|
150
|
+
end
|
|
151
|
+
end
|
|
152
|
+
str
|
|
153
|
+
end
|
|
154
|
+
|
|
155
|
+
def dump_value(value)
|
|
156
|
+
if value.respond_to?(:to_src)
|
|
157
|
+
value.to_src
|
|
158
|
+
else
|
|
159
|
+
value
|
|
160
|
+
end
|
|
161
|
+
end
|
|
162
|
+
|
|
163
|
+
def dump_package_def(package)
|
|
164
|
+
format(package.collect { |ele| "module #{ele}" }.join("; ")) + "\n\n"
|
|
165
|
+
end
|
|
166
|
+
|
|
167
|
+
def dump_package_def_end(package)
|
|
168
|
+
"\n\n" + format(package.collect { |ele| "end" }.join("; "))
|
|
169
|
+
end
|
|
170
|
+
|
|
171
|
+
def dump_module_def
|
|
172
|
+
name = @name.to_s.split(/::/)
|
|
173
|
+
format("module #{name.last}")
|
|
174
|
+
end
|
|
175
|
+
|
|
176
|
+
def dump_module_def_end
|
|
177
|
+
format("end")
|
|
178
|
+
end
|
|
179
|
+
end
|
|
180
|
+
|
|
181
|
+
|
|
182
|
+
end
|
|
183
|
+
end
|
|
184
|
+
|
|
185
|
+
|
|
186
|
+
if __FILE__ == $0
|
|
187
|
+
require 'xsd/codegen/moduledef'
|
|
188
|
+
include XSD::CodeGen
|
|
189
|
+
m = ModuleDef.new("Foo::Bar::HobbitName")
|
|
190
|
+
m.def_require("foo/bar")
|
|
191
|
+
m.def_require("baz")
|
|
192
|
+
m.comment = <<-EOD
|
|
193
|
+
foo
|
|
194
|
+
bar
|
|
195
|
+
baz
|
|
196
|
+
EOD
|
|
197
|
+
m.def_method("foo") do
|
|
198
|
+
<<-EOD
|
|
199
|
+
foo.bar = 1
|
|
200
|
+
baz.each do |ele|
|
|
201
|
+
ele + 1
|
|
202
|
+
end
|
|
203
|
+
EOD
|
|
204
|
+
end
|
|
205
|
+
m.def_method("baz", "qux")
|
|
206
|
+
#m.def_protectedmethod("aaa")
|
|
207
|
+
m.def_privatemethod("bbb")
|
|
208
|
+
puts m.dump
|
|
209
|
+
end
|
data/lib/xsd/codegen.rb
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# encoding: UTF-8
|
|
2
|
+
# XSD4R - Generating code library
|
|
3
|
+
# Copyright (C) 2000-2007 NAKAMURA, Hiroshi <nahi@ruby-lang.org>.
|
|
4
|
+
|
|
5
|
+
# This program is copyrighted free software by NAKAMURA, Hiroshi. You can
|
|
6
|
+
# redistribute it and/or modify it under the same terms of Ruby's license;
|
|
7
|
+
# either the dual license version in 2003, or any later version.
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
require 'xsd/codegen/gensupport'
|
|
11
|
+
require 'xsd/codegen/moduledef'
|
|
12
|
+
require 'xsd/codegen/classdef'
|
|
13
|
+
require 'xsd/codegen/methoddef'
|