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

Support

http://infraruby.com/