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 por mdtoapp
  • file:<archivo> escribir contenido en el archivo indicado, se puede indicar una ruta de directorios.
  • @execute el bloque se debe ejecutar
  • executable:<command> indicar un comando diferente a sh 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'