sinatra 2.0.8 → 2.2.0
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of sinatra might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/CHANGELOG.md +105 -2
- data/Gemfile +5 -4
- data/MAINTENANCE.md +2 -15
- data/README.de.md +16 -16
- data/README.es.md +62 -33
- data/README.fr.md +182 -85
- data/README.hu.md +3 -3
- data/README.ja.md +62 -32
- data/README.ko.md +1 -1
- data/README.md +93 -60
- data/README.pt-br.md +61 -61
- data/README.pt-pt.md +3 -3
- data/README.ru.md +3 -3
- data/README.zh.md +1 -1
- data/VERSION +1 -1
- data/examples/chat.rb +2 -1
- data/examples/rainbows.conf +3 -0
- data/examples/rainbows.rb +20 -0
- data/examples/stream.ru +4 -4
- data/lib/sinatra/base.rb +109 -68
- data/lib/sinatra/indifferent_hash.rb +27 -9
- data/lib/sinatra/main.rb +5 -5
- data/lib/sinatra/show_exceptions.rb +2 -37
- data/lib/sinatra/version.rb +1 -1
- data/sinatra.gemspec +4 -10
- metadata +10 -21
data/README.pt-br.md
CHANGED
@@ -263,7 +263,7 @@ get '/posts' do
|
|
263
263
|
# corresponde a "GET /posts?titulo=foo&autor=bar"
|
264
264
|
titulo = params['titulo']
|
265
265
|
autor = params['autor']
|
266
|
-
# utiliza as
|
266
|
+
# utiliza as variáveis titulo e autor; a query é opcional para a rota /posts
|
267
267
|
end
|
268
268
|
```
|
269
269
|
|
@@ -362,10 +362,10 @@ Você pode retornar uma resposta válida ou um objeto para o Rack, sendo
|
|
362
362
|
eles de qualquer tipo de objeto que queira. Além disso, é possível
|
363
363
|
retornar um código de status HTTP.
|
364
364
|
|
365
|
-
* Um array com três
|
365
|
+
* Um array com três elementos: `[status (Integer), cabeçalho (Hash),
|
366
366
|
corpo da resposta (responde à #each)]`
|
367
367
|
|
368
|
-
* Um array com dois
|
368
|
+
* Um array com dois elementos: `[status (Integer), corpo da resposta
|
369
369
|
(responde à #each)]`
|
370
370
|
|
371
371
|
* Um objeto que responda à `#each` sem passar nada, mas, sim, `strings`
|
@@ -444,10 +444,10 @@ Arquivos estáticos são disponibilizados a partir do diretório
|
|
444
444
|
`:public_folder`
|
445
445
|
|
446
446
|
```ruby
|
447
|
-
set :public_folder,
|
447
|
+
set :public_folder, __dir__ + '/estatico'
|
448
448
|
```
|
449
449
|
|
450
|
-
Note que o nome do diretório público não é
|
450
|
+
Note que o nome do diretório público não é incluído na URL. Um arquivo
|
451
451
|
`./public/css/style.css` é disponibilizado como
|
452
452
|
`http://exemplo.com/css/style.css`.
|
453
453
|
|
@@ -541,7 +541,7 @@ Opções disponíveis:
|
|
541
541
|
|
542
542
|
<dt>content_type</dt>
|
543
543
|
<dd>
|
544
|
-
O *Content-Type* que o template produz. O padrão
|
544
|
+
O *Content-Type* que o template produz. O padrão depende
|
545
545
|
da linguagem de template utilizada.
|
546
546
|
</dd>
|
547
547
|
|
@@ -604,9 +604,9 @@ end
|
|
604
604
|
|
605
605
|
### Linguagens de template disponíveis
|
606
606
|
|
607
|
-
Algumas linguagens possuem
|
607
|
+
Algumas linguagens possuem múltiplas implementações. Para especificar qual
|
608
608
|
implementação deverá ser utilizada (e para ser *thread-safe*), você deve
|
609
|
-
|
609
|
+
requerê-la primeiro:
|
610
610
|
|
611
611
|
```ruby
|
612
612
|
require 'rdiscount' # ou require 'bluecloth'
|
@@ -654,7 +654,7 @@ get('/') { markdown :index }
|
|
654
654
|
|
655
655
|
<table>
|
656
656
|
<tr>
|
657
|
-
<td>
|
657
|
+
<td>Dependência</td>
|
658
658
|
<td>
|
659
659
|
<a href="https://github.com/jimweirich/builder" title="builder">
|
660
660
|
builder
|
@@ -806,7 +806,7 @@ mesmo. Portanto normalmente é utilizado junto a outra engine de renderização:
|
|
806
806
|
erb :overview, :locals => { :text => markdown(:introducao) }
|
807
807
|
```
|
808
808
|
|
809
|
-
Note que
|
809
|
+
Note que você também pode chamar o método `markdown` dentro de outros templates:
|
810
810
|
|
811
811
|
```ruby
|
812
812
|
%h1 Olá do Haml!
|
@@ -840,7 +840,7 @@ mesmo. Portanto normalmente é utilizado junto a outra engine de renderização:
|
|
840
840
|
erb :overview, :locals => { :text => textile(:introducao) }
|
841
841
|
```
|
842
842
|
|
843
|
-
Note que
|
843
|
+
Note que você também pode chamar o método `textile` dentro de outros templates:
|
844
844
|
|
845
845
|
```ruby
|
846
846
|
%h1 Olá do Haml!
|
@@ -876,7 +876,7 @@ mesmo. Portanto normalmente é utilizado junto a outra engine de renderização:
|
|
876
876
|
erb :overview, :locals => { :text => rdoc(:introducao) }
|
877
877
|
```
|
878
878
|
|
879
|
-
Note que
|
879
|
+
Note que você também pode chamar o método `rdoc` dentro de outros templates:
|
880
880
|
|
881
881
|
```ruby
|
882
882
|
%h1 Olá do Haml!
|
@@ -1108,7 +1108,7 @@ deve-se passar a `:layout_engine` como opção.
|
|
1108
1108
|
</tr>
|
1109
1109
|
</table>
|
1110
1110
|
|
1111
|
-
Antes que
|
1111
|
+
Antes que você possa utilizar o template Stylus primeiro você deve carregar
|
1112
1112
|
`stylus` e `stylus/tilt`:
|
1113
1113
|
|
1114
1114
|
```ruby
|
@@ -1381,7 +1381,7 @@ after do
|
|
1381
1381
|
end
|
1382
1382
|
```
|
1383
1383
|
|
1384
|
-
Nota: A não ser que você use o
|
1384
|
+
Nota: A não ser que você use o método `body` ao invés de apenas retornar uma
|
1385
1385
|
String das rotas, o corpo ainda não estará disponível no filtro after, uma vez
|
1386
1386
|
que é gerado depois.
|
1387
1387
|
|
@@ -1466,7 +1466,7 @@ Para melhorar a segurança, os dados da sessão no cookie são assinado com uma
|
|
1466
1466
|
segredo de sessão usando `HMAC-SHA1`. Esse segredo de sessão deve ser, de
|
1467
1467
|
preferência, um valor criptograficamente randômico, seguro, de um comprimento
|
1468
1468
|
apropriado no qual `HMAC-SHA1` é maior ou igual a 64 bytes (512 bits, 128
|
1469
|
-
|
1469
|
+
caracteres hexadecimais). Você será avisado para não usar uma chave secreta
|
1470
1470
|
menor que 32 bytes de randomicidade (256 bits, 64 caracteres hexadecimais).
|
1471
1471
|
Portanto, é **muito importante** que você não invente o segredo, mas use um
|
1472
1472
|
gerador de números aleatórios seguro para cria-lo. Humanos são extremamente
|
@@ -1676,8 +1676,8 @@ Veja a especificação do Rack se você quer aprender mais sobre o `call`.
|
|
1676
1676
|
É possível e recomendado definir o código de status e o corpo da resposta com o
|
1677
1677
|
valor retornado do bloco da rota. Entretanto, em alguns cenários você pode
|
1678
1678
|
querer definir o corpo em um ponto arbitrário do fluxo de execução. Você pode
|
1679
|
-
fazer isso com o
|
1680
|
-
|
1679
|
+
fazer isso com o método auxiliar `body`. Se você fizer isso, poderá usar esse
|
1680
|
+
método de agora em diante para acessar o body:
|
1681
1681
|
|
1682
1682
|
```ruby
|
1683
1683
|
get '/foo' do
|
@@ -1689,7 +1689,7 @@ after do
|
|
1689
1689
|
end
|
1690
1690
|
```
|
1691
1691
|
|
1692
|
-
Também é
|
1692
|
+
Também é possível passar um bloco para `body`, que será executado pelo
|
1693
1693
|
manipulador Rack (isso pode ser usado para implementar transmissão,
|
1694
1694
|
[veja "Retorno de Valores"](#retorno-de-valores)).
|
1695
1695
|
|
@@ -1761,21 +1761,21 @@ get '/assinar' do
|
|
1761
1761
|
end
|
1762
1762
|
end
|
1763
1763
|
|
1764
|
-
post '/:
|
1764
|
+
post '/:mensagem' do
|
1765
1765
|
conexoes.each do |saida|
|
1766
1766
|
# notifica o cliente que uma nova mensagem chegou
|
1767
|
-
saida << params['
|
1767
|
+
saida << params['mensagem'] << "\n"
|
1768
1768
|
|
1769
1769
|
# indica ao cliente para se conectar novamente
|
1770
1770
|
saida.close
|
1771
1771
|
end
|
1772
1772
|
|
1773
1773
|
# confirma
|
1774
|
-
"
|
1774
|
+
"mensagem recebida"
|
1775
1775
|
end
|
1776
1776
|
```
|
1777
1777
|
|
1778
|
-
Também é
|
1778
|
+
Também é possível para o cliente fechar a conexão quando está tentando escrever
|
1779
1779
|
para o socket. Devido a isso, é recomendado checar `out.closed?` antes de
|
1780
1780
|
tentar escrever.
|
1781
1781
|
|
@@ -1792,7 +1792,7 @@ end
|
|
1792
1792
|
```
|
1793
1793
|
|
1794
1794
|
Esse logger irá automaticamente botar as configurações de log do manipulador
|
1795
|
-
Rack na sua conta. Se a produção de logs estiver
|
1795
|
+
Rack na sua conta. Se a produção de logs estiver desabilitada, esse método
|
1796
1796
|
retornará um objeto dummy, então você não terá que se preocupar com suas rotas
|
1797
1797
|
e filtros.
|
1798
1798
|
|
@@ -1837,7 +1837,7 @@ end
|
|
1837
1837
|
|
1838
1838
|
### Gerando URLs
|
1839
1839
|
|
1840
|
-
Para gerar URLs você deve usar o
|
1840
|
+
Para gerar URLs você deve usar o método auxiliar `url` no Haml:
|
1841
1841
|
|
1842
1842
|
```ruby
|
1843
1843
|
%a{:href => url('/foo')} foo
|
@@ -1850,7 +1850,7 @@ Esse método é também apelidado para `to` (veja
|
|
1850
1850
|
|
1851
1851
|
### Redirecionamento do Browser
|
1852
1852
|
|
1853
|
-
Você pode lançar um redirecionamento no browser com o
|
1853
|
+
Você pode lançar um redirecionamento no browser com o método auxiliar
|
1854
1854
|
`redirect`:
|
1855
1855
|
|
1856
1856
|
```ruby
|
@@ -1859,7 +1859,7 @@ get '/foo' do
|
|
1859
1859
|
end
|
1860
1860
|
```
|
1861
1861
|
|
1862
|
-
Quaisquer
|
1862
|
+
Quaisquer parâmetros adicionais são interpretados como argumentos passados
|
1863
1863
|
ao `halt`:
|
1864
1864
|
|
1865
1865
|
```ruby
|
@@ -2000,7 +2000,7 @@ etag '', :new_resource => true, :kind => :weak
|
|
2000
2000
|
### Enviando Arquivos
|
2001
2001
|
|
2002
2002
|
Para retornar os conteúdos de um arquivo como as resposta, você pode usar o
|
2003
|
-
|
2003
|
+
método auxiliar `send_file`:
|
2004
2004
|
|
2005
2005
|
```ruby
|
2006
2006
|
get '/' do
|
@@ -2043,14 +2043,14 @@ As opções são:
|
|
2043
2043
|
Código de status a ser enviado. Útil quando está se enviando um arquivo
|
2044
2044
|
estático como uma página de erro. Se suportado pelo handler do Rack,
|
2045
2045
|
outros meios além de transmissão do processo do Ruby serão usados.
|
2046
|
-
So você usar esse
|
2046
|
+
So você usar esse método auxiliar, o Sinatra irá automaticamente lidar com
|
2047
2047
|
requisições de alcance.
|
2048
2048
|
</dd>
|
2049
2049
|
</dl>
|
2050
2050
|
|
2051
|
-
### Acessando o Objeto da
|
2051
|
+
### Acessando o Objeto da Requisição
|
2052
2052
|
|
2053
|
-
O objeto vindo da requisição pode ser acessado do nível de
|
2053
|
+
O objeto vindo da requisição pode ser acessado do nível de requisição (filtros,
|
2054
2054
|
rotas, manipuladores de erro) através do método `request`:
|
2055
2055
|
|
2056
2056
|
```ruby
|
@@ -2070,9 +2070,9 @@ get '/foo' do
|
|
2070
2070
|
request.content_length # tamanho do request.body
|
2071
2071
|
request.media_type # tipo de mídia of request.body
|
2072
2072
|
request.host # "exemplo.com"
|
2073
|
-
request.get? # true (
|
2073
|
+
request.get? # true (método similar para outros tipos de requisição)
|
2074
2074
|
request.form_data? # false
|
2075
|
-
request["algum_ param"] # valor do
|
2075
|
+
request["algum_ param"] # valor do parâmetro 'algum_param'. [] é um atalho para o hash de parâmetros
|
2076
2076
|
request.referrer # a referência do cliente ou '/'
|
2077
2077
|
request.user_agent # agente de usuário (usado por :agent condition)
|
2078
2078
|
request.cookies # hash dos cookies do browser
|
@@ -2095,7 +2095,7 @@ get "/" do
|
|
2095
2095
|
"todas requisições acabam aqui"
|
2096
2096
|
end
|
2097
2097
|
```
|
2098
|
-
`request.body` é uma ES ou um
|
2098
|
+
`request.body` é uma ES ou um objeto StringIO:
|
2099
2099
|
|
2100
2100
|
```ruby
|
2101
2101
|
post "/api" do
|
@@ -2108,7 +2108,7 @@ end
|
|
2108
2108
|
### Anexos
|
2109
2109
|
|
2110
2110
|
Você pode usar o método auxiliar `attachment` para dizer ao navegador que a
|
2111
|
-
|
2111
|
+
resposta deve ser armazenada no disco no lugar de ser exibida no browser:
|
2112
2112
|
|
2113
2113
|
```ruby
|
2114
2114
|
get '/' do
|
@@ -2208,8 +2208,8 @@ realmente maluco.
|
|
2208
2208
|
É possível e recomendado definir o código de status e o corpo da resposta com o
|
2209
2209
|
valor retornado do bloco da rota. Entretanto, em alguns cenários você pode
|
2210
2210
|
querer definir o corpo em um ponto arbitrário do fluxo de execução. Você pode
|
2211
|
-
fazer isso com o
|
2212
|
-
|
2211
|
+
fazer isso com o método auxiliar `body`. Se você fizer isso, poderá usar esse
|
2212
|
+
método de agora em diante para acessar o body:
|
2213
2213
|
|
2214
2214
|
```ruby
|
2215
2215
|
get '/foo' do
|
@@ -2221,7 +2221,7 @@ after do
|
|
2221
2221
|
end
|
2222
2222
|
```
|
2223
2223
|
|
2224
|
-
Também é
|
2224
|
+
Também é possível passar um bloco para `body`, que será executado pelo
|
2225
2225
|
manipulador Rack (isso pode ser usado para implementar transmissão,
|
2226
2226
|
[veja "Retorno de Valores"](#retorno-de-valores)).
|
2227
2227
|
|
@@ -2307,7 +2307,7 @@ post '/:messagem' do
|
|
2307
2307
|
end
|
2308
2308
|
```
|
2309
2309
|
|
2310
|
-
Também é
|
2310
|
+
Também é possível para o cliente fechar a conexão quando está tentando escrever
|
2311
2311
|
para o socket. Devido a isso, é recomendado checar `out.closed?` antes de
|
2312
2312
|
tentar escrever.
|
2313
2313
|
|
@@ -2324,7 +2324,7 @@ end
|
|
2324
2324
|
```
|
2325
2325
|
|
2326
2326
|
Esse logger irá automaticamente botar as configurações de log do manipulador
|
2327
|
-
Rack na sua conta. Se a produção de logs estiver
|
2327
|
+
Rack na sua conta. Se a produção de logs estiver desabilitada, esse método
|
2328
2328
|
retornará um objeto dummy, então você não terá que se preocupar com suas rotas
|
2329
2329
|
e filtros.
|
2330
2330
|
|
@@ -2369,7 +2369,7 @@ end
|
|
2369
2369
|
|
2370
2370
|
### Gerando URLs
|
2371
2371
|
|
2372
|
-
Para gerar URLs você deve usar o
|
2372
|
+
Para gerar URLs você deve usar o método auxiliar `url` no Haml:
|
2373
2373
|
|
2374
2374
|
```ruby
|
2375
2375
|
%a{:href => url('/foo')} foo
|
@@ -2382,7 +2382,7 @@ Esse método é também apelidado para `to` (veja
|
|
2382
2382
|
|
2383
2383
|
### Redirecionamento do Browser
|
2384
2384
|
|
2385
|
-
Você pode lançar um redirecionamento no browser com o
|
2385
|
+
Você pode lançar um redirecionamento no browser com o método auxiliar
|
2386
2386
|
`redirect`:
|
2387
2387
|
|
2388
2388
|
```ruby
|
@@ -2391,7 +2391,7 @@ get '/foo' do
|
|
2391
2391
|
end
|
2392
2392
|
```
|
2393
2393
|
|
2394
|
-
Quaisquer
|
2394
|
+
Quaisquer parâmetros adicionais são interpretados como argumentos passados ao
|
2395
2395
|
`halt`:
|
2396
2396
|
|
2397
2397
|
```ruby
|
@@ -2532,7 +2532,7 @@ etag '', :new_resource => true, :kind => :weak
|
|
2532
2532
|
### Enviando Arquivos
|
2533
2533
|
|
2534
2534
|
Para retornar os conteúdos de um arquivo como as resposta, você pode usar o
|
2535
|
-
|
2535
|
+
método auxiliar `send_file`:
|
2536
2536
|
|
2537
2537
|
```ruby
|
2538
2538
|
get '/' do
|
@@ -2575,14 +2575,14 @@ As opções são:
|
|
2575
2575
|
Código de status a ser enviado. Útil quando está se enviando um arquivo
|
2576
2576
|
estático como uma página de erro. Se suportado pelo handler do Rack,
|
2577
2577
|
outros meios além de transmissão do processo do Ruby serão usados.
|
2578
|
-
So você usar esse
|
2578
|
+
So você usar esse método auxiliar, o Sinatra irá automaticamente lidar
|
2579
2579
|
com requisições de alcance.
|
2580
2580
|
</dd>
|
2581
2581
|
</dl>
|
2582
2582
|
|
2583
2583
|
### Acessando o Objeto da Requisção
|
2584
2584
|
|
2585
|
-
O objeto vindo da requisição pode ser acessado do nível de
|
2585
|
+
O objeto vindo da requisição pode ser acessado do nível de requisição (filtros,
|
2586
2586
|
rotas, manipuladores de erro) através do método `request`:
|
2587
2587
|
|
2588
2588
|
```ruby
|
@@ -2604,7 +2604,7 @@ get '/foo' do
|
|
2604
2604
|
request.host # "exemplo.com"
|
2605
2605
|
request.get? # true (metodo similar para outros tipos de requisição)
|
2606
2606
|
request.form_data? # false
|
2607
|
-
request["algum_ param"] # valor do
|
2607
|
+
request["algum_ param"] # valor do parâmetro 'algum_param'. [] é um atalho para o hash de parâmetros
|
2608
2608
|
request.referrer # a referência do cliente ou '/'
|
2609
2609
|
request.user_agent # agente de usuário (usado por :agent condition)
|
2610
2610
|
request.cookies # hash dos cookies do browser
|
@@ -2627,7 +2627,7 @@ get "/" do
|
|
2627
2627
|
"todas requisições acabam aqui"
|
2628
2628
|
end
|
2629
2629
|
```
|
2630
|
-
`request.body` é uma ES ou um
|
2630
|
+
`request.body` é uma ES ou um objeto StringIO:
|
2631
2631
|
|
2632
2632
|
```ruby
|
2633
2633
|
post "/api" do
|
@@ -2851,7 +2851,7 @@ set :protection, :session => true
|
|
2851
2851
|
<dt>add_charset</dt>
|
2852
2852
|
<dd>
|
2853
2853
|
Para tipos Mime o método auxiliar <tt>content_type</tt> irá
|
2854
|
-
automaticamente adicionar a
|
2854
|
+
automaticamente adicionar a informação de codificação. Você deve adicionar
|
2855
2855
|
isto no lugar de sobrescrever essa opção:
|
2856
2856
|
<tt>settings.add_charset << "application/foobar"</tt>
|
2857
2857
|
</dd>
|
@@ -2980,7 +2980,7 @@ set :protection, :session => true
|
|
2980
2980
|
<tt>server_settings</tt>, tais como <tt>SSLEnable</tt> ou
|
2981
2981
|
<tt>SSLVerifyClient</tt>. Entretanto, servidores web como Puma e Thin não
|
2982
2982
|
suportam isso, então você pode definir <tt>server_settings</tt> como um
|
2983
|
-
|
2983
|
+
método quando chamar <tt>configure</tt>.
|
2984
2984
|
</dd>
|
2985
2985
|
|
2986
2986
|
<dt>sessions</dt>
|
@@ -3065,7 +3065,7 @@ podem ser definidos através da variável de ambiente `APP_ENV`. O valor padrão
|
|
3065
3065
|
`"development"`. No ambiente `"development"` todos os templates são
|
3066
3066
|
recarregados entre as requisições e manipuladores especiais como `not_found` e
|
3067
3067
|
`error` exibem relatórios de erros no seu navegador. Nos ambientes de
|
3068
|
-
`"production"` e `"test"`, os templates são
|
3068
|
+
`"production"` e `"test"`, os templates são guardados em cache por padrão.
|
3069
3069
|
|
3070
3070
|
Para rodar diferentes ambientes, defina a variável de ambiente `APP_ENV`:
|
3071
3071
|
|
@@ -3205,12 +3205,12 @@ use Rack::Auth::Basic do |usuario, senha|
|
|
3205
3205
|
end
|
3206
3206
|
```
|
3207
3207
|
|
3208
|
-
O Rack é
|
3208
|
+
O Rack é distribuído com uma variedade de middleware padrões para logs,
|
3209
3209
|
debugs, rotas de URL, autenticação, e manipuladores de sessão. Sinatra
|
3210
3210
|
utilizada muitos desses componentes automaticamente baseando sobre
|
3211
3211
|
configuração, então, tipicamente você não tem `use` explicitamente.
|
3212
3212
|
|
3213
|
-
Você pode achar
|
3213
|
+
Você pode achar middlewares utéis em
|
3214
3214
|
[rack](https://github.com/rack/rack/tree/master/lib/rack),
|
3215
3215
|
[rack-contrib](https://github.com/rack/rack-contrib#readme),
|
3216
3216
|
ou em [Rack wiki](https://github.com/rack/rack/wiki/List-of-Middleware).
|
@@ -3238,7 +3238,7 @@ class MinhaAplicacaoTeste < Minitest::Test
|
|
3238
3238
|
assert_equal 'Ola Mundo!', last_response.body
|
3239
3239
|
end
|
3240
3240
|
|
3241
|
-
def
|
3241
|
+
def teste_com_parâmetros
|
3242
3242
|
get '/atender', :name => 'Frank'
|
3243
3243
|
assert_equal 'Olá Frank!', last_response.bodymeet
|
3244
3244
|
end
|
@@ -3256,7 +3256,7 @@ NOTA: Se você está usando o Sinatra no estilo modular, substitua
|
|
3256
3256
|
## Sinatra::Base - Middleware, Bibliotecas e aplicativos modulares
|
3257
3257
|
|
3258
3258
|
Definir sua aplicação em um nível superior de trabalho funciona bem para
|
3259
|
-
micro aplicativos, mas tem consideráveis
|
3259
|
+
micro aplicativos, mas tem consideráveis inconvenientes na construção de
|
3260
3260
|
componentes reutilizáveis como um middleware Rack, metal Rails,
|
3261
3261
|
bibliotecas simples como um componente de servidor, ou mesmo extensões
|
3262
3262
|
Sinatra. A DSL de nível superior polui o espaço do objeto e assume um
|
@@ -3293,7 +3293,7 @@ numa subclasse de `Sinatra::Base`.
|
|
3293
3293
|
padrão, incluindo o servidor embutido. Veja [Opções e
|
3294
3294
|
Configurações](http://www.sinatrarb.com/configuration.html) para
|
3295
3295
|
detalhes de opções disponíveis e seus comportamentos. Se você quer
|
3296
|
-
comportamento mais
|
3296
|
+
comportamento mais similar à quando você definiu sua aplicação em nível mais
|
3297
3297
|
alto (também conhecido como estilo Clássico), você pode usar subclasses de
|
3298
3298
|
`Sinatra::Application`:
|
3299
3299
|
|
@@ -3567,7 +3567,7 @@ Você pode atingir o escopo do objeto (a classe) de duas maneiras:
|
|
3567
3567
|
|
3568
3568
|
### Escopo de Instância/Requisição
|
3569
3569
|
|
3570
|
-
Para toda
|
3570
|
+
Para toda requisição que chega, uma nova instância da classe da sua aplicação é
|
3571
3571
|
criada e todos blocos de manipulação rodam nesse escopo. Dentro desse escopo
|
3572
3572
|
você pode acessar os objetos `request` e `session` ou chamar métodos de
|
3573
3573
|
renderização como `erb` ou `haml`. Você pode acessar o escopo da aplicação de
|
@@ -3599,8 +3599,8 @@ Você tem a ligação ao escopo da requisição dentro dos:
|
|
3599
3599
|
|
3600
3600
|
### Escopo de Delegação
|
3601
3601
|
|
3602
|
-
O escopo de delegação apenas encaminha métodos ao escopo da classe.
|
3603
|
-
ele não se comporta exatamente como o escopo da
|
3602
|
+
O escopo de delegação apenas encaminha métodos ao escopo da classe. Entretanto,
|
3603
|
+
ele não se comporta exatamente como o escopo da classe já que você não tem a
|
3604
3604
|
ligação da classe. Apenas métodos marcados explicitamente para delegação
|
3605
3605
|
estarão disponíveis e você não compartilha variáveis/estado com o escopo da
|
3606
3606
|
classe (leia: você tem um `self` diferente). Você pode explicitamente adicionar
|
@@ -3636,11 +3636,11 @@ As opções são:
|
|
3636
3636
|
|
3637
3637
|
_Parafraseando [esta resposta no StackOverflow](resposta-so) por Konstantin_
|
3638
3638
|
|
3639
|
-
Sinatra não impõe nenhum modelo de
|
3639
|
+
Sinatra não impõe nenhum modelo de concorrência, mas deixa isso como
|
3640
3640
|
responsabilidade do Rack (servidor) subjacente como o Thin, Puma ou WEBrick.
|
3641
3641
|
Sinatra por si só é thread-safe, então não há nenhum problema se um Rack
|
3642
3642
|
handler usar um modelo de thread de concorrência. Isso significaria que ao
|
3643
|
-
iniciar o servidor, você teria que
|
3643
|
+
iniciar o servidor, você teria que especificar o método de invocação correto
|
3644
3644
|
para o Rack handler específico. Os seguintes exemplos é uma demonstração de
|
3645
3645
|
como iniciar um servidor Thin multi-thread:
|
3646
3646
|
|
@@ -3682,7 +3682,7 @@ As seguintes versões do Ruby são oficialmente suportadas:
|
|
3682
3682
|
|
3683
3683
|
<dt>JRuby</dt>
|
3684
3684
|
<dd>
|
3685
|
-
A
|
3685
|
+
A última versão estável lançada do JRuby é oficialmente suportada. Não é
|
3686
3686
|
recomendado usar extensões em C com o JRuby. É recomendado rodar
|
3687
3687
|
<tt>gem install trinidad</tt>.
|
3688
3688
|
</dd>
|
data/README.pt-pt.md
CHANGED
@@ -121,7 +121,7 @@ Arquivos estáticos são disponibilizados a partir do directório
|
|
121
121
|
`:public_folder`
|
122
122
|
|
123
123
|
```ruby
|
124
|
-
set :public_folder,
|
124
|
+
set :public_folder, __dir__ + '/estatico'
|
125
125
|
```
|
126
126
|
|
127
127
|
Note que o nome do directório público não é incluido no URL. Um arquivo
|
@@ -134,7 +134,7 @@ Templates presumem-se estar localizados sob o directório `./views`. Para
|
|
134
134
|
utilizar um directório de views diferente:
|
135
135
|
|
136
136
|
```ruby
|
137
|
-
set :views,
|
137
|
+
set :views, __dir__ + '/modelo'
|
138
138
|
```
|
139
139
|
|
140
140
|
Uma coisa importante a ser lembrada é que você sempre tem as referências
|
@@ -757,7 +757,7 @@ Alternativamente, pode adicionar o directório do `sinatra/lib` no
|
|
757
757
|
`LOAD_PATH` do seu aplicativo:
|
758
758
|
|
759
759
|
```ruby
|
760
|
-
$LOAD_PATH.unshift
|
760
|
+
$LOAD_PATH.unshift __dir__ + '/sinatra/lib'
|
761
761
|
require 'rubygems'
|
762
762
|
require 'sinatra'
|
763
763
|
|
data/README.ru.md
CHANGED
@@ -431,7 +431,7 @@ end
|
|
431
431
|
месторасположение при помощи опции `:public_folder`:
|
432
432
|
|
433
433
|
```ruby
|
434
|
-
set :public_folder,
|
434
|
+
set :public_folder, __dir__ + '/static'
|
435
435
|
```
|
436
436
|
|
437
437
|
Учтите, что имя директории со статическими файлами не включено в URL.
|
@@ -3089,9 +3089,9 @@ thin --threaded start
|
|
3089
3089
|
|
3090
3090
|
Следующие версии Ruby официально поддерживаются:
|
3091
3091
|
<dl>
|
3092
|
-
<dt>Ruby 2.
|
3092
|
+
<dt>Ruby 2.3</dt>
|
3093
3093
|
<dd>
|
3094
|
-
Версия 2.
|
3094
|
+
Версия 2.3 полностью поддерживается и рекомендуется. В настоящее время нет
|
3095
3095
|
планов отказаться от официальной поддержки.
|
3096
3096
|
</dd>
|
3097
3097
|
|
data/README.zh.md
CHANGED
@@ -393,7 +393,7 @@ end
|
|
393
393
|
静态文件从 `./public` 目录提供服务。可以通过设置`:public_folder` 选项设定一个不同的位置:
|
394
394
|
|
395
395
|
```ruby
|
396
|
-
set :public_folder,
|
396
|
+
set :public_folder, __dir__ + '/static'
|
397
397
|
```
|
398
398
|
|
399
399
|
请注意 public 目录名并没有包含在 URL 中。文件 `./public/css/style.css` 可以通过
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
2.0
|
1
|
+
2.2.0
|
data/examples/chat.rb
CHANGED
@@ -0,0 +1,20 @@
|
|
1
|
+
require 'rainbows'
|
2
|
+
|
3
|
+
module Rack
|
4
|
+
module Handler
|
5
|
+
class Rainbows
|
6
|
+
def self.run(app, **options)
|
7
|
+
rainbows_options = {
|
8
|
+
listeners: ["#{options[:Host]}:#{options[:Port]}"],
|
9
|
+
worker_processes: 1,
|
10
|
+
timeout: 30,
|
11
|
+
config_file: ::File.expand_path('rainbows.conf', __dir__),
|
12
|
+
}
|
13
|
+
|
14
|
+
::Rainbows::HttpServer.new(app, rainbows_options).start.join
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
register :rainbows, ::Rack::Handler::Rainbows
|
19
|
+
end
|
20
|
+
end
|
data/examples/stream.ru
CHANGED
@@ -2,10 +2,10 @@
|
|
2
2
|
#
|
3
3
|
# run *one* of these:
|
4
4
|
#
|
5
|
-
# rackup -s mongrel stream.ru
|
6
|
-
#
|
7
|
-
#
|
8
|
-
#
|
5
|
+
# rackup -s mongrel stream.ru # gem install mongrel
|
6
|
+
# unicorn stream.ru # gem install unicorn
|
7
|
+
# puma stream.ru # gem install puma
|
8
|
+
# rainbows -c rainbows.conf stream.ru # gem install rainbows eventmachine
|
9
9
|
|
10
10
|
require 'sinatra/base'
|
11
11
|
|