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.
Files changed (111) hide show
  1. checksums.yaml +4 -4
  2. data/{LICENSE → LICENSE.txt} +0 -0
  3. data/README.md +17 -18
  4. data/bin/asker +1 -0
  5. data/lib/asker.rb +43 -74
  6. data/lib/asker/ai/ai.rb +4 -0
  7. data/lib/asker/ai/code/base_code_ai.rb +104 -0
  8. data/lib/asker/{code/ai → ai/code}/code_ai_factory.rb +11 -1
  9. data/lib/asker/{code/ai → ai/code}/javascript_code_ai.rb +2 -5
  10. data/lib/asker/ai/code/problem_code_ai.rb +176 -0
  11. data/lib/asker/{code/ai → ai/code}/python_code_ai.rb +2 -5
  12. data/lib/asker/{code/ai → ai/code}/ruby_code_ai.rb +14 -7
  13. data/lib/asker/{code/ai → ai/code}/sql_code_ai.rb +2 -5
  14. data/lib/asker/ai/concept_ai.rb +1 -0
  15. data/lib/asker/ai/stages/stage_t.rb +76 -76
  16. data/lib/asker/application.rb +19 -3
  17. data/lib/asker/checker.rb +152 -53
  18. data/lib/asker/cli.rb +19 -22
  19. data/lib/asker/data/code.rb +73 -0
  20. data/lib/asker/data/column.rb +31 -21
  21. data/lib/asker/data/concept.rb +42 -45
  22. data/lib/asker/data/data_field.rb +14 -0
  23. data/lib/asker/data/row.rb +75 -52
  24. data/lib/asker/data/table.rb +89 -42
  25. data/lib/asker/data/world.rb +58 -32
  26. data/lib/asker/{exporter/code_screen_exporter.rb → displayer/code_displayer.rb} +6 -6
  27. data/lib/asker/displayer/concept_ai_displayer.rb +132 -0
  28. data/lib/asker/displayer/concept_displayer.rb +29 -0
  29. data/lib/asker/displayer/stats_displayer.rb +14 -0
  30. data/lib/asker/exporter/code_gift_exporter.rb +10 -11
  31. data/lib/asker/exporter/concept_ai_gift_exporter.rb +23 -11
  32. data/lib/asker/exporter/concept_ai_yaml_exporter.rb +9 -7
  33. data/lib/asker/exporter/concept_doc_exporter.rb +9 -15
  34. data/lib/asker/exporter/output_file_exporter.rb +18 -0
  35. data/lib/asker/files/config.ini +37 -0
  36. data/lib/asker/files/example-code.haml +0 -0
  37. data/lib/asker/files/example-concept.haml +29 -0
  38. data/lib/asker/files/language/du/templates.yaml +50 -0
  39. data/lib/asker/files/language/en/connectors.yaml +44 -0
  40. data/lib/asker/files/language/en/mistakes.yaml +37 -0
  41. data/lib/asker/files/language/en/templates.yaml +29 -0
  42. data/lib/asker/files/language/es/connectors.yaml +92 -0
  43. data/lib/asker/files/language/es/mistakes.yaml +82 -0
  44. data/lib/asker/files/language/es/templates.yaml +29 -0
  45. data/lib/asker/files/language/fr/connectors.yaml +92 -0
  46. data/lib/asker/files/language/fr/mistakes.yaml +82 -0
  47. data/lib/asker/files/language/fr/templates.yaml +29 -0
  48. data/lib/asker/files/language/javascript/connectors.yaml +11 -0
  49. data/lib/asker/files/language/javascript/mistakes.yaml +30 -0
  50. data/lib/asker/files/language/javascript/templates.yaml +3 -0
  51. data/lib/asker/files/language/math/connectors.yaml +2 -0
  52. data/lib/asker/files/language/math/mistakes.yaml +2 -0
  53. data/lib/asker/files/language/math/templates.yaml +1 -0
  54. data/lib/asker/files/language/python/connectors.yaml +11 -0
  55. data/lib/asker/files/language/python/mistakes.yaml +26 -0
  56. data/lib/asker/files/language/python/templates.yaml +3 -0
  57. data/lib/asker/files/language/ruby/connectors.yaml +11 -0
  58. data/lib/asker/files/language/ruby/mistakes.yaml +33 -0
  59. data/lib/asker/files/language/ruby/templates.yaml +3 -0
  60. data/lib/asker/files/language/sql/connectors.yaml +6 -0
  61. data/lib/asker/files/language/sql/mistakes.yaml +11 -0
  62. data/lib/asker/files/language/sql/templates.yaml +2 -0
  63. data/lib/asker/formatter/concept_string_formatter.rb +9 -8
  64. data/lib/asker/formatter/question_gift_formatter.rb +9 -1
  65. data/lib/asker/lang/lang.rb +18 -12
  66. data/lib/asker/lang/lang_factory.rb +26 -5
  67. data/lib/asker/lang/text_actions.rb +87 -69
  68. data/lib/asker/loader/code_loader.rb +3 -3
  69. data/lib/asker/loader/content_loader.rb +9 -5
  70. data/lib/asker/loader/file_loader.rb +2 -11
  71. data/lib/asker/loader/haml_loader.rb +15 -0
  72. data/lib/asker/loader/image_url_loader.rb +5 -8
  73. data/lib/asker/loader/input_loader.rb +23 -7
  74. data/lib/asker/loader/project_loader.rb +32 -29
  75. data/lib/asker/logger.rb +3 -4
  76. data/lib/asker/project.rb +28 -52
  77. data/lib/asker/skeleton.rb +73 -0
  78. metadata +62 -73
  79. data/docs/changelog/v2.1.md +0 -99
  80. data/docs/commands.md +0 -15
  81. data/docs/contributions.md +0 -18
  82. data/docs/history.md +0 -40
  83. data/docs/idea.md +0 -44
  84. data/docs/inputs/README.md +0 -39
  85. data/docs/inputs/code.md +0 -69
  86. data/docs/inputs/concepts.md +0 -142
  87. data/docs/inputs/jedi.md +0 -68
  88. data/docs/inputs/tables.md +0 -112
  89. data/docs/inputs/templates.md +0 -87
  90. data/docs/install/README.md +0 -38
  91. data/docs/install/manual.md +0 -26
  92. data/docs/install/scripts.md +0 -26
  93. data/docs/revise/asker-file.md +0 -41
  94. data/docs/revise/buenas-practicas/01-convocatoria.md +0 -30
  95. data/docs/revise/buenas-practicas/02-formulario.md +0 -35
  96. data/docs/revise/buenas-practicas/03-descripcion.md +0 -63
  97. data/docs/revise/buenas-practicas/04-resultados.md +0 -17
  98. data/docs/revise/buenas-practicas/05-reproducir.md +0 -10
  99. data/docs/revise/ejemplos/01/README.md +0 -27
  100. data/docs/revise/ejemplos/02/README.md +0 -31
  101. data/docs/revise/ejemplos/03/README.md +0 -31
  102. data/docs/revise/ejemplos/04/README.md +0 -37
  103. data/docs/revise/ejemplos/05/README.md +0 -25
  104. data/docs/revise/ejemplos/06/README.md +0 -43
  105. data/docs/revise/ejemplos/README.md +0 -11
  106. data/docs/revise/projects.md +0 -74
  107. data/lib/asker/code/ai/base_code_ai.rb +0 -48
  108. data/lib/asker/code/code.rb +0 -53
  109. data/lib/asker/exporter/concept_ai_screen_exporter.rb +0 -115
  110. data/lib/asker/exporter/concept_screen_exporter.rb +0 -25
  111. 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,11 @@
1
+ ---
2
+ - '[*]'
3
+ - '.'
4
+ - ','
5
+ - ';'
6
+ - '('
7
+ - ')'
8
+ - '{'
9
+ - '}'
10
+ - '['
11
+ - ']'
@@ -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,3 @@
1
+ ---
2
+ :code1: '<pre><%=text1%></pre><br/><p>Escribir el número de línea donde está el primer error. Escribir 0 si no hay ningún error.</p>'
3
+ :code2: '<pre><%=text1%></pre><br/><p>Elegir el número de línea donde está el primer error. Elegir 0 si no hay ningún error.</p>'
@@ -0,0 +1,2 @@
1
+ ---
2
+ - '[*]'
@@ -0,0 +1,2 @@
1
+ ---
2
+ :0: '1'
@@ -0,0 +1,11 @@
1
+ ---
2
+ - '[*]'
3
+ - '.'
4
+ - ','
5
+ - ';'
6
+ - '('
7
+ - ')'
8
+ - '{'
9
+ - '}'
10
+ - '['
11
+ - ']'
@@ -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,3 @@
1
+ ---
2
+ :code1: '<pre><%=text1%></pre><br/><p>Escribir el número de línea donde está el primer error. Escribir 0 si no hay ningún error.</p>'
3
+ :code2: '<pre><%=text1%></pre><br/><p>Elegir el número de línea donde está el primer error. Elegir 0 si no hay ningún error.</p>'
@@ -0,0 +1,11 @@
1
+ ---
2
+ - '[*]'
3
+ - '.'
4
+ - ','
5
+ - ';'
6
+ - '('
7
+ - ')'
8
+ - '{'
9
+ - '}'
10
+ - '['
11
+ - ']'
@@ -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,3 @@
1
+ ---
2
+ :code1: '<pre><%=text1%></pre><br/><p>Escribir el número de línea donde está el primer error. Escribir 0 si no hay ningún error.</p>'
3
+ :code2: '<pre><%=text1%></pre><br/><p>Elegir el número de línea donde está el primer error. Elegir 0 si no hay ningún error.</p>'
@@ -0,0 +1,6 @@
1
+ ---
2
+ - '[*]'
3
+ - ','
4
+ - ';'
5
+ - '('
6
+ - ')'
@@ -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
+ :): '],}'
@@ -0,0 +1,2 @@
1
+ ---
2
+ :code1: '<pre><%=text1%></pre><br/><p>Escribir el número de línea donde está el primer error. Escribir 0 si no hay ningún error.</p>'
@@ -11,14 +11,14 @@ module ConceptStringFormatter
11
11
  # @return String
12
12
  def self.to_s(concept)
13
13
  tt = Terminal::Table.new
14
- rows = get_tt_rows(concept)
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
- def self.get_tt_rows(concept)
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
- # encoding: utf-8
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!("#", "\\#")
@@ -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
- filename = File.join(dirbase, 'locales', @code, 'templates.yaml')
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
- @templates = YAML.load(File.new(filename))
38
+ content = YAML.load(File.new(filepath))
29
39
  rescue StandardError => e
30
- p = Project.instance
31
- p.vervose "[ERROR] lang.initialize(): Reading YAML file <#{filename}>"
32
- p.vervose "[ADVISE] Revise apostrophe into string without \\ char\n"
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
- filename = File.join(dirbase, 'locales', @code, 'connectors.yaml')
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 '../project'
5
+ require_relative '../application'
6
6
 
7
- # LangFactory#get
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
- Project.instance.locales.each { |i| @langs[i] = Lang.new(i) }
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
- def get(locale)
17
- @langs[locale]
35
+ ##
36
+ # Return default Lang object
37
+ def default
38
+ get(@default)
18
39
  end
19
40
  end