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_default
palavra – 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