class XSD::CodeGen::ClassDef

Public Class Methods

new(name, baseclass = nil) click to toggle source
Calls superclass method
# File lib/xsd/codegen/classdef.rb, line 21
def initialize(name, baseclass = nil)
  super(name)
  @baseclass = baseclass
  @classvar = []
  @attrdef = []
end

Public Instance Methods

def_attr(attrname, writable = true, varname = nil) click to toggle source
# File lib/xsd/codegen/classdef.rb, line 36
def def_attr(attrname, writable = true, varname = nil)
  unless safevarname?(varname || attrname)
    raise ArgumentError.new("#{varname || attrname} seems to be unsafe")
  end
  @attrdef << [attrname, writable, varname]
end
def_classvar(var, value) click to toggle source
# File lib/xsd/codegen/classdef.rb, line 28
def def_classvar(var, value)
  var = var.sub(/\A@@/, "")
  unless safevarname?(var)
    raise ArgumentError.new("#{var} seems to be unsafe")
  end
  @classvar << [var, value]
end
dump() click to toggle source
# File lib/xsd/codegen/classdef.rb, line 43
def dump
  buf = ""
  unless @requirepath.empty?
    buf << dump_requirepath 
  end
  buf << dump_emptyline unless buf.empty?
  package = @name.split(/::/)[0..-2]
  buf << dump_package_def(package) unless package.empty?
  buf << dump_comment if @comment
  buf << dump_class_def
  spacer = false
  unless @classvar.empty?
    spacer = true
    buf << dump_classvar
  end
  unless @const.empty?
    buf << dump_emptyline if spacer
    spacer = true
    buf << dump_const
  end
  unless @innermodule.empty?
    buf << dump_emptyline # always add 1 empty line
    spacer = true
    buf << dump_innermodule
  end
  unless @code.empty?
    buf << dump_emptyline if spacer
    spacer = true
    buf << dump_code
  end
  unless @attrdef.empty?
    buf << dump_emptyline if spacer
    spacer = true
    buf << dump_attributes
  end
  unless @methoddef.empty?
    buf << dump_emptyline if spacer
    spacer = true
    buf << dump_methods
  end
  buf << dump_class_def_end
  buf << dump_package_def_end(package) unless package.empty?
  buf.gsub(/^\s+$/, '')
end

Private Instance Methods

dump_accessor(attrname, writable) click to toggle source
# File lib/xsd/codegen/classdef.rb, line 129
def dump_accessor(attrname, writable)
  if writable
    "attr_accessor :#{attrname}"
  else
    "attr_reader :#{attrname}"
  end
end
dump_attribute(attrname, writable, varname) click to toggle source
# File lib/xsd/codegen/classdef.rb, line 137
def dump_attribute(attrname, writable, varname)
  str = nil
  mr = MethodDef.new(attrname)
  mr.definition = "@#{varname}"
  str = mr.dump
  if writable
    mw = MethodDef.new(attrname + "=", 'value')
    mw.definition = "@#{varname} = value"
    str << "\n" + mw.dump
  end
  str
end
dump_attributes() click to toggle source
# File lib/xsd/codegen/classdef.rb, line 111
def dump_attributes
  str = ""
  @attrdef.each do |attrname, writable, varname|
    varname ||= attrname
    if attrname == varname
      str << format(dump_accessor(attrname, writable), 2)
    end
  end
  @attrdef.each do |attrname, writable, varname|
    varname ||= attrname
    if attrname != varname
      str << "\n" unless str.empty?
      str << format(dump_attribute(attrname, writable, varname), 2)
    end
  end
  str
end
dump_class_def() click to toggle source
# File lib/xsd/codegen/classdef.rb, line 90
def dump_class_def
  name = @name.to_s.split(/::/)
  if @baseclass
    format("class #{name.last} < #{@baseclass}")
  else
    format("class #{name.last}")
  end
end
dump_class_def_end() click to toggle source
# File lib/xsd/codegen/classdef.rb, line 99
def dump_class_def_end
  str = format("end")
end
dump_classvar() click to toggle source
# File lib/xsd/codegen/classdef.rb, line 103
def dump_classvar
  dump_static(
    @classvar.collect { |var, value|
      %Q(@@#{var.sub(/^@@/, "")} = #{dump_value(value)})
    }.join("\n")
  )
end