Drop support for Stylus (#1697)
This commit is contained in:
parent
44ce685218
commit
9dede30f5d
1
Gemfile
1
Gemfile
|
@ -54,7 +54,6 @@ if RUBY_ENGINE == "ruby"
|
||||||
gem 'radius'
|
gem 'radius'
|
||||||
gem 'asciidoctor'
|
gem 'asciidoctor'
|
||||||
gem 'liquid'
|
gem 'liquid'
|
||||||
gem 'stylus'
|
|
||||||
gem 'rabl'
|
gem 'rabl'
|
||||||
gem 'builder'
|
gem 'builder'
|
||||||
gem 'erubi'
|
gem 'erubi'
|
||||||
|
|
38
README.de.md
38
README.de.md
|
@ -69,7 +69,6 @@ diesen Server verwenden.
|
||||||
- [Creole Templates](#creole-templates)
|
- [Creole Templates](#creole-templates)
|
||||||
- [MediaWiki Templates](#mediawiki-templates)
|
- [MediaWiki Templates](#mediawiki-templates)
|
||||||
- [CoffeeScript Templates](#coffeescript-templates)
|
- [CoffeeScript Templates](#coffeescript-templates)
|
||||||
- [Stylus Templates](#stylus-templates)
|
|
||||||
- [Yajl Templates](#yajl-templates)
|
- [Yajl Templates](#yajl-templates)
|
||||||
- [WLang Templates](#wlang-templates)
|
- [WLang Templates](#wlang-templates)
|
||||||
+ [Auf Variablen in Templates zugreifen](#auf-variablen-in-templates-zugreifen)
|
+ [Auf Variablen in Templates zugreifen](#auf-variablen-in-templates-zugreifen)
|
||||||
|
@ -1052,43 +1051,6 @@ Layout, indem die `:layout_engine`-Option verwendet wird.
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
#### Stylus Templates
|
|
||||||
|
|
||||||
<table>
|
|
||||||
<tr>
|
|
||||||
<td>Abhängigkeit</td>
|
|
||||||
<td>
|
|
||||||
<a href="https://github.com/forgecrafted/ruby-stylus" title="Ruby Stylus">
|
|
||||||
Stylus
|
|
||||||
</a> und eine Möglichkeit
|
|
||||||
<a href="https://github.com/sstephenson/execjs/blob/master/README.md#readme" title="ExecJS">
|
|
||||||
JavaScript auszuführen
|
|
||||||
</a>.
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td>Dateierweiterung</td>
|
|
||||||
<td><tt>.styl</tt></td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td>Beispiel</td>
|
|
||||||
<td><tt>stylus :index</tt></td>
|
|
||||||
</tr>
|
|
||||||
</table>
|
|
||||||
|
|
||||||
Um Stylus-Templates ausführen zu können, müssen `stylus` und `stylus/tilt`
|
|
||||||
zuerst geladen werden:
|
|
||||||
|
|
||||||
```ruby
|
|
||||||
require 'sinatra'
|
|
||||||
require 'stylus'
|
|
||||||
require 'stylus/tilt'
|
|
||||||
|
|
||||||
get '/' do
|
|
||||||
stylus :example
|
|
||||||
end
|
|
||||||
```
|
|
||||||
|
|
||||||
#### Yajl Templates
|
#### Yajl Templates
|
||||||
|
|
||||||
<table>
|
<table>
|
||||||
|
|
69
README.es.md
69
README.es.md
|
@ -67,7 +67,6 @@ Se recomienda ejecutar `gem install puma`, porque Sinatra lo utilizará si está
|
||||||
* [Plantillas Creole](#plantillas-creole)
|
* [Plantillas Creole](#plantillas-creole)
|
||||||
* [Plantillas MediaWiki](#mediawiki-templates)
|
* [Plantillas MediaWiki](#mediawiki-templates)
|
||||||
* [Plantillas CofeeScript](#plantillas-coffeescript)
|
* [Plantillas CofeeScript](#plantillas-coffeescript)
|
||||||
* [Plantillas Stylus](#plantillas-stylus)
|
|
||||||
* [Plantillas Yajl](#plantillas-yajl)
|
* [Plantillas Yajl](#plantillas-yajl)
|
||||||
* [Plantillas Wlang](#plantillas-wlang)
|
* [Plantillas Wlang](#plantillas-wlang)
|
||||||
* [Accediendo Variables en Plantillas](#accediendo-a-variables-en-plantillas)
|
* [Accediendo Variables en Plantillas](#accediendo-a-variables-en-plantillas)
|
||||||
|
@ -549,7 +548,7 @@ Opciones disponibles:
|
||||||
del motor usado para renderizar la plantilla.
|
del motor usado para renderizar la plantilla.
|
||||||
Ejemplo: <tt>set :rdoc, :layout_engine => :erb</tt>
|
Ejemplo: <tt>set :rdoc, :layout_engine => :erb</tt>
|
||||||
</dd>
|
</dd>
|
||||||
|
|
||||||
<dt>layout_options</dt>
|
<dt>layout_options</dt>
|
||||||
<dd>
|
<dd>
|
||||||
Opciones especiales usadas únicamente para renderizar el layout. Ejemplo:
|
Opciones especiales usadas únicamente para renderizar el layout. Ejemplo:
|
||||||
|
@ -578,7 +577,7 @@ get '/' do
|
||||||
end
|
end
|
||||||
```
|
```
|
||||||
|
|
||||||
Renderiza el string de la plantilla. Opcionalmente puedes especificar
|
Renderiza el string de la plantilla. Opcionalmente puedes especificar
|
||||||
`:path` y `:line` para un backtrace más claro si hay una ruta del sistema
|
`:path` y `:line` para un backtrace más claro si hay una ruta del sistema
|
||||||
de archivos o una línea asociada con ese string
|
de archivos o una línea asociada con ese string
|
||||||
|
|
||||||
|
@ -1048,42 +1047,6 @@ De todas maneras, es posible usar otro motor de renderizado para esa plantilla p
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
#### Plantillas Stylus
|
|
||||||
|
|
||||||
<table>
|
|
||||||
<tr>
|
|
||||||
<td>Dependencias</td>
|
|
||||||
<td>
|
|
||||||
<a href="https://github.com/forgecrafted/ruby-stylus" title="Ruby Stylus">
|
|
||||||
Stylus
|
|
||||||
</a> y un
|
|
||||||
<a href="https://github.com/sstephenson/execjs/blob/master/README.md#readme" title="ExecJS">
|
|
||||||
mecanismo para ejecutar javascript
|
|
||||||
</a>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td>Extensiones de Archivo</td>
|
|
||||||
<td><tt>.styl</tt></td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td>Ejemplo</td>
|
|
||||||
<td><tt>stylus :index</tt></td>
|
|
||||||
</tr>
|
|
||||||
</table>
|
|
||||||
|
|
||||||
Antes de poder usar las plantillas de Stylus, necesitas cargar `stylus` y `stylus/tilt`:
|
|
||||||
|
|
||||||
```ruby
|
|
||||||
require 'sinatra'
|
|
||||||
require 'stylus'
|
|
||||||
require 'stylus/tilt'
|
|
||||||
|
|
||||||
get '/' do
|
|
||||||
stylus :example
|
|
||||||
end
|
|
||||||
```
|
|
||||||
|
|
||||||
#### Plantillas Yajl
|
#### Plantillas Yajl
|
||||||
|
|
||||||
<table>
|
<table>
|
||||||
|
@ -1419,7 +1382,7 @@ end
|
||||||
#### Secreto de Sesión
|
#### Secreto de Sesión
|
||||||
|
|
||||||
Para mejorar la seguridad, los datos de la sesión en la cookie se firman con un secreto usando `HMAC-SHA1`. El secreto de esta sesión debería ser de manera óptima
|
Para mejorar la seguridad, los datos de la sesión en la cookie se firman con un secreto usando `HMAC-SHA1`. El secreto de esta sesión debería ser de manera óptima
|
||||||
un valor aleatorio criptográficamente seguro de una longitud adecuada para
|
un valor aleatorio criptográficamente seguro de una longitud adecuada para
|
||||||
`HMAC-SHA1` que es mayor o igual que 64 bytes (512 bits, 128 hex caracteres).
|
`HMAC-SHA1` que es mayor o igual que 64 bytes (512 bits, 128 hex caracteres).
|
||||||
Se le aconsejará que no use un secreto que sea inferior a 32
|
Se le aconsejará que no use un secreto que sea inferior a 32
|
||||||
bytes de aleatoriedad (256 bits, 64 caracteres hexadecimales).
|
bytes de aleatoriedad (256 bits, 64 caracteres hexadecimales).
|
||||||
|
@ -1428,11 +1391,11 @@ sino que use un generador de números aleatorios para crearlo.
|
||||||
Los humanos somos extremadamente malos generando valores aleatorios
|
Los humanos somos extremadamente malos generando valores aleatorios
|
||||||
|
|
||||||
De forma predeterminada, un secreto de sesión aleatorio seguro de 32 bytes se genera para usted por
|
De forma predeterminada, un secreto de sesión aleatorio seguro de 32 bytes se genera para usted por
|
||||||
Sinatra, pero cambiará con cada reinicio de su aplicación. Si tienes varias
|
Sinatra, pero cambiará con cada reinicio de su aplicación. Si tienes varias
|
||||||
instancias de tu aplicación y dejas que Sinatra genere la clave, cada instancia
|
instancias de tu aplicación y dejas que Sinatra genere la clave, cada instancia
|
||||||
tendría una clave de sesión diferente y probablemente no es lo que quieres.
|
tendría una clave de sesión diferente y probablemente no es lo que quieres.
|
||||||
|
|
||||||
Para una mejor seguridad y usabilidad es
|
Para una mejor seguridad y usabilidad es
|
||||||
[recomendado](https://12factor.net/config) que genere un secreto de sesión
|
[recomendado](https://12factor.net/config) que genere un secreto de sesión
|
||||||
aleatorio seguro y se guarde en las variables de entorno en cada host que ejecuta
|
aleatorio seguro y se guarde en las variables de entorno en cada host que ejecuta
|
||||||
su aplicación para que todas las instancias de su aplicación compartan el mismo
|
su aplicación para que todas las instancias de su aplicación compartan el mismo
|
||||||
|
@ -1869,7 +1832,7 @@ get '/bar' do
|
||||||
end
|
end
|
||||||
```
|
```
|
||||||
|
|
||||||
### Control del Cache
|
### Control del Cache
|
||||||
|
|
||||||
Asignar tus encabezados correctamente es el cimiento para realizar un cacheo
|
Asignar tus encabezados correctamente es el cimiento para realizar un cacheo
|
||||||
HTTP correcto.
|
HTTP correcto.
|
||||||
|
@ -1985,7 +1948,7 @@ Estas opciones son:
|
||||||
<dl>
|
<dl>
|
||||||
<dt>filename</dt>
|
<dt>filename</dt>
|
||||||
<dd>Nombre del archivo devuelto, por defecto es el nombre real del archivo.</dd>
|
<dd>Nombre del archivo devuelto, por defecto es el nombre real del archivo.</dd>
|
||||||
|
|
||||||
<dt>last_modified</dt>
|
<dt>last_modified</dt>
|
||||||
<dd>Valor para el encabezado Last-Modified, por defecto toma el mtime del archivo.</dd>
|
<dd>Valor para el encabezado Last-Modified, por defecto toma el mtime del archivo.</dd>
|
||||||
|
|
||||||
|
@ -2333,13 +2296,13 @@ set :protection, :except => [:path_traversal, :session_hijacking]
|
||||||
formularios put/delete en navegadores que no los
|
formularios put/delete en navegadores que no los
|
||||||
soportan.
|
soportan.
|
||||||
</dd>
|
</dd>
|
||||||
|
|
||||||
<dt>mustermann_opts</dt>
|
<dt>mustermann_opts</dt>
|
||||||
<dd>
|
<dd>
|
||||||
Un hash predeterminado de opciones para pasar a Mustermann.new
|
Un hash predeterminado de opciones para pasar a Mustermann.new
|
||||||
al compilar las rutas.
|
al compilar las rutas.
|
||||||
</dd>
|
</dd>
|
||||||
|
|
||||||
<dt>port</dt>
|
<dt>port</dt>
|
||||||
<dd>
|
<dd>
|
||||||
Puerto en el que escuchará el servidor integrado.
|
Puerto en el que escuchará el servidor integrado.
|
||||||
|
@ -2357,7 +2320,7 @@ set :protection, :except => [:path_traversal, :session_hijacking]
|
||||||
|
|
||||||
<dt>protection</dt>
|
<dt>protection</dt>
|
||||||
<dd>
|
<dd>
|
||||||
Define si se habilitan o no las protecciones de ataques web.
|
Define si se habilitan o no las protecciones de ataques web.
|
||||||
Ver la sección de protección encima.
|
Ver la sección de protección encima.
|
||||||
</dd>
|
</dd>
|
||||||
|
|
||||||
|
@ -2369,7 +2332,7 @@ set :protection, :except => [:path_traversal, :session_hijacking]
|
||||||
está presente, se infiere del valor de la opción
|
está presente, se infiere del valor de la opción
|
||||||
<tt>app_file</tt>.
|
<tt>app_file</tt>.
|
||||||
</dd>
|
</dd>
|
||||||
|
|
||||||
<dt>quiet</dt>
|
<dt>quiet</dt>
|
||||||
<dd>
|
<dd>
|
||||||
Inhabilita los logs generados por los comandos de inicio y detención de Sinatra.
|
Inhabilita los logs generados por los comandos de inicio y detención de Sinatra.
|
||||||
|
@ -2416,7 +2379,7 @@ set :protection, :except => [:path_traversal, :session_hijacking]
|
||||||
integrado. El orden indica su prioridad, por defecto depende
|
integrado. El orden indica su prioridad, por defecto depende
|
||||||
de la implementación de Ruby.
|
de la implementación de Ruby.
|
||||||
</dd>
|
</dd>
|
||||||
|
|
||||||
<dt>server_settings</dt>
|
<dt>server_settings</dt>
|
||||||
<dd>
|
<dd>
|
||||||
Si está utilizando un servidor web WEBrick, presumiblemente para su entorno de desarrollo, puede pasar un hash de opciones a <tt> server_settings </tt>, como <tt> SSLEnable </tt> o <tt> SSLVerifyClient </tt>. Sin embargo, los servidores web como Puma no son compatibles, por lo que puede establecer <tt> server_settings </tt> definiéndolo como un método cuando llame a <tt> configure </tt>.
|
Si está utilizando un servidor web WEBrick, presumiblemente para su entorno de desarrollo, puede pasar un hash de opciones a <tt> server_settings </tt>, como <tt> SSLEnable </tt> o <tt> SSLVerifyClient </tt>. Sin embargo, los servidores web como Puma no son compatibles, por lo que puede establecer <tt> server_settings </tt> definiéndolo como un método cuando llame a <tt> configure </tt>.
|
||||||
|
@ -2428,7 +2391,7 @@ set :protection, :except => [:path_traversal, :session_hijacking]
|
||||||
través de <tt>Rack::Session::Cookie</tt>. Ver la
|
través de <tt>Rack::Session::Cookie</tt>. Ver la
|
||||||
sección 'Usando Sesiones' para más información.
|
sección 'Usando Sesiones' para más información.
|
||||||
</dd>
|
</dd>
|
||||||
|
|
||||||
<dt>session_store</dt>
|
<dt>session_store</dt>
|
||||||
<dd>
|
<dd>
|
||||||
Define el middleware de sesión Rack utilizado. Predeterminado a
|
Define el middleware de sesión Rack utilizado. Predeterminado a
|
||||||
|
@ -2468,7 +2431,7 @@ información.
|
||||||
utilizar un array cuando se asignan múltiples valores:
|
utilizar un array cuando se asignan múltiples valores:
|
||||||
<tt>set :static_cache_control, [:public, :max_age => 300]</tt>.
|
<tt>set :static_cache_control, [:public, :max_age => 300]</tt>.
|
||||||
</dd>
|
</dd>
|
||||||
|
|
||||||
<dt>threaded</dt>
|
<dt>threaded</dt>
|
||||||
<dd>
|
<dd>
|
||||||
Si se establece en <tt> true </tt>, le dirá al servidor que use
|
Si se establece en <tt> true </tt>, le dirá al servidor que use
|
||||||
|
@ -3120,7 +3083,7 @@ Las siguientes versiones de Ruby son soportadas oficialmente:
|
||||||
|
|
||||||
<dt>Rubinius</dt>
|
<dt>Rubinius</dt>
|
||||||
<dd>
|
<dd>
|
||||||
Rubinius es oficialmente compatible (Rubinius> = 2.x). Se recomienda instalar la gema puma
|
Rubinius es oficialmente compatible (Rubinius> = 2.x). Se recomienda instalar la gema puma
|
||||||
<tt>gem install puma</tt>.
|
<tt>gem install puma</tt>.
|
||||||
</dd>
|
</dd>
|
||||||
|
|
||||||
|
@ -3132,7 +3095,7 @@ Las siguientes versiones de Ruby son soportadas oficialmente:
|
||||||
</dd>
|
</dd>
|
||||||
</dl>
|
</dl>
|
||||||
|
|
||||||
Las versiones de Ruby anteriores a 2.2.2 ya no son compatibles con Sinatra 2.0 .
|
Las versiones de Ruby anteriores a 2.2.2 ya no son compatibles con Sinatra 2.0 .
|
||||||
|
|
||||||
Siempre le prestamos atención a las nuevas versiones de Ruby.
|
Siempre le prestamos atención a las nuevas versiones de Ruby.
|
||||||
|
|
||||||
|
|
39
README.fr.md
39
README.fr.md
|
@ -67,7 +67,6 @@ Sinatra utilise le server Thin quand il est disponible.
|
||||||
* [Templates Creole](#templates-creole)
|
* [Templates Creole](#templates-creole)
|
||||||
* [Templates MediaWiki](#templates-mediawiki)
|
* [Templates MediaWiki](#templates-mediawiki)
|
||||||
* [Templates CoffeeScript](#templates-coffeescript)
|
* [Templates CoffeeScript](#templates-coffeescript)
|
||||||
* [Templates Stylus](#templates-stylus)
|
|
||||||
* [Templates Yajl](#templates-yajl)
|
* [Templates Yajl](#templates-yajl)
|
||||||
* [Templates WLang](#templates-wlang)
|
* [Templates WLang](#templates-wlang)
|
||||||
* [Accéder aux variables dans un Template](#accéder-aux-variables-dans-un-template)
|
* [Accéder aux variables dans un Template](#accéder-aux-variables-dans-un-template)
|
||||||
|
@ -1059,44 +1058,6 @@ pour le layout en utilisant l’option `:layout_engine`.
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
#### Templates Stylus
|
|
||||||
|
|
||||||
<table>
|
|
||||||
<tr>
|
|
||||||
<td>Dépendances</td>
|
|
||||||
<td>
|
|
||||||
<a href="https://github.com/forgecrafted/ruby-stylus" title="Ruby Stylus">
|
|
||||||
Stylus
|
|
||||||
</a>
|
|
||||||
et un
|
|
||||||
<a href="https://github.com/sstephenson/execjs/blob/master/README.md#readme" title="ExecJS">
|
|
||||||
moyen d'exécuter javascript
|
|
||||||
</a>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td>Extensions de fichier</td>
|
|
||||||
<td><tt>.styl</tt></td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td>Exemple</td>
|
|
||||||
<td><tt>stylus :index</tt></td>
|
|
||||||
</tr>
|
|
||||||
</table>
|
|
||||||
|
|
||||||
Avant de pouvoir utiliser des templates Stylus, vous devez auparavant charger
|
|
||||||
`stylus` et `stylus/tilt` :
|
|
||||||
|
|
||||||
```ruby
|
|
||||||
require 'sinatra'
|
|
||||||
require 'stylus'
|
|
||||||
require 'stylus/tilt'
|
|
||||||
|
|
||||||
get '/' do
|
|
||||||
stylus :exemple
|
|
||||||
end
|
|
||||||
```
|
|
||||||
|
|
||||||
#### Templates Yajl
|
#### Templates Yajl
|
||||||
|
|
||||||
<table>
|
<table>
|
||||||
|
|
37
README.ja.md
37
README.ja.md
|
@ -64,7 +64,6 @@ PumaがあればSinatraはこれを利用するので、`gem install puma`する
|
||||||
* [Creole テンプレート](#creole-テンプレート)
|
* [Creole テンプレート](#creole-テンプレート)
|
||||||
* [MediaWiki テンプレート](#mediawiki-テンプレート)
|
* [MediaWiki テンプレート](#mediawiki-テンプレート)
|
||||||
* [CoffeeScript テンプレート](#coffeescript-テンプレート)
|
* [CoffeeScript テンプレート](#coffeescript-テンプレート)
|
||||||
* [Stylus テンプレート](#stylus-テンプレート)
|
|
||||||
* [Yajl テンプレート](#yajl-テンプレート)
|
* [Yajl テンプレート](#yajl-テンプレート)
|
||||||
* [WLang テンプレート](#wlang-テンプレート)
|
* [WLang テンプレート](#wlang-テンプレート)
|
||||||
* [テンプレート内での変数へのアクセス](#テンプレート内での変数へのアクセス)
|
* [テンプレート内での変数へのアクセス](#テンプレート内での変数へのアクセス)
|
||||||
|
@ -958,42 +957,6 @@ erb :overview, :locals => { :text => mediawiki(:introduction) }
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
#### Stylus テンプレート
|
|
||||||
|
|
||||||
<table>
|
|
||||||
<tr>
|
|
||||||
<td>依存</td>
|
|
||||||
<td>
|
|
||||||
<a href="https://github.com/forgecrafted/ruby-stylus" title="Ruby Stylus">
|
|
||||||
Stylus
|
|
||||||
</a> および
|
|
||||||
<a href="https://github.com/sstephenson/execjs/blob/master/README.md#readme" title="ExecJS">
|
|
||||||
JavaScriptの起動方法
|
|
||||||
</a>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td>ファイル拡張子</td>
|
|
||||||
<td><tt>.styl</tt></td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td>例</td>
|
|
||||||
<td><tt>stylus :index</tt></td>
|
|
||||||
</tr>
|
|
||||||
</table>
|
|
||||||
|
|
||||||
Stylusテンプレートを使えるようにする前に、まず`stylus`と`stylus/tilt`を読み込む必要があります。
|
|
||||||
|
|
||||||
```ruby
|
|
||||||
require 'sinatra'
|
|
||||||
require 'stylus'
|
|
||||||
require 'stylus/tilt'
|
|
||||||
|
|
||||||
get '/' do
|
|
||||||
stylus :example
|
|
||||||
end
|
|
||||||
```
|
|
||||||
|
|
||||||
#### Yajl テンプレート
|
#### Yajl テンプレート
|
||||||
|
|
||||||
<table>
|
<table>
|
||||||
|
|
38
README.ko.md
38
README.ko.md
|
@ -62,7 +62,6 @@ thin이 설치되어 있을 경우 Sinatra는 thin을 통해 실행합니다.
|
||||||
* [Creole 템플릿](#creole-템플릿)
|
* [Creole 템플릿](#creole-템플릿)
|
||||||
* [MediaWiki 템플릿](#mediawiki-템플릿)
|
* [MediaWiki 템플릿](#mediawiki-템플릿)
|
||||||
* [CoffeeScript 템플릿](#coffeescript-템플릿)
|
* [CoffeeScript 템플릿](#coffeescript-템플릿)
|
||||||
* [Stylus 템플릿](#stylus-템플릿)
|
|
||||||
* [Yajl 템플릿](#yajl-템플릿)
|
* [Yajl 템플릿](#yajl-템플릿)
|
||||||
* [WLang 템플릿](#wlang-템플릿)
|
* [WLang 템플릿](#wlang-템플릿)
|
||||||
* [템플릿에서 변수에 접근하기](#템플릿에서-변수에-접근하기)
|
* [템플릿에서 변수에 접근하기](#템플릿에서-변수에-접근하기)
|
||||||
|
@ -967,43 +966,6 @@ MediaWiki에서 루비를 호출할 수 없기 때문에, MediaWiki으로 작성
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
#### Stylus 템플릿
|
|
||||||
|
|
||||||
<table>
|
|
||||||
<tr>
|
|
||||||
<td>의존성</td>
|
|
||||||
<td>
|
|
||||||
<a href="https://github.com/forgecrafted/ruby-stylus" title="Ruby Stylus">
|
|
||||||
Stylus
|
|
||||||
</a> 와
|
|
||||||
<a href="https://github.com/sstephenson/execjs/blob/master/README.md#readme" title="ExecJS">
|
|
||||||
자바스크립트 실행법
|
|
||||||
</a>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td>파일 확장자</td>
|
|
||||||
<td><tt>.styl</tt></td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td>예제</td>
|
|
||||||
<td><tt>stylus :index</tt></td>
|
|
||||||
</tr>
|
|
||||||
</table>
|
|
||||||
|
|
||||||
Stylus 템플릿을 사용가능하게 하려면, 먼저 `stylus`와 `stylus/tilt`를 로드
|
|
||||||
해야합니다.
|
|
||||||
|
|
||||||
```ruby
|
|
||||||
require 'sinatra'
|
|
||||||
require 'stylus'
|
|
||||||
require 'stylus/tilt'
|
|
||||||
|
|
||||||
get '/' do
|
|
||||||
stylus :example
|
|
||||||
end
|
|
||||||
```
|
|
||||||
|
|
||||||
#### Yajl 템플릿
|
#### Yajl 템플릿
|
||||||
|
|
||||||
<table>
|
<table>
|
||||||
|
|
|
@ -66,7 +66,6 @@ View at: [http://localhost:4567](http://localhost:4567)
|
||||||
* [Creole ടെംപ്ലേറ്റ്സ്](#creole-templates)
|
* [Creole ടെംപ്ലേറ്റ്സ്](#creole-templates)
|
||||||
* [MediaWiki ടെംപ്ലേറ്റ്സ്](#mediawiki-templates)
|
* [MediaWiki ടെംപ്ലേറ്റ്സ്](#mediawiki-templates)
|
||||||
* [CoffeeScript ടെംപ്ലേറ്റ്സ്](#coffeescript-templates)
|
* [CoffeeScript ടെംപ്ലേറ്റ്സ്](#coffeescript-templates)
|
||||||
* [Stylus ടെംപ്ലേറ്റ്സ്](#stylus-templates)
|
|
||||||
* [Yajl ടെംപ്ലേറ്റ്സ്](#yajl-templates)
|
* [Yajl ടെംപ്ലേറ്റ്സ്](#yajl-templates)
|
||||||
* [WLang ടെംപ്ലേറ്റ്സ്](#wlang-templates)
|
* [WLang ടെംപ്ലേറ്റ്സ്](#wlang-templates)
|
||||||
* [വാരിയബിൾസിനെ എടുക്കാൻ സഹായിക്കുന്ന ടെംപ്ലേറ്റ്സ്](#accessing-variables-in-templates)
|
* [വാരിയബിൾസിനെ എടുക്കാൻ സഹായിക്കുന്ന ടെംപ്ലേറ്റ്സ്](#accessing-variables-in-templates)
|
||||||
|
@ -193,7 +192,7 @@ get '/hello/:name' do |n|
|
||||||
"Hello #{n}!"
|
"Hello #{n}!"
|
||||||
end
|
end
|
||||||
```
|
```
|
||||||
റൂട്ട് പാട്ടേഴ്സിൽ പേരുള്ള splat ഉണ്ടാകാറുണ്ട് അതിനെ 'params['splat']' array ഉപയോഗിച്ച ഉപയോഗപ്പെടുത്താവുന്നത് ആണ്
|
റൂട്ട് പാട്ടേഴ്സിൽ പേരുള്ള splat ഉണ്ടാകാറുണ്ട് അതിനെ 'params['splat']' array ഉപയോഗിച്ച ഉപയോഗപ്പെടുത്താവുന്നത് ആണ്
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -293,7 +292,7 @@ get '/', :provides => ['rss', 'atom', 'xml'] do
|
||||||
builder :feed
|
builder :feed
|
||||||
end
|
end
|
||||||
```
|
```
|
||||||
`provides ` ആക്സെപ്റ് ഹെൽഡർസ് നെ അന്വഷിക്കുന്നു
|
`provides ` ആക്സെപ്റ് ഹെൽഡർസ് നെ അന്വഷിക്കുന്നു
|
||||||
|
|
||||||
നിങ്ങളുടെ കണ്ടിഷൻസ് ഇനി എളുപ്പത്തിൽ ഉണ്ടാക്കാൻ സഹായിക്കുന്നു
|
നിങ്ങളുടെ കണ്ടിഷൻസ് ഇനി എളുപ്പത്തിൽ ഉണ്ടാക്കാൻ സഹായിക്കുന്നു
|
||||||
```ruby
|
```ruby
|
||||||
|
@ -1015,43 +1014,6 @@ template than for the layout by passing the `:layout_engine` option.
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
#### Stylus Templates
|
|
||||||
|
|
||||||
<table>
|
|
||||||
<tr>
|
|
||||||
<td>Dependency</td>
|
|
||||||
<td>
|
|
||||||
<a href="https://github.com/forgecrafted/ruby-stylus" title="Ruby Stylus">
|
|
||||||
Stylus
|
|
||||||
</a> and a
|
|
||||||
<a href="https://github.com/sstephenson/execjs" title="ExecJS">
|
|
||||||
way to execute javascript
|
|
||||||
</a>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td>File Extension</td>
|
|
||||||
<td><tt>.styl</tt></td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td>Example</td>
|
|
||||||
<td><tt>stylus :index</tt></td>
|
|
||||||
</tr>
|
|
||||||
</table>
|
|
||||||
|
|
||||||
Before being able to use Stylus templates, you need to load `stylus` and
|
|
||||||
`stylus/tilt` first:
|
|
||||||
|
|
||||||
```ruby
|
|
||||||
require 'sinatra'
|
|
||||||
require 'stylus'
|
|
||||||
require 'stylus/tilt'
|
|
||||||
|
|
||||||
get '/' do
|
|
||||||
stylus :example
|
|
||||||
end
|
|
||||||
```
|
|
||||||
|
|
||||||
#### Yajl Templates
|
#### Yajl Templates
|
||||||
|
|
||||||
<table>
|
<table>
|
||||||
|
|
38
README.md
38
README.md
|
@ -68,7 +68,6 @@ pick up if available.
|
||||||
* [Creole Templates](#creole-templates)
|
* [Creole Templates](#creole-templates)
|
||||||
* [MediaWiki Templates](#mediawiki-templates)
|
* [MediaWiki Templates](#mediawiki-templates)
|
||||||
* [CoffeeScript Templates](#coffeescript-templates)
|
* [CoffeeScript Templates](#coffeescript-templates)
|
||||||
* [Stylus Templates](#stylus-templates)
|
|
||||||
* [Yajl Templates](#yajl-templates)
|
* [Yajl Templates](#yajl-templates)
|
||||||
* [WLang Templates](#wlang-templates)
|
* [WLang Templates](#wlang-templates)
|
||||||
* [Accessing Variables in Templates](#accessing-variables-in-templates)
|
* [Accessing Variables in Templates](#accessing-variables-in-templates)
|
||||||
|
@ -1044,43 +1043,6 @@ template than for the layout by passing the `:layout_engine` option.
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
#### Stylus Templates
|
|
||||||
|
|
||||||
<table>
|
|
||||||
<tr>
|
|
||||||
<td>Dependency</td>
|
|
||||||
<td>
|
|
||||||
<a href="https://github.com/forgecrafted/ruby-stylus" title="Ruby Stylus">
|
|
||||||
Stylus
|
|
||||||
</a> and a
|
|
||||||
<a href="https://github.com/sstephenson/execjs" title="ExecJS">
|
|
||||||
way to execute javascript
|
|
||||||
</a>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td>File Extension</td>
|
|
||||||
<td><tt>.styl</tt></td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td>Example</td>
|
|
||||||
<td><tt>stylus :index</tt></td>
|
|
||||||
</tr>
|
|
||||||
</table>
|
|
||||||
|
|
||||||
Before being able to use Stylus templates, you need to load `stylus` and
|
|
||||||
`stylus/tilt` first:
|
|
||||||
|
|
||||||
```ruby
|
|
||||||
require 'sinatra'
|
|
||||||
require 'stylus'
|
|
||||||
require 'stylus/tilt'
|
|
||||||
|
|
||||||
get '/' do
|
|
||||||
stylus :example
|
|
||||||
end
|
|
||||||
```
|
|
||||||
|
|
||||||
#### Yajl Templates
|
#### Yajl Templates
|
||||||
|
|
||||||
<table>
|
<table>
|
||||||
|
|
|
@ -76,7 +76,6 @@ disponível, o Sinatra irá utilizá-la.
|
||||||
* [Creole Templates](#creole-templates)
|
* [Creole Templates](#creole-templates)
|
||||||
* [MediaWiki Templates](#mediawiki-templates)
|
* [MediaWiki Templates](#mediawiki-templates)
|
||||||
* [CoffeeScript Templates](#coffeescript-templates)
|
* [CoffeeScript Templates](#coffeescript-templates)
|
||||||
* [Stylus Templates](#stylus-templates)
|
|
||||||
* [Yajl Templates](#yajl-templates)
|
* [Yajl Templates](#yajl-templates)
|
||||||
* [WLang Templates](#wlang-templates)
|
* [WLang Templates](#wlang-templates)
|
||||||
* [Acessando Variáveis nos Templates](#acessando-variáveis-nos-templates)
|
* [Acessando Variáveis nos Templates](#acessando-variáveis-nos-templates)
|
||||||
|
@ -1084,43 +1083,6 @@ deve-se passar a `:layout_engine` como opção.
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
#### Stylus Templates
|
|
||||||
|
|
||||||
<table>
|
|
||||||
<tr>
|
|
||||||
<td>Dependência</td>
|
|
||||||
<td>
|
|
||||||
<a href="https://github.com/forgecrafted/ruby-stylus" title="Ruby Stylus">
|
|
||||||
Stylus
|
|
||||||
</a> and a
|
|
||||||
<a href="https://github.com/sstephenson/execjs/blob/master/README.md#readme" title="ExecJS">
|
|
||||||
way to execute javascript
|
|
||||||
</a>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td>Extensão do Arquivo</td>
|
|
||||||
<td><tt>.styl</tt></td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td>Exemplo</td>
|
|
||||||
<td><tt>stylus :index</tt></td>
|
|
||||||
</tr>
|
|
||||||
</table>
|
|
||||||
|
|
||||||
Antes que você possa utilizar o template Stylus primeiro você deve carregar
|
|
||||||
`stylus` e `stylus/tilt`:
|
|
||||||
|
|
||||||
```ruby
|
|
||||||
require 'sinatra'
|
|
||||||
require 'stylus'
|
|
||||||
require 'stylus/tilt'
|
|
||||||
|
|
||||||
get '/' do
|
|
||||||
stylus :exemplo
|
|
||||||
end
|
|
||||||
```
|
|
||||||
|
|
||||||
#### Yajl Templates
|
#### Yajl Templates
|
||||||
|
|
||||||
<table>
|
<table>
|
||||||
|
|
154
README.ru.md
154
README.ru.md
|
@ -70,7 +70,6 @@ ruby myapp.rb
|
||||||
* [Creole шаблоны](#creole-шаблоны)
|
* [Creole шаблоны](#creole-шаблоны)
|
||||||
* [MediaWiki шаблоны](#mediawiki-шаблоны)
|
* [MediaWiki шаблоны](#mediawiki-шаблоны)
|
||||||
* [CoffeeScript шаблоны](#coffeescript-шаблоны)
|
* [CoffeeScript шаблоны](#coffeescript-шаблоны)
|
||||||
* [Stylus шаблоны](#stylus-шаблоны)
|
|
||||||
* [Yajl шаблоны](#yajl-шаблоны)
|
* [Yajl шаблоны](#yajl-шаблоны)
|
||||||
* [WLang шаблоны](#wlang-шаблоны)
|
* [WLang шаблоны](#wlang-шаблоны)
|
||||||
* [Доступ к переменным в шаблонах](#Доступ-к-переменным-в-шаблонах)
|
* [Доступ к переменным в шаблонах](#Доступ-к-переменным-в-шаблонах)
|
||||||
|
@ -261,7 +260,7 @@ end
|
||||||
```
|
```
|
||||||
|
|
||||||
**Имеейте ввиду**: если вы не отключите защиту от обратного пути в директориях
|
**Имеейте ввиду**: если вы не отключите защиту от обратного пути в директориях
|
||||||
(_path traversal_, см. ниже), путь запроса может быть изменён до начала
|
(_path traversal_, см. ниже), путь запроса может быть изменён до начала
|
||||||
поиска подходящего маршрута.
|
поиска подходящего маршрута.
|
||||||
|
|
||||||
Вы можете настроить Mustermann опции, используемые для данного маршрута, путём передачи в `:mustermann_opts` хэш:
|
Вы можете настроить Mustermann опции, используемые для данного маршрута, путём передачи в `:mustermann_opts` хэш:
|
||||||
|
@ -1051,43 +1050,6 @@ erb :overview, :locals => { :text => mediawiki(:introduction) }
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
#### Stylus шаблоны
|
|
||||||
|
|
||||||
<table>
|
|
||||||
<tr>
|
|
||||||
<td>Зависимости</td>
|
|
||||||
<td>
|
|
||||||
<a href="https://github.com/forgecrafted/ruby-stylus" title="Ruby Stylus">
|
|
||||||
Stylus
|
|
||||||
</a> и
|
|
||||||
<a href="https://github.com/sstephenson/execjs" title="ExecJS">
|
|
||||||
способ запускать JavaScript
|
|
||||||
</a>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td>Расширение файла</td>
|
|
||||||
<td><tt>.styl</tt></td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td>Пример</td>
|
|
||||||
<td><tt>stylus :index</tt></td>
|
|
||||||
</tr>
|
|
||||||
</table>
|
|
||||||
|
|
||||||
Перед тем, как использовать шаблоны Stylus, необходимо сперва подключить
|
|
||||||
`stylus` и `stylus/tilt`:
|
|
||||||
|
|
||||||
```ruby
|
|
||||||
require 'sinatra'
|
|
||||||
require 'stylus'
|
|
||||||
require 'stylus/tilt'
|
|
||||||
|
|
||||||
get '/' do
|
|
||||||
stylus :example
|
|
||||||
end
|
|
||||||
```
|
|
||||||
|
|
||||||
#### Yajl шаблоны
|
#### Yajl шаблоны
|
||||||
|
|
||||||
<table>
|
<table>
|
||||||
|
@ -1296,7 +1258,7 @@ end
|
||||||
|
|
||||||
### Использование пользовательской логики для поиска шаблона
|
### Использование пользовательской логики для поиска шаблона
|
||||||
|
|
||||||
Для того, чтобы реализовать собственный механизм поиска шаблона,
|
Для того, чтобы реализовать собственный механизм поиска шаблона,
|
||||||
необходимо написать метод `#find_template`:
|
необходимо написать метод `#find_template`:
|
||||||
|
|
||||||
```ruby
|
```ruby
|
||||||
|
@ -1371,7 +1333,7 @@ end
|
||||||
|
|
||||||
## Методы-помощники
|
## Методы-помощники
|
||||||
|
|
||||||
Используйте высокоуровневый метод `helpers` для того, чтобы определить
|
Используйте высокоуровневый метод `helpers` для того, чтобы определить
|
||||||
методы-помощники, которые могут быть использованы в обработчиках маршрутов
|
методы-помощники, которые могут быть использованы в обработчиках маршрутов
|
||||||
и шаблонах:
|
и шаблонах:
|
||||||
|
|
||||||
|
@ -1424,27 +1386,27 @@ end
|
||||||
|
|
||||||
Для того, чтобы повысить безопасность, данные сессии в файле 'cookie'
|
Для того, чтобы повысить безопасность, данные сессии в файле 'cookie'
|
||||||
подписываются ключом сессии с использованием `HMAC-SHA1`. Этот ключ сессии
|
подписываются ключом сессии с использованием `HMAC-SHA1`. Этот ключ сессии
|
||||||
должен быть оптимальным криптографическим 'secure random' значением соответствующей
|
должен быть оптимальным криптографическим 'secure random' значением соответствующей
|
||||||
длины, которая для `HMAC-SHA1` больше или равна 64 байтам (512 бит, 128
|
длины, которая для `HMAC-SHA1` больше или равна 64 байтам (512 бит, 128
|
||||||
шестнадцатеричных символов). Не рекомендуется использовать ключ, длина
|
шестнадцатеричных символов). Не рекомендуется использовать ключ, длина
|
||||||
которого менее 32 байт (256 бит, 64 шестнадцатеричных символа). Поэтому
|
которого менее 32 байт (256 бит, 64 шестнадцатеричных символа). Поэтому
|
||||||
**очень важно**, чтобы вы не просто составили значение ключа, а использовали
|
**очень важно**, чтобы вы не просто составили значение ключа, а использовали
|
||||||
безопасный генератор случайных чисел для его создания. Люди очень плохо
|
безопасный генератор случайных чисел для его создания. Люди очень плохо
|
||||||
придумывают случайные значения.
|
придумывают случайные значения.
|
||||||
|
|
||||||
По умолчанию, Sinatra создаёт для вас безопасный случайный ключ сессии из
|
По умолчанию, Sinatra создаёт для вас безопасный случайный ключ сессии из
|
||||||
32 байт, однако он будет меняться при каждом перезапуске приложения. Если у
|
32 байт, однако он будет меняться при каждом перезапуске приложения. Если у
|
||||||
вас есть несколько экземпляров вашего приложения, и вы доверили Sinatra
|
вас есть несколько экземпляров вашего приложения, и вы доверили Sinatra
|
||||||
генерацию ключа, то каждый экземпляр будет иметь отличный ключ сессии,
|
генерацию ключа, то каждый экземпляр будет иметь отличный ключ сессии,
|
||||||
что, вероятно, не совсем то, что вам необходимо.
|
что, вероятно, не совсем то, что вам необходимо.
|
||||||
|
|
||||||
Для лучшей безопасности и удобства использования
|
Для лучшей безопасности и удобства использования
|
||||||
[рекомендуется](https://12factor.net/config) генерировать случайный безопасный
|
[рекомендуется](https://12factor.net/config) генерировать случайный безопасный
|
||||||
ключ и хранить его в переменной среды на каждом хосте, на котором запущено
|
ключ и хранить его в переменной среды на каждом хосте, на котором запущено
|
||||||
приложение, чтобы все экземпляры вашего приложения использовали один и тот
|
приложение, чтобы все экземпляры вашего приложения использовали один и тот
|
||||||
же ключ. Вы должны периодически менять значение ключа сессии на новое.
|
же ключ. Вы должны периодически менять значение ключа сессии на новое.
|
||||||
Вот несколько примеров того, как вы можете создать 64-байтный ключ
|
Вот несколько примеров того, как вы можете создать 64-байтный ключ
|
||||||
и установить его:
|
и установить его:
|
||||||
|
|
||||||
**Генерация ключа сессии**
|
**Генерация ключа сессии**
|
||||||
|
|
||||||
|
@ -1456,13 +1418,13 @@ $ ruby -e "require 'securerandom'; puts SecureRandom.hex(64)"
|
||||||
**Генерация ключа сессии (бонусные пункты)**
|
**Генерация ключа сессии (бонусные пункты)**
|
||||||
|
|
||||||
Используйте [гем 'sysrandom'](https://github.com/cryptosphere/sysrandom#readme).
|
Используйте [гем 'sysrandom'](https://github.com/cryptosphere/sysrandom#readme).
|
||||||
Предпочтительнее использовать системные средства RNG для генерации случайных
|
Предпочтительнее использовать системные средства RNG для генерации случайных
|
||||||
значений вместо пространства пользователя `OpenSSL`, который в настоящее время
|
значений вместо пространства пользователя `OpenSSL`, который в настоящее время
|
||||||
по умолчанию используется в MRI Ruby:
|
по умолчанию используется в MRI Ruby:
|
||||||
|
|
||||||
```text
|
```text
|
||||||
$ gem install sysrandom
|
$ gem install sysrandom
|
||||||
Создание собственных расширений. Это может занять некоторое время...
|
Создание собственных расширений. Это может занять некоторое время...
|
||||||
Успешно установлен sysrandom-1.x
|
Успешно установлен sysrandom-1.x
|
||||||
1 gem установлен
|
1 gem установлен
|
||||||
|
|
||||||
|
@ -1472,10 +1434,10 @@ $ ruby -e "require 'sysrandom/securerandom'; puts SecureRandom.hex(64)"
|
||||||
|
|
||||||
**Переменная среды для ключа сессии**
|
**Переменная среды для ключа сессии**
|
||||||
|
|
||||||
Задайте переменной среды `SESSION_SECRET` значение, которое вы
|
Задайте переменной среды `SESSION_SECRET` значение, которое вы
|
||||||
сгенерировали. Данная переменная автоматически будет использована Sinatra.
|
сгенерировали. Данная переменная автоматически будет использована Sinatra.
|
||||||
Сделайте это значение постоянным при перезагрузке вашего
|
Сделайте это значение постоянным при перезагрузке вашего
|
||||||
сервера. Поскольку метод для генерации будет различным в разных системах,
|
сервера. Поскольку метод для генерации будет различным в разных системах,
|
||||||
то код ниже приведён только в качестве примера:
|
то код ниже приведён только в качестве примера:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
|
@ -1488,7 +1450,7 @@ $ ruby -e "require 'sysrandom/securerandom'; puts SecureRandom.hex(64)"
|
||||||
чтобы оно генерировало случайный безопасный ключ тогда, когда переменная
|
чтобы оно генерировало случайный безопасный ключ тогда, когда переменная
|
||||||
среды `SESSION_SECRET` не доступна.
|
среды `SESSION_SECRET` не доступна.
|
||||||
|
|
||||||
В качестве бонусных пунктов здесь тоже используйте
|
В качестве бонусных пунктов здесь тоже используйте
|
||||||
[гем 'sysrandom'gem](https://github.com/cryptosphere/sysrandom):
|
[гем 'sysrandom'gem](https://github.com/cryptosphere/sysrandom):
|
||||||
|
|
||||||
```ruby
|
```ruby
|
||||||
|
@ -1534,10 +1496,10 @@ set :session_store, Rack::Session::Pool
|
||||||
```
|
```
|
||||||
|
|
||||||
Вы также можете **не вызывать** `enable :sessions`, а вместо этого использовать
|
Вы также можете **не вызывать** `enable :sessions`, а вместо этого использовать
|
||||||
необходимую вам Rack прослойку так же, как вы это обычно делаете.
|
необходимую вам Rack прослойку так же, как вы это обычно делаете.
|
||||||
|
|
||||||
Очень важно обратить внимание на то, что когда вы используете этот метод,
|
Очень важно обратить внимание на то, что когда вы используете этот метод,
|
||||||
основной способ защиты сессии **не будет включён по умолчанию**.
|
основной способ защиты сессии **не будет включён по умолчанию**.
|
||||||
|
|
||||||
Вам также потребуется добавить следующие Rack middleware для этого:
|
Вам также потребуется добавить следующие Rack middleware для этого:
|
||||||
|
|
||||||
|
@ -1628,7 +1590,7 @@ end
|
||||||
повысить производительность, перенеся `"bar"` в метод-помощник, используемый и в
|
повысить производительность, перенеся `"bar"` в метод-помощник, используемый и в
|
||||||
`/foo`, и в `/bar`.
|
`/foo`, и в `/bar`.
|
||||||
|
|
||||||
Если вы хотите, чтобы запрос был отправлен в тот же экземпляр приложения,
|
Если вы хотите, чтобы запрос был отправлен в тот же экземпляр приложения,
|
||||||
а не в его копию, используйте `call!` вместо `call`.
|
а не в его копию, используйте `call!` вместо `call`.
|
||||||
|
|
||||||
Если хотите узнать больше о `call`, смотрите спецификацию Rack.
|
Если хотите узнать больше о `call`, смотрите спецификацию Rack.
|
||||||
|
@ -1737,7 +1699,7 @@ post '/:message' do
|
||||||
end
|
end
|
||||||
```
|
```
|
||||||
|
|
||||||
Также клиент может закрыть соединение при попытке записи в сокет. В связи с
|
Также клиент может закрыть соединение при попытке записи в сокет. В связи с
|
||||||
этим рекомендуется выполнить проверку `out.closed?` прежде, чем пытаться произвести запись.
|
этим рекомендуется выполнить проверку `out.closed?` прежде, чем пытаться произвести запись.
|
||||||
|
|
||||||
### Логирование
|
### Логирование
|
||||||
|
@ -1996,8 +1958,8 @@ send_file 'foo.png', :type => :jpg
|
||||||
<dt>status</dt>
|
<dt>status</dt>
|
||||||
<dd>
|
<dd>
|
||||||
Код ответа. Полезно в том случае, когда отсылается статический файл в качестве
|
Код ответа. Полезно в том случае, когда отсылается статический файл в качестве
|
||||||
страницы с сообщением об ошибке. Если поддерживается обработчик Rack, будут использоваться
|
страницы с сообщением об ошибке. Если поддерживается обработчик Rack, будут использоваться
|
||||||
другие средства, кроме потоковой передачи из процесса Ruby. Если вы используете
|
другие средства, кроме потоковой передачи из процесса Ruby. Если вы используете
|
||||||
этот вспомогательный метод, Sinatra автоматически обрабатывает запросы диапазона.
|
этот вспомогательный метод, Sinatra автоматически обрабатывает запросы диапазона.
|
||||||
</dd>
|
</dd>
|
||||||
</dl>
|
</dl>
|
||||||
|
@ -2164,8 +2126,8 @@ end
|
||||||
файл на самом деле, а вызывает заданный блок для всех возможных путей. Дело тут не в
|
файл на самом деле, а вызывает заданный блок для всех возможных путей. Дело тут не в
|
||||||
производительности, а в том, что `render` вызовет `break` как только файл
|
производительности, а в том, что `render` вызовет `break` как только файл
|
||||||
будет найден. Содержимое и местонахождение шаблонов будет закэшировано в том случае,
|
будет найден. Содержимое и местонахождение шаблонов будет закэшировано в том случае,
|
||||||
если приложение запущено не в режиме разработки (`set :environment, :development`).
|
если приложение запущено не в режиме разработки (`set :environment, :development`).
|
||||||
Вы должны помнить об этих нюансах, если пишите по-настоящему "сумасшедший"
|
Вы должны помнить об этих нюансах, если пишите по-настоящему "сумасшедший"
|
||||||
метод.
|
метод.
|
||||||
|
|
||||||
## Конфигурация
|
## Конфигурация
|
||||||
|
@ -2247,7 +2209,7 @@ set :protection, :except => :path_traversal
|
||||||
set :protection, :except => [:path_traversal, :session_hijacking]
|
set :protection, :except => [:path_traversal, :session_hijacking]
|
||||||
```
|
```
|
||||||
|
|
||||||
По умолчанию Sinatra будет устанавливать `session based` защиту только если
|
По умолчанию Sinatra будет устанавливать `session based` защиту только если
|
||||||
включена опция `:sessions`. См. ["Использование сессий""](#Использование-сессий).
|
включена опция `:sessions`. См. ["Использование сессий""](#Использование-сессий).
|
||||||
Иногда вы захотите настроить сессии "вне" приложения Sinatra, например, в
|
Иногда вы захотите настроить сессии "вне" приложения Sinatra, например, в
|
||||||
config.ru или при помощи отдельного экземпляра `Rack::Builder`. В таком случае
|
config.ru или при помощи отдельного экземпляра `Rack::Builder`. В таком случае
|
||||||
|
@ -2291,7 +2253,7 @@ set :protection, :session => true
|
||||||
<dt>bind</dt>
|
<dt>bind</dt>
|
||||||
<dd>
|
<dd>
|
||||||
используемый IP-адрес (по умолчанию: <tt>0.0.0.0</tt> <em>или</em>
|
используемый IP-адрес (по умолчанию: <tt>0.0.0.0</tt> <em>или</em>
|
||||||
<tt>localhost</tt> если опция `environment` настроена на "development").
|
<tt>localhost</tt> если опция `environment` настроена на "development").
|
||||||
Используется только встроенным сервером.
|
Используется только встроенным сервером.
|
||||||
</dd>
|
</dd>
|
||||||
|
|
||||||
|
@ -2328,13 +2290,13 @@ set :protection, :session => true
|
||||||
|
|
||||||
<dt>mustermann_opts</dt>
|
<dt>mustermann_opts</dt>
|
||||||
<dd>
|
<dd>
|
||||||
хэш настроек по умолчанию для перехода к Mustermann.new при компиляции
|
хэш настроек по умолчанию для перехода к Mustermann.new при компиляции
|
||||||
маршрутов маршрутизации.
|
маршрутов маршрутизации.
|
||||||
</dd>
|
</dd>
|
||||||
|
|
||||||
<dt>port</dt>
|
<dt>port</dt>
|
||||||
<dd>
|
<dd>
|
||||||
порт, на котором будет работать сервер.
|
порт, на котором будет работать сервер.
|
||||||
Используется только встроенным сервером.
|
Используется только встроенным сервером.
|
||||||
</dd>
|
</dd>
|
||||||
|
|
||||||
|
@ -2361,7 +2323,7 @@ set :protection, :session => true
|
||||||
|
|
||||||
<dt>quiet</dt>
|
<dt>quiet</dt>
|
||||||
<dd>
|
<dd>
|
||||||
отключает журналы, созданные командами запуска и остановки Sinatra.
|
отключает журналы, созданные командами запуска и остановки Sinatra.
|
||||||
<tt>false</tt> по умолчанию.
|
<tt>false</tt> по умолчанию.
|
||||||
</dd>
|
</dd>
|
||||||
|
|
||||||
|
@ -2395,7 +2357,7 @@ set :protection, :session => true
|
||||||
<dt>server</dt>
|
<dt>server</dt>
|
||||||
<dd>
|
<dd>
|
||||||
сервер или список серверов, которые следует использовать в качестве
|
сервер или список серверов, которые следует использовать в качестве
|
||||||
встроенного сервера. Порядок задаёт приоритет, по умолчанию зависит
|
встроенного сервера. Порядок задаёт приоритет, по умолчанию зависит
|
||||||
от реализации Ruby.
|
от реализации Ruby.
|
||||||
</dd>
|
</dd>
|
||||||
|
|
||||||
|
@ -2417,7 +2379,7 @@ set :protection, :session => true
|
||||||
|
|
||||||
<dt>session_store</dt>
|
<dt>session_store</dt>
|
||||||
<dd>
|
<dd>
|
||||||
используемая Rack "прослойка" для сессии. По умолчанию <tt>Rack::Session::Cookie</tt>.
|
используемая Rack "прослойка" для сессии. По умолчанию <tt>Rack::Session::Cookie</tt>.
|
||||||
Смотрите раздел "Использование сессий" выше.
|
Смотрите раздел "Использование сессий" выше.
|
||||||
</dd>
|
</dd>
|
||||||
|
|
||||||
|
@ -2427,7 +2389,7 @@ set :protection, :session => true
|
||||||
включено только в окружении <tt>"development"</tt>.
|
включено только в окружении <tt>"development"</tt>.
|
||||||
</dd>
|
</dd>
|
||||||
<dd>
|
<dd>
|
||||||
может также быть установлено в <tt>:after_handler</tt> для запуска специфичной
|
может также быть установлено в <tt>:after_handler</tt> для запуска специфичной
|
||||||
для приложения обработки ошибок, перед показом трассировки стека в браузере.
|
для приложения обработки ошибок, перед показом трассировки стека в браузере.
|
||||||
</dd>
|
</dd>
|
||||||
|
|
||||||
|
@ -2479,7 +2441,7 @@ set :protection, :session => true
|
||||||
`not_found` и `error`, чтобы вы могли увидеть стек вызовов. В окружениях
|
`not_found` и `error`, чтобы вы могли увидеть стек вызовов. В окружениях
|
||||||
`"production"` и `"test"` шаблоны по умолчанию кэшируются.
|
`"production"` и `"test"` шаблоны по умолчанию кэшируются.
|
||||||
|
|
||||||
Для запуска приложения в определённом окружении установите переменную
|
Для запуска приложения в определённом окружении установите переменную
|
||||||
окружения `APP_ENV`:
|
окружения `APP_ENV`:
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
|
@ -2520,7 +2482,7 @@ end
|
||||||
|
|
||||||
Обработчик ошибок `error` будет вызван тогда, когда исключение выброшено из блока
|
Обработчик ошибок `error` будет вызван тогда, когда исключение выброшено из блока
|
||||||
маршрута либо из фильтра. Тем не менее, обратите внимание на то, что в режиме разработки
|
маршрута либо из фильтра. Тем не менее, обратите внимание на то, что в режиме разработки
|
||||||
он будет запускаться только в том случае, если вы установите опцию "show exceptions"
|
он будет запускаться только в том случае, если вы установите опцию "show exceptions"
|
||||||
на `: after_handler`:
|
на `: after_handler`:
|
||||||
|
|
||||||
```ruby
|
```ruby
|
||||||
|
@ -2578,8 +2540,8 @@ end
|
||||||
```
|
```
|
||||||
|
|
||||||
Sinatra устанавливает специальные обработчики `not_found` и `error`, когда
|
Sinatra устанавливает специальные обработчики `not_found` и `error`, когда
|
||||||
приложение запущено в режиме разработки (окружение `:development`) чтобы
|
приложение запущено в режиме разработки (окружение `:development`) чтобы
|
||||||
отображать информативные трассировки стека и дополнительную информацию об отладке
|
отображать информативные трассировки стека и дополнительную информацию об отладке
|
||||||
в вашем браузере.
|
в вашем браузере.
|
||||||
|
|
||||||
## Rack "прослойки"
|
## Rack "прослойки"
|
||||||
|
@ -2662,17 +2624,17 @@ class MyAppTest < Minitest::Test
|
||||||
end
|
end
|
||||||
```
|
```
|
||||||
|
|
||||||
Примечание: если вы используете Sinatra в модульном стиле, замените
|
Примечание: если вы используете Sinatra в модульном стиле, замените
|
||||||
`Sinatra::Application` в примере выше на имя класса вашего приложения.
|
`Sinatra::Application` в примере выше на имя класса вашего приложения.
|
||||||
|
|
||||||
## Sinatra::Base — "прослойки", библиотеки и модульные приложения
|
## Sinatra::Base — "прослойки", библиотеки и модульные приложения
|
||||||
|
|
||||||
Описание вашего приложения на верхнем уровне хорошо работает для микроприложений,
|
Описание вашего приложения на верхнем уровне хорошо работает для микроприложений,
|
||||||
но имеет значительные недостатки при создании многоразовых компонентов, таких как
|
но имеет значительные недостатки при создании многоразовых компонентов, таких как
|
||||||
Rack "прослойка", Rails metal, простые библиотеки с серверным компонентом или
|
Rack "прослойка", Rails metal, простые библиотеки с серверным компонентом или
|
||||||
даже расширения Sinatra. Верхний уровень предполагает конфигурацию стиля
|
даже расширения Sinatra. Верхний уровень предполагает конфигурацию стиля
|
||||||
микроприложений (например, одиночный файл приложения, `./public` и `./views`,
|
микроприложений (например, одиночный файл приложения, `./public` и `./views`,
|
||||||
каталоги, логирование, страницу подробных сведений об исключениях и т.д.).
|
каталоги, логирование, страницу подробных сведений об исключениях и т.д.).
|
||||||
И тут на помощь приходит `Sinatra::Base`:
|
И тут на помощь приходит `Sinatra::Base`:
|
||||||
|
|
||||||
```ruby
|
```ruby
|
||||||
|
@ -2699,11 +2661,11 @@ end
|
||||||
`Sinatra::Base`.
|
`Sinatra::Base`.
|
||||||
|
|
||||||
`Sinatra::Base` — это чистый лист. Большинство опций, включая встроенный
|
`Sinatra::Base` — это чистый лист. Большинство опций, включая встроенный
|
||||||
сервер, по умолчанию отключены. Смотрите
|
сервер, по умолчанию отключены. Смотрите
|
||||||
[Опции и конфигурация](http://www.sinatrarb.com/configuration.html)
|
[Опции и конфигурация](http://www.sinatrarb.com/configuration.html)
|
||||||
для детальной информации об опциях и их поведении. Если вы хотите, чтобы
|
для детальной информации об опциях и их поведении. Если вы хотите, чтобы
|
||||||
поведение было более похоже на то, когда вы определяете своё приложение
|
поведение было более похоже на то, когда вы определяете своё приложение
|
||||||
на верхнем уровне (также известно как классический стиль), вы можете
|
на верхнем уровне (также известно как классический стиль), вы можете
|
||||||
унаследоваться от `Sinatra::Application`:
|
унаследоваться от `Sinatra::Application`:
|
||||||
|
|
||||||
```ruby
|
```ruby
|
||||||
|
@ -3091,7 +3053,7 @@ thin --threaded start
|
||||||
<dl>
|
<dl>
|
||||||
<dt>Ruby 2.3</dt>
|
<dt>Ruby 2.3</dt>
|
||||||
<dd>
|
<dd>
|
||||||
Версия 2.3 полностью поддерживается и рекомендуется. В настоящее время нет
|
Версия 2.3 полностью поддерживается и рекомендуется. В настоящее время нет
|
||||||
планов отказаться от официальной поддержки.
|
планов отказаться от официальной поддержки.
|
||||||
</dd>
|
</dd>
|
||||||
|
|
||||||
|
@ -3103,7 +3065,7 @@ thin --threaded start
|
||||||
|
|
||||||
<dt>JRuby</dt>
|
<dt>JRuby</dt>
|
||||||
<dd>
|
<dd>
|
||||||
Официально поддерживается последний стабильный релиз JRuby. Не
|
Официально поддерживается последний стабильный релиз JRuby. Не
|
||||||
рекомендуется использовать расширений на C в JRuby. Рекомендуется
|
рекомендуется использовать расширений на C в JRuby. Рекомендуется
|
||||||
выполнить <tt>gem install trinidad</tt>.
|
выполнить <tt>gem install trinidad</tt>.
|
||||||
</dd>
|
</dd>
|
||||||
|
@ -3125,8 +3087,8 @@ thin --threaded start
|
||||||
работает на этой версии, а на поддерживаемой работает — это не наша проблема,
|
работает на этой версии, а на поддерживаемой работает — это не наша проблема,
|
||||||
а их.
|
а их.
|
||||||
|
|
||||||
Мы также запускаем наши CI-тесты на ruby-head (будущие версии MRI), но мы не
|
Мы также запускаем наши CI-тесты на ruby-head (будущие версии MRI), но мы не
|
||||||
можем ничего гарантировать, так как ведётся постоянная разработка.
|
можем ничего гарантировать, так как ведётся постоянная разработка.
|
||||||
Предполагается, что предстоящие релизы 2.x будут полностью поддерживаться.
|
Предполагается, что предстоящие релизы 2.x будут полностью поддерживаться.
|
||||||
|
|
||||||
Sinatra должна работать на любой операционной системе, в которой есть одна из
|
Sinatra должна работать на любой операционной системе, в которой есть одна из
|
||||||
|
|
41
README.zh.md
41
README.zh.md
|
@ -61,7 +61,6 @@ ruby myapp.rb
|
||||||
* [Creole 模板](#creole-模板)
|
* [Creole 模板](#creole-模板)
|
||||||
* [MediaWiki 模板](#mediawiki-模板)
|
* [MediaWiki 模板](#mediawiki-模板)
|
||||||
* [CoffeeScript 模板](#coffeescript-模板)
|
* [CoffeeScript 模板](#coffeescript-模板)
|
||||||
* [Stylus 模板](#stylus-模板)
|
|
||||||
* [Yajl 模板](#yajl-模板)
|
* [Yajl 模板](#yajl-模板)
|
||||||
* [WLang 模板](#wlang-模板)
|
* [WLang 模板](#wlang-模板)
|
||||||
* [在模板中访问变量](#在模板中访问变量)
|
* [在模板中访问变量](#在模板中访问变量)
|
||||||
|
@ -221,7 +220,7 @@ end
|
||||||
|
|
||||||
路由范式可以包含可选参数:
|
路由范式可以包含可选参数:
|
||||||
|
|
||||||
```ruby
|
```ruby
|
||||||
get '/posts/:format?' do
|
get '/posts/:format?' do
|
||||||
# 匹配 "GET /posts/" 和任意扩展 "GET /posts/json"、"GET /posts/xml" 等
|
# 匹配 "GET /posts/" 和任意扩展 "GET /posts/json"、"GET /posts/xml" 等
|
||||||
end
|
end
|
||||||
|
@ -966,42 +965,6 @@ erb :overview, :locals => { :text => mediawiki(:introduction) }
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
#### Stylus 模板
|
|
||||||
|
|
||||||
<table>
|
|
||||||
<tr>
|
|
||||||
<td>依赖项</td>
|
|
||||||
<td>
|
|
||||||
<a href="https://github.com/forgecrafted/ruby-stylus" title="Ruby Stylus">
|
|
||||||
Stylus
|
|
||||||
</a> 以及一种
|
|
||||||
<a href="https://github.com/sstephenson/execjs/blob/master/README.md#readme" title="ExecJS">
|
|
||||||
执行 JavaScript 的方式
|
|
||||||
</a>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td>文件扩展名</td>
|
|
||||||
<td><tt>.styl</tt></td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td>例子</td>
|
|
||||||
<td><tt>stylus :index</tt></td>
|
|
||||||
</tr>
|
|
||||||
</table>
|
|
||||||
|
|
||||||
在使用 Stylus 模板之前,你需要先加载 `stylus` 和 `stylus/tilt`:
|
|
||||||
|
|
||||||
```ruby
|
|
||||||
require 'sinatra'
|
|
||||||
require 'stylus'
|
|
||||||
require 'stylus/tilt'
|
|
||||||
|
|
||||||
get '/' do
|
|
||||||
stylus :example
|
|
||||||
end
|
|
||||||
```
|
|
||||||
|
|
||||||
#### Yajl 模板
|
#### Yajl 模板
|
||||||
|
|
||||||
<table>
|
<table>
|
||||||
|
@ -2823,7 +2786,7 @@ thin --threaded start
|
||||||
以下 Ruby 实现不受 Sinatra 官方支持,但可以运行 Sinatra:
|
以下 Ruby 实现不受 Sinatra 官方支持,但可以运行 Sinatra:
|
||||||
|
|
||||||
* 老版本 JRuby 和 Rubinius
|
* 老版本 JRuby 和 Rubinius
|
||||||
* Ruby 企业版
|
* Ruby 企业版
|
||||||
* MacRuby、Maglev、IronRuby
|
* MacRuby、Maglev、IronRuby
|
||||||
* Ruby 1.9.0 和 1.9.1 (不推荐使用)
|
* Ruby 1.9.0 和 1.9.1 (不推荐使用)
|
||||||
|
|
||||||
|
|
|
@ -729,11 +729,6 @@ module Sinatra
|
||||||
render :less, template, options, locals
|
render :less, template, options, locals
|
||||||
end
|
end
|
||||||
|
|
||||||
def stylus(template, options = {}, locals = {})
|
|
||||||
options.merge! :layout => false, :default_content_type => :css
|
|
||||||
render :styl, template, options, locals
|
|
||||||
end
|
|
||||||
|
|
||||||
def builder(template = nil, options = {}, locals = {}, &block)
|
def builder(template = nil, options = {}, locals = {}, &block)
|
||||||
options[:default_content_type] = :xml
|
options[:default_content_type] = :xml
|
||||||
render_ruby(:builder, template, options, locals, &block)
|
render_ruby(:builder, template, options, locals, &block)
|
||||||
|
|
|
@ -227,7 +227,7 @@ module Sinatra
|
||||||
ALLOWED_ENGINES = [
|
ALLOWED_ENGINES = [
|
||||||
:erb, :erubi, :erubis, :haml, :hamlit, :builder, :nokogiri, :sass, :scss,
|
:erb, :erubi, :erubis, :haml, :hamlit, :builder, :nokogiri, :sass, :scss,
|
||||||
:less, :liquid, :markdown, :textile, :rdoc, :asciidoc, :radius, :markaby,
|
:less, :liquid, :markdown, :textile, :rdoc, :asciidoc, :radius, :markaby,
|
||||||
:rabl, :slim, :creole, :mediawiki, :coffee, :stylus, :yajl, :wlang
|
:rabl, :slim, :creole, :mediawiki, :coffee, :yajl, :wlang
|
||||||
]
|
]
|
||||||
|
|
||||||
def self.prefixed(*names)
|
def self.prefixed(*names)
|
||||||
|
|
|
@ -1,90 +0,0 @@
|
||||||
require File.expand_path('../helper', __FILE__)
|
|
||||||
|
|
||||||
begin
|
|
||||||
require 'stylus'
|
|
||||||
require 'stylus/tilt'
|
|
||||||
|
|
||||||
begin
|
|
||||||
Stylus.compile '1'
|
|
||||||
rescue RuntimeError
|
|
||||||
raise LoadError, 'unable to find Stylus compiler'
|
|
||||||
end
|
|
||||||
|
|
||||||
class StylusTest < Minitest::Test
|
|
||||||
def stylus_app(options = {}, &block)
|
|
||||||
mock_app do
|
|
||||||
set :views, __dir__ + '/views'
|
|
||||||
set(options)
|
|
||||||
get('/', &block)
|
|
||||||
end
|
|
||||||
get '/'
|
|
||||||
end
|
|
||||||
|
|
||||||
it 'renders inline Stylus strings' do
|
|
||||||
stylus_app { stylus "a\n margin auto\n" }
|
|
||||||
assert ok?
|
|
||||||
assert body.include?("a {\n margin: auto;\n}\n")
|
|
||||||
end
|
|
||||||
|
|
||||||
it 'defaults content type to css' do
|
|
||||||
stylus_app { stylus :hello }
|
|
||||||
assert ok?
|
|
||||||
assert_equal "text/css;charset=utf-8", response['Content-Type']
|
|
||||||
end
|
|
||||||
|
|
||||||
it 'defaults allows setting content type per route' do
|
|
||||||
stylus_app do
|
|
||||||
content_type :html
|
|
||||||
stylus :hello
|
|
||||||
end
|
|
||||||
assert ok?
|
|
||||||
assert_equal "text/html;charset=utf-8", response['Content-Type']
|
|
||||||
end
|
|
||||||
|
|
||||||
it 'defaults allows setting content type globally' do
|
|
||||||
stylus_app(:styl => { :content_type => 'html' }) do
|
|
||||||
stylus :hello
|
|
||||||
end
|
|
||||||
assert ok?
|
|
||||||
assert_equal "text/html;charset=utf-8", response['Content-Type']
|
|
||||||
end
|
|
||||||
|
|
||||||
it 'renders .styl files in views path' do
|
|
||||||
stylus_app { stylus :hello }
|
|
||||||
assert ok?
|
|
||||||
assert_include body, "a {\n margin: auto;\n}\n"
|
|
||||||
end
|
|
||||||
|
|
||||||
it 'ignores the layout option' do
|
|
||||||
stylus_app { stylus :hello, :layout => :layout2 }
|
|
||||||
assert ok?
|
|
||||||
assert_include body, "a {\n margin: auto;\n}\n"
|
|
||||||
end
|
|
||||||
|
|
||||||
it "raises error if template not found" do
|
|
||||||
mock_app {
|
|
||||||
get('/') { stylus :no_such_template }
|
|
||||||
}
|
|
||||||
assert_raises(Errno::ENOENT) { get('/') }
|
|
||||||
end
|
|
||||||
|
|
||||||
it "passes stylus options to the stylus engine" do
|
|
||||||
stylus_app { stylus :hello, :no_wrap => true }
|
|
||||||
assert ok?
|
|
||||||
assert_body "a {\n margin: auto;\n}\n"
|
|
||||||
end
|
|
||||||
|
|
||||||
it "passes default stylus options to the stylus engine" do
|
|
||||||
mock_app do
|
|
||||||
set :stylus, :no_wrap => true # default stylus style is :nested
|
|
||||||
get('/') { stylus :hello }
|
|
||||||
end
|
|
||||||
get '/'
|
|
||||||
assert ok?
|
|
||||||
assert_body "a {\n margin: auto;\n}\n"
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
rescue LoadError
|
|
||||||
warn "#{$!}: skipping stylus tests"
|
|
||||||
end
|
|
Loading…
Reference in New Issue