Hash simbolizado com acesso indiferente

Hoje, publiquei uma nova gema chamada symbolized , que é basicamente uma duplicata do HashWithIndifferentAccess do ActiveSupport, mas em vez de armazenar chaves internamente como strings, elas são armazenadas como símbolos.

Por que eu iria querer isso?

Isso é particularmente útil quando você tem um grande número de hashes que compartilham as mesmas chaves, e pode se tornar ineficiente manter todas essas chaves idênticas como strings. Um exemplo desse caso é quando você tem pipelines de processamento de dados que processam milhões de hashes com as mesmas chaves.

Como pode ser usado?

Aqui está um snippet que demonstra o básico:

require 'symbolized'

# You can create a SymbolizedHash directly:

symbolized_hash
= SymbolizedHash.new
symbolized_hash
['a'] = 'b'
symbolized_hash
['a'] #=> 'b'
symbolized_hash
[:a] #=> 'b'
symbolized_hash
.keys #=> [:a]

# Or initialize it with a normal hash:

symbolized_hash
= SymbolizedHash.new({'a' => 'b'})
symbolized_hash
['a'] #=> 'b'
symbolized_hash
[:a] #=> 'b'
symbolized_hash
.keys #=> [:a]

# Or use the Hash#to_symbolized_hash core extension:

h
= { 'a' => 'b' }
h
['a'] #=> 'b'
h
[:a] #=> nil
h
.keys #=> ['a']

symbolized_hash
= h.to_symbolized_hash
symbolized_hash
['a'] #=> 'b'
symbolized_hash
[:a] #=> 'b'
symbolized_hash
.keys #=> [:a]

Onde posso aprender mais sobre isso?

Você pode obter mais detalhes sobre a gema no repositório github:
https://github.com/TamerShlash/symbolized