sinatra 2.0.8.1 → 2.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of sinatra might be problematic. Click here for more details.
- checksums.yaml +4 -4
 - data/CHANGELOG.md +101 -0
 - 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 +14 -0
 - 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 
     | 
    
         |