asker-tool 2.1.2 → 2.1.7
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.
- checksums.yaml +4 -4
- data/{LICENSE → LICENSE.txt} +0 -0
- data/README.md +17 -18
- data/bin/asker +1 -0
- data/lib/asker.rb +43 -74
- data/lib/asker/ai/ai.rb +4 -0
- 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 +1 -0
- data/lib/asker/ai/stages/stage_t.rb +76 -76
- data/lib/asker/application.rb +19 -3
- data/lib/asker/checker.rb +152 -53
- data/lib/asker/cli.rb +19 -22
- data/lib/asker/data/code.rb +73 -0
- data/lib/asker/data/column.rb +31 -21
- data/lib/asker/data/concept.rb +42 -45
- data/lib/asker/data/data_field.rb +14 -0
- data/lib/asker/data/row.rb +75 -52
- data/lib/asker/data/table.rb +89 -42
- data/lib/asker/data/world.rb +58 -32
- data/lib/asker/{exporter/code_screen_exporter.rb → displayer/code_displayer.rb} +6 -6
- data/lib/asker/displayer/concept_ai_displayer.rb +132 -0
- data/lib/asker/displayer/concept_displayer.rb +29 -0
- data/lib/asker/displayer/stats_displayer.rb +14 -0
- data/lib/asker/exporter/code_gift_exporter.rb +10 -11
- data/lib/asker/exporter/concept_ai_gift_exporter.rb +23 -11
- data/lib/asker/exporter/concept_ai_yaml_exporter.rb +9 -7
- data/lib/asker/exporter/concept_doc_exporter.rb +9 -15
- data/lib/asker/exporter/output_file_exporter.rb +18 -0
- data/lib/asker/files/config.ini +37 -0
- data/lib/asker/files/example-code.haml +0 -0
- data/lib/asker/files/example-concept.haml +29 -0
- data/lib/asker/files/language/du/templates.yaml +50 -0
- data/lib/asker/files/language/en/connectors.yaml +44 -0
- data/lib/asker/files/language/en/mistakes.yaml +37 -0
- data/lib/asker/files/language/en/templates.yaml +29 -0
- data/lib/asker/files/language/es/connectors.yaml +92 -0
- data/lib/asker/files/language/es/mistakes.yaml +82 -0
- data/lib/asker/files/language/es/templates.yaml +29 -0
- data/lib/asker/files/language/fr/connectors.yaml +92 -0
- data/lib/asker/files/language/fr/mistakes.yaml +82 -0
- data/lib/asker/files/language/fr/templates.yaml +29 -0
- data/lib/asker/files/language/javascript/connectors.yaml +11 -0
- data/lib/asker/files/language/javascript/mistakes.yaml +30 -0
- data/lib/asker/files/language/javascript/templates.yaml +3 -0
- data/lib/asker/files/language/math/connectors.yaml +2 -0
- data/lib/asker/files/language/math/mistakes.yaml +2 -0
- data/lib/asker/files/language/math/templates.yaml +1 -0
- data/lib/asker/files/language/python/connectors.yaml +11 -0
- data/lib/asker/files/language/python/mistakes.yaml +26 -0
- data/lib/asker/files/language/python/templates.yaml +3 -0
- data/lib/asker/files/language/ruby/connectors.yaml +11 -0
- data/lib/asker/files/language/ruby/mistakes.yaml +33 -0
- data/lib/asker/files/language/ruby/templates.yaml +3 -0
- data/lib/asker/files/language/sql/connectors.yaml +6 -0
- data/lib/asker/files/language/sql/mistakes.yaml +11 -0
- data/lib/asker/files/language/sql/templates.yaml +2 -0
- data/lib/asker/formatter/concept_string_formatter.rb +9 -8
- data/lib/asker/formatter/question_gift_formatter.rb +9 -1
- data/lib/asker/lang/lang.rb +18 -12
- data/lib/asker/lang/lang_factory.rb +26 -5
- data/lib/asker/lang/text_actions.rb +87 -69
- data/lib/asker/loader/code_loader.rb +3 -3
- data/lib/asker/loader/content_loader.rb +9 -5
- data/lib/asker/loader/file_loader.rb +2 -11
- data/lib/asker/loader/haml_loader.rb +15 -0
- data/lib/asker/loader/image_url_loader.rb +5 -8
- data/lib/asker/loader/input_loader.rb +23 -7
- data/lib/asker/loader/project_loader.rb +32 -29
- data/lib/asker/logger.rb +3 -4
- data/lib/asker/project.rb +28 -52
- data/lib/asker/skeleton.rb +73 -0
- metadata +62 -73
- data/docs/changelog/v2.1.md +0 -99
- data/docs/commands.md +0 -15
- data/docs/contributions.md +0 -18
- data/docs/history.md +0 -40
- data/docs/idea.md +0 -44
- data/docs/inputs/README.md +0 -39
- data/docs/inputs/code.md +0 -69
- data/docs/inputs/concepts.md +0 -142
- data/docs/inputs/jedi.md +0 -68
- data/docs/inputs/tables.md +0 -112
- data/docs/inputs/templates.md +0 -87
- data/docs/install/README.md +0 -38
- data/docs/install/manual.md +0 -26
- data/docs/install/scripts.md +0 -26
- data/docs/revise/asker-file.md +0 -41
- data/docs/revise/buenas-practicas/01-convocatoria.md +0 -30
- data/docs/revise/buenas-practicas/02-formulario.md +0 -35
- data/docs/revise/buenas-practicas/03-descripcion.md +0 -63
- data/docs/revise/buenas-practicas/04-resultados.md +0 -17
- data/docs/revise/buenas-practicas/05-reproducir.md +0 -10
- data/docs/revise/ejemplos/01/README.md +0 -27
- data/docs/revise/ejemplos/02/README.md +0 -31
- data/docs/revise/ejemplos/03/README.md +0 -31
- data/docs/revise/ejemplos/04/README.md +0 -37
- data/docs/revise/ejemplos/05/README.md +0 -25
- data/docs/revise/ejemplos/06/README.md +0 -43
- data/docs/revise/ejemplos/README.md +0 -11
- data/docs/revise/projects.md +0 -74
- data/lib/asker/code/ai/base_code_ai.rb +0 -48
- data/lib/asker/code/code.rb +0 -53
- data/lib/asker/exporter/concept_ai_screen_exporter.rb +0 -115
- data/lib/asker/exporter/concept_screen_exporter.rb +0 -25
- data/lib/asker/exporter/main.rb +0 -9
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
---
|
|
2
|
+
:a: 'á,e,o,ha'
|
|
3
|
+
:"a ": 'as '
|
|
4
|
+
:"as ": 'a ,os '
|
|
5
|
+
:á: 'a,é,há'
|
|
6
|
+
:al: 'ar,la'
|
|
7
|
+
:ar: 'al'
|
|
8
|
+
:b: 'v'
|
|
9
|
+
:c: 's,k'
|
|
10
|
+
:ca: 'ka'
|
|
11
|
+
:ce: 'se,que'
|
|
12
|
+
:ci: 'si,qui'
|
|
13
|
+
:co: 'ko'
|
|
14
|
+
:cu: 'ku,qu'
|
|
15
|
+
:e: 'é,a,he'
|
|
16
|
+
:é: 'e,hé'
|
|
17
|
+
:el: 'er'
|
|
18
|
+
:er: 'el'
|
|
19
|
+
:g: 'j'
|
|
20
|
+
:h: ' ,n'
|
|
21
|
+
:ha: 'a'
|
|
22
|
+
:he: 'e'
|
|
23
|
+
:hi: 'i'
|
|
24
|
+
:ho: 'o'
|
|
25
|
+
:hu: 'u'
|
|
26
|
+
:i: 'í,y'
|
|
27
|
+
:í: 'i,y'
|
|
28
|
+
:j: 'g'
|
|
29
|
+
:k: 'q'
|
|
30
|
+
:l: 'r'
|
|
31
|
+
:lla: 'ya'
|
|
32
|
+
:lle: 'ye'
|
|
33
|
+
:lli: 'yi'
|
|
34
|
+
:llo: 'yo'
|
|
35
|
+
:llu: 'yu'
|
|
36
|
+
:n: 'm,ñ'
|
|
37
|
+
:ñ: 'n'
|
|
38
|
+
:m: 'n'
|
|
39
|
+
:mb: 'nb'
|
|
40
|
+
:mp: 'np'
|
|
41
|
+
:o: 'ó,e'
|
|
42
|
+
:"o ": 'os '
|
|
43
|
+
:ó: 'o'
|
|
44
|
+
:ol: 'or'
|
|
45
|
+
:or: 'ol'
|
|
46
|
+
:os : 'o ,as '
|
|
47
|
+
:oha: 'oa'
|
|
48
|
+
:p: 'q,o'
|
|
49
|
+
:que: 'ke'
|
|
50
|
+
:qui: 'ki'
|
|
51
|
+
:s: 'z,a'
|
|
52
|
+
:sa: 'za'
|
|
53
|
+
:se: 'ce,ze'
|
|
54
|
+
:si: 'ci,zi'
|
|
55
|
+
:so: 'zo'
|
|
56
|
+
:su: 'zu'
|
|
57
|
+
:st: 'ts'
|
|
58
|
+
:t: 'f,p'
|
|
59
|
+
:u: 'ú'
|
|
60
|
+
:ú: 'u'
|
|
61
|
+
:ul: 'ur'
|
|
62
|
+
:ur: 'ul'
|
|
63
|
+
:v: 'b,w'
|
|
64
|
+
:w: 'v, gu'
|
|
65
|
+
:wa: 'gua'
|
|
66
|
+
:we: 'gue'
|
|
67
|
+
:wi: 'gui'
|
|
68
|
+
:wo: 'guo'
|
|
69
|
+
:x: 'ks,k,s'
|
|
70
|
+
:y: 'i,v'
|
|
71
|
+
:" y ": ' e '
|
|
72
|
+
:ya: 'lla'
|
|
73
|
+
:ye: 'lle'
|
|
74
|
+
:yi: 'lli'
|
|
75
|
+
:yo: 'llo'
|
|
76
|
+
:yu: 'llu'
|
|
77
|
+
:z: 's'
|
|
78
|
+
:za: 'sa'
|
|
79
|
+
:ze: 'se'
|
|
80
|
+
:zi: 'si'
|
|
81
|
+
:zo: 'so'
|
|
82
|
+
:zu: 'su'
|
|
@@ -0,0 +1,29 @@
|
|
|
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>'
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
---
|
|
2
|
+
:'else': 'else:'
|
|
3
|
+
:elif: 'elseif,else if,elsif'
|
|
4
|
+
:if: 'fi'
|
|
5
|
+
:'document.': 'documento.,document .'
|
|
6
|
+
:'write(': 'write.(,print(,(write '
|
|
7
|
+
:alert: 'alerta,aletr,alart'
|
|
8
|
+
:new: 'nev,naw'
|
|
9
|
+
:function: 'funtion,funtcion,def,defun'
|
|
10
|
+
:#!: '#'
|
|
11
|
+
:": "', "
|
|
12
|
+
:': '", '
|
|
13
|
+
:', ': '; ,. '
|
|
14
|
+
:.: ' ,:,;,. '
|
|
15
|
+
:,: ' ,.,;'
|
|
16
|
+
:;: ':, '
|
|
17
|
+
:(: '[,\{,),(('
|
|
18
|
+
:((: '('
|
|
19
|
+
:): '],\},(,))'
|
|
20
|
+
:)): ')'
|
|
21
|
+
:{: '[,(,\}'
|
|
22
|
+
:}: '],),\}'
|
|
23
|
+
:==: '\=,!='
|
|
24
|
+
:=>: '==,\=,<=,>>,->'
|
|
25
|
+
:' = ': ' == '
|
|
26
|
+
:'!=': '==,\='
|
|
27
|
+
:' + ': ' - '
|
|
28
|
+
:' - ': ' + '
|
|
29
|
+
:'-': '_'
|
|
30
|
+
:'_': '-'
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
---
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
---
|
|
2
|
+
:'else:': 'else '
|
|
3
|
+
:elif: 'elseif,else if,elsif'
|
|
4
|
+
:if: 'fi'
|
|
5
|
+
:' print ': ' puts , prints, echo '
|
|
6
|
+
:#!: '#'
|
|
7
|
+
:": "', "
|
|
8
|
+
:': '", '
|
|
9
|
+
:', ': '; ,. '
|
|
10
|
+
:.: ' ,:,;'
|
|
11
|
+
:,: ' ,.,;'
|
|
12
|
+
:;: ':'
|
|
13
|
+
:(: '[,\{,)'
|
|
14
|
+
:((: '('
|
|
15
|
+
:): '],\},('
|
|
16
|
+
:)): ')'
|
|
17
|
+
:{: '[,(,\}'
|
|
18
|
+
:}: '],),\}'
|
|
19
|
+
:==: '\=,!='
|
|
20
|
+
:=>: '==,\=,<=,>>,->'
|
|
21
|
+
:' = ': ' == '
|
|
22
|
+
:'!=': '==,\='
|
|
23
|
+
:' + ': ' - '
|
|
24
|
+
:' - ': ' + '
|
|
25
|
+
:'-': '_'
|
|
26
|
+
:'_': '-'
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
---
|
|
2
|
+
:' do ': ' ( , [ '
|
|
3
|
+
:' elsif ': ' elif , else if , elseif '
|
|
4
|
+
:' else ': ' if , els , elseif '
|
|
5
|
+
:end: 'edn,begin,],), '
|
|
6
|
+
:' if ': ' unless , fi , else '
|
|
7
|
+
:' unless ': ' if , unles '
|
|
8
|
+
:' puts ': ' put , prints, echo '
|
|
9
|
+
:system(: 'sistem(,execute('
|
|
10
|
+
:'.each ': 'each ,.split '
|
|
11
|
+
:.split: '.each,.spilt,split'
|
|
12
|
+
:#!: '# '
|
|
13
|
+
:": "', "
|
|
14
|
+
:': '", '
|
|
15
|
+
:', ': '; ,. '
|
|
16
|
+
:|: ' ,('
|
|
17
|
+
:.: ' ,:,;'
|
|
18
|
+
:,: ' ,.,;'
|
|
19
|
+
:;: ':'
|
|
20
|
+
:(: '[,)'
|
|
21
|
+
:((: '('
|
|
22
|
+
:): '],('
|
|
23
|
+
:)): ')'
|
|
24
|
+
:{: 'do,[,('
|
|
25
|
+
:}: 'end,],)'
|
|
26
|
+
:==: '\=,!='
|
|
27
|
+
:=>: '==,\=,<=,>>,->'
|
|
28
|
+
:' = ': ' == '
|
|
29
|
+
:'!=': '==,\='
|
|
30
|
+
:' + ': ' - '
|
|
31
|
+
:' - ': ' + '
|
|
32
|
+
:'-': '_'
|
|
33
|
+
:'_': '-'
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
---
|
|
2
|
+
:ALTER: 'MODIFICAR,ATLER,CREATE,DROP'
|
|
3
|
+
:CREATE: 'CREAR,CRETAE,DROP,ALTER'
|
|
4
|
+
:DROP: 'ELIMINAR,DORP,CREATE,ALTER'
|
|
5
|
+
:INTEGER: 'ENTERO,INTEGUER,VARCHAR'
|
|
6
|
+
:TABLE: 'TABLA,TALBE,INDEX,DATABASE'
|
|
7
|
+
:VARCHAR: 'TEXTO,VARHCAR'
|
|
8
|
+
:;: ':'
|
|
9
|
+
:);: ')'
|
|
10
|
+
:(: '[,{'
|
|
11
|
+
:): '],}'
|
|
@@ -11,14 +11,14 @@ module ConceptStringFormatter
|
|
|
11
11
|
# @return String
|
|
12
12
|
def self.to_s(concept)
|
|
13
13
|
tt = Terminal::Table.new
|
|
14
|
-
|
|
15
|
-
rows.each { |row| tt.add_row row }
|
|
14
|
+
get_tt_rows(concept).each { |row| tt.add_row row }
|
|
16
15
|
"#{tt}\n"
|
|
17
16
|
end
|
|
18
17
|
|
|
19
18
|
# rubocop:disable Metrics/AbcSize
|
|
20
19
|
# rubocop:disable Metrics/MethodLength
|
|
21
|
-
|
|
20
|
+
# rubocop:disable Layout/LineLength
|
|
21
|
+
private_class_method def self.get_tt_rows(concept)
|
|
22
22
|
rows = []
|
|
23
23
|
rows << [Rainbow(concept.id.to_s).bright,
|
|
24
24
|
Rainbow(concept.name(:screen)).white.bg(:blue).bright +
|
|
@@ -31,14 +31,15 @@ module ConceptStringFormatter
|
|
|
31
31
|
rows << [Rainbow('Referenced by').blue,
|
|
32
32
|
concept.referenced_by.join(', ')[0...70].to_s]
|
|
33
33
|
rows << format_texts(concept)
|
|
34
|
-
rows << [Rainbow('.def(images)').blue, concept.images.size.to_s]
|
|
35
|
-
rows << format_tables(concept)
|
|
34
|
+
rows << [Rainbow('.def(images)').blue, concept.images.size.to_s] unless concept.images.size.zero?
|
|
35
|
+
rows << format_tables(concept) unless concept.tables.count.zero?
|
|
36
36
|
rows << format_neighbors(concept)
|
|
37
37
|
end
|
|
38
38
|
# rubocop:enable Metrics/AbcSize
|
|
39
39
|
# rubocop:enable Metrics/MethodLength
|
|
40
|
+
# rubocop:enable Layout/LineLength
|
|
40
41
|
|
|
41
|
-
def self.format_texts(concept)
|
|
42
|
+
private_class_method def self.format_texts(concept)
|
|
42
43
|
list = []
|
|
43
44
|
concept.texts.each do |i|
|
|
44
45
|
if i.size < 60
|
|
@@ -50,14 +51,14 @@ module ConceptStringFormatter
|
|
|
50
51
|
[Rainbow('.def(text)').blue, list.join("\n")]
|
|
51
52
|
end
|
|
52
53
|
|
|
53
|
-
def self.format_tables(concept)
|
|
54
|
+
private_class_method def self.format_tables(concept)
|
|
54
55
|
return [] if concept.tables.count.zero?
|
|
55
56
|
|
|
56
57
|
list = concept.tables.map(&:to_s)
|
|
57
58
|
[Rainbow('.tables').color(:blue), list.join("\n")]
|
|
58
59
|
end
|
|
59
60
|
|
|
60
|
-
def self.format_neighbors(concept)
|
|
61
|
+
private_class_method def self.format_neighbors(concept)
|
|
61
62
|
list = concept.neighbors[0..4].map do |i|
|
|
62
63
|
i[:concept].name(:screen) + '(' + i[:value].to_s[0..4] + ')'
|
|
63
64
|
end
|
|
@@ -1,7 +1,11 @@
|
|
|
1
|
-
#
|
|
1
|
+
# frozen_string_literal: false
|
|
2
2
|
|
|
3
3
|
# Transform Questions into Gift format
|
|
4
4
|
module QuestionGiftFormatter
|
|
5
|
+
##
|
|
6
|
+
# Convert question object into gift formatted string
|
|
7
|
+
# @param question (Question)
|
|
8
|
+
# @return String
|
|
5
9
|
def self.to_s(question)
|
|
6
10
|
@question = question
|
|
7
11
|
# Return question using gift format
|
|
@@ -52,6 +56,10 @@ module QuestionGiftFormatter
|
|
|
52
56
|
s
|
|
53
57
|
end
|
|
54
58
|
|
|
59
|
+
##
|
|
60
|
+
# Sanitize gift text
|
|
61
|
+
# @param input (String)
|
|
62
|
+
# @return String
|
|
55
63
|
def self.sanitize(input = '')
|
|
56
64
|
output = input.dup
|
|
57
65
|
output.gsub!("#", "\\#")
|
data/lib/asker/lang/lang.rb
CHANGED
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
require 'erb'
|
|
4
4
|
require 'yaml'
|
|
5
5
|
require_relative 'text_actions'
|
|
6
|
+
require_relative '../logger'
|
|
6
7
|
|
|
7
8
|
# Lang#lang
|
|
8
9
|
class Lang
|
|
@@ -22,21 +23,26 @@ class Lang
|
|
|
22
23
|
private
|
|
23
24
|
|
|
24
25
|
def load_files
|
|
25
|
-
dirbase = File.dirname(__FILE__)
|
|
26
|
-
|
|
26
|
+
dirbase = File.join(File.dirname(__FILE__), '..', 'files', 'language')
|
|
27
|
+
filepath = File.join(dirbase, @code, 'templates.yaml')
|
|
28
|
+
@templates = load_yaml_file(filepath)
|
|
29
|
+
filepath = File.join(dirbase, @code, 'connectors.yaml')
|
|
30
|
+
@connectors = load_yaml_file(filepath)
|
|
31
|
+
filepath = File.join(dirbase, @code, 'mistakes.yaml')
|
|
32
|
+
@mistakes = load_yaml_file(filepath)
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
# rubocop:disable Security/YAMLLoad
|
|
36
|
+
def load_yaml_file(filepath)
|
|
27
37
|
begin
|
|
28
|
-
|
|
38
|
+
content = YAML.load(File.new(filepath))
|
|
29
39
|
rescue StandardError => e
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
40
|
+
Logger.verboseln '[ERROR] Lang.initialize():' \
|
|
41
|
+
" Reading YAML file <#{filepath}>"
|
|
42
|
+
Logger.verboseln '[ADVISE] Revise apostrophe into string without \ symbol'
|
|
33
43
|
raise e
|
|
34
44
|
end
|
|
35
|
-
|
|
36
|
-
@connectors = YAML.load(File.new(filename))
|
|
37
|
-
|
|
38
|
-
filename = File.join(dirbase, 'locales', @code, 'mistakes.yaml')
|
|
39
|
-
@mistakes = YAML.load(File.new(filename))
|
|
45
|
+
content
|
|
40
46
|
end
|
|
41
|
-
|
|
47
|
+
# rubocop:enable Security/YAMLLoad
|
|
42
48
|
end
|
|
@@ -2,18 +2,39 @@
|
|
|
2
2
|
|
|
3
3
|
require 'singleton'
|
|
4
4
|
require_relative 'lang'
|
|
5
|
-
require_relative '../
|
|
5
|
+
require_relative '../application'
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
##
|
|
8
|
+
# LangFactory singleton class.
|
|
9
|
+
# * Read all language codes defined into configuration file
|
|
10
|
+
# * and load every language
|
|
11
|
+
# Lang objects are reused
|
|
8
12
|
class LangFactory
|
|
9
13
|
include Singleton
|
|
10
14
|
|
|
15
|
+
##
|
|
16
|
+
# Read all language codes from configuration file and load every language
|
|
11
17
|
def initialize
|
|
18
|
+
@default = Application.instance.config['languages']['default'].downcase
|
|
12
19
|
@langs = {}
|
|
13
|
-
|
|
20
|
+
Application.instance.config['languages'].each_pair do |key, value|
|
|
21
|
+
code = key.downcase
|
|
22
|
+
next if code == 'default'
|
|
23
|
+
|
|
24
|
+
@langs[code] = Lang.new(code) if value.downcase == 'yes'
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
##
|
|
29
|
+
# Return Lang object associated to code
|
|
30
|
+
# @param code (String)
|
|
31
|
+
def get(code)
|
|
32
|
+
@langs[code]
|
|
14
33
|
end
|
|
15
34
|
|
|
16
|
-
|
|
17
|
-
|
|
35
|
+
##
|
|
36
|
+
# Return default Lang object
|
|
37
|
+
def default
|
|
38
|
+
get(@default)
|
|
18
39
|
end
|
|
19
40
|
end
|