asker-tool 2.1.3 → 2.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (130) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +18 -19
  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 +12 -2
  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 +24 -7
  23. data/lib/asker/checker.rb +149 -52
  24. data/lib/asker/cli.rb +37 -32
  25. data/lib/asker/data/code.rb +76 -0
  26. data/lib/asker/data/column.rb +31 -21
  27. data/lib/asker/data/concept.rb +108 -65
  28. data/lib/asker/data/data_field.rb +14 -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 +61 -32
  33. data/lib/asker/{exporter/code_screen_exporter.rb → displayer/code_displayer.rb} +13 -6
  34. data/lib/asker/displayer/concept_ai_displayer.erb +10 -0
  35. data/lib/asker/displayer/concept_ai_displayer.rb +133 -0
  36. data/lib/asker/displayer/concept_displayer.rb +34 -0
  37. data/lib/asker/displayer/stats_displayer.rb +22 -0
  38. data/lib/asker/exporter/code_gift_exporter.rb +10 -11
  39. data/lib/asker/exporter/concept_ai_gift_exporter.rb +21 -13
  40. data/lib/asker/exporter/concept_ai_moodle_exporter.rb +44 -0
  41. data/lib/asker/exporter/concept_ai_yaml_exporter.rb +14 -9
  42. data/lib/asker/exporter/concept_doc_exporter.rb +21 -14
  43. data/lib/asker/exporter/data_gift_exporter.rb +29 -0
  44. data/lib/asker/exporter/output_file_exporter.rb +21 -0
  45. data/lib/asker/files/{config.ini → asker.ini} +48 -1
  46. data/lib/asker/files/example-concept.haml +24 -8
  47. data/lib/asker/files/language/du/connectors.yaml +81 -0
  48. data/lib/asker/files/language/du/mistakes.yaml +82 -0
  49. data/lib/asker/files/language/du/templates.yaml +29 -0
  50. data/lib/asker/files/language/en/connectors.yaml +44 -0
  51. data/lib/asker/files/language/en/mistakes.yaml +37 -0
  52. data/lib/asker/files/language/en/templates.yaml +29 -0
  53. data/lib/asker/files/language/es/connectors.yaml +92 -0
  54. data/lib/asker/files/language/es/mistakes.yaml +84 -0
  55. data/lib/asker/files/language/es/templates.yaml +29 -0
  56. data/lib/asker/files/language/fr/connectors.yaml +76 -0
  57. data/lib/asker/files/language/fr/mistakes.yaml +82 -0
  58. data/lib/asker/files/language/fr/templates.yaml +29 -0
  59. data/lib/asker/files/language/javascript/connectors.yaml +11 -0
  60. data/lib/asker/files/language/javascript/mistakes.yaml +30 -0
  61. data/lib/asker/files/language/javascript/templates.yaml +3 -0
  62. data/lib/asker/files/language/math/connectors.yaml +2 -0
  63. data/lib/asker/files/language/math/mistakes.yaml +2 -0
  64. data/lib/asker/files/language/math/templates.yaml +1 -0
  65. data/lib/asker/files/language/python/connectors.yaml +11 -0
  66. data/lib/asker/files/language/python/mistakes.yaml +26 -0
  67. data/lib/asker/files/language/python/templates.yaml +3 -0
  68. data/lib/asker/files/language/ruby/connectors.yaml +11 -0
  69. data/lib/asker/files/language/ruby/mistakes.yaml +33 -0
  70. data/lib/asker/files/language/ruby/templates.yaml +3 -0
  71. data/lib/asker/files/language/sql/connectors.yaml +6 -0
  72. data/lib/asker/files/language/sql/mistakes.yaml +11 -0
  73. data/lib/asker/files/language/sql/templates.yaml +2 -0
  74. data/lib/asker/formatter/concept_string_formatter.rb +13 -9
  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/lang/lang.rb +18 -12
  82. data/lib/asker/lang/lang_factory.rb +32 -5
  83. data/lib/asker/lang/text_actions.rb +87 -69
  84. data/lib/asker/loader/code_loader.rb +4 -4
  85. data/lib/asker/loader/content_loader.rb +16 -12
  86. data/lib/asker/loader/directory_loader.rb +3 -3
  87. data/lib/asker/loader/embedded_file.rb +42 -0
  88. data/lib/asker/loader/file_loader.rb +3 -12
  89. data/lib/asker/loader/haml_loader.rb +15 -0
  90. data/lib/asker/loader/image_url_loader.rb +9 -11
  91. data/lib/asker/loader/input_loader.rb +24 -8
  92. data/lib/asker/loader/project_loader.rb +42 -30
  93. data/lib/asker/logger.rb +30 -6
  94. data/lib/asker/project.rb +28 -117
  95. data/lib/asker/skeleton.rb +40 -29
  96. data/lib/asker.rb +68 -79
  97. metadata +57 -74
  98. data/docs/changelog/v2.1.md +0 -99
  99. data/docs/commands.md +0 -12
  100. data/docs/contributions.md +0 -18
  101. data/docs/history.md +0 -40
  102. data/docs/idea.md +0 -44
  103. data/docs/inputs/README.md +0 -39
  104. data/docs/inputs/code.md +0 -69
  105. data/docs/inputs/concepts.md +0 -142
  106. data/docs/inputs/jedi.md +0 -68
  107. data/docs/inputs/tables.md +0 -112
  108. data/docs/inputs/templates.md +0 -87
  109. data/docs/install/README.md +0 -38
  110. data/docs/install/manual.md +0 -26
  111. data/docs/install/scripts.md +0 -38
  112. data/docs/revise/asker-file.md +0 -41
  113. data/docs/revise/buenas-practicas/01-convocatoria.md +0 -30
  114. data/docs/revise/buenas-practicas/02-formulario.md +0 -35
  115. data/docs/revise/buenas-practicas/03-descripcion.md +0 -63
  116. data/docs/revise/buenas-practicas/04-resultados.md +0 -17
  117. data/docs/revise/buenas-practicas/05-reproducir.md +0 -10
  118. data/docs/revise/ejemplos/01/README.md +0 -27
  119. data/docs/revise/ejemplos/02/README.md +0 -31
  120. data/docs/revise/ejemplos/03/README.md +0 -31
  121. data/docs/revise/ejemplos/04/README.md +0 -37
  122. data/docs/revise/ejemplos/05/README.md +0 -25
  123. data/docs/revise/ejemplos/06/README.md +0 -43
  124. data/docs/revise/ejemplos/README.md +0 -11
  125. data/docs/revise/projects.md +0 -74
  126. data/lib/asker/code/ai/base_code_ai.rb +0 -48
  127. data/lib/asker/code/code.rb +0 -53
  128. data/lib/asker/exporter/concept_ai_screen_exporter.rb +0 -115
  129. data/lib/asker/exporter/concept_screen_exporter.rb +0 -25
  130. data/lib/asker/exporter/main.rb +0 -9
@@ -1,170 +1,211 @@
1
- # encoding: utf-8
1
+ # frozen_string_literal: true
2
2
 
3
3
  require 'set'
4
4
  require_relative 'base_stage'
5
5
  require_relative '../question'
6
6
 
7
+ ##
8
+ # StageT create questions based con Table data
9
+ # range t1-t9
10
+ # rubocop:disable Metrics/ClassLength
7
11
  class StageT < BaseStage
8
- #range t1-t9...c1-c9
9
-
10
- def run(pTable, pRow, pList) #process_tableXfields
12
+ # process_tableXfields
13
+ # rubocop:disable Metrics/MethodLength
14
+ # rubocop:disable Metrics/AbcSize
15
+ def run(table, row, list)
11
16
  questions = []
12
- return questions unless type=="text"
13
-
14
- if pTable.fields.count>1 then
15
- questions = questions + process_table2fields(pTable, pRow, pList, 0, 1)
16
- elsif pTable.fields.count>2 then
17
- questions = questions + process_table2fields(pTable, pRow, pList, 0, 2)
18
- questions = questions + process_table2fields(pTable, pRow, pList, 1, 2)
19
- elsif pTable.fields.count>3 then
20
- questions = questions + process_table2fields(pTable, pRow, pList, 0, 3)
21
- questions = questions + process_table2fields(pTable, pRow, pList, 1, 3)
22
- questions = questions + process_table2fields(pTable, pRow, pList, 2, 3)
17
+ return questions unless concept.type == 'text'
18
+
19
+ if table.fields.count == 2
20
+ questions += process_table2fields(table, row, list, 0, 1)
21
+ elsif table.fields.count == 3
22
+ questions += process_table2fields(table, row, list, 0, 1)
23
+ questions += process_table2fields(table, row, list, 0, 2)
24
+ elsif table.fields.count == 4
25
+ questions += process_table2fields(table, row, list, 0, 1)
26
+ questions += process_table2fields(table, row, list, 0, 2)
27
+ questions += process_table2fields(table, row, list, 0, 3)
23
28
  end
24
29
 
25
- return questions
30
+ questions
26
31
  end
32
+ # rubocop:enable Metrics/MethodLength
33
+ # rubocop:enable Metrics/AbcSize
34
+
35
+ private
27
36
 
28
- private
29
- def process_table2fields(lTable, lRow, pList, pCol1, pCol2)
37
+ # rubocop:disable Metrics/MethodLength
38
+ # rubocop:disable Metrics/AbcSize
39
+ # rubocop:disable Metrics/CyclomaticComplexity
40
+ # rubocop:disable Metrics/PerceivedComplexity
41
+ def process_table2fields(table, row, list, col1, col2)
30
42
  questions = []
31
- #create gift questions
32
-
33
- # Using the column #0
34
- s=Set.new [ lRow[:data][0] , lang.text_for(:none) ]
35
- pList.each { |i| s.add( i[:data][0] ) }
36
- a=s.to_a
37
-
38
- if s.count>3 then
39
- q=Question.new
40
- q.name="#{name}-#{num.to_s}-t1table-#{lTable.name}"
41
- q.text=lang.text_for(:t1table, name, lTable.fields[0].capitalize, lTable.fields[1].capitalize, lRow[:data][1])
42
- q.good=lRow[:data][0]
43
+ lang = concept.lang
44
+ # create questions
45
+
46
+ # Question choice: Using the column #0
47
+ s = Set.new [row[:data][col1], lang.text_for(:none)]
48
+ list.each { |i| s.add(i[:data][col1]) }
49
+ a = s.to_a
50
+
51
+ if s.count > 3
52
+ q = Question.new
53
+ q.name = "#{name}-#{num}-t1table-#{table.name}"
54
+ q.text = random_image_for(name) \
55
+ + lang.text_for(:t1table, name, table.fields[col1].capitalize, \
56
+ table.fields[col2].capitalize, row[:data][col2])
57
+ q.good = row[:data][col1]
43
58
  q.bads << lang.text_for(:none)
44
59
  q.bads << a[2]
45
60
  q.bads << a[3]
46
61
  questions << q
47
62
  end
48
63
 
49
- s=Set.new [ lRow[:data][0], lang.text_for(:none) ]
50
- pList.each { |i| s.add( i[:data][0] ) }
51
- a=s.to_a
52
-
53
- if s.count>4 then
54
- q=Question.new
55
- q.name="#{name}-#{num.to_s}-t2table-#{lTable.name}"
56
- q.text=lang.text_for(:t2table, name, lTable.fields[0].capitalize, lTable.fields[1].capitalize, lRow[:data][1])
57
- q.good=lang.text_for(:none)
64
+ s = Set.new [row[:data][col1], lang.text_for(:none)]
65
+ list.each { |i| s.add(i[:data][col1]) }
66
+ a = s.to_a
67
+
68
+ if s.count > 4
69
+ q = Question.new
70
+ q.name = "#{name}-#{num}-t2table-#{table.name}"
71
+ q.text = random_image_for(name) \
72
+ + lang.text_for(:t2table, name, table.fields[col1].capitalize, \
73
+ table.fields[col2].capitalize, row[:data][col2])
74
+ q.good = lang.text_for(:none)
58
75
  q.bads << a[2]
59
76
  q.bads << a[3]
60
77
  q.bads << a[4]
61
78
  questions << q
62
79
  end
63
80
 
64
- # Using the column #1
65
- s=Set.new [ lRow[:data][1], lang.text_for(:none) ]
66
- pList.each { |i| s.add( i[:data][1] ) }
67
- a=s.to_a
68
-
69
- if s.count>3 then
70
- q=Question.new
71
- q.name="#{name}-#{num.to_s}-t3table-#{lTable.name}"
72
- q.text=lang.text_for(:t3table, name, lTable.fields[0].capitalize, lRow[:data][0], lTable.fields[1].capitalize)
73
- q.good=a[0]
81
+ # Question choice: Using the column #1
82
+ s = Set.new [row[:data][col2], lang.text_for(:none)]
83
+ list.each { |i| s.add(i[:data][col2]) }
84
+ a = s.to_a
85
+
86
+ if s.count > 3
87
+ q = Question.new
88
+ q.name = "#{name}-#{num}-t3table-#{table.name}"
89
+ q.text = random_image_for(name) \
90
+ + lang.text_for(:t3table, name, table.fields[col1].capitalize, \
91
+ row[:data][col1], table.fields[col2].capitalize)
92
+ q.good = a[0]
74
93
  q.bads << lang.text_for(:none)
75
94
  q.bads << a[2]
76
95
  q.bads << a[3]
77
96
  questions << q
78
97
  end
79
98
 
80
- s=Set.new [ lRow[:data][1], lang.text_for(:none) ]
81
- pList.each { |i| s.add( i[:data][1] ) }
82
- a=s.to_a
83
-
84
- if s.count>4 then
85
- q=Question.new
86
- q.name="#{name}-#{num.to_s}-t4table-#{lTable.name}"
87
- q.text=lang.text_for(:t4table, name, lTable.fields[0].capitalize, lRow[:data][0], lTable.fields[1].capitalize)
88
- q.good=lang.text_for(:none)
99
+ s = Set.new [row[:data][col2], lang.text_for(:none)]
100
+ list.each { |i| s.add(i[:data][col2]) }
101
+ a = s.to_a
102
+
103
+ if s.count > 4
104
+ q = Question.new
105
+ q.name = "#{name}-#{num}-t4table-#{table.name}"
106
+ q.text = random_image_for(name) \
107
+ + lang.text_for(:t4table, name, table.fields[col1].capitalize, \
108
+ row[:data][col1], table.fields[col2].capitalize)
109
+ q.good = lang.text_for(:none)
89
110
  q.bads << a[2]
90
111
  q.bads << a[3]
91
112
  q.bads << a[4]
92
113
  questions << q
93
114
  end
94
115
 
95
- # Boolean association TRUE
96
- q=Question.new
116
+ # Question Boolean: TRUE
117
+ q = Question.new
97
118
  q.set_boolean
98
- q.name="#{name}-#{num.to_s}t5table-#{lTable.name}"
99
- q.text=lang.text_for(:t5table, name, lTable.fields[0].capitalize, lRow[:data][0] ,lTable.fields[1].capitalize, lRow[:data][1] )
100
- q.good="TRUE"
119
+ q.name = "#{name}-#{num}t5table-#{table.name}"
120
+ q.text = random_image_for(name) \
121
+ + lang.text_for(:t5table, name, table.fields[col1].capitalize, \
122
+ row[:data][col1], table.fields[col2].capitalize, row[:data][col2])
123
+ q.good = 'TRUE'
101
124
  questions << q
102
125
 
103
- # Boolean association FALSE
104
- s=Set.new [ lRow[:data][1] ]
105
- pList.each { |i| s.add( i[:data][1] ) }
106
- a=s.to_a
126
+ # Question Boolean: FALSE
127
+ s = Set.new [row[:data][col2]]
128
+ list.each { |i| s.add(i[:data][col2]) }
129
+ a = s.to_a
107
130
 
108
- if s.count>1 then
109
- q=Question.new
131
+ if s.count > 1
132
+ q = Question.new
110
133
  q.set_boolean
111
- q.name="#{name}-#{num.to_s}-t6table-#{lTable.name}"
112
- q.text=lang.text_for(:t6table, name, lTable.fields[0].capitalize, lRow[:data][0], lTable.fields[1].capitalize, a[1] )
113
- q.good="FALSE"
134
+ q.name = "#{name}-#{num}-t6table-#{table.name}"
135
+ q.text = random_image_for(name) \
136
+ + lang.text_for(:t6table, name, table.fields[col1].capitalize, \
137
+ row[:data][col1], table.fields[col2].capitalize, a[1])
138
+ q.good = 'FALSE'
114
139
  questions << q
115
140
  end
116
141
 
117
- s=Set.new [ lRow[:data][0] ]
118
- pList.each { |i| s.add( i[:data][0] ) }
119
- a=s.to_a
142
+ s = Set.new [row[:data][col1]]
143
+ list.each { |i| s.add(i[:data][col1]) }
144
+ a = s.to_a
120
145
 
121
- if s.count>1 then
122
- q=Question.new
146
+ if s.count > 1
147
+ q = Question.new
123
148
  q.set_boolean
124
- q.name="#{name}-#{num.to_s}t7table-#{lTable.name}"
125
- q.text=lang.text_for(:t7table, name, lTable.fields[0].capitalize, a[1], lTable.fields[1].capitalize, lRow[:data][1] )
126
- q.good="FALSE"
149
+ q.name = "#{name}-#{num}t7table-#{table.name}"
150
+ q.text = random_image_for(name) \
151
+ + lang.text_for(:t7table, name, table.fields[col1].capitalize, \
152
+ a[1], table.fields[col2].capitalize, row[:data][col2])
153
+ q.good = 'FALSE'
127
154
  questions << q
128
155
  end
129
156
 
130
- # Short answer with column #0, 1 word
131
- if lang.count_words(lRow[:data][0])==1 then
132
- q=Question.new
157
+ # Question Short: column #0, 1 word
158
+ if lang.count_words(row[:data][col1]) == 1
159
+ q = Question.new
133
160
  q.set_short
134
- q.name="#{name}-#{num.to_s}t8table-#{lTable.name}"
135
- q.text=lang.text_for(:t8table, name, lTable.fields[1].capitalize, lRow[:data][1], lTable.fields[0].capitalize)
136
- q.shorts << lRow[:data][0]
137
- q.shorts << lRow[:data][0].gsub("-"," ").gsub("_"," ")
161
+ q.name = "#{name}-#{num}t8table-#{table.name}"
162
+ q.text = random_image_for(name) \
163
+ + lang.text_for(:t8table, name, table.fields[col2].capitalize, \
164
+ row[:data][col2], table.fields[col1].capitalize)
165
+ q.shorts << row[:data][col1]
166
+ q.shorts << row[:data][col1].gsub('-', ' ').gsub('_', ' ')
138
167
  questions << q
139
- elsif lang.count_words(lRow[:data][0])==2 then
140
- q=Question.new
168
+ elsif lang.count_words(row[:data][col1]) == 2
169
+ q = Question.new
141
170
  q.set_short
142
- q.name="#{name}-#{num.to_s}t9table-#{lTable.name}"
143
- q.text=lang.text_for(:t9table, name, lTable.fields[1].capitalize, lRow[:data][1], lTable.fields[0].capitalize, "[#{lang.hide_text(lRow[:data][0])}]", lang.count_words(lRow[:data][0]) )
144
- q.shorts << lRow[:data][0]
145
- q.shorts << lRow[:data][0].gsub("-"," ").gsub("_"," ")
171
+ q.name = "#{name}-#{num}t9table-#{table.name}"
172
+ q.text = random_image_for(name) \
173
+ + lang.text_for(:t9table, name, table.fields[col2].capitalize, \
174
+ row[:data][col2], table.fields[col1].capitalize, \
175
+ "[#{lang.hide_text(row[:data][col1])}]", lang.count_words(row[:data][col1]))
176
+ q.shorts << row[:data][col1]
177
+ q.shorts << row[:data][col1].gsub('-', ' ').gsub('_', ' ')
146
178
  questions << q
147
179
  end
148
180
 
149
- # Short answer with column #1, 1 word
150
- if lang.count_words(lRow[:data][1])==1 then
151
- q=Question.new
181
+ # Question Short: column #1, 1 word
182
+ if lang.count_words(row[:data][col2]) == 1
183
+ q = Question.new
152
184
  q.set_short
153
- q.name="#{name}-#{num.to_s}t8table-#{lTable.name}"
154
- q.text=lang.text_for(:t8table, name, lTable.fields[0].capitalize, lRow[:data][0], lTable.fields[1].capitalize)
155
- q.shorts << lRow[:data][1]
156
- q.shorts << lRow[:data][1].gsub("-"," ").gsub("_"," ")
185
+ q.name = "#{name}-#{num}t8table-#{table.name}"
186
+ q.text = random_image_for(name) \
187
+ + lang.text_for(:t8table, name, table.fields[col1].capitalize, \
188
+ row[:data][col1], table.fields[col2].capitalize)
189
+ q.shorts << row[:data][col2]
190
+ q.shorts << row[:data][col2].gsub('-', ' ').gsub('_', ' ')
157
191
  questions << q
158
- elsif lang.count_words(lRow[:data][1])==2 then
159
- q=Question.new
192
+ elsif lang.count_words(row[:data][col2]) == 2
193
+ q = Question.new
160
194
  q.set_short
161
- q.name="#{name}-#{num.to_s}t9table-#{lTable.name}"
162
- q.text=lang.text_for(:t9table, name, lTable.fields[0].capitalize, lRow[:data][0], lTable.fields[1].capitalize, "[#{lang.hide_text(lRow[:data][1])}]", lang.count_words(lRow[:data][1]) )
163
- q.shorts << lRow[:data][1]
164
- q.shorts << lRow[:data][1].gsub("-"," ").gsub("_"," ")
195
+ q.name = "#{name}-#{num}t9table-#{table.name}"
196
+ q.text = random_image_for(name) \
197
+ + lang.text_for(:t9table, name, table.fields[col1].capitalize, \
198
+ row[:data][col1], table.fields[col2].capitalize, \
199
+ "[#{lang.hide_text(row[:data][col2])}]", lang.count_words(row[:data][col2]))
200
+ q.shorts << row[:data][col2]
201
+ q.shorts << row[:data][col2].gsub('-', ' ').gsub('_', ' ')
165
202
  questions << q
166
203
  end
167
- return questions
204
+ questions
168
205
  end
169
-
206
+ # rubocop:enable Metrics/MethodLength
207
+ # rubocop:enable Metrics/AbcSize
208
+ # rubocop:enable Metrics/CyclomaticComplexity
209
+ # rubocop:enable Metrics/PerceivedComplexity
170
210
  end
211
+ # rubocop:enable Metrics/ClassLength
@@ -2,14 +2,17 @@
2
2
 
3
3
  require 'singleton'
4
4
  require 'inifile'
5
+ require 'rainbow'
5
6
 
6
7
  # Global parameters
7
8
  class Application
8
9
  include Singleton
9
10
 
10
- VERSION = '2.1.3' # Application version
11
- NAME = 'asker' # Application name
12
- GEM = 'asker-tool' # Gem name
11
+ VERSION = '2.2.0' # Application version
12
+ NAME = 'asker' # Application name
13
+ HOMEPAGE = "https://github.com/dvarrui/#{NAME}/tree/v2.2"
14
+ GEM = 'asker-tool' # Gem name
15
+ CONFIGFILE = 'asker.ini' # Config filename
13
16
  attr_reader :config
14
17
 
15
18
  ##
@@ -20,11 +23,25 @@ class Application
20
23
 
21
24
  ##
22
25
  # Initialize config values from external "config.ini" file.
26
+ # rubocop:disable Metrics/AbcSize
27
+ # rubocop:disable Metrics/MethodLength
23
28
  def reset
24
- filename = File.join(Dir.pwd, 'config.ini')
25
- unless File.exist? filename
26
- filename = File.join(File.dirname(__FILE__), 'files', 'config.ini')
29
+ filename = File.join(Dir.pwd, CONFIGFILE)
30
+ filename = File.join(File.dirname(__FILE__), 'files', CONFIGFILE) unless File.exist? filename
31
+
32
+ begin
33
+ @config = IniFile.load(filename)
34
+ rescue StandardError => e
35
+ puts e.display
36
+ puts Rainbow('[ERROR] Revise configuration file:').red.bright
37
+ puts Rainbow(" #{filename}").red.bright
38
+ exit 1
27
39
  end
28
- @config = IniFile.load(filename)
40
+ stages = @config['questions']['stages'].split(',')
41
+ @config['questions']['stages'] = stages.map(&:to_sym)
42
+ Rainbow.enabled = false
43
+ Rainbow.enabled = true if @config['global']['color'].downcase == 'yes'
29
44
  end
45
+ # rubocop:enable Metrics/MethodLength
46
+ # rubocop:enable Metrics/AbcSize
30
47
  end