8.6
Criando um framework para persistir objetos em arquivos . . . . . . 153
8.7
Gerenciando exceções e erros . . . . . . . . . . . . . . . . . . . . . . . 159
8.8
A exclusão de dados implementada com metaprogramação . . . . . . 164
8.9
method lookup e method missing . . . . . . . . . . . . . . . . . . . . . . 177
8.10 Utilizando expressões regulares nas buscas . . . . . . . . . . . . . . . . 188
8.11
Próximos passos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194
9
As bibliotecas no universo Ruby
197
9.1
Como manusear suas gems com o Rubygems . . . . . . . . . . . . . . 197
9.2
Gerenciando várias versões de uma gem . . . . . . . . . . . . . . . . . 200
9.3
Gerencie dependências com o Bundler . . . . . . . . . . . . . . . . . . 201
9.4
Quem usa bundler? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204
9.5
Criando e distribuindo gems . . . . . . . . . . . . . . . . . . . . . . . . 204
9.6
Distribuição da biblioteca . . . . . . . . . . . . . . . . . . . . . . . . . . 205
9.7
Próximos passos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208
10 Criando tasks usando Rake
209
10.1
Parâmetros na rake task . . . . . . . . . . . . . . . . . . . . . . . . . . . 212
10.2 Tasks com pré-requisitos . . . . . . . . . . . . . . . . . . . . . . . . . . 215
10.3 Próximos passos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217
ix
Sumário
Casa do Código
11 RVM (Ruby Version Manager)
219
11.1
Instalação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219
11.2
Instalando diferentes Rubies . . . . . . . . . . . . . . . . . . . . . . . . 221
11.3
Organize suas gems utilizando gemsets . . . . . . . . . . . . . . . . . . 222
11.4
Troque automaticamente de gemsets com .rvmrc . . . . . . . . . . . . 224
11.5
Próximos passos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225
12 Ruby 2.0
227
12.1
Evitando monkey patches com Refinements . . . . . . . . . . . . . . . 228
12.2 Named Parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230
12.3
Utilize prepend ao invés de include . . . . . . . . . . . . . . . . . . . . 233
12.4 Utilizando lazy load no módulo Enumerable
. . . . . . . . . . . . . . 235
12.5
Encoding UTF-8 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236
12.6 Próximos passos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236
13 Apêndice: Concorrência e paralelismo
239
13.1
Threads . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241
13.2
Múltiplos processos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241
13.3
Fibers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242
13.4 O design pattern Reactor . . . . . . . . . . . . . . . . . . . . . . . . . . 243
13.5
Conclusão . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 244
x
Capítulo 1
Uma introdução prática à linguagem
Ruby
Vamos começar com um pouco da história e características importantes da lingua-
gem Ruby, para compará-la com com outras que você já deve ter trabalhado. Tam-
bém mostraremos o porquê vários programadores têm falado e usado tanto esta lin-
guagem, pela qual espero que você se apaixonará.
1.1
Quando? Onde? Por quê?
A linguagem Ruby foi criada por Yukihiro Matsumoto, mais conhecido como Matz,
no ano de 1995 no Japão, com o objetivo de ser uma linguagem mais legível e agra-
dável de se programar.
Mas, além das características orientada a objetos, Ruby também foi criada para
possuir um forte quê de linguagem funcional, tendo recursos poderosos e essenciais
desse paradigma, como lambdas e closures.
1.2. Instalação
Casa do Código
Ela foi inspirada em outras linguagens como Perl, Smalltalk e Lisp, e hoje está
entre as linguagens mais usadas, muito em função da disseminação do seu principal
framework MVC, o Ruby on Rails - http://rubyonrails.org.
Algumas características do Ruby devem ser fixadas desde o começo dos estudos,
pois vão facilitar bastante nossa curva de aprendizado da linguagem, como a tipagem
forte e dinâmica, além do fato da linguagem ser interpretada. Fique tranquilo caso
você ainda não tenha escutado falar sobre esses alguns desses conceitos.
1.2
Instalação
Em 2013, o Ruby se prepara para receber a versão 2.0 da linguagem. Em fevereiro
já saiu uma primeira versão, mas ainda pouco utilizada. Há um apêndice nesse li-
vro para você fazer a instalação dessa versão mais recente, que traz recursos novos,
também discutidos no fim do livro.
Nessa seção vamos aprender a instalar o Ruby em cada sistema operacional:
Mac OS
Adivinhe? No Mac OS, o interpretador Ruby já está instalado! Abra o terminal
e execute:
ruby -v
Na versão Mountain Lion, a versão pré-instalada é a 1.9.2 patch 290, conforme
você pode ver na imagem a seguir:
2
Casa do Código
Capítulo 1. Uma introdução prática à linguagem Ruby
O Ruby possui vários interpretadores disponíveis, se você deseja utilizar versões