forked from everaldo/ruby-em-100-exemplos
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path055_use_heredoc_para_strings_longas.rb
172 lines (129 loc) · 3.7 KB
/
055_use_heredoc_para_strings_longas.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
# 09/06/2016 - Everaldo Gomes - [email protected]
#
# 055 - Use heredoc para strings longas
#
#
# Use a notação heredoc para strings longas
#
# http://ruby-doc.org/core-2.3.0/doc/syntax/literals_rdoc.html#label-Here+Documents
# Here document
#
# Heredoc é uma notação para strings que possuem textos
# longos, em múltiplas linhas.
#
#
# Para começar uma string heredoc, utilize dois sinais de menor <<
# seguidos de uma TAG. Pode ser qualquer identificador, mas geralmente
# utilizam-se letras maiúsculas.
#
# A seguir, tudo que se segue faz parte da string.
#
#
# Para indicar o final da string, escreva a mesma TAG identificadora
# no começo de uma linha, sem espaços em branco antes ou depois.
#
#
# A documentação completa traz todas as informações. Abaixo, resumirei as mais
# importantes:
#
# - Você pode ter heredocs de single ou double quotes
# Com single quote 'EOT', não aceita interpolação
# Com double quote EOT ou "EOT", aceita interpolação
#
# - Com backticks `` , se comporta semelhante ao método ``, que executa um comando em Ruby
# (confira exemplo no final)
#
#
# - Você pode invocar um método num heredoc, basta invocá-lo depois
# da TAG de abertura (confira exemplo no final)
#
#
#
#
no_meio_do_caminho = <<EOT
No meio do caminho - Carlos Drummond de Andrade
No meio do caminho tinha uma pedra
Tinha uma pedra no meio do caminho
Tinha uma pedra
No meio do caminho tinha uma pedra.
Nunca me esquecerei desse acontecimento
Na vida de minhas retinas tão fatigadas.
Nunca me esquecerei que no meio do caminho
Tinha uma pedra
Tinha uma pedra no meio do caminho
No meio do caminho tinha uma pedra.
EOT
puts no_meio_do_caminho
#
# Use um sinal de - antes da TAG, caso queira identá-la no final
#
#
no_meio_do_caminho_indentado = <<-EOT
No meio do caminho - Carlos Drummond de Andrade
No meio do caminho tinha uma pedra
Tinha uma pedra no meio do caminho
Tinha uma pedra
No meio do caminho tinha uma pedra.
Nunca me esquecerei desse acontecimento
Na vida de minhas retinas tão fatigadas.
Nunca me esquecerei que no meio do caminho
Tinha uma pedra
Tinha uma pedra no meio do caminho
No meio do caminho tinha uma pedra.
EOT
puts no_meio_do_caminho_indentado
# O resultado é o mesmo do acima, a diferença é que a TAG
# pode ser indentada, por causa do uso de -
#
#
# Ruby é bem resiliente e também imprime relativamente bem
# strings longas criadas somente com aspas
#
#
puts " No meio do caminho - Carlos Drummond de Andrade
No meio do caminho tinha uma pedra
Tinha uma pedra no meio do caminho
Tinha uma pedra
No meio do caminho tinha uma pedra.
Nunca me esquecerei desse acontecimento
Na vida de minhas retinas tão fatigadas.
Nunca me esquecerei que no meio do caminho
Tinha uma pedra
Tinha uma pedra no meio do caminho
No meio do caminho tinha uma pedra."
# Novo - Ruby 2.3.0 Use ~ (squiggly)
#
# Retira a indentação.
#
#
# Considera como margem a linha "menos indentada"
#
no_meio_do_caminho_squiggly = <<~EOT
No meio do caminho - Carlos Drummond de Andrade
No meio do caminho tinha uma pedra
Tinha uma pedra no meio do caminho
Tinha uma pedra
No meio do caminho tinha uma pedra.
Nunca me esquecerei desse acontecimento
Na vida de minhas retinas tão fatigadas.
Nunca me esquecerei que no meio do caminho
Tinha uma pedra
Tinha uma pedra no meio do caminho
No meio do caminho tinha uma pedra.
EOT
# Somente a primeira linha é impressa indentada
#
puts no_meio_do_caminho_squiggly
#
# Heredoc com backticks
#
puts <<`COMANDO`
ls -l | head -5
COMANDO
#
# Heredoc com invocação de método
#
#
puts <<EOT.upcase
longo texto que será convertido para letras maiúsculas.
EOT