Created
August 9, 2011 04:20
-
-
Save nhocki/1133409 to your computer and use it in GitHub Desktop.
Clase de Ruby
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Los nombres de las CLASES y MODULOS debe empezar con mayúscula | |
# Se considera buena práctica poner estos nombres en un CamelCaseConMayusculaAlPrincipio | |
module Nameable | |
# El método self.included se llama cuando una clase INCLUYE este módulo | |
# El parámetro 'base' es la CLASE que incluye el método | |
# En este caso es la clase 'Car' y la clase 'User' | |
# NOTA: No existe un hook similar para extend (no existe self.extended(base)). | |
def self.included(base) | |
# EXTIENDE la clase con el módulo Nameable::ClassMethods | |
# La diferencia entre include y extend es: | |
# Los métodos que se INCLUYEN son de INSTANCIA | |
# Los métodos que se EXTIENDEN son de CLASE | |
base.extend(ClassMethods) | |
end | |
# Se pueden tener módulos dentro de módulos | |
# El nombre 'real' de este módulo es Nameable::ClassMethods | |
module ClassMethods | |
# Los nombres de los métodos y las variables debe ser en minúscula | |
# Se considera buena práctica reemplazar los espacios por underscores (_) | |
# NO usar camel case | |
def make_name(method) | |
define_method "pretty_#{method}" do | |
"1 - #{send(method)}" | |
end | |
end | |
end | |
end | |
class User | |
# Get / Set de un atributo 'login' | |
# Crea los metodos user.login y user.login=(otro_login) | |
attr_accessor :login | |
# Incluir el módulo Nameable | |
include Nameable | |
make_name :login | |
end | |
class Car | |
attr_accessor :plate, :model | |
# Reutilizar los métodos, para eso hicimos el módulo Nameable | |
# Es importante mostrar que muchos módulos reflejan en el nombre la funcionalidad | |
# Por ejemplo, "Trashable" para objetos que se pueden borrar | |
# Recuerden que el código que uno escribe debe ser entendible | |
# Uno escribe para el "futuro yo" | |
include Nameable | |
make_name :plate | |
end | |
c = Car.new | |
c.plate = "HSA380" | |
puts c.pretty_plate | |
u = User.new | |
u.login = "nhocki" | |
puts u.pretty_login |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment