Módulos Ruby
O curso trata da palavra-chave module do Ruby e das duas formas de ligar os métodos de um módulo a uma classe. Começa por module/end e por que um módulo não tem .new. Com include, o módulo entra nos ancestors da classe e cada instância ganha seus métodos. Com extend, o módulo passa pela singleton class e a própria classe recebe os métodos. As aulas seguintes comparam os dois num mesmo módulo, mostram módulos como namespaces, analisam o concern Translatable da app e combinam os dois pelo hook self.included.
O que você vai aprender
- ✓Definir um módulo com module/end e entender por que ele não pode ser instanciado
- ✓Usar include para adicionar métodos de instância pela cadeia de ancestors
- ✓Usar extend para adicionar métodos de classe pela singleton class
- ✓Escolher entre include e extend e reconhecer o hook self.included
- ✓Usar módulos como namespaces para agrupar classes relacionadas
- ✓Ler o mixin Translatable da app e seu fallback de locale
O que é um módulo
Os dois cursos anteriores de OOP em Ruby usaram class/end para construir blueprints e def/end para construir métodos. O Ruby tem um terceiro container, module/end. Ele parece quase uma classe, mas faz outro trabalho:
Ler a aula completa grátis →Currículo
7 aulasO que é um módulo
Apresenta module/end como um container de métodos e mostra que chamar .new num módulo levanta NoMethodError.
include adiciona métodos de instância
Mostra como include insere o módulo nos ancestors da classe para que toda instância chame seus métodos.
extend adiciona métodos de classe
Mostra como extend coloca os métodos do módulo na própria classe, pela singleton class, deixando as instâncias sem eles.
include vs extend, mesmo módulo
Compara include e extend num mesmo módulo e apresenta o hook self.included, que dispara os dois.
Módulos como namespaces
Explica módulos usados só como namespaces, como Catalog::Course, para agrupar classes e evitar colisões de nome.
Um mixin real: Translatable
Analisa o concern Translatable da app, os métodos de título gerados, o fallback para o inglês e o ClassMethods.
Juntando tudo: os dois mecanismos, uma classe
Monta um módulo Auditable cujo único include dá a Invoice um método de instância e dois métodos de classe.