Cantando con sinatra

Bienvenido a la Pista 1 de "Cantando con Sinatra". En esta miniserie echaremos un vistazo a Sinatra; Un DSL pequeño, pero increíblemente poderoso para crear rápidamente aplicaciones web de Ruby. En esta parte, comenzaremos con Sinatra jugando con algunas rutas, aprendiendo cómo acceder a los parámetros de URL y cómo POST datos entre páginas..

Si no has trabajado con Ruby antes, deberías revisar la sesión de Ruby for Newbies, donde Andrew te guiará en el proceso de instalación de Ruby en tu sistema y aprenderá los conceptos básicos del idioma..

Lo primero que tenemos que hacer es instalar el RubyGem Sinatra. Ingrese lo siguiente en la Terminal:

 gema instalar sinatra

También instale la gema 'shotgun', que usaremos más adelante:

 gema instalar escopeta

Dependiendo de cómo haya configurado RubyGems en su sistema, es posible que tenga que prefijar instalación de gemas comandos con sudo.


Los muy básicos

Abra su editor de texto y cree un nuevo archivo llamado basics.rb. Justo en la parte superior, necesitamos requerir RubyGems y la gema Sinatra:

 requieren 'rubygems' requieren 'sinatra'

Nota: Si está ejecutando Ruby 1.9 (que debería ser;)), puede soltar el requieren 'rubygems' línea como Ruby carga automáticamente RubyGems de todos modos.

Empecemos por crear el clásico "Hello World". Agregue lo siguiente a su basics.rb archivo de solicitud:

 get '/' do "Hello, World!" fin

Esta es una 'Ruta'. Aquí, le estamos diciendo a Sinatra que si la URL del inicio o la raíz '/' se solicita, usando el método GET HTTP normal, para mostrar "¡Hola, Mundo!"

Ahora, en el terminal, vamos a iniciar el servidor escribiendo ruby basics.rb. Nos dicen que Sinatra ha "subido al escenario" en el puerto 4567, y si vamos a http: // localhost: 4567 / En un navegador, vemos "¡Hola, mundo!".

Así que vamos a probar otra página:

 get '/ about' do 'Un poco sobre mí'. fin

Cada vez que realice un cambio en su aplicación Sinatra, deberá reiniciar el servidor..

Esto significa que si el '/acerca de' Se solicita la URL (usando el método GET HTTP), "Un poco sobre mí". mostrará.

Cada vez que realice un cambio en su aplicación Sinatra, deberá reiniciar el servidor. Por lo tanto, para evitar la molestia de detener e iniciar constantemente el servidor durante el desarrollo, usaremos la gema Shotgun que instalamos anteriormente..

Detenga el servidor actual de Sinatra con Ctrl-C. Ahora podemos correr basics de escopeta.rb y Shotgun reiniciará automáticamente el servidor cada vez que actualizamos la página. Esto es útil cuando estamos haciendo mucho trabajo de desarrollo, pero a medida que se reinicia toda la aplicación, puede ser lento.

Como la escopeta está escuchando en un puerto diferente, vamos al puerto 9393 y vamos a http: // localhost: 9393 / acerca de en tu navegador Deberías ver la frase que ponemos.


Acceder a los parámetros de URL

También puede acceder a los parámetros desde la URL. Agregue lo siguiente a su basics.rb expediente:

 get '/ hello /: name' do params [: name] end

En este ejemplo, tenemos una ruta donde nada después '/Hola/' será contenido en un params matriz con la clave :nombre. los params array contiene todas las variables GET y POST. Si viene de un fondo PHP, esto es similar al $ _REQUEST matriz global.

En el navegador, vaya a, por ejemplo,, http: // localhost: 9393 / hello / dan y debería ver el nombre mostrado de nuevo ("dan").

Podrías incorporar el :nombre en una cadena envolviéndolo PS . Intenta reemplazar el params [: nombre] linea con:

 "Hola, # params [: name]".

Como era de esperar, podemos usar todos los métodos normales de Ruby en la variable, como .upcase, .marcha atrás etc.

 "Hola, hay # params [: name] .upcase".

Puede configurar la ruta para que acepte múltiples variables de cadena de consulta de la siguiente manera:

 get '/ hello /: name /: city' do "Hey there # params [: name] from # params [: city]." fin

Además de las variables normales en una URL, Sinatra le permite incluir cadenas de consulta de comodines, conocidas como "splat", usando un asterisco como:

 get '/ more / *' do params [: splat] end

Cualquier cosa incluida en la URL después de /Más/ será accesible a través de la : splat clave en el params formación.


Ver archivos y POST

Ahora hagamos algo un poco más interesante. Vamos a crear un formulario para recuperar datos del usuario, luego hacer algo con él. También usaremos un "archivo de vista", que nos permite dividir el marcado para una vista en un archivo separado. Agregue la siguiente ruta a su basics.rb archivo de aplicación:

 get '/ form' do erb: form end

Esta ruta cargará el form.erb ERB (Embedded Ruby) de un archivo puntos de vista/ directorio. Los archivos ERB suelen ser archivos HTML normales que le permiten incluir código Ruby en su interior Etiquetas, que se analizarán antes de enviarse al navegador, de la misma manera que se incluye el código PHP o ASP en una página web..

Así que crea un puntos de vista/ directorio en la misma carpeta que la basics.rb expediente. Y dentro puntos de vista/, crear el archivo llamado form.erb Con el siguiente contenido dentro:

 hola desde la vista

Apunta tu navegador a http: // localhost: 9393 / form y debería ver el mensaje que configuramos en el archivo de vista.

Ahora que sabemos que todo está funcionando, cambie el contenido de ese archivo a:

 

Actualiza la página y deberás ver el formulario:

Sin embargo, ingrese un mensaje en el cuadro de texto y haga clic en el botón Enviar, y verá la página de error de Sinatra que nos informa que no existe una ruta para esta URL..

Quizás se esté preguntando por qué es esto, ya que el formulario se envía a /formar, La misma URL en la que se encuentra el formulario, por lo que no debería haber ningún problema. Bueno, la diferencia es que estamos recuperando esta página mediante el método POST HTTP, y como puede ver en la página de errores que Sinatra nos presenta, Sinatra requiere una ruta diferente para cada método HTTP.

Así que agregue la siguiente ruta a la aplicación Sinatra:

 publicar '/ form' do "Has dicho '# params [: message]'" final

Esta ruta es para el método POST, no GET. Además, todas las variables POST están disponibles en el mismo params matriz como variables GET, por lo que podemos recuperar el mensaje enviado con el formulario. Pruébalo!


Podrías trabajar totalmente para MI5 ahora!

Entonces, ¿qué sigue? Creemos una forma de "cifrar" un mensaje que enviemos para que solo pueda ser leído por nuestro destinatario. Agrega la siguiente ruta a la aplicación Sinatra:

 get '/ secret' do erb: final secreto

Probablemente ya te hayas familiarizado con esto. Esta ruta cargará el archivo de vista ERB en vistas / secreto.erb. Crea ese archivo de vista con lo siguiente:

 

Super Secret MI5 Message Encryptor!

Y crea la ruta para el método POST:

 post '/ secret' do params [: secret] .reverse end

De acuerdo, ahora tenemos un cifrador de mensajes que utiliza un método especial "inverso" para hacer que el mensaje parezca ilegible, necesitamos una forma de descifrar el mensaje:

 get '/ decrypt /: secret' do params [: secret] .reverse end

¡Ahí tienes! Un encriptador de mensajes súper secreto y altamente seguro, lo suficientemente bueno para la agencia de inteligencia de cualquier país.

Nota legal: Cuando decimos "altamente seguro" y "cifrado", en realidad estamos invirtiendo las letras. Lo siento.


Cuatro horas?

Una última cosa que vamos a tocar es 404 páginas de error. Ahora mismo, si va a una URL para la que no hay una ruta (por ejemplo,. / danisthebest), verá el elegante mensaje de error de Sinatra. En una aplicación real nos gustaría mostrar nuestro propio error. Para hacer esto, simplemente use el extraviado ruta, como tal:

 not_found do status 404 'not found' end

Aquí estamos usando la de Sinatra. estado método para configurar el código de estado HTTP de la página en 404 (puede usar este mismo método para configurar cualquier código de estado, como 201 cuando se crea algo, o 403 cuando no se pudo iniciar sesión).

Usted podría refactorizar aún más el extraviado ruta utilizando Sinatra detener método:

 not_found do halt 404, 'page not found' end

Conclusión

¡Así que has realizado tu primer dueto con Sinatra! Esperemos que pueda ver lo fácil que hace este DSL al crear aplicaciones web..

En la siguiente pista, crearemos una aplicación simple de "tareas pendientes" conectada a una base de datos SQLite. También echaremos un vistazo a los esquivos. PONER y ELIMINAR HTTP métodos de los que nadie ha oído hablar.

Nota: Puede navegar por los archivos de proyecto finales para este tutorial en GitHub.