asker-tool 2.1.5 → 2.2.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (105) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +13 -17
  3. data/bin/asker +2 -1
  4. data/lib/asker/ai/ai.rb +10 -3
  5. data/lib/asker/ai/ai_calculate.rb +20 -6
  6. data/lib/asker/ai/code/base_code_ai.rb +104 -0
  7. data/lib/asker/{code/ai → ai/code}/code_ai_factory.rb +11 -1
  8. data/lib/asker/{code/ai → ai/code}/javascript_code_ai.rb +2 -5
  9. data/lib/asker/ai/code/problem_code_ai.rb +176 -0
  10. data/lib/asker/{code/ai → ai/code}/python_code_ai.rb +2 -5
  11. data/lib/asker/{code/ai → ai/code}/ruby_code_ai.rb +14 -7
  12. data/lib/asker/{code/ai → ai/code}/sql_code_ai.rb +2 -5
  13. data/lib/asker/ai/concept_ai.rb +13 -3
  14. data/lib/asker/ai/question.rb +28 -6
  15. data/lib/asker/ai/stages/base_stage.rb +45 -6
  16. data/lib/asker/ai/stages/stage_b.rb +100 -50
  17. data/lib/asker/ai/stages/stage_d.rb +75 -90
  18. data/lib/asker/ai/stages/stage_f.rb +64 -36
  19. data/lib/asker/ai/stages/stage_i.rb +79 -92
  20. data/lib/asker/ai/stages/stage_s.rb +41 -36
  21. data/lib/asker/ai/stages/stage_t.rb +149 -108
  22. data/lib/asker/application.rb +19 -11
  23. data/lib/asker/cli.rb +31 -44
  24. data/lib/asker/data/code.rb +62 -0
  25. data/lib/asker/data/column.rb +31 -21
  26. data/lib/asker/data/concept.rb +109 -65
  27. data/lib/asker/data/data_field.rb +14 -0
  28. data/lib/asker/data/project_data.rb +63 -0
  29. data/lib/asker/data/row.rb +75 -52
  30. data/lib/asker/data/table.rb +91 -42
  31. data/lib/asker/data/template.rb +3 -1
  32. data/lib/asker/data/world.rb +51 -35
  33. data/lib/asker/displayer/code_displayer.rb +7 -0
  34. data/lib/asker/displayer/concept_ai_displayer.erb +10 -0
  35. data/lib/asker/displayer/concept_ai_displayer.rb +74 -53
  36. data/lib/asker/displayer/concept_displayer.rb +16 -9
  37. data/lib/asker/displayer/stats_displayer.rb +12 -3
  38. data/lib/asker/exporter/concept_ai_gift_exporter.rb +19 -11
  39. data/lib/asker/exporter/concept_ai_moodle_exporter.rb +44 -0
  40. data/lib/asker/exporter/concept_ai_yaml_exporter.rb +13 -6
  41. data/lib/asker/exporter/concept_doc_exporter.rb +14 -1
  42. data/lib/asker/exporter/data_gift_exporter.rb +29 -0
  43. data/lib/asker/exporter/output_file_exporter.rb +9 -6
  44. data/lib/asker/files/{config.ini → asker.ini} +48 -1
  45. data/lib/asker/files/example-concept.haml +0 -1
  46. data/lib/asker/files/language/du/connectors.yaml +81 -0
  47. data/lib/asker/{lang/locales/fr → files/language/du}/mistakes.yaml +1 -1
  48. data/lib/asker/files/language/du/templates.yaml +29 -0
  49. data/lib/asker/{lang/locales → files/language}/en/connectors.yaml +0 -0
  50. data/lib/asker/{lang/locales → files/language}/en/mistakes.yaml +0 -0
  51. data/lib/asker/files/language/en/templates.yaml +29 -0
  52. data/lib/asker/{lang/locales → files/language}/es/connectors.yaml +0 -0
  53. data/lib/asker/files/language/es/mistakes.yaml +84 -0
  54. data/lib/asker/files/language/es/templates.yaml +29 -0
  55. data/lib/asker/files/language/fr/connectors.yaml +76 -0
  56. data/lib/asker/{lang/locales/es → files/language/fr}/mistakes.yaml +0 -0
  57. data/lib/asker/files/language/fr/templates.yaml +29 -0
  58. data/lib/asker/{lang/locales → files/language}/javascript/connectors.yaml +0 -0
  59. data/lib/asker/{lang/locales → files/language}/javascript/mistakes.yaml +0 -0
  60. data/lib/asker/{lang/locales → files/language}/javascript/templates.yaml +0 -0
  61. data/lib/asker/{lang/locales → files/language}/math/connectors.yaml +0 -0
  62. data/lib/asker/{lang/locales → files/language}/math/mistakes.yaml +0 -0
  63. data/lib/asker/{lang/locales → files/language}/math/templates.yaml +0 -0
  64. data/lib/asker/{lang/locales → files/language}/python/connectors.yaml +0 -0
  65. data/lib/asker/{lang/locales → files/language}/python/mistakes.yaml +0 -0
  66. data/lib/asker/{lang/locales → files/language}/python/templates.yaml +0 -0
  67. data/lib/asker/{lang/locales → files/language}/ruby/connectors.yaml +0 -0
  68. data/lib/asker/{lang/locales → files/language}/ruby/mistakes.yaml +0 -0
  69. data/lib/asker/{lang/locales → files/language}/ruby/templates.yaml +0 -0
  70. data/lib/asker/{lang/locales → files/language}/sql/connectors.yaml +0 -0
  71. data/lib/asker/{lang/locales → files/language}/sql/mistakes.yaml +0 -0
  72. data/lib/asker/{lang/locales → files/language}/sql/templates.yaml +0 -0
  73. data/lib/asker/formatter/concept_doc_formatter.rb +0 -4
  74. data/lib/asker/formatter/concept_string_formatter.rb +7 -4
  75. data/lib/asker/formatter/moodle/matching.erb +38 -0
  76. data/lib/asker/formatter/moodle/multichoice.erb +49 -0
  77. data/lib/asker/formatter/moodle/shortanswer.erb +30 -0
  78. data/lib/asker/formatter/moodle/truefalse.erb +47 -0
  79. data/lib/asker/formatter/question_gift_formatter.rb +30 -20
  80. data/lib/asker/formatter/question_moodle_formatter.rb +27 -0
  81. data/lib/asker/{checker.rb → input_checker.rb} +126 -49
  82. data/lib/asker/lang/lang.rb +17 -10
  83. data/lib/asker/lang/lang_factory.rb +32 -5
  84. data/lib/asker/lang/text_actions.rb +87 -69
  85. data/lib/asker/loader/code_loader.rb +4 -4
  86. data/lib/asker/loader/content_loader.rb +21 -19
  87. data/lib/asker/loader/directory_loader.rb +1 -8
  88. data/lib/asker/loader/embedded_file.rb +42 -0
  89. data/lib/asker/loader/file_loader.rb +3 -14
  90. data/lib/asker/loader/haml_loader.rb +15 -0
  91. data/lib/asker/loader/image_url_loader.rb +8 -12
  92. data/lib/asker/loader/input_loader.rb +13 -15
  93. data/lib/asker/loader/project_loader.rb +25 -15
  94. data/lib/asker/logger.rb +36 -9
  95. data/lib/asker/skeleton.rb +23 -13
  96. data/lib/asker.rb +76 -42
  97. metadata +53 -54
  98. data/lib/asker/code/ai/base_code_ai.rb +0 -48
  99. data/lib/asker/code/code.rb +0 -53
  100. data/lib/asker/lang/locales/du/templates.yaml +0 -50
  101. data/lib/asker/lang/locales/en/templates.yaml +0 -29
  102. data/lib/asker/lang/locales/es/templates.yaml +0 -29
  103. data/lib/asker/lang/locales/fr/connectors.yaml +0 -92
  104. data/lib/asker/lang/locales/fr/templates.yaml +0 -29
  105. data/lib/asker/project.rb +0 -172
@@ -1,29 +0,0 @@
1
- ---
2
- :none: "Aucune réponse n'est correcte"
3
- :error: 'Erreur'
4
- :misspelling: 'Erreur ortographique'
5
- :true: 'Vrai'
6
- :false: 'Faux'
7
- :d1: "Définition \\: <i><%=text1%></i><br/>Choisissez l'option qui correspond le mieux à la définition précédente.<br/>"
8
- :d2: 'Définition de <b><%=text1%></b>\:<br/> <i><%=text2%></i><br/>'
9
- :d3: 'Définition de <b><%=text1%></b>\:<br/> <i><%=text2%></i><br/></br><p>Note: Chaque symbole ? représente une lettre, et * un ou plusieurs mots.</p>'
10
- :d4: 'Définition de <b><%=text1%></b>\:<br/> <i><%=text2%></i><br/><br/>(Mettez chaque mot à la bonne position dans le texte)'
11
- :b1: 'Par rapport au concept <b><%=text1%></b>, associez chaque "<%=text2%>" avec son,sa "<%=text3%>".<br/>'
12
- :f1: 'Les éléments suivants sont "<%=text2%>" du concept <b><%=text1%></b>\:<ul><li><%=text3%></li></ul>'
13
- :f2: "Les éléments suivants sont \"<%=text2%>\".<br/>Sélectionnez l' option qui n'appartient pas au concept <b><%=text1%></b>."
14
- :f3: 'Les éléments suivants sont "<%=text2%>" du concept <b><%=text1%></b>\:<br><p><%=text3%></p>(Mettez chaque mot à la bonne position dans le texte)'
15
- :i1: "<img src=\"<%=text1%>\" alt\\=\"image\" width=\"400\" height=\"300\"><br/>Choisissez l'option qui correspond le mieux à l'image précédente.<br/>"
16
- :i2: "<img src=\"<%=text1%>\" alt\\=\"image\" width=\"400\" height=\"300\"><br/>L'image précédente correspond à <b><%=text2%></b>."
17
- :i3: "<img src=\"<%=text1%>\" alt\\=\"image\" width=\"400\" height=\"300\"><br/>Écrivez l'option <%=text2%>, qui correspond le mieux à l'image précédente.<br/>"
18
- :i4: '<img src="<%=text1%>" alt\="image" width="400" height="300"><br/>Définition\: <i><%=text2%></i><br/><br/>(Mettez chaque mot à la bonne position dans le texte)'
19
- :s1: 'Par rapport au concept <b><%=text1%></b>, mettez dans l'ordre chaque "<%=text2%>" afin que le critère soit rempli "<%=text3%>".<br/>'
20
- :t1table: 'Concept <b><%=text1%></b><br/><%=text2%>\: [*]<br/><%=text3%>\: "<%=text4%>"<br/>Choisissez l'option correcte.<br/>'
21
- :t2table: 'Concept <b><%=text1%></b><br/><%=text2%>\: [*]<br/><%=text3%>\: "<%=text4%>"<br/>Choisissez l'option correcte.<br/>'
22
- :t3table: 'Concept <b><%=text1%></b><br/><%=text2%>\: "<%=text3%>"<br/><%=text4%>: [*]<br/>Choisissez l'option correcte.<br/>'
23
- :t4table: 'Concept <b><%=text1%></b><br/><%=text2%>\: "<%=text3%>"<br/><%=text4%>: [*]<br/>Choisissez l'option correcte.<br/>'
24
- :t5table: 'Concept <b><%=text1%></b><br/>L'association suivante est correcte\:<br/><ul><li><%=text2%>\: "<%=text3%>"</li><li><%=text4%>\: "<%=text5%>"</li></ul>'
25
- :t6table: 'Concept <b><%=text1%></b><br/>L'association suivante est correcte\:<br/><ul><li><%=text2%>\: "<%=text3%>"</li><li><%=text4%>\: "<%=text5%>"</li></ul>'
26
- :t7table: 'Concept <b><%=text1%></b><br/>L'association suivante est correcte\:<br/><ul><li><%=text2%>\: "<%=text3%>"</li><li><%=text4%>\: "<%=text5%>"</li></ul>'
27
- :t8table: 'Concept <b><%=text1%></b><br/>Complétez l'association suivante\:<br/><ul><li><%=text2%>\: "<%=text3%>"</li><li><%=text4%>\: [*]</li></ul>Écrire un mot.<br/>'
28
- :t9table: 'Concept <b><%=text1%></b><br/>Complétez l'association suivante\:<br/><ul><li><%=text2%>\: "<%=text3%>"</li><li><%=text4%>\: <%=text5%></li></ul>Écrire<%=text6%> mots.<br/>'
29
- :code1: '<pre><%=text1%></pre><br/><p>Écrire le numéro de ligne où se trouve la première erreur. Écrire 0 s'il n'y a aucune erreur.</p>'
data/lib/asker/project.rb DELETED
@@ -1,172 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'singleton'
4
- require 'rainbow'
5
- require 'fileutils'
6
- require_relative 'application'
7
- require_relative 'logger'
8
-
9
- # Contains Project data and methods
10
- class Project
11
- include Singleton
12
- attr_reader :default, :param
13
-
14
- ##
15
- # Initialize
16
- def initialize
17
- reset
18
- end
19
-
20
- ##
21
- # Reset project params
22
- def reset
23
- @default = { inputbasedir: FileUtils.pwd,
24
- outputdir: 'output',
25
- category: :none,
26
- formula_weights: [1, 1, 1],
27
- lang: 'en',
28
- locales: %w[en es javascript math python ruby sql],
29
- show_mode: :default,
30
- verbose: true,
31
- stages: { d: true, b: true, f: true, i: true, s: true, t: true },
32
- threshold: 0.5,
33
- color_output: true }
34
- @param = {}
35
- end
36
-
37
- ##
38
- # Get value param
39
- # @param key (Symbol) key
40
- def get(key)
41
- return @param[key] unless @param[key].nil?
42
-
43
- @default[key]
44
- end
45
-
46
- ##
47
- # Set value param
48
- # @param key (Symbol) key
49
- # @param value (String) value
50
- def set(key, value)
51
- @param[key] = value
52
- end
53
-
54
- ##
55
- # Open new project
56
- # * setting new params and
57
- # * creating output files
58
- # IMPORTANT: We need at least theses values
59
- # * process_file
60
- # * inputdirs
61
- def open
62
- ext = '.haml'
63
- @param[:process_file] = @param[:process_file] ||
64
- get(:projectdir).split(File::SEPARATOR).last + ext
65
- @param[:projectname] = @param[:projectname] ||
66
- File.basename(@param[:process_file], ext)
67
- @param[:inputdirs] = @param[:inputdirs] ||
68
- File.join(get(:inputbasedir), @param[:projectdir])
69
-
70
- @param[:logname] = @param[:logname] ||
71
- "#{@param[:projectname]}-log.txt"
72
- @param[:outputname] = @param[:outputname] ||
73
- "#{@param[:projectname]}-gift.txt"
74
- @param[:lessonname] = @param[:lessonname] ||
75
- "#{@param[:projectname]}-doc.txt"
76
- @param[:yamlname] = @param[:yamlname] ||
77
- "#{@param[:projectname]}.yaml"
78
-
79
- @param[:logpath] = @param[:logpath] ||
80
- File.join(get(:outputdir), @param[:logname])
81
- @param[:outputpath] = @param[:outputpath] ||
82
- File.join(get(:outputdir), @param[:outputname])
83
- @param[:lessonpath] = @param[:lessonpath] ||
84
- File.join(get(:outputdir), @param[:lessonname])
85
- @param[:yamlpath] = @param[:yamlpath] ||
86
- File.join(get(:outputdir), @param[:yamlname])
87
-
88
- Dir.mkdir(get(:outputdir)) unless Dir.exist?(get(:outputdir))
89
- create_log_file
90
- create_output_file
91
- create_lesson_file
92
- create_yaml_file
93
- end
94
-
95
- ##
96
- # Close output files
97
- def close
98
- get(:logfile).close
99
- get(:outputfile).close
100
- get(:lessonfile).close
101
- get(:yamlfile).close
102
- end
103
-
104
- ##
105
- # Display and log text
106
- def verbose(msg)
107
- puts msg if get(:verbose)
108
- get(:logfile).write(msg.to_s + "\n") if get(:logfile)
109
- raise "verbose"
110
- end
111
-
112
- ##
113
- # Display and log text line
114
- def verboseln(msg)
115
- verbose(msg + "\n")
116
- end
117
-
118
- def method_missing(method, *_args, &_block)
119
- get(method)
120
- end
121
-
122
- private
123
-
124
- # create or reset logfile
125
- def create_log_file
126
- @param[:logfile] = File.open(get(:logpath), 'w')
127
- f = get(:logfile)
128
- f.write('=' * 50 + "\n")
129
- f.write("Created by : #{Application::NAME}")
130
- f.write(" (version #{Application::VERSION})\n")
131
- f.write("File : #{get(:logname)}\n")
132
- f.write("Time : #{Time.new}\n")
133
- f.write("Author : David Vargas Ruiz\n")
134
- f.write('=' * 50 + "\n\n")
135
-
136
- Logger.verbose '[INFO] Project open'
137
- Logger.verbose ' ├── inputdirs = ' + Rainbow(get(:inputdirs)).bright
138
- Logger.verbose ' └── process_file = ' + Rainbow(get(:process_file)).bright
139
- end
140
-
141
- # Create or reset output file
142
- def create_output_file
143
- @param[:outputfile] = File.open(get(:outputpath), 'w')
144
- f = get(:outputfile)
145
- f.write('// ' + ('=' * 50) + "\n")
146
- f.write("// Created by : #{Application::NAME}")
147
- f.write(" (version #{Application::VERSION})\n")
148
- f.write("// File : #{get(:outputname)}\n")
149
- f.write("// Time : #{Time.new}\n")
150
- f.write("// Author : David Vargas Ruiz\n")
151
- f.write('// ' + ('=' * 50) + "\n\n")
152
- f.write("$CATEGORY: $course$/#{get(:category)}\n") unless get(:category) == :none
153
- end
154
-
155
- # Create or reset lesson file
156
- def create_lesson_file
157
- @param[:lessonfile] = File.new(get(:lessonpath), 'w')
158
- f = get(:lessonfile)
159
- f.write('=' * 50 + "\n")
160
- f.write("Created by : #{Application::NAME}")
161
- f.write(" (version #{Application::VERSION})\n")
162
- f.write("File : #{get(:lessonname)}\n")
163
- f.write("Time : #{Time.new}\n")
164
- f.write("Author : David Vargas Ruiz\n")
165
- f.write('=' * 50 + "\n")
166
- end
167
-
168
- # Create or reset yaml file
169
- def create_yaml_file
170
- @param[:yamlfile] = File.open(get(:yamlpath), 'w')
171
- end
172
- end