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.
- checksums.yaml +4 -4
- data/README.md +13 -17
- data/bin/asker +2 -1
- data/lib/asker/ai/ai.rb +10 -3
- data/lib/asker/ai/ai_calculate.rb +20 -6
- data/lib/asker/ai/code/base_code_ai.rb +104 -0
- data/lib/asker/{code/ai → ai/code}/code_ai_factory.rb +11 -1
- data/lib/asker/{code/ai → ai/code}/javascript_code_ai.rb +2 -5
- data/lib/asker/ai/code/problem_code_ai.rb +176 -0
- data/lib/asker/{code/ai → ai/code}/python_code_ai.rb +2 -5
- data/lib/asker/{code/ai → ai/code}/ruby_code_ai.rb +14 -7
- data/lib/asker/{code/ai → ai/code}/sql_code_ai.rb +2 -5
- data/lib/asker/ai/concept_ai.rb +13 -3
- data/lib/asker/ai/question.rb +28 -6
- data/lib/asker/ai/stages/base_stage.rb +45 -6
- data/lib/asker/ai/stages/stage_b.rb +100 -50
- data/lib/asker/ai/stages/stage_d.rb +75 -90
- data/lib/asker/ai/stages/stage_f.rb +64 -36
- data/lib/asker/ai/stages/stage_i.rb +79 -92
- data/lib/asker/ai/stages/stage_s.rb +41 -36
- data/lib/asker/ai/stages/stage_t.rb +149 -108
- data/lib/asker/application.rb +19 -11
- data/lib/asker/cli.rb +31 -44
- data/lib/asker/data/code.rb +62 -0
- data/lib/asker/data/column.rb +31 -21
- data/lib/asker/data/concept.rb +109 -65
- data/lib/asker/data/data_field.rb +14 -0
- data/lib/asker/data/project_data.rb +63 -0
- data/lib/asker/data/row.rb +75 -52
- data/lib/asker/data/table.rb +91 -42
- data/lib/asker/data/template.rb +3 -1
- data/lib/asker/data/world.rb +51 -35
- data/lib/asker/displayer/code_displayer.rb +7 -0
- data/lib/asker/displayer/concept_ai_displayer.erb +10 -0
- data/lib/asker/displayer/concept_ai_displayer.rb +74 -53
- data/lib/asker/displayer/concept_displayer.rb +16 -9
- data/lib/asker/displayer/stats_displayer.rb +12 -3
- data/lib/asker/exporter/concept_ai_gift_exporter.rb +19 -11
- data/lib/asker/exporter/concept_ai_moodle_exporter.rb +44 -0
- data/lib/asker/exporter/concept_ai_yaml_exporter.rb +13 -6
- data/lib/asker/exporter/concept_doc_exporter.rb +14 -1
- data/lib/asker/exporter/data_gift_exporter.rb +29 -0
- data/lib/asker/exporter/output_file_exporter.rb +9 -6
- data/lib/asker/files/{config.ini → asker.ini} +48 -1
- data/lib/asker/files/example-concept.haml +0 -1
- data/lib/asker/files/language/du/connectors.yaml +81 -0
- data/lib/asker/{lang/locales/fr → files/language/du}/mistakes.yaml +1 -1
- data/lib/asker/files/language/du/templates.yaml +29 -0
- data/lib/asker/{lang/locales → files/language}/en/connectors.yaml +0 -0
- data/lib/asker/{lang/locales → files/language}/en/mistakes.yaml +0 -0
- data/lib/asker/files/language/en/templates.yaml +29 -0
- data/lib/asker/{lang/locales → files/language}/es/connectors.yaml +0 -0
- data/lib/asker/files/language/es/mistakes.yaml +84 -0
- data/lib/asker/files/language/es/templates.yaml +29 -0
- data/lib/asker/files/language/fr/connectors.yaml +76 -0
- data/lib/asker/{lang/locales/es → files/language/fr}/mistakes.yaml +0 -0
- data/lib/asker/files/language/fr/templates.yaml +29 -0
- data/lib/asker/{lang/locales → files/language}/javascript/connectors.yaml +0 -0
- data/lib/asker/{lang/locales → files/language}/javascript/mistakes.yaml +0 -0
- data/lib/asker/{lang/locales → files/language}/javascript/templates.yaml +0 -0
- data/lib/asker/{lang/locales → files/language}/math/connectors.yaml +0 -0
- data/lib/asker/{lang/locales → files/language}/math/mistakes.yaml +0 -0
- data/lib/asker/{lang/locales → files/language}/math/templates.yaml +0 -0
- data/lib/asker/{lang/locales → files/language}/python/connectors.yaml +0 -0
- data/lib/asker/{lang/locales → files/language}/python/mistakes.yaml +0 -0
- data/lib/asker/{lang/locales → files/language}/python/templates.yaml +0 -0
- data/lib/asker/{lang/locales → files/language}/ruby/connectors.yaml +0 -0
- data/lib/asker/{lang/locales → files/language}/ruby/mistakes.yaml +0 -0
- data/lib/asker/{lang/locales → files/language}/ruby/templates.yaml +0 -0
- data/lib/asker/{lang/locales → files/language}/sql/connectors.yaml +0 -0
- data/lib/asker/{lang/locales → files/language}/sql/mistakes.yaml +0 -0
- data/lib/asker/{lang/locales → files/language}/sql/templates.yaml +0 -0
- data/lib/asker/formatter/concept_doc_formatter.rb +0 -4
- data/lib/asker/formatter/concept_string_formatter.rb +7 -4
- data/lib/asker/formatter/moodle/matching.erb +38 -0
- data/lib/asker/formatter/moodle/multichoice.erb +49 -0
- data/lib/asker/formatter/moodle/shortanswer.erb +30 -0
- data/lib/asker/formatter/moodle/truefalse.erb +47 -0
- data/lib/asker/formatter/question_gift_formatter.rb +30 -20
- data/lib/asker/formatter/question_moodle_formatter.rb +27 -0
- data/lib/asker/{checker.rb → input_checker.rb} +126 -49
- data/lib/asker/lang/lang.rb +17 -10
- data/lib/asker/lang/lang_factory.rb +32 -5
- data/lib/asker/lang/text_actions.rb +87 -69
- data/lib/asker/loader/code_loader.rb +4 -4
- data/lib/asker/loader/content_loader.rb +21 -19
- data/lib/asker/loader/directory_loader.rb +1 -8
- data/lib/asker/loader/embedded_file.rb +42 -0
- data/lib/asker/loader/file_loader.rb +3 -14
- data/lib/asker/loader/haml_loader.rb +15 -0
- data/lib/asker/loader/image_url_loader.rb +8 -12
- data/lib/asker/loader/input_loader.rb +13 -15
- data/lib/asker/loader/project_loader.rb +25 -15
- data/lib/asker/logger.rb +36 -9
- data/lib/asker/skeleton.rb +23 -13
- data/lib/asker.rb +76 -42
- metadata +53 -54
- data/lib/asker/code/ai/base_code_ai.rb +0 -48
- data/lib/asker/code/code.rb +0 -53
- data/lib/asker/lang/locales/du/templates.yaml +0 -50
- data/lib/asker/lang/locales/en/templates.yaml +0 -29
- data/lib/asker/lang/locales/es/templates.yaml +0 -29
- data/lib/asker/lang/locales/fr/connectors.yaml +0 -92
- data/lib/asker/lang/locales/fr/templates.yaml +0 -29
- 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
|