based on ruby