Criando objetos de dados com OpenStruct


Leia em menos de um minuto

Imagine que você tenha um hash cujos atributos serão chamados muitas vezes durante um trecho de código.

user = {
  :name => 'John Doe',
  :blog => 'http://bleedingfromtheinside.com',
  :style => 'from uk'
}

puts user[:name]
puts user[:blog]
puts user[:style]
 

O hash, embora útil, ainda não é a forma mais prática. Seria muito mais conveniente se você pudesse acessar cada um dos atributos como se fossem métodos. Algumas pessoas que não conhecem a linguagem muito bem iriam estender a classe Hash, sobrescrevendo o método method_missing, como já vi algumas implementações por aí. Mas como você é um cara esperto, iria utilizar o OpenStruct.

O OpenStruct permite que você crie objetos com atributos que não estão atrelados a uma classe, mas ainda assim respondem como se fossem métodos, com getters e setters.

require 'ostruct'

user = OpenStruct.new({
  :name => 'John Doe',
  :blog => 'http://bleedingfromtheinside.com',
  :style => 'from uk'
})

puts user.name
puts user.blog
puts user.style
 

Muito melhor! Os atributos também podem ser modificados. Basta atribuir um valor qualquer.

user.style = 'emo'

Conheça a linguagem que está programando. O Ruby é muito simples de ser adaptado às suas necessidades, mas se você não conhecer a linguagem irá reinventar a roda e, quase sempre, sua solução não será a melhor nem a mais rápida.