Ruby Metaprogramming: Class Macros & DSLs Explained | Devharbor