Writing DSLs in ruby