Truques de Ruby: DATA e __END__

Em Ruby, temos algumas CONSTANTES GLOBAIS que facilitam nossa vida. Nesse post, lhes apresento DATA e __END__.

Normalmente os arquivos de scripts em Ruby são finalizados com EOF, mas você pode indicar onde será o fim do script, adicionando a constante __END__ e com isso, todo bloco abaixo de __END__ não será processado pelo Ruby como comandos da linguagem. Então, podemos usar a constante DATA, que é uma instância de File do arquivo de script atual, porém considerando apenas o conteúdo que está abaixo da constante __END__. Vejamos alguns exemplos para entender melhor como funciona

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
require "yaml"
obj = YAML::load(DATA)

p obj

__END__
---
  -
    name: Adam
    age: 28
    admin: true
  -
    name: Maggie
    age: 28
    admin: false

Neste post de onde peguei o exemplo acima, apresenta outro uso com sinatra.