asker-tool 2.1.2

Sign up to get free protection for your applications and to get access to all the features.
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