| Class | XSD::CodeGen::ClassDef |
| In: |
lib/xsd/codegen/classdef.rb
|
| Parent: | ModuleDef |
# File lib/xsd/codegen/classdef.rb, line 21
21: def initialize(name, baseclass = nil)
22: super(name)
23: @baseclass = baseclass
24: @classvar = []
25: @attrdef = []
26: end
# File lib/xsd/codegen/classdef.rb, line 36
36: def def_attr(attrname, writable = true, varname = nil)
37: unless safevarname?(varname || attrname)
38: raise ArgumentError.new("#{varname || attrname} seems to be unsafe")
39: end
40: @attrdef << [attrname, writable, varname]
41: end
# File lib/xsd/codegen/classdef.rb, line 28
28: def def_classvar(var, value)
29: var = var.sub(/\A@@/, "")
30: unless safevarname?(var)
31: raise ArgumentError.new("#{var} seems to be unsafe")
32: end
33: @classvar << [var, value]
34: end
# File lib/xsd/codegen/classdef.rb, line 43
43: def dump
44: buf = ""
45: unless @requirepath.empty?
46: buf << dump_requirepath
47: end
48: buf << dump_emptyline unless buf.empty?
49: package = @name.split(/::/)[0..-2]
50: buf << dump_package_def(package) unless package.empty?
51: buf << dump_comment if @comment
52: buf << dump_class_def
53: spacer = false
54: unless @classvar.empty?
55: spacer = true
56: buf << dump_classvar
57: end
58: unless @const.empty?
59: buf << dump_emptyline if spacer
60: spacer = true
61: buf << dump_const
62: end
63: unless @code.empty?
64: buf << dump_emptyline if spacer
65: spacer = true
66: buf << dump_code
67: end
68: unless @attrdef.empty?
69: buf << dump_emptyline if spacer
70: spacer = true
71: buf << dump_attributes
72: end
73: unless @methoddef.empty?
74: buf << dump_emptyline if spacer
75: spacer = true
76: buf << dump_methods
77: end
78: buf << dump_class_def_end
79: buf << dump_package_def_end(package) unless package.empty?
80: buf.gsub(/^\s+$/, '')
81: end
# File lib/xsd/codegen/classdef.rb, line 124
124: def dump_accessor(attrname, writable)
125: if writable
126: "attr_accessor :#{attrname}"
127: else
128: "attr_reader :#{attrname}"
129: end
130: end
# File lib/xsd/codegen/classdef.rb, line 132
132: def dump_attribute(attrname, writable, varname)
133: str = nil
134: mr = MethodDef.new(attrname)
135: mr.definition = "@#{varname}"
136: str = mr.dump
137: if writable
138: mw = MethodDef.new(attrname + "=", 'value')
139: mw.definition = "@#{varname} = value"
140: str << "\n" + mw.dump
141: end
142: str
143: end
# File lib/xsd/codegen/classdef.rb, line 106
106: def dump_attributes
107: str = ""
108: @attrdef.each do |attrname, writable, varname|
109: varname ||= attrname
110: if attrname == varname
111: str << format(dump_accessor(attrname, writable), 2)
112: end
113: end
114: @attrdef.each do |attrname, writable, varname|
115: varname ||= attrname
116: if attrname != varname
117: str << "\n" unless str.empty?
118: str << format(dump_attribute(attrname, writable, varname), 2)
119: end
120: end
121: str
122: end
# File lib/xsd/codegen/classdef.rb, line 85
85: def dump_class_def
86: name = @name.to_s.split(/::/)
87: if @baseclass
88: format("class #{name.last} < #{@baseclass}")
89: else
90: format("class #{name.last}")
91: end
92: end
# File lib/xsd/codegen/classdef.rb, line 94
94: def dump_class_def_end
95: str = format("end")
96: end