Markdown To Application
mdotapp es otra herramienta más para la programación literaria, pero con un objetivo practico: hacer ejecutable los post de este sitio, la diferencia fundamental con otras herramientas es que fácilmente podemos crear una aplicación de software es decir múltiples archivos con código ejecutable.
Uso
se permiten los siguientes atributos en el bloque:
@mdtoapp
marcar el bloque para ser procesado pormdtoapp
file:<archivo>
escribir contenido en el archivo indicado, se puede indicar una ruta de directorios.@execute
el bloque se debe ejecutarexecutable:<command>
indicar un comando diferente ash
para ejecutar el bloque@silence
no imprimir salida de la ejecución del bloque@tdd
el bloque se debe ejecutar en modo TDD@artifact
el bloque se ejecutar en modo ARTIFACT
la ejecución de los bloques es en el orden declarados en el documento.
Ejemplos
ejecutar un script
```sh @mdtoapp file:date.sh @execute date ```
se puede crear una jerarquía de archivos
```sh @mdtoapp file:demo/demo.sh echo 'hola' ```
```sh @mdtoapp file:run.sh @execute bash demo/demo.sh ```
para agrupar diferentes bloques en un mismo archivo usar el mismo nombre de archivo
```sh @mdtoapp file:demo.sh NAME=mdtoapp ```
```sh @mdtoapp file:demo.sh @execute echo $NAME ```
crear un archivo de python y ejecutar las pruebas
```python @mdtoapp file:test.py @execute executable:python3 import unittest class TestStringMethods(unittest.TestCase): def test_upper(self): self.assertEqual('foo'.upper(), 'FOO') def test_isupper(self): self.assertTrue('FOO'.isupper()) self.assertFalse('Foo'.isupper()) def test_split(self): s = 'hello world' self.assertEqual(s.split(), ['hello', 'world']) # check that s.split fails when the separator is not a string with self.assertRaises(TypeError): s.split(2) if __name__ == '__main__': unittest.main() ```
ruby mdtoapp.rb <mi archivo markdown a ejecutar>
los post de este sitio pueden ser ejecutados usando mdtoapp.rb, ejemplo
ruby mdtoapp.rb 'https://chiselapp.com/user/bit4bit/repository/bit4bit_website/raw?ci=tip&filename=content/post%2fmdtoapp.md'
si solo el interes es generar los archivos puedes usar
TO=/tmp/out ARTIFACT=1 ruby mdtoapp.rb 'https://chiselapp.com/user/bit4bit/repository/bit4bit_website/raw?ci=tip&filename=content/post%2fmdtoapp.md'