Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. CMS

Construyendo un CMS: rubyPress

by
Read Time:14 minsLanguages:

Spanish (Español) translation by Elías Nicolás (you can also view the original English article)

Después de crear una estructura básica del sistema de gestión de contenido (CMS) y el servidor real utilizando Go y Node.js, está listo para probar su mano en otro lenguaje.

Esta vez, estoy usando el lenguaje Ruby para crear el servidor. He descubierto que al crear el mismo programa en varios lenguajes, comienzas a obtener nuevas ideas sobre mejores formas de implementar el programa. También ve más formas de agregar funcionalidad al programa. Empecemos.

Configurar y cargar las bibliotecas

Para programar en Ruby, deberá tener instalada la última versión en su sistema. Muchos sistemas operativos vienen preinstalados con Ruby en la actualidad (Linux y OS X), pero generalmente tienen una versión anterior. Este tutorial asume que tienes Ruby versión 2.4.

La forma más fácil de actualizar a la última versión de ruby es usar RVM. Para instalar RVM en Linux o Mac OS X, escriba lo siguiente en una terminal:

Esto creará una conexión segura para descargar e instalar RVM. Esto instala la última versión estable de Ruby también. Deberás volver a cargar tu caparazón para finalizar la instalación.

Para Windows, puede descargar el instalador de Windows Ruby. Actualmente, este paquete corresponde a Ruby 2.2.2, que está bien para ejecutar las bibliotecas y los scripts en este tutorial.

Una vez que Ruby está instalado correctamente, ahora puede instalar las bibliotecas. Ruby, al igual que Go y Node, tiene un administrador de paquetes para instalar bibliotecas de terceros. En la terminal, escriba lo siguiente:

Esto instala las bibliotecas Sinatra, Ruby Handlebars, Kramdown y Slim. Sinatra es un marco de aplicacion. Ruby Handlebars implementa el motor de plantillas Handlebars en Ruby. Kramdown es un convertidor Markdown to HTML. Slim es una biblioteca similar a Jade, pero no incluye las definiciones macro de Jade. Por lo tanto, las macros utilizadas en los índices de publicaciones de Noticias y Blog ahora son Jade normales.

Creando el archivo rubyPress.rb

En el directorio superior, crea el archivo rubyPress.rb y agrega el siguiente código. Voy a comentar acerca de cada sección a medida que se agrega al archivo.

Lo primero que debe hacer es cargar las bibliotecas. A diferencia de Node.js, estos no se cargan en una variable. Las bibliotecas de Ruby agregan sus funciones al alcance del programa.

La biblioteca Handlebars se inicializa con las diferentes funciones auxiliares definidas. Las funciones auxiliares definidas son date, cdate, y save.

La función helper date toma la fecha y hora actual, y la formatea de acuerdo con la cadena de formato que se pasa al helper. cdate es similar excepto para pasar la fecha primero. save Helper le permite especificar un name y un valu. Crea un nuevo ayudante con el name y devuelve el value. Esto le permite crear variables que se especifican una vez y afectan a muchas ubicaciones. Esta función también toma la versión Go, que espera una cadena con el name, '|' como separador y value.

La siguiente parte del código es para cargar los elementos almacenables en caché del sitio web. Esto es todo en los estilos y el diseño de su tema, y los elementos en el subdirectorio parts. Una variable global, $parts, se carga primero desde el archivo server.json. Esa información se utiliza para cargar los elementos adecuados para el diseño y el tema especificado. El motor de plantillas de manillar utiliza esta información para completar las plantillas.

La siguiente sección contiene las definiciones para todas las rutas. Sinatra es un servidor completo que cumple con REST. Pero para este CMS, solo usaré el verbo get. Cada ruta toma los elementos de la ruta para pasar a las funciones para producir la página correcta. En Sinatra, un nombre precedido por dos puntos especifica una sección de la ruta para pasar al controlador de ruta. Estos artículos están en una tabla hash params.

La función page obtiene el nombre de una página de la ruta y pasa el diseño en la variable $parts junto con la ruta completa al archivo de página necesario para la función processPage. La función processPage toma esta información y crea la página adecuada, que luego devuelve. En Ruby, la salida de la última función es el valor de retorno para la función.

La función post es como la función page, excepto que funciona para todas las páginas de tipo de publicación. Esta función espera el type de publicación, la categoría de publicación y la post misma. Estos crearán la dirección para que se muestre la página correcta.

La función figurePage usa la función processPage para leer el contenido de la página del sistema de archivos. Esta función recibe la ruta completa al archivo sin la extensión. FigurePage luego prueba un archivo con el nombre dado con la extensión html para leer un archivo HTML. La segunda opción es para una extensión md para un archivo Markdown.

Por último, comprueba si hay una extensión amber para un archivo de Jade. Recuerde: Amber es el nombre de la biblioteca para procesar los archivos de sintaxis de Jade en Go. Lo mantuve igual para inter-funcionalidad. Un archivo HTML simplemente se devuelve, mientras que todos los archivos Markdown y Jade se convierten a HTML antes de volver.

Si no se encuentra un archivo, el usuario recibirá la página 404. De esta manera, su página "página no encontrada" se parece a cualquier otra página excepto por los contenidos.

La función processPage realiza todas las expansiones de plantilla en los datos de página. Comienza llamando a la función figurePage para obtener los contenidos de la página. A continuación, procesa el diseño que se le pasó con Handlebars para expandir la plantilla.

Luego la función processShortCode encontrará y procesará todos los códigos cortos en la página. Los resultados se pasan a Handlebars por segunda vez para procesar las macros dejadas por los shortcodes. El usuario recibe los resultados finales.

La función processShortCodes toma el texto dado, encuentra cada shortcode y ejecuta el shortcode especificado con los argumentos y el contenido del shortcode. Utilizo la rutina shortcode para procesar los contenidos de códigos cortos también.

Un shortcode es una etiqueta similar a HTML que usa -[ y ]- para delimitar la etiqueta de apertura y -[/ y ]- la etiqueta de cierre. La etiqueta de apertura también contiene los parámetros para el código corto. Por lo tanto, un shortcode de ejemplo sería:

Este shortcode define el shortcode de box sin ningún parámetro con los contenidos de <p>This is inside a box.</p>. El código abreviado box ajusta los contenidos en el HTML apropiado para producir un cuadro alrededor del texto con el texto centrado en el box. Si luego desea cambiar la forma en que se representa el box, solo debe cambiar la definición del código abreviado. Esto ahorra mucho trabajo.

Lo último en el archivo es la tabla de hash $shortcodes que contiene las rutinas shortcode. Estos son códigos cortos simples, pero puede crear otros códigos cortos para que sean lo más complejos que desee.

Todos los shortcodes tienen que aceptar dos parámetros: args y contents. Estas cadenas contienen los parámetros del shortcode y los contenidos que rodean a los códigos cortos. Como los códigos cortos están dentro de una tabla hash, utilicé una función lambda para definirlos. Una función lambda es una función sin nombre. La única forma de ejecutar estas funciones es desde la matriz hash.

Ejecutando el Servidor

Una vez que haya creado el archivo rubyPress.rb con los contenidos anteriores, puede ejecutar el servidor con:

Como el marco de Sinatra funciona con la estructura Ruby on Rails Rack, puede usar Pow para ejecutar el servidor. Pow configurará los archivos host de su sistema para ejecutar su servidor localmente de la misma manera que lo haría desde un sitio alojado. Puede instalar Pow with Powder usando los siguientes comandos en la línea de comando:

Powder es una rutina de línea de comandos para administrar sitios Pow en tu computadora. Para que Pow vea su sitio, debe crear un enlace suave al directorio de su proyecto en el directorio ~/.pow Si el servidor está en el directorio /Users/test/Documents/rubyPress, ejecutará los siguientes comandos:

El ln -s crea un soft link (enlace suave) al directorio especificado primero, con el nombre especificado en segundo lugar. Pow luego configurará un dominio en su sistema con el nombre del enlace suave. En el ejemplo anterior, ir al sitio web http://rubyPress.dev en el navegador cargará la página desde el servidor.

Para iniciar el servidor, escriba lo siguiente después de crear el enlace suave:

1inicio en polvoPara volver a cargar el servidor después de hacer algunos cambios de código, escriba lo siguiente:

rubyPress Main PagerubyPress Main PagerubyPress Main Page
RubyPress Página principal

Ir al sitio web en el navegador dará como resultado la imagen de arriba. Pow establecerá el sitio en http://rubyPress.dev. Independientemente del método que utilice para iniciar el sitio, verá la misma página resultante.

Conclusión

Bueno, lo has hecho. Otro CMS, pero esta vez en Ruby. Esta versión es la versión más corta de todos los CMS creados en esta serie. Experimente con el código y vea cómo puede ampliar este marco básico.

Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.