A thorough introduction to Rake, including a good discussion of why you might want an internal DSL on top of Ruby rather than a custom language like Make: https://martinfowler.com/articles/rake.html