Function object
In Ruby, several objects can be considered function objects, in particular Method and Proc objects. Ruby also has two kinds of objects that can be thought of as semi-function objects: UnboundMethod and block. UnboundMethods must first be bound to an object (thus becoming a Method) before they can be used as a function object. Blocks can be called like function objects, but to be used in any other capacity as an object (e.g. passed as an argument) they must first be converted to a Proc. More recently, symbols (accessed via the literal unary indicator codice_35) can also be converted to codice_36s. Using Ruby's unary codice_37 operator—equivalent to calling codice_38 on an object, and assuming that method exists—the Ruby Extensions Project created a simple hack.
Apache Buildr
Though Buildr's general philosophy is similar to Maven, it uses Ruby's scripting possibilities to provide a more flexible and customizable programming model. The user writes a Ruby build script, declaring a project, its sub-projects, artifacts, dependencies, packaging rules, etc. Based on these declarations, a list of standard targets are provided to compile or package the project, upload a prepared package to a remote repository, clean up the build results, run tests and so on. Hooks are provided to execute custom Ruby code before or after the standard targets, allowing the user to comfortably override any defaults and further specify the behavior of the standard targets. New, completely user-written targets can be added.