Ruby Meta-programming Matias P. Brutti self.Introducción Matías Pablo Brutti AKA FreedomCoder o FC LUGParana / Ruby-ar... Consultor de Seguridad Ruby Developer como hobby http://www.freedomcoder.com.ar Ruby Metaprogramming y RubyCocoa # man ruby Interpretive Variables have no type (dynamic typing) No declaration needed Simple syntax No user-level memory management Everything is an object Class, inheritance, and methods Singleton methods Closures Mix-in by modules Text processing and regular expression Iterators Bignums Exception handling Direct access to the OS Dynamic loading ruby basics Que es Meta-programming ? “La metaprogramación consiste en escribir programas que escriben o manipulan otros programas (o a sí mismos) como datos, o que hacen en tiempo de compilación parte del trabajo que, de otra forma, se haría en tiempo de ejecución. Esto permite al programador ahorrar tiempo en la producción de código.” Wikipedia DATA CODE Data = Code ? ? attr_* :foobar Monkey Patching eval(code) instance_eval Evalúa una cadena de texto o un bloque en el contexto del objeto receptor. class_eval && module_eval Es un método que acepta un ‘string’ o un bloque y se evalúa en el contexto de una clase o un modulo. --Si usamos variables declaradas fuera del contexto debemos usar ‘string’-- Class_eval example define_method Define un método de instancia en el receptor. Los parámetros que aceptan son un bloque o un ‘proc’. define_method :example method_missing Toma como parámetros el nombre del método y los parámetros con que se llamaron. Declarando este método en nuestra clase o modulo nos permite hookear y realizar operaciones en el objeto. Ejemplos ... Ruby on Rails, Rubycocoa, ActiveRecord, Ruby, merb, camping etc, etc, etc... Ejemplos ... Ruby on Rails, Rubycocoa, ActiveRecord, Ruby, merb, camping etc, etc, etc... Libros The Ruby Way Ruby CookBook Design patterns in Ruby Programming Ruby The productive Programmer Gracias !!!