Ruby – Acessadores e padrões de atributos do módulo

Então, eu estava construindo uma gema na qual tinha MUITOS padrões configuráveis.
Isso exigiu os suspeitos usuais – variáveis ​​de classe e mattr_accessor(que são fornecidas pelas extensões principais do active_support).
Então, acabei com algo como este:

module MyWonderfulGem
@@one_thing = "hello"
mattr_accessor
:one_thing

@@another_thing = "world"
mattr_accessor
:another_thing

# ........
end

Fazer isso para alguns acessadores de atributo é aceitável, mas se você tiver algumas dúzias, então se torna um pouco complicado … Novamente, o suporte ativo vem para o resgate, pois fornece o ` acessor de atributo com o padrão`. Portanto, o código se transforma em algo assim:

module MyWonderfulGem
attr_accessor_with_default
:one_thing, "hello"
attr_accessor_with_default
:another_thing, "world"

# ........
end

Não é tão ruim, mas me força a continuar escrevendo a attr_accessor_with_defaultpalavra chave … Draaaaagghhh …

Então, e porque sou um desenvolvedor preguiçoso e odeio repetição, decidi que deveria implementar minha própria solução e vim com algo que me permite escrever meu código como este:

module MyWonderfulGem
module_attr_accessor one_thing
: "hello", another_thing: "world"

# ........
end

Eu fiz uma essência com meu core_ext para a classe Module que me permite escrever o código acima, vá dar uma olhada: module_attr_accessors