InfraRuby meta-ruby
This gem provides classes to generate Ruby source code.
Example
require "meta-ruby"
class Generator < MetaRuby::Generator
def initialize_sexp
s(:defn, "initialize", s(:args, "x", "y"),
s(:iasgn, "@x", s(:lvar, "x")),
s(:iasgn, "@y", s(:lvar, "y")),
s(:return),
)
end
def attr_reader_sexp(name)
s(:defn, name, s(:args),
s(:return, s(:ivar, "@#{name}")),
)
end
def xy_class_sexp
s(:class, "XY", nil,
initialize_sexp,
attr_reader_sexp("x"),
attr_reader_sexp("y"),
)
end
end
g = Generator.new
d = MetaRuby::Directory.new
d.instance_eval do
write("XY.rb", g.xy_class_sexp)
end