asker-tool 2.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (91) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE +674 -0
  3. data/README.md +53 -0
  4. data/bin/asker +4 -0
  5. data/docs/changelog/v2.1.md +99 -0
  6. data/docs/commands.md +15 -0
  7. data/docs/contributions.md +18 -0
  8. data/docs/history.md +40 -0
  9. data/docs/idea.md +44 -0
  10. data/docs/inputs/README.md +39 -0
  11. data/docs/inputs/code.md +69 -0
  12. data/docs/inputs/concepts.md +142 -0
  13. data/docs/inputs/jedi.md +68 -0
  14. data/docs/inputs/tables.md +112 -0
  15. data/docs/inputs/templates.md +87 -0
  16. data/docs/install/README.md +38 -0
  17. data/docs/install/manual.md +26 -0
  18. data/docs/install/scripts.md +26 -0
  19. data/docs/revise/asker-file.md +41 -0
  20. data/docs/revise/buenas-practicas/01-convocatoria.md +30 -0
  21. data/docs/revise/buenas-practicas/02-formulario.md +35 -0
  22. data/docs/revise/buenas-practicas/03-descripcion.md +63 -0
  23. data/docs/revise/buenas-practicas/04-resultados.md +17 -0
  24. data/docs/revise/buenas-practicas/05-reproducir.md +10 -0
  25. data/docs/revise/ejemplos/01/README.md +27 -0
  26. data/docs/revise/ejemplos/02/README.md +31 -0
  27. data/docs/revise/ejemplos/03/README.md +31 -0
  28. data/docs/revise/ejemplos/04/README.md +37 -0
  29. data/docs/revise/ejemplos/05/README.md +25 -0
  30. data/docs/revise/ejemplos/06/README.md +43 -0
  31. data/docs/revise/ejemplos/README.md +11 -0
  32. data/docs/revise/projects.md +74 -0
  33. data/lib/asker.rb +103 -0
  34. data/lib/asker/ai/ai.rb +70 -0
  35. data/lib/asker/ai/ai_calculate.rb +55 -0
  36. data/lib/asker/ai/concept_ai.rb +49 -0
  37. data/lib/asker/ai/question.rb +58 -0
  38. data/lib/asker/ai/stages/base_stage.rb +16 -0
  39. data/lib/asker/ai/stages/main.rb +8 -0
  40. data/lib/asker/ai/stages/stage_b.rb +87 -0
  41. data/lib/asker/ai/stages/stage_d.rb +160 -0
  42. data/lib/asker/ai/stages/stage_f.rb +156 -0
  43. data/lib/asker/ai/stages/stage_i.rb +140 -0
  44. data/lib/asker/ai/stages/stage_s.rb +52 -0
  45. data/lib/asker/ai/stages/stage_t.rb +170 -0
  46. data/lib/asker/application.rb +30 -0
  47. data/lib/asker/checker.rb +356 -0
  48. data/lib/asker/cli.rb +85 -0
  49. data/lib/asker/code/ai/base_code_ai.rb +48 -0
  50. data/lib/asker/code/ai/code_ai_factory.rb +26 -0
  51. data/lib/asker/code/ai/javascript_code_ai.rb +167 -0
  52. data/lib/asker/code/ai/python_code_ai.rb +167 -0
  53. data/lib/asker/code/ai/ruby_code_ai.rb +169 -0
  54. data/lib/asker/code/ai/sql_code_ai.rb +69 -0
  55. data/lib/asker/code/code.rb +53 -0
  56. data/lib/asker/data/column.rb +62 -0
  57. data/lib/asker/data/concept.rb +183 -0
  58. data/lib/asker/data/data_field.rb +87 -0
  59. data/lib/asker/data/row.rb +93 -0
  60. data/lib/asker/data/table.rb +96 -0
  61. data/lib/asker/data/template.rb +65 -0
  62. data/lib/asker/data/world.rb +53 -0
  63. data/lib/asker/exporter/code_gift_exporter.rb +35 -0
  64. data/lib/asker/exporter/code_screen_exporter.rb +45 -0
  65. data/lib/asker/exporter/concept_ai_gift_exporter.rb +33 -0
  66. data/lib/asker/exporter/concept_ai_screen_exporter.rb +115 -0
  67. data/lib/asker/exporter/concept_ai_yaml_exporter.rb +33 -0
  68. data/lib/asker/exporter/concept_doc_exporter.rb +21 -0
  69. data/lib/asker/exporter/concept_screen_exporter.rb +25 -0
  70. data/lib/asker/exporter/main.rb +9 -0
  71. data/lib/asker/files/config.ini +40 -0
  72. data/lib/asker/formatter/code_string_formatter.rb +16 -0
  73. data/lib/asker/formatter/concept_doc_formatter.rb +37 -0
  74. data/lib/asker/formatter/concept_string_formatter.rb +66 -0
  75. data/lib/asker/formatter/question_gift_formatter.rb +65 -0
  76. data/lib/asker/formatter/question_hash_formatter.rb +40 -0
  77. data/lib/asker/formatter/question_moodlexml_formatter.rb +71 -0
  78. data/lib/asker/formatter/rb2haml_formatter.rb +26 -0
  79. data/lib/asker/lang/lang.rb +42 -0
  80. data/lib/asker/lang/lang_factory.rb +19 -0
  81. data/lib/asker/lang/text_actions.rb +150 -0
  82. data/lib/asker/loader/code_loader.rb +53 -0
  83. data/lib/asker/loader/content_loader.rb +101 -0
  84. data/lib/asker/loader/directory_loader.rb +58 -0
  85. data/lib/asker/loader/file_loader.rb +33 -0
  86. data/lib/asker/loader/image_url_loader.rb +61 -0
  87. data/lib/asker/loader/input_loader.rb +24 -0
  88. data/lib/asker/loader/project_loader.rb +71 -0
  89. data/lib/asker/logger.rb +21 -0
  90. data/lib/asker/project.rb +170 -0
  91. metadata +261 -0
@@ -0,0 +1,63 @@
1
+
2
+
3
+ # Descripción de la práctica
4
+
5
+ **darts-of-teacher** es un programa informático de licencia Open Source,
6
+ que ayuda al profesor a crear una gran cantidad de preguntas
7
+ de forma sencilla, a partir de una mapa conceptual.
8
+
9
+ Los pasos son:
10
+ 1. El profesor crea un fichero con el mapa conceptual que quiere trabajar.
11
+ 2. Ejecutamos el programa *darts*.
12
+ 3. La aplicación lee el fichero de entrada y crea un fichero de salida con las preguntas del tema o unidad didáctica.
13
+
14
+ ---
15
+
16
+ # El problema de corregir
17
+
18
+ Como profesor, una de las tareas más aburridas es corregir el mismo ejercicio
19
+ repetido a cada alumno del grupo, todos los años igual. Los cuestionarios
20
+ tipo test son actividades para los que ya existen aplicaciones que los corrigen
21
+ de forma automática. Por ejemplo, tenemos los cuestionarios de la plataforma
22
+ de e-learning Moodle.
23
+
24
+ En estos casos, el profesor dispone de tiempo para emplearlo en el análisis de
25
+ los resultados obtenidos. Y para aplicar dicho conocimiento en la mejora del
26
+ trabajo, intentado nuevas formas de hacer las cosas, crear nuevas actividades
27
+ o modificar las existentes o depurar el contenido de los temas, para
28
+ encontrar una manera de mejorar el proceso de enseñanza-aprendizaje.
29
+
30
+ ---
31
+
32
+ # El problema de crear preguntas
33
+
34
+ El gran problema con los cuestionarios tipo test es que sólo son útiles para
35
+ evaluar características medibles o cuantificables. De modo que podemos
36
+ estar limitados si queremos evaluar aspectos más abstractos o generales.
37
+ Pero podemos enfocar este problema desde otro punto de vista. Veamos.
38
+
39
+ Si tengo un problema abierto y abstracto, su solución tendrá un conjunto de
40
+ pasos o hítos que pueden ser medibles. De modo que podemos transformar
41
+ un problema abierto en un conjunto de muchos microproblemas cerrados.
42
+ Y ahí es donde vamos a concentrar nuestra atención para medir esas
43
+ características cuantificables.
44
+
45
+ Además, si "bombardeamos" al estudiante con una gran cantidad de preguntas
46
+ diferentes sobre el mismo concepto, probablemente podremos estar cerca de
47
+ conocer/medir el grado de asimilación por parte del estudiante de dichos
48
+ conceptos.
49
+
50
+ El problema que teníamos de dedicar tiempo a corregir lo hemos eliminado
51
+ pero ahora tenemos el problema de dedicar tiempo a crear las preguntas.
52
+
53
+ ---
54
+
55
+ # La solución
56
+
57
+ Para resolver el problema de crear las preguntas tenemos **darts-of-teacher**.
58
+ Este programa multiplataforma de licencia libre se encarga de crear
59
+ cientos de preguntas por nosotros a partir de un mapa conceptual de la unidad
60
+ o del tema que queramos trabajar.
61
+
62
+ Podemos descargar la aplicación del siguiente URL:
63
+ https://github.com/dvarrui/darts-of-teacher
@@ -0,0 +1,17 @@
1
+
2
+ # Resultados
3
+
4
+ ## Para el profesor
5
+
6
+ Con la herramienta **darts-of-teacher** el profesor consigue reducir drásticamente
7
+ el tiempo necesario para crear bancos de preguntas de los cuestionarios.
8
+
9
+ Si manualmente se puede tardar 1 mes en hacer 500 preguntas, con
10
+ **darts-of-teacher** tardamos 30 minutos.
11
+
12
+ El profesor está más feliz porque no pierde tanto tiempo.
13
+
14
+ ## Para los alumnos
15
+
16
+ Los alumnos están contentos de que algunas (no todas) de las actividades
17
+ sean cuestionarios puesto que de esta forma consiguen un feedback inmediato.
@@ -0,0 +1,10 @@
1
+
2
+ # Para reproducir la práctica docente
3
+
4
+ 1. Ir a la web del proyecto: https://github.com/dvarrui/darts-of-teacher
5
+ 2. Leer la documentación para instalar el programa.
6
+ 3. Aprender a usar la herramienta:
7
+ * Leer la documentación.
8
+ * Consultar los ejemplos para saber cómo empezar.
9
+ * Ver los vídeos de YouTube y/o
10
+ * Consultar con <dvarrui@gmail.com>.
@@ -0,0 +1,27 @@
1
+
2
+ # Ejemplo 01
3
+
4
+ Vamos crear un concepto sobre los personajes de StarWars.
5
+
6
+ ## Input
7
+
8
+ Creamos el fichero [`starwars.xml`](./starwars.xml),
9
+ con el concepto `obiwan` con una definición.
10
+
11
+ > Entendemos por `definición` una descripción textual que identifica de
12
+ forma inequívoca al concepto al que se refiere.
13
+
14
+ ## Ejecución
15
+
16
+ Para ejecutar *darts* usando como entrada el fichero las definiciones del concepto,
17
+ hacemos:
18
+
19
+ `./darts file docs/es/ejemplos/01/starwars.xml`,
20
+
21
+ Vemos que aparece en pantalla la siguiente [información](./starwars.xml-log.txt).
22
+
23
+ ## Output
24
+
25
+ Dentro del directorio `output`, se han creado varios ficheros de salida.
26
+ Entre ellos, el fichero [starwars-gift.txt](./starwars-gift.txt) con las preguntas
27
+ en formato Gift, preparadas para cargarse en un cuestionario como los de Moodle.
@@ -0,0 +1,31 @@
1
+
2
+ # Ejemplo 02
3
+
4
+ En el ejemplo anterior usamos un fichero en formato XML, en este ejemplo vamos
5
+ a usar el mismo contenido pero usando formato HAML.
6
+
7
+ HAML produce un XML equivalente. La diferencia está en que no hay etiquetas
8
+ de cierre, las etiquetas comenzan por % y para crear anidamiento se usan 2 espacios.
9
+
10
+ ## Input
11
+
12
+ Vamos ahora el fichero fichero del ejercicio anterior [`starwars.haml`](./starwars.haml)
13
+ pero en formato HAML, con el concepto `obiwan` con una definición.
14
+
15
+ > Entendemos por `definición` una descripción textual que identifica de
16
+ forma inequívoca al concepto al que se refiere.
17
+
18
+ ## Ejecución
19
+
20
+ Para ejecutar *darts* usando como entrada el fichero las definiciones del concepto,
21
+ hacemos:
22
+
23
+ `./darts file docs/es/ejemplos/02/starwars.haml`,
24
+
25
+ Vemos que aparece en pantalla la siguiente [información](./starwars-log.txt).
26
+
27
+ ## Output
28
+
29
+ Dentro del directorio `output`, se han creado varios ficheros de salida.
30
+ Entre ellos, el fichero [starwars-gift.txt](./starwars-gift.txt) con las preguntas
31
+ en formato Gift, preparadas para cargarse en un cuestionario como los de Moodle.
@@ -0,0 +1,31 @@
1
+
2
+ # Ejemplo 03
3
+
4
+ Vamos a ampliar las definiciones del concepto `obiwan`.
5
+
6
+ ## Input
7
+
8
+ Hemos modificado el fichero [`starwars.haml`](./starwars.haml),
9
+ ampliando las definiciones del concepto `obiwan`.
10
+
11
+ Además hemos incluido
12
+ una definición de tipo `image_url`. Esto es, un URL a una imagen, la cual
13
+ identifica de forma inequívoca el conceto al cual se refiere.
14
+
15
+ > Por tanto, podemos tener definiciones de texto y URL a una imagen.
16
+
17
+ ## Ejecución
18
+
19
+ Para ejecutar *darts* usando como entrada el fichero con los conceptos, hacemos:
20
+
21
+ `./darts file docs/es/ejemplos/03/starwars.haml`
22
+
23
+ Vemos que aparece en pantalla la siguiente [información](./starwars-log.txt).
24
+
25
+ ## Output
26
+
27
+ Se ha generado este [fichero](./starwars-gift.txt) con las preguntas en
28
+ format Gift, preparadas para cargarse en Moodle.
29
+
30
+ > Podemos comprobar como al aumentar las definiciones aumenta significativamente
31
+ el número de preguntas que se generan.
@@ -0,0 +1,37 @@
1
+
2
+ # Ejemplo 04
3
+
4
+ Vamos a incluir más conceptos que tengan que ver con personajes de starwars
5
+ dentro del mismo mapa.
6
+
7
+ ## Input
8
+
9
+ Consultar el fichero [`starwars.haml`](./starwars.haml) de entrada,
10
+ con los nuevos conceptos.
11
+
12
+ Hemos incluido en cada concepto una etiqueta con el nombre "tags". tags es una
13
+ lista de términos que ayuda a definir el concepto. Es como una nube de palabras.
14
+ Esta lista (tags) se usa para evaluar cuańto de cerca está la definición de un
15
+ concepto con respecto a otro semánticamente. Bueno, es una aproximación.
16
+
17
+ Esta valor de distancia semántica entre conceptos ayuda a formar preguntas
18
+ más difíciles para el alumno, proponiéndole varias alternativas, no al azar, sino
19
+ aquellas que tengan una "semántica" más parecida.
20
+
21
+ Cuantos más conceptos tenga el mapa, más complejas serán las preguntas y más
22
+ difícil responder al alumno.
23
+
24
+ ## Ejecución
25
+
26
+ Para ejecutar *darts* usando como entrada el fichero con los conceptos, hacemos:
27
+
28
+ `./darts file docs/es/ejemplos/04/starwars.haml`
29
+
30
+ Vemos que aparece en pantalla la siguiente [información](./starwars-log.txt).
31
+
32
+ ## Output
33
+
34
+ Se ha generado este [fichero](./starwars-gift.txt) con las preguntas en
35
+ format Gift, preparadas para cargarse en Moodle.
36
+
37
+ Podemos comprobar como al incluir más conceptos aumentan las preguntas.
@@ -0,0 +1,25 @@
1
+
2
+ # Ejemplo 05
3
+
4
+ Vamos a ampliar aún más el mapa conceptual añadiendo definiciones a todos
5
+ los conceptos del mapa.
6
+
7
+ ## Input
8
+
9
+ Hemos modificado el fichero [`starwars.haml`](./starwars.haml),
10
+ añadiendo definiciones al resto de conceptos del mapa.
11
+
12
+ ## Ejecución
13
+
14
+ Para ejecutar *darts* usando como entrada el fichero con los conceptos, hacemos:
15
+
16
+ `./darts file docs/es/ejemplos/05/starwars.haml`
17
+
18
+ Vemos que aparece en pantalla la siguiente [información](./starwars-log.txt).
19
+
20
+ ## Output
21
+
22
+ Se ha generado este [fichero](./starwars-gift.txt) con las preguntas en
23
+ format Gift, preparadas para cargarse en Moodle.
24
+
25
+ Al incluir más conceptos aumenta el número de preguntas que se generan.
@@ -0,0 +1,43 @@
1
+
2
+ # Ejemplo 06
3
+
4
+ Vamos a ampliar aún más el concepto `obiwan`, pero ahora vamos a incluir
5
+ nueva información en forma de "tablas".
6
+
7
+ ## Input
8
+
9
+ Hemos modificado el fichero [`starwars.haml`](./starwars.haml),
10
+ ampliando la información del concepto `obiwan` con "tablas". Éstas sirven
11
+ para incluir nueva información que acompaña al concepto pero
12
+ que no puede ser "definición" porque no identifica al concepto
13
+ (No es un valor único de dicho concepto).
14
+
15
+ > Usamos **definiciones** para representar información que sólo posee dicho concepto.
16
+ Es informacion única para él.
17
+ > Usamos las **tablas** para representar información asociada al concepto pero
18
+ no de forma única. Estos datos se pueden repetir en otros conceptos del mapa conceptual.
19
+
20
+ Por ejemplo, vamos a añadir "tabla" con información de "atributo,valor".
21
+ Esto es un conjunto de atributos del personaje "obiwan" junto con el valor de
22
+ cada uno.
23
+
24
+ Las "tablas" pueden tener tienen uno o dos campos. Cada campo tiene que tener
25
+ un nombre.
26
+
27
+ > En el futuro se podrán hacer tablas con más de 2 campos. Por ahora, no.
28
+
29
+ ## Ejecución
30
+
31
+ Para ejecutar *darts* usando como entrada el fichero con los conceptos, hacemos:
32
+
33
+ `./darts file docs/es/ejemplos/06/starwars.haml`
34
+
35
+ Vemos que aparece en pantalla la siguiente [información](./starwars-log.txt).
36
+
37
+ ## Output
38
+
39
+ Se ha generado este [fichero](./starwars-gift.txt) con las preguntas en
40
+ format Gift, preparadas para cargarse en Moodle.
41
+
42
+ > Podemos comprobar como al incluir las tablas sigue aumentando
43
+ el número de preguntas que se generan.
@@ -0,0 +1,11 @@
1
+
2
+ # Ejemplos
3
+
4
+ |Ejemplo | Descripción |
5
+ |-------- |------------ |
6
+ |[ejemplo 01](01/README.md) | Crear un concepto con una definición |
7
+ |[ejemplo 02](02/README.md) | Cambiar XML por HAML |
8
+ |[ejemplo 03](03/README.md) | Añadimos más definiciones y una imagen al concepto |
9
+ |[ejemplo 04](04/README.md) | Incluimos más conceptos dentro del mismo mapa pero sin definirlos |
10
+ |[ejemplo 05](05/README.md) | Añadimos definiciones a todos los conceptos del mapa |
11
+ |[ejemplo 06](06/README.md) | Usamos tablas para añadir más información a un concepto |
@@ -0,0 +1,74 @@
1
+
2
+ *Extra configuration params*
3
+ ===========================
4
+
5
+ =begin
6
+ lConfig={
7
+ #category => :none,
8
+ #formula_weights => [1,1,1],
9
+ #outputdir => 'output',
10
+ #logname => 'default.log',
11
+ #verbose => true,
12
+ #:show_mode => :default
13
+ :outputname => 'asir1-idp1314-gift.txt',
14
+ :lesson_file => 'asir1-idp1314-lesson.txt',
15
+ :lesson_separator => ' |',
16
+ :inputdirs => 'input/idp',
17
+ :process_file => 'idp-u1.xml'
18
+ }
19
+ =end
20
+
21
+
22
+ Los parámetros más importantes son:
23
+ * **:inputdirs**: Una lista de todos los directorios de entrada separados
24
+ por comas. Por defecto será *input*. Se aconseja hacer subdirectorios
25
+ dentro de input para organizar los ficheros XML, e incluir los subdirectorios
26
+ dentro de este parámetro.
27
+ * **:process_file**: Como los directorios de entrada pueden contener un número
28
+ elevado de ficheros XML (Cosa además muy recomendable), este parámetro
29
+ indica el nombre del fichero XML que se desea procesar en este momento.
30
+
31
+ El resto no es obligatorio especificarlos, y de podrían dejar los valores por defecto.
32
+
33
+ Ejemplo de script con más parámetros:
34
+
35
+ require_relative 'sys/interviewer'
36
+
37
+ lConfig={
38
+ :category => :none,
39
+ :formula_weights => [1,1,1],
40
+ :outputdir => 'output',
41
+ :outputname => 'default.txt',
42
+ :logname => 'default.log',
43
+ :verbose => true,
44
+ :show_mode => :full
45
+ :lesson_file => 'lesson.txt',
46
+ :lesson_separator => ' |',
47
+ :inputdirs => 'input/idp,input/etc',
48
+ :process_file => 'commands.xml'
49
+ }
50
+
51
+ Interviewer.instance.run(lConfig)
52
+
53
+ Pero si quieres saber más, ahí van otros parámetros que podemos configurar
54
+ al ejecutar la herramienta:
55
+ * **:outputdir**: Nombre del directorio de salida. Por defecto será *output*.
56
+ * **:outputname**: Nombre del fichero de salida donde se guardarán las preguntas
57
+ generadas.
58
+ * **:lesson_file**: Cuando se indica este parámetro se crea un fichero de
59
+ salida con el contenido de los conceptos en modo texto.
60
+ * **:lesson_separator**: Por defecto es |. Es un caracter separador para las
61
+ distintas columnas de las tablas.
62
+ * **:category**: Nombre de la categoría Moodle donde se cargarán las preguntas.
63
+ Por defecto no se establece ninguna categoría Moodle.
64
+ * **:formula_weights**: Son pesos que se utilizarán en la fórmula que calcula
65
+ la proximidad o cercanía entre dos conceptos diferentes.
66
+ * **:logname**: Nombre del fichero de log. Este fichero registra las acciones
67
+ realizadas por script. Por defecto toma el valor *default.log*.
68
+ * **:verbose**: Si es *true* se emiten mensajes por pantalla de los pasos
69
+ realizados. Por defecto toma el valor *true*.
70
+ * **:show_mode**: Cuando la herramienta termina muestra por pantalla un resumen
71
+ de los datos procesados. El valor por defecto es *:default*. Además acepta
72
+ los valores *:none* para no mostrar salida, y *:resume* que muestra un
73
+ breve resumen.
74
+
@@ -0,0 +1,103 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'rainbow'
4
+
5
+ require_relative 'asker/project'
6
+ require_relative 'asker/data/concept'
7
+ require_relative 'asker/data/world'
8
+ require_relative 'asker/ai/concept_ai'
9
+ require_relative 'asker/formatter/concept_string_formatter'
10
+ require_relative 'asker/exporter/main'
11
+ require_relative 'asker/loader/project_loader'
12
+ require_relative 'asker/loader/input_loader'
13
+ require_relative 'asker/checker'
14
+
15
+ # This class does all the job
16
+ # * start
17
+ # * load_input_data
18
+ # * create_output_files, show_create_output_files
19
+ # * create_questions
20
+ # * show_final_results
21
+ class Asker
22
+ # Initialize atributes
23
+ def initialize
24
+ @concepts_ai = []
25
+ @concepts = []
26
+ @codes = []
27
+ end
28
+
29
+ ##
30
+ # Start working
31
+ # @param args (Hash)
32
+ def start(args = {})
33
+ load_input_data(args)
34
+ create_output_files
35
+ show_final_results
36
+ end
37
+
38
+ ##
39
+ # Load input data
40
+ # @param args (Hash)
41
+ def load_input_data(args)
42
+ ProjectLoader.load(args)
43
+ Project.instance.open
44
+ data = InputLoader.load(Project.instance.get(:inputdirs).split(','))
45
+ @concepts = data[:concepts]
46
+ @codes = data[:codes]
47
+ Project.instance.verbose "\n[INFO] Loading data from Internet"
48
+ @world = World.new(@concepts)
49
+ ConceptScreenExporter.export_all(@concepts)
50
+ end
51
+
52
+ ##
53
+ # Create output files
54
+ # * Gift
55
+ # * YAML
56
+ # * TXT Doc
57
+ def create_output_files
58
+ show_create_output_files
59
+ create_questions
60
+ ConceptDocExporter.new(@concepts).export
61
+ end
62
+
63
+ ##
64
+ # Checking input file syntax
65
+ # @param filepath (String)
66
+ def self.check(filepath)
67
+ Checker.check(filepath)
68
+ end
69
+
70
+ private
71
+
72
+ def show_create_output_files
73
+ p = Project.instance
74
+ p.verbose "\n[INFO] Creating output files"
75
+ p.verbose " ├── Gift questions file => #{Rainbow(p.outputpath).bright}"
76
+ p.verbose " ├── YAML questions file => #{Rainbow(p.yamlpath).bright}"
77
+ p.verbose " └── Lesson file => #{Rainbow(p.lessonpath).bright}"
78
+ end
79
+
80
+ ##
81
+ # Create questions for every "concept"
82
+ # Export output to:
83
+ # * GIFT format file
84
+ # * YAML format file
85
+ # Create questions for every "code"
86
+ # Export output to GIFT format file
87
+ def create_questions
88
+ @concepts.each do |concept|
89
+ concept_ai = ConceptAI.new(concept, @world)
90
+ concept_ai.make_questions
91
+ @concepts_ai << concept_ai
92
+ end
93
+ ConceptAIGiftExporter.export_all(@concepts_ai)
94
+ ConceptAIYAMLExporter.export_all(@concepts_ai)
95
+ CodeGiftExporter.export_all(@codes) # UNDER DEVELOPMENT
96
+ end
97
+
98
+ def show_final_results
99
+ ConceptAIScreenExporter.export_all(@concepts_ai)
100
+ CodeScreenExporter.export_all(@codes)
101
+ Project.instance.close
102
+ end
103
+ end