reidiculous-actionwebservice-client 3.0.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/CHANGELOG +320 -0
- data/MIT-LICENSE +21 -0
- data/README +381 -0
- data/Rakefile +180 -0
- data/TODO +32 -0
- data/lib/action_web_service.rb +71 -0
- data/lib/action_web_service/api.rb +297 -0
- data/lib/action_web_service/base.rb +38 -0
- data/lib/action_web_service/casting.rb +149 -0
- data/lib/action_web_service/client.rb +3 -0
- data/lib/action_web_service/client/base.rb +28 -0
- data/lib/action_web_service/client/soap_client.rb +113 -0
- data/lib/action_web_service/client/xmlrpc_client.rb +58 -0
- data/lib/action_web_service/container.rb +3 -0
- data/lib/action_web_service/container/action_controller_container.rb +93 -0
- data/lib/action_web_service/container/delegated_container.rb +86 -0
- data/lib/action_web_service/container/direct_container.rb +69 -0
- data/lib/action_web_service/dispatcher.rb +2 -0
- data/lib/action_web_service/dispatcher/abstract.rb +207 -0
- data/lib/action_web_service/dispatcher/action_controller_dispatcher.rb +379 -0
- data/lib/action_web_service/invocation.rb +202 -0
- data/lib/action_web_service/protocol.rb +4 -0
- data/lib/action_web_service/protocol/abstract.rb +115 -0
- data/lib/action_web_service/protocol/discovery.rb +37 -0
- data/lib/action_web_service/protocol/soap_protocol.rb +176 -0
- data/lib/action_web_service/protocol/soap_protocol/marshaler.rb +242 -0
- data/lib/action_web_service/protocol/xmlrpc_protocol.rb +122 -0
- data/lib/action_web_service/scaffolding.rb +281 -0
- data/lib/action_web_service/soap/attachment.rb +107 -0
- data/lib/action_web_service/soap/baseData.rb +942 -0
- data/lib/action_web_service/soap/element.rb +258 -0
- data/lib/action_web_service/soap/encodingstyle/aspDotNetHandler.rb +213 -0
- data/lib/action_web_service/soap/encodingstyle/handler.rb +100 -0
- data/lib/action_web_service/soap/encodingstyle/literalHandler.rb +226 -0
- data/lib/action_web_service/soap/encodingstyle/soapHandler.rb +582 -0
- data/lib/action_web_service/soap/generator.rb +268 -0
- data/lib/action_web_service/soap/header/handler.rb +57 -0
- data/lib/action_web_service/soap/header/handlerset.rb +70 -0
- data/lib/action_web_service/soap/header/simplehandler.rb +44 -0
- data/lib/action_web_service/soap/httpconfigloader.rb +119 -0
- data/lib/action_web_service/soap/mapping.rb +10 -0
- data/lib/action_web_service/soap/mapping/factory.rb +355 -0
- data/lib/action_web_service/soap/mapping/mapping.rb +381 -0
- data/lib/action_web_service/soap/mapping/registry.rb +541 -0
- data/lib/action_web_service/soap/mapping/rubytypeFactory.rb +475 -0
- data/lib/action_web_service/soap/mapping/typeMap.rb +50 -0
- data/lib/action_web_service/soap/mapping/wsdlencodedregistry.rb +280 -0
- data/lib/action_web_service/soap/mapping/wsdlliteralregistry.rb +418 -0
- data/lib/action_web_service/soap/marshal.rb +59 -0
- data/lib/action_web_service/soap/mimemessage.rb +240 -0
- data/lib/action_web_service/soap/netHttpClient.rb +190 -0
- data/lib/action_web_service/soap/parser.rb +251 -0
- data/lib/action_web_service/soap/processor.rb +66 -0
- data/lib/action_web_service/soap/property.rb +333 -0
- data/lib/action_web_service/soap/rpc/cgistub.rb +206 -0
- data/lib/action_web_service/soap/rpc/driver.rb +254 -0
- data/lib/action_web_service/soap/rpc/element.rb +325 -0
- data/lib/action_web_service/soap/rpc/httpserver.rb +129 -0
- data/lib/action_web_service/soap/rpc/proxy.rb +497 -0
- data/lib/action_web_service/soap/rpc/router.rb +594 -0
- data/lib/action_web_service/soap/rpc/rpc.rb +25 -0
- data/lib/action_web_service/soap/rpc/soaplet.rb +162 -0
- data/lib/action_web_service/soap/rpc/standaloneServer.rb +43 -0
- data/lib/action_web_service/soap/soap.rb +140 -0
- data/lib/action_web_service/soap/streamHandler.rb +229 -0
- data/lib/action_web_service/soap/wsdlDriver.rb +575 -0
- data/lib/action_web_service/struct.rb +64 -0
- data/lib/action_web_service/support/class_inheritable_options.rb +28 -0
- data/lib/action_web_service/support/signature_types.rb +227 -0
- data/lib/action_web_service/test_invoke.rb +110 -0
- data/lib/action_web_service/version.rb +9 -0
- data/lib/action_web_service/wsdl/binding.rb +65 -0
- data/lib/action_web_service/wsdl/data.rb +64 -0
- data/lib/action_web_service/wsdl/definitions.rb +250 -0
- data/lib/action_web_service/wsdl/documentation.rb +32 -0
- data/lib/action_web_service/wsdl/import.rb +80 -0
- data/lib/action_web_service/wsdl/importer.rb +38 -0
- data/lib/action_web_service/wsdl/info.rb +39 -0
- data/lib/action_web_service/wsdl/message.rb +54 -0
- data/lib/action_web_service/wsdl/operation.rb +130 -0
- data/lib/action_web_service/wsdl/operationBinding.rb +108 -0
- data/lib/action_web_service/wsdl/param.rb +85 -0
- data/lib/action_web_service/wsdl/parser.rb +163 -0
- data/lib/action_web_service/wsdl/part.rb +52 -0
- data/lib/action_web_service/wsdl/port.rb +84 -0
- data/lib/action_web_service/wsdl/portType.rb +73 -0
- data/lib/action_web_service/wsdl/service.rb +61 -0
- data/lib/action_web_service/wsdl/soap/address.rb +40 -0
- data/lib/action_web_service/wsdl/soap/binding.rb +49 -0
- data/lib/action_web_service/wsdl/soap/body.rb +56 -0
- data/lib/action_web_service/wsdl/soap/cgiStubCreator.rb +76 -0
- data/lib/action_web_service/wsdl/soap/classDefCreator.rb +314 -0
- data/lib/action_web_service/wsdl/soap/classDefCreatorSupport.rb +126 -0
- data/lib/action_web_service/wsdl/soap/clientSkeltonCreator.rb +78 -0
- data/lib/action_web_service/wsdl/soap/complexType.rb +161 -0
- data/lib/action_web_service/wsdl/soap/data.rb +42 -0
- data/lib/action_web_service/wsdl/soap/definitions.rb +149 -0
- data/lib/action_web_service/wsdl/soap/driverCreator.rb +95 -0
- data/lib/action_web_service/wsdl/soap/element.rb +28 -0
- data/lib/action_web_service/wsdl/soap/fault.rb +56 -0
- data/lib/action_web_service/wsdl/soap/header.rb +86 -0
- data/lib/action_web_service/wsdl/soap/headerfault.rb +56 -0
- data/lib/action_web_service/wsdl/soap/mappingRegistryCreator.rb +92 -0
- data/lib/action_web_service/wsdl/soap/methodDefCreator.rb +228 -0
- data/lib/action_web_service/wsdl/soap/operation.rb +122 -0
- data/lib/action_web_service/wsdl/soap/servantSkeltonCreator.rb +67 -0
- data/lib/action_web_service/wsdl/soap/standaloneServerStubCreator.rb +85 -0
- data/lib/action_web_service/wsdl/soap/wsdl2ruby.rb +176 -0
- data/lib/action_web_service/wsdl/types.rb +43 -0
- data/lib/action_web_service/wsdl/wsdl.rb +23 -0
- data/lib/action_web_service/wsdl/xmlSchema/all.rb +69 -0
- data/lib/action_web_service/wsdl/xmlSchema/annotation.rb +34 -0
- data/lib/action_web_service/wsdl/xmlSchema/any.rb +56 -0
- data/lib/action_web_service/wsdl/xmlSchema/attribute.rb +127 -0
- data/lib/action_web_service/wsdl/xmlSchema/choice.rb +69 -0
- data/lib/action_web_service/wsdl/xmlSchema/complexContent.rb +92 -0
- data/lib/action_web_service/wsdl/xmlSchema/complexType.rb +139 -0
- data/lib/action_web_service/wsdl/xmlSchema/content.rb +96 -0
- data/lib/action_web_service/wsdl/xmlSchema/data.rb +80 -0
- data/lib/action_web_service/wsdl/xmlSchema/element.rb +154 -0
- data/lib/action_web_service/wsdl/xmlSchema/enumeration.rb +36 -0
- data/lib/action_web_service/wsdl/xmlSchema/import.rb +65 -0
- data/lib/action_web_service/wsdl/xmlSchema/importer.rb +87 -0
- data/lib/action_web_service/wsdl/xmlSchema/include.rb +54 -0
- data/lib/action_web_service/wsdl/xmlSchema/length.rb +35 -0
- data/lib/action_web_service/wsdl/xmlSchema/parser.rb +166 -0
- data/lib/action_web_service/wsdl/xmlSchema/pattern.rb +36 -0
- data/lib/action_web_service/wsdl/xmlSchema/schema.rb +143 -0
- data/lib/action_web_service/wsdl/xmlSchema/sequence.rb +69 -0
- data/lib/action_web_service/wsdl/xmlSchema/simpleContent.rb +65 -0
- data/lib/action_web_service/wsdl/xmlSchema/simpleExtension.rb +54 -0
- data/lib/action_web_service/wsdl/xmlSchema/simpleRestriction.rb +73 -0
- data/lib/action_web_service/wsdl/xmlSchema/simpleType.rb +73 -0
- data/lib/action_web_service/wsdl/xmlSchema/unique.rb +34 -0
- data/lib/action_web_service/wsdl/xmlSchema/xsd2ruby.rb +107 -0
- data/lib/action_web_service/xsd/charset.rb +187 -0
- data/lib/action_web_service/xsd/codegen.rb +12 -0
- data/lib/action_web_service/xsd/codegen/classdef.rb +203 -0
- data/lib/action_web_service/xsd/codegen/commentdef.rb +34 -0
- data/lib/action_web_service/xsd/codegen/gensupport.rb +166 -0
- data/lib/action_web_service/xsd/codegen/methoddef.rb +63 -0
- data/lib/action_web_service/xsd/codegen/moduledef.rb +191 -0
- data/lib/action_web_service/xsd/datatypes.rb +1269 -0
- data/lib/action_web_service/xsd/datatypes1999.rb +20 -0
- data/lib/action_web_service/xsd/iconvcharset.rb +33 -0
- data/lib/action_web_service/xsd/mapping.rb +42 -0
- data/lib/action_web_service/xsd/namedelements.rb +95 -0
- data/lib/action_web_service/xsd/ns.rb +140 -0
- data/lib/action_web_service/xsd/qname.rb +78 -0
- data/lib/action_web_service/xsd/xmlparser.rb +61 -0
- data/lib/action_web_service/xsd/xmlparser/parser.rb +96 -0
- data/lib/action_web_service/xsd/xmlparser/rexmlparser.rb +54 -0
- data/lib/action_web_service/xsd/xmlparser/xmlparser.rb +50 -0
- data/lib/action_web_service/xsd/xmlparser/xmlscanner.rb +147 -0
- data/lib/actionwebservice.rb +1 -0
- data/setup.rb +1379 -0
- data/test/abstract_client.rb +183 -0
- data/test/abstract_dispatcher.rb +548 -0
- data/test/abstract_unit.rb +45 -0
- data/test/api_test.rb +103 -0
- data/test/apis/auto_load_api.rb +3 -0
- data/test/apis/broken_auto_load_api.rb +2 -0
- data/test/base_test.rb +42 -0
- data/test/casting_test.rb +95 -0
- data/test/client_soap_test.rb +156 -0
- data/test/client_xmlrpc_test.rb +153 -0
- data/test/container_test.rb +73 -0
- data/test/dispatcher_action_controller_soap_test.rb +139 -0
- data/test/dispatcher_action_controller_xmlrpc_test.rb +59 -0
- data/test/fixtures/db_definitions/mysql.sql +8 -0
- data/test/fixtures/db_definitions/sqlite3.sql +8 -0
- data/test/fixtures/users.yml +12 -0
- data/test/gencov +3 -0
- data/test/invocation_test.rb +185 -0
- data/test/run +6 -0
- data/test/scaffolded_controller_test.rb +146 -0
- data/test/struct_test.rb +52 -0
- data/test/test_invoke_test.rb +112 -0
- metadata +265 -0
@@ -0,0 +1,34 @@
|
|
1
|
+
# XSD4R - Generating comment definition code
|
2
|
+
# Copyright (C) 2004 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 'action_web_service/xsd/codegen/gensupport'
|
10
|
+
|
11
|
+
|
12
|
+
module XSD
|
13
|
+
module CodeGen
|
14
|
+
|
15
|
+
|
16
|
+
module CommentDef
|
17
|
+
include GenSupport
|
18
|
+
|
19
|
+
attr_accessor :comment
|
20
|
+
|
21
|
+
private
|
22
|
+
|
23
|
+
def dump_comment
|
24
|
+
if /\A#/ =~ @comment
|
25
|
+
format(@comment)
|
26
|
+
else
|
27
|
+
format(@comment).gsub(/^/, '# ')
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,166 @@
|
|
1
|
+
# XSD4R - Code generation support
|
2
|
+
# Copyright (C) 2004, 2005 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
|
+
module XSD
|
10
|
+
module CodeGen
|
11
|
+
|
12
|
+
# from the file 'keywords' in 1.9.
|
13
|
+
KEYWORD = {}
|
14
|
+
%w(
|
15
|
+
__LINE__
|
16
|
+
__FILE__
|
17
|
+
BEGIN
|
18
|
+
END
|
19
|
+
alias
|
20
|
+
and
|
21
|
+
begin
|
22
|
+
break
|
23
|
+
case
|
24
|
+
class
|
25
|
+
def
|
26
|
+
defined?
|
27
|
+
do
|
28
|
+
else
|
29
|
+
elsif
|
30
|
+
end
|
31
|
+
ensure
|
32
|
+
false
|
33
|
+
for
|
34
|
+
if
|
35
|
+
in
|
36
|
+
module
|
37
|
+
next
|
38
|
+
nil
|
39
|
+
not
|
40
|
+
or
|
41
|
+
redo
|
42
|
+
rescue
|
43
|
+
retry
|
44
|
+
return
|
45
|
+
self
|
46
|
+
super
|
47
|
+
then
|
48
|
+
true
|
49
|
+
undef
|
50
|
+
unless
|
51
|
+
until
|
52
|
+
when
|
53
|
+
while
|
54
|
+
yield
|
55
|
+
).each { |k| KEYWORD[k] = nil }
|
56
|
+
|
57
|
+
module GenSupport
|
58
|
+
def capitalize(target)
|
59
|
+
target.sub(/^([a-z])/) { $1.tr!('[a-z]', '[A-Z]') }
|
60
|
+
end
|
61
|
+
module_function :capitalize
|
62
|
+
|
63
|
+
def uncapitalize(target)
|
64
|
+
target.sub(/^([A-Z])/) { $1.tr!('[A-Z]', '[a-z]') }
|
65
|
+
end
|
66
|
+
module_function :uncapitalize
|
67
|
+
|
68
|
+
def safeconstname(name)
|
69
|
+
safename = name.scan(/[a-zA-Z0-9_]+/).collect { |ele|
|
70
|
+
GenSupport.capitalize(ele)
|
71
|
+
}.join
|
72
|
+
if /^[A-Z]/ !~ safename or keyword?(safename)
|
73
|
+
safename = "C_#{safename}"
|
74
|
+
end
|
75
|
+
safename
|
76
|
+
end
|
77
|
+
module_function :safeconstname
|
78
|
+
|
79
|
+
def safeconstname?(name)
|
80
|
+
/\A[A-Z][a-zA-Z0-9_]*\z/ =~ name and !keyword?(name)
|
81
|
+
end
|
82
|
+
module_function :safeconstname?
|
83
|
+
|
84
|
+
def safemethodname(name)
|
85
|
+
safename = name.scan(/[a-zA-Z0-9_]+/).join('_')
|
86
|
+
safename = uncapitalize(safename)
|
87
|
+
if /^[a-z]/ !~ safename
|
88
|
+
safename = "m_#{safename}"
|
89
|
+
end
|
90
|
+
safename
|
91
|
+
end
|
92
|
+
module_function :safemethodname
|
93
|
+
|
94
|
+
def safemethodname?(name)
|
95
|
+
/\A[a-zA-Z_][a-zA-Z0-9_]*[=!?]?\z/ =~ name
|
96
|
+
end
|
97
|
+
module_function :safemethodname?
|
98
|
+
|
99
|
+
def safevarname(name)
|
100
|
+
safename = uncapitalize(name.scan(/[a-zA-Z0-9_]+/).join('_'))
|
101
|
+
if /^[a-z]/ !~ safename or keyword?(safename)
|
102
|
+
"v_#{safename}"
|
103
|
+
else
|
104
|
+
safename
|
105
|
+
end
|
106
|
+
end
|
107
|
+
module_function :safevarname
|
108
|
+
|
109
|
+
def safevarname?(name)
|
110
|
+
/\A[a-z_][a-zA-Z0-9_]*\z/ =~ name and !keyword?(name)
|
111
|
+
end
|
112
|
+
module_function :safevarname?
|
113
|
+
|
114
|
+
def keyword?(word)
|
115
|
+
KEYWORD.key?(word)
|
116
|
+
end
|
117
|
+
module_function :keyword?
|
118
|
+
|
119
|
+
def format(str, indent = nil)
|
120
|
+
str = trim_eol(str)
|
121
|
+
str = trim_indent(str)
|
122
|
+
if indent
|
123
|
+
str.gsub(/^/, " " * indent)
|
124
|
+
else
|
125
|
+
str
|
126
|
+
end
|
127
|
+
end
|
128
|
+
|
129
|
+
private
|
130
|
+
|
131
|
+
def trim_eol(str)
|
132
|
+
str.collect { |line|
|
133
|
+
line.sub(/\r?\n\z/, "") + "\n"
|
134
|
+
}.join
|
135
|
+
end
|
136
|
+
|
137
|
+
def trim_indent(str)
|
138
|
+
indent = nil
|
139
|
+
str = str.collect { |line| untab(line) }.join
|
140
|
+
str.each do |line|
|
141
|
+
head = line.index(/\S/)
|
142
|
+
if !head.nil? and (indent.nil? or head < indent)
|
143
|
+
indent = head
|
144
|
+
end
|
145
|
+
end
|
146
|
+
return str unless indent
|
147
|
+
str.collect { |line|
|
148
|
+
line.sub(/^ {0,#{indent}}/, "")
|
149
|
+
}.join
|
150
|
+
end
|
151
|
+
|
152
|
+
def untab(line, ts = 8)
|
153
|
+
while pos = line.index(/\t/)
|
154
|
+
line = line.sub(/\t/, " " * (ts - (pos % ts)))
|
155
|
+
end
|
156
|
+
line
|
157
|
+
end
|
158
|
+
|
159
|
+
def dump_emptyline
|
160
|
+
"\n"
|
161
|
+
end
|
162
|
+
end
|
163
|
+
|
164
|
+
|
165
|
+
end
|
166
|
+
end
|
@@ -0,0 +1,63 @@
|
|
1
|
+
# XSD4R - Generating method definition code
|
2
|
+
# Copyright (C) 2004 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 'action_web_service/xsd/codegen/gensupport'
|
10
|
+
require 'action_web_service/xsd/codegen/commentdef'
|
11
|
+
|
12
|
+
|
13
|
+
module XSD
|
14
|
+
module CodeGen
|
15
|
+
|
16
|
+
|
17
|
+
class MethodDef
|
18
|
+
include GenSupport
|
19
|
+
include CommentDef
|
20
|
+
|
21
|
+
attr_accessor :definition
|
22
|
+
|
23
|
+
def initialize(name, *params)
|
24
|
+
unless safemethodname?(name)
|
25
|
+
raise ArgumentError.new("name '#{name}' seems to be unsafe")
|
26
|
+
end
|
27
|
+
@name = name
|
28
|
+
@params = params
|
29
|
+
@comment = nil
|
30
|
+
@definition = yield if block_given?
|
31
|
+
end
|
32
|
+
|
33
|
+
def dump
|
34
|
+
buf = ""
|
35
|
+
buf << dump_comment if @comment
|
36
|
+
buf << dump_method_def
|
37
|
+
buf << dump_definition if @definition and !@definition.empty?
|
38
|
+
buf << dump_method_def_end
|
39
|
+
buf
|
40
|
+
end
|
41
|
+
|
42
|
+
private
|
43
|
+
|
44
|
+
def dump_method_def
|
45
|
+
if @params.empty?
|
46
|
+
format("def #{@name}")
|
47
|
+
else
|
48
|
+
format("def #{@name}(#{@params.join(", ")})")
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
def dump_method_def_end
|
53
|
+
format("end")
|
54
|
+
end
|
55
|
+
|
56
|
+
def dump_definition
|
57
|
+
format(@definition, 2)
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
|
62
|
+
end
|
63
|
+
end
|
@@ -0,0 +1,191 @@
|
|
1
|
+
# XSD4R - Generating module definition code
|
2
|
+
# Copyright (C) 2004 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 'action_web_service/xsd/codegen/gensupport'
|
10
|
+
require 'action_web_service/xsd/codegen/methoddef'
|
11
|
+
require 'action_web_service/xsd/codegen/commentdef'
|
12
|
+
|
13
|
+
|
14
|
+
module XSD
|
15
|
+
module CodeGen
|
16
|
+
|
17
|
+
|
18
|
+
class ModuleDef
|
19
|
+
include GenSupport
|
20
|
+
include CommentDef
|
21
|
+
|
22
|
+
def initialize(name)
|
23
|
+
@name = name
|
24
|
+
@comment = nil
|
25
|
+
@const = []
|
26
|
+
@code = []
|
27
|
+
@requirepath = []
|
28
|
+
@methoddef = []
|
29
|
+
end
|
30
|
+
|
31
|
+
def def_require(path)
|
32
|
+
@requirepath << path
|
33
|
+
end
|
34
|
+
|
35
|
+
def def_const(const, value)
|
36
|
+
unless safeconstname?(const)
|
37
|
+
raise ArgumentError.new("#{const} seems to be unsafe")
|
38
|
+
end
|
39
|
+
@const << [const, value]
|
40
|
+
end
|
41
|
+
|
42
|
+
def def_code(code)
|
43
|
+
@code << code
|
44
|
+
end
|
45
|
+
|
46
|
+
def def_method(name, *params)
|
47
|
+
add_method(MethodDef.new(name, *params) { yield if block_given? }, :public)
|
48
|
+
end
|
49
|
+
alias def_publicmethod def_method
|
50
|
+
|
51
|
+
def def_protectedmethod(name, *params)
|
52
|
+
add_method(MethodDef.new(name, *params) { yield if block_given? },
|
53
|
+
:protected)
|
54
|
+
end
|
55
|
+
|
56
|
+
def def_privatemethod(name, *params)
|
57
|
+
add_method(MethodDef.new(name, *params) { yield if block_given? }, :private)
|
58
|
+
end
|
59
|
+
|
60
|
+
def add_method(m, visibility = :public)
|
61
|
+
@methoddef << [visibility, m]
|
62
|
+
end
|
63
|
+
|
64
|
+
def dump
|
65
|
+
buf = ""
|
66
|
+
unless @requirepath.empty?
|
67
|
+
buf << dump_requirepath
|
68
|
+
end
|
69
|
+
buf << dump_emptyline unless buf.empty?
|
70
|
+
package = @name.split(/::/)[0..-2]
|
71
|
+
buf << dump_package_def(package) unless package.empty?
|
72
|
+
buf << dump_comment if @comment
|
73
|
+
buf << dump_module_def
|
74
|
+
spacer = false
|
75
|
+
unless @const.empty?
|
76
|
+
buf << dump_emptyline if spacer
|
77
|
+
spacer = true
|
78
|
+
buf << dump_const
|
79
|
+
end
|
80
|
+
unless @code.empty?
|
81
|
+
buf << dump_emptyline if spacer
|
82
|
+
spacer = true
|
83
|
+
buf << dump_code
|
84
|
+
end
|
85
|
+
unless @methoddef.empty?
|
86
|
+
buf << dump_emptyline if spacer
|
87
|
+
spacer = true
|
88
|
+
buf << dump_methods
|
89
|
+
end
|
90
|
+
buf << dump_module_def_end
|
91
|
+
buf << dump_package_def_end(package) unless package.empty?
|
92
|
+
buf.gsub(/^\s+$/, '')
|
93
|
+
end
|
94
|
+
|
95
|
+
private
|
96
|
+
|
97
|
+
def dump_requirepath
|
98
|
+
format(
|
99
|
+
@requirepath.collect { |path|
|
100
|
+
%Q(require '#{path}')
|
101
|
+
}.join("\n")
|
102
|
+
)
|
103
|
+
end
|
104
|
+
|
105
|
+
def dump_const
|
106
|
+
dump_static(
|
107
|
+
@const.sort.collect { |var, value|
|
108
|
+
%Q(#{var} = #{dump_value(value)})
|
109
|
+
}.join("\n")
|
110
|
+
)
|
111
|
+
end
|
112
|
+
|
113
|
+
def dump_code
|
114
|
+
dump_static(@code.join("\n"))
|
115
|
+
end
|
116
|
+
|
117
|
+
def dump_static(str)
|
118
|
+
format(str, 2)
|
119
|
+
end
|
120
|
+
|
121
|
+
def dump_methods
|
122
|
+
methods = {}
|
123
|
+
@methoddef.each do |visibility, method|
|
124
|
+
(methods[visibility] ||= []) << method
|
125
|
+
end
|
126
|
+
str = ""
|
127
|
+
[:public, :protected, :private].each do |visibility|
|
128
|
+
if methods[visibility]
|
129
|
+
str << "\n" unless str.empty?
|
130
|
+
str << visibility.to_s << "\n\n" unless visibility == :public
|
131
|
+
str << methods[visibility].collect { |m| format(m.dump, 2) }.join("\n")
|
132
|
+
end
|
133
|
+
end
|
134
|
+
str
|
135
|
+
end
|
136
|
+
|
137
|
+
def dump_value(value)
|
138
|
+
if value.respond_to?(:to_src)
|
139
|
+
value.to_src
|
140
|
+
else
|
141
|
+
value
|
142
|
+
end
|
143
|
+
end
|
144
|
+
|
145
|
+
def dump_package_def(package)
|
146
|
+
format(package.collect { |ele| "module #{ele}" }.join("; ")) + "\n\n"
|
147
|
+
end
|
148
|
+
|
149
|
+
def dump_package_def_end(package)
|
150
|
+
"\n\n" + format(package.collect { |ele| "end" }.join("; "))
|
151
|
+
end
|
152
|
+
|
153
|
+
def dump_module_def
|
154
|
+
name = @name.to_s.split(/::/)
|
155
|
+
format("module #{name.last}")
|
156
|
+
end
|
157
|
+
|
158
|
+
def dump_module_def_end
|
159
|
+
format("end")
|
160
|
+
end
|
161
|
+
end
|
162
|
+
|
163
|
+
|
164
|
+
end
|
165
|
+
end
|
166
|
+
|
167
|
+
|
168
|
+
if __FILE__ == $0
|
169
|
+
require 'action_web_service/xsd/codegen/moduledef'
|
170
|
+
include XSD::CodeGen
|
171
|
+
m = ModuleDef.new("Foo::Bar::HobbitName")
|
172
|
+
m.def_require("foo/bar")
|
173
|
+
m.def_require("baz")
|
174
|
+
m.comment = <<-EOD
|
175
|
+
foo
|
176
|
+
bar
|
177
|
+
baz
|
178
|
+
EOD
|
179
|
+
m.def_method("foo") do
|
180
|
+
<<-EOD
|
181
|
+
foo.bar = 1
|
182
|
+
baz.each do |ele|
|
183
|
+
ele + 1
|
184
|
+
end
|
185
|
+
EOD
|
186
|
+
end
|
187
|
+
m.def_method("baz", "qux")
|
188
|
+
#m.def_protectedmethod("aaa")
|
189
|
+
m.def_privatemethod("bbb")
|
190
|
+
puts m.dump
|
191
|
+
end
|