NameBuilder := NameOption clone do( setIncrementOrder := method( options = call evalArgs self ) builder := method( call evalArgs join ) option := method(i, self performWithArgList("builder", options map(o, r := o option(i) i = o remainder(i) r ) ) ) size := method( if(options size == 0, return 0) total := 1 options map(c, c size) foreach(x, total = total * x ) total ) )