| Class | XSD::CodeGen::ModuleDef |
| In: |
lib/xsd/codegen/moduledef.rb
|
| Parent: | Object |
# File lib/xsd/codegen/moduledef.rb, line 22
22: def initialize(name)
23: @name = name
24: @comment = nil
25: @const = []
26: @code = []
27: @requirepath = []
28: @methoddef = []
29: end
# File lib/xsd/codegen/moduledef.rb, line 60
60: def add_method(m, visibility = :public)
61: @methoddef << [visibility, m]
62: end
# File lib/xsd/codegen/moduledef.rb, line 35
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
# File lib/xsd/codegen/moduledef.rb, line 46
46: def def_method(name, *params)
47: add_method(MethodDef.new(name, *params) { yield if block_given? }, :public)
48: end
# File lib/xsd/codegen/moduledef.rb, line 56
56: def def_privatemethod(name, *params)
57: add_method(MethodDef.new(name, *params) { yield if block_given? }, :private)
58: end
# File lib/xsd/codegen/moduledef.rb, line 51
51: def def_protectedmethod(name, *params)
52: add_method(MethodDef.new(name, *params) { yield if block_given? },
53: :protected)
54: end
# File lib/xsd/codegen/moduledef.rb, line 31
31: def def_require(path)
32: @requirepath << path
33: end
# File lib/xsd/codegen/moduledef.rb, line 64
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
# File lib/xsd/codegen/moduledef.rb, line 113
113: def dump_code
114: dump_static(@code.join("\n"))
115: end
# File lib/xsd/codegen/moduledef.rb, line 105
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
# File lib/xsd/codegen/moduledef.rb, line 121
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
# File lib/xsd/codegen/moduledef.rb, line 153
153: def dump_module_def
154: name = @name.to_s.split(/::/)
155: format("module #{name.last}")
156: end
# File lib/xsd/codegen/moduledef.rb, line 158
158: def dump_module_def_end
159: format("end")
160: end
# File lib/xsd/codegen/moduledef.rb, line 145
145: def dump_package_def(package)
146: format(package.collect { |ele| "module #{ele}" }.join("; ")) + "\n\n"
147: end
# File lib/xsd/codegen/moduledef.rb, line 149
149: def dump_package_def_end(package)
150: "\n\n" + format(package.collect { |ele| "end" }.join("; "))
151: end
# File lib/xsd/codegen/moduledef.rb, line 97
97: def dump_requirepath
98: format(
99: @requirepath.collect { |path|
100: %Q(require '#{path}')
101: }.join("\n")
102: )
103: end
# File lib/xsd/codegen/moduledef.rb, line 117
117: def dump_static(str)
118: format(str, 2)
119: end