asker-tool 2.1.6 → 2.2.2
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.txt → LICENSE} +0 -0
- data/README.md +14 -15
- data/bin/asker +1 -1
- data/lib/asker/ai/ai.rb +6 -3
- data/lib/asker/ai/ai_calculate.rb +20 -6
- data/lib/asker/ai/concept_ai.rb +12 -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 +90 -49
- data/lib/asker/ai/stages/stage_d.rb +69 -90
- data/lib/asker/ai/stages/stage_f.rb +47 -38
- 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 +114 -73
- data/lib/asker/application.rb +7 -15
- data/lib/asker/check_input/input_data.rb +358 -0
- data/lib/asker/check_input.rb +51 -0
- data/lib/asker/cli.rb +28 -28
- data/lib/asker/data/code.rb +5 -16
- data/lib/asker/data/concept.rb +71 -24
- data/lib/asker/data/project_data.rb +63 -0
- data/lib/asker/data/table.rb +2 -0
- data/lib/asker/data/template.rb +3 -1
- data/lib/asker/data/world.rb +8 -16
- 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 +24 -22
- data/lib/asker/displayer/concept_displayer.rb +9 -4
- data/lib/asker/displayer/stats_displayer.rb +8 -0
- data/lib/asker/exporter/concept_ai_gift_exporter.rb +16 -10
- data/lib/asker/exporter/concept_ai_moodle_exporter.rb +44 -0
- data/lib/asker/exporter/concept_ai_yaml_exporter.rb +6 -3
- 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} +14 -4
- data/lib/asker/files/language/du/connectors.yaml +81 -0
- data/lib/asker/files/language/du/mistakes.yaml +82 -0
- data/lib/asker/files/language/du/templates.yaml +28 -49
- data/lib/asker/files/language/en/templates.yaml +19 -19
- data/lib/asker/files/language/es/mistakes.yaml +9 -7
- data/lib/asker/files/language/es/templates.yaml +19 -19
- data/lib/asker/files/language/fr/connectors.yaml +68 -84
- data/lib/asker/files/language/fr/templates.yaml +22 -22
- 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/lang/lang_factory.rb +7 -1
- data/lib/asker/loader/code_loader.rb +1 -1
- data/lib/asker/loader/content_loader.rb +12 -14
- 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 +1 -3
- data/lib/asker/loader/image_url_loader.rb +8 -9
- data/lib/asker/loader/input_loader.rb +5 -6
- data/lib/asker/loader/project_loader.rb +18 -10
- data/lib/asker/logger.rb +35 -8
- data/lib/asker/skeleton.rb +3 -2
- data/lib/asker.rb +72 -43
- metadata +43 -17
- data/lib/asker/checker.rb +0 -455
- data/lib/asker/project.rb +0 -146
data/lib/asker/checker.rb
DELETED
@@ -1,455 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'rainbow'
|
4
|
-
|
5
|
-
##
|
6
|
-
# Check HAML file syntax
|
7
|
-
module Checker
|
8
|
-
##
|
9
|
-
# Check:
|
10
|
-
# * file exist
|
11
|
-
# * filename extension
|
12
|
-
# * and HAML syntax
|
13
|
-
# @param filepath (String)
|
14
|
-
def self.check(filepath)
|
15
|
-
unless File.exist? filepath
|
16
|
-
puts Rainbow('File not found!').red.bright
|
17
|
-
return false
|
18
|
-
end
|
19
|
-
unless File.extname(filepath) == '.haml'
|
20
|
-
puts Rainbow('Only check HAML files!').yellow.bright
|
21
|
-
return false
|
22
|
-
end
|
23
|
-
check_filepath(filepath)
|
24
|
-
end
|
25
|
-
|
26
|
-
##
|
27
|
-
# Check HAML syntax
|
28
|
-
# @param filepath (String)
|
29
|
-
def self.check_filepath(filepath)
|
30
|
-
data = Data.new(filepath)
|
31
|
-
data.check
|
32
|
-
data.show_errors
|
33
|
-
data.ok?
|
34
|
-
end
|
35
|
-
|
36
|
-
##
|
37
|
-
# Internal class that revise syntax
|
38
|
-
# rubocop:disable Metrics/ClassLength
|
39
|
-
class Data
|
40
|
-
attr_reader :inputs
|
41
|
-
attr_reader :outputs
|
42
|
-
|
43
|
-
# rubocop:disable Metrics/MethodLength
|
44
|
-
def initialize(filepath)
|
45
|
-
@inputs = File.read(filepath).split("\n")
|
46
|
-
@outputs = []
|
47
|
-
@inputs.each_with_index do |line, index|
|
48
|
-
output = { id: index,
|
49
|
-
level: 0,
|
50
|
-
state: :none,
|
51
|
-
type: :none,
|
52
|
-
source: line,
|
53
|
-
msg: '' }
|
54
|
-
@outputs << output
|
55
|
-
end
|
56
|
-
@ok = false
|
57
|
-
end
|
58
|
-
# rubocop:enable Metrics/MethodLength
|
59
|
-
|
60
|
-
def ok?
|
61
|
-
@ok
|
62
|
-
end
|
63
|
-
|
64
|
-
def show
|
65
|
-
@outputs.each do |i|
|
66
|
-
puts "#{i[:id]}: #{i[:state]} [#{i[:type]}] #{i[:msg]}"
|
67
|
-
end
|
68
|
-
end
|
69
|
-
|
70
|
-
# rubocop:disable Metrics/AbcSize
|
71
|
-
# rubocop:disable Metrics/MethodLength
|
72
|
-
def show_errors
|
73
|
-
errors = 0
|
74
|
-
# puts "Line : Error description"
|
75
|
-
@outputs.each do |i|
|
76
|
-
next if i[:state] == :ok
|
77
|
-
|
78
|
-
errors += 1
|
79
|
-
if errors < 11
|
80
|
-
data = { id: i[:id], msg: i[:msg], source: i[:source][0, 40] }
|
81
|
-
puts format(' %<id>03d : %<msg>s. => %<source>s', data)
|
82
|
-
end
|
83
|
-
puts '...' if errors == 11
|
84
|
-
end
|
85
|
-
|
86
|
-
if errors.positive?
|
87
|
-
puts Rainbow("[ERROR] #{errors} errors " \
|
88
|
-
"from #{@inputs.size} lines!").red.bright
|
89
|
-
end
|
90
|
-
puts Rainbow('Syntax OK!').green if errors.zero?
|
91
|
-
end
|
92
|
-
# rubocop:enable Metrics/AbcSize
|
93
|
-
# rubocop:enable Metrics/MethodLength
|
94
|
-
|
95
|
-
# rubocop:disable Metrics/MethodLength
|
96
|
-
# rubocop:disable Metrics/AbcSize
|
97
|
-
def check
|
98
|
-
@ok = true
|
99
|
-
@inputs.each_with_index do |line, index|
|
100
|
-
check_empty_lines(line, index)
|
101
|
-
check_map(line, index)
|
102
|
-
check_concept(line, index)
|
103
|
-
check_names(line, index)
|
104
|
-
check_tags(line, index)
|
105
|
-
check_def(line, index)
|
106
|
-
check_table(line, index)
|
107
|
-
check_row(line, index)
|
108
|
-
check_col(line, index)
|
109
|
-
check_template(line, index)
|
110
|
-
check_code(line, index)
|
111
|
-
check_type(line, index)
|
112
|
-
check_path(line, index)
|
113
|
-
check_features(line, index)
|
114
|
-
check_unknown(line, index)
|
115
|
-
@ok = false unless @outputs[index][:state] == :ok
|
116
|
-
@ok = false if @outputs[index][:type] == :unkown
|
117
|
-
end
|
118
|
-
@ok
|
119
|
-
end
|
120
|
-
# rubocop:enable Metrics/MethodLength
|
121
|
-
# rubocop:enable Metrics/AbcSize
|
122
|
-
|
123
|
-
private
|
124
|
-
|
125
|
-
def check_empty_lines(line, index)
|
126
|
-
return unless line.strip.size.zero? || line.start_with?('#')
|
127
|
-
|
128
|
-
@outputs[index][:type] = :empty
|
129
|
-
@outputs[index][:level] = -1
|
130
|
-
@outputs[index][:state] = :ok
|
131
|
-
end
|
132
|
-
|
133
|
-
# rubocop:disable Metrics/MethodLength
|
134
|
-
def check_map(line, index)
|
135
|
-
if index.zero?
|
136
|
-
@outputs[index][:type] = :map
|
137
|
-
if line.start_with?('%map{')
|
138
|
-
@outputs[index][:state] = :ok
|
139
|
-
else
|
140
|
-
@outputs[index][:state] = :err
|
141
|
-
@outputs[index][:msg] = 'Start with %map{'
|
142
|
-
end
|
143
|
-
elsif index.positive? && line.include?('%map{')
|
144
|
-
@outputs[index][:state] = :err
|
145
|
-
@outputs[index][:type] = :map
|
146
|
-
@outputs[index][:msg] = 'Write %map on line 0'
|
147
|
-
end
|
148
|
-
end
|
149
|
-
# rubocop:enable Metrics/MethodLength
|
150
|
-
|
151
|
-
# rubocop:disable Metrics/MethodLength
|
152
|
-
def check_concept(line, index)
|
153
|
-
return unless @outputs[index][:state] == :none
|
154
|
-
return unless line.include? '%concept'
|
155
|
-
|
156
|
-
@outputs[index][:type] = :concept
|
157
|
-
@outputs[index][:level] = 1
|
158
|
-
@outputs[index][:state] = :ok
|
159
|
-
if find_parent(index) != :map
|
160
|
-
@outputs[index][:state] = :err
|
161
|
-
@outputs[index][:msg] = 'Parent(map) not found!'
|
162
|
-
elsif line != ' %concept'
|
163
|
-
@outputs[index][:state] = :err
|
164
|
-
@outputs[index][:msg] = 'Write 2 spaces before %concept'
|
165
|
-
end
|
166
|
-
end
|
167
|
-
# rubocop:enable Metrics/MethodLength
|
168
|
-
|
169
|
-
# rubocop:disable Metrics/AbcSize
|
170
|
-
# rubocop:disable Metrics/MethodLength
|
171
|
-
def check_names(line, index)
|
172
|
-
return unless @outputs[index][:state] == :none
|
173
|
-
return unless line.include? '%names'
|
174
|
-
|
175
|
-
@outputs[index][:type] = :names
|
176
|
-
@outputs[index][:level] = 2
|
177
|
-
@outputs[index][:state] = :ok
|
178
|
-
if find_parent(index) != :concept
|
179
|
-
@outputs[index][:state] = :err
|
180
|
-
@outputs[index][:msg] = 'Parent(concept) not found!'
|
181
|
-
elsif !line.start_with? ' %names'
|
182
|
-
@outputs[index][:state] = :err
|
183
|
-
@outputs[index][:msg] = 'Write 4 spaces before %names'
|
184
|
-
end
|
185
|
-
end
|
186
|
-
# rubocop:enable Metrics/AbcSize
|
187
|
-
# rubocop:enable Metrics/MethodLength
|
188
|
-
|
189
|
-
# rubocop:disable Metrics/AbcSize
|
190
|
-
# rubocop:disable Metrics/MethodLength
|
191
|
-
def check_tags(line, index)
|
192
|
-
return unless @outputs[index][:state] == :none
|
193
|
-
return unless line.include? '%tags'
|
194
|
-
|
195
|
-
@outputs[index][:type] = :tags
|
196
|
-
@outputs[index][:level] = 2
|
197
|
-
@outputs[index][:state] = :ok
|
198
|
-
if find_parent(index) != :concept
|
199
|
-
@outputs[index][:state] = :err
|
200
|
-
@outputs[index][:msg] = 'Parent(concept) not found!'
|
201
|
-
elsif !line.start_with? ' %tags'
|
202
|
-
@outputs[index][:state] = :err
|
203
|
-
@outputs[index][:msg] = 'Write 4 spaces before %tags'
|
204
|
-
end
|
205
|
-
end
|
206
|
-
# rubocop:enable Metrics/AbcSize
|
207
|
-
# rubocop:enable Metrics/MethodLength
|
208
|
-
|
209
|
-
# rubocop:disable Metrics/AbcSize
|
210
|
-
# rubocop:disable Metrics/MethodLength
|
211
|
-
def check_def(line, index)
|
212
|
-
return unless @outputs[index][:state] == :none
|
213
|
-
return unless line.include? '%def'
|
214
|
-
|
215
|
-
@outputs[index][:type] = :def
|
216
|
-
@outputs[index][:level] = 2
|
217
|
-
@outputs[index][:state] = :ok
|
218
|
-
if find_parent(index) != :concept
|
219
|
-
@outputs[index][:state] = :err
|
220
|
-
@outputs[index][:msg] = 'Parent(concept) not found!'
|
221
|
-
elsif !line.start_with? ' %def'
|
222
|
-
@outputs[index][:state] = :err
|
223
|
-
@outputs[index][:msg] = 'Write 4 spaces before %def'
|
224
|
-
end
|
225
|
-
end
|
226
|
-
# rubocop:enable Metrics/AbcSize
|
227
|
-
# rubocop:enable Metrics/MethodLength
|
228
|
-
|
229
|
-
# rubocop:disable Metrics/AbcSize
|
230
|
-
# rubocop:disable Metrics/MethodLength
|
231
|
-
def check_table(line, index)
|
232
|
-
return unless @outputs[index][:state] == :none
|
233
|
-
return unless line.include? '%table'
|
234
|
-
|
235
|
-
@outputs[index][:type] = :table
|
236
|
-
@outputs[index][:level] = 2
|
237
|
-
@outputs[index][:state] = :ok
|
238
|
-
if find_parent(index) != :concept
|
239
|
-
@outputs[index][:state] = :err
|
240
|
-
@outputs[index][:msg] = 'Parent(concept) not found!'
|
241
|
-
elsif !line.start_with? ' %table'
|
242
|
-
@outputs[index][:state] = :err
|
243
|
-
@outputs[index][:msg] = 'Write 4 spaces before %table'
|
244
|
-
end
|
245
|
-
end
|
246
|
-
# rubocop:enable Metrics/AbcSize
|
247
|
-
# rubocop:enable Metrics/MethodLength
|
248
|
-
|
249
|
-
# rubocop:disable Metrics/AbcSize
|
250
|
-
# rubocop:disable Metrics/CyclomaticComplexity
|
251
|
-
# rubocop:disable Metrics/MethodLength
|
252
|
-
# rubocop:disable Metrics/PerceivedComplexity
|
253
|
-
def check_row(line, index)
|
254
|
-
return unless @outputs[index][:state] == :none
|
255
|
-
return unless line.include? '%row'
|
256
|
-
|
257
|
-
@outputs[index][:type] = :row
|
258
|
-
@outputs[index][:state] = :ok
|
259
|
-
|
260
|
-
if count_spaces(line) == 6
|
261
|
-
@outputs[index][:level] = 3
|
262
|
-
parent = find_parent(index)
|
263
|
-
unless %i[table features].include? parent
|
264
|
-
@outputs[index][:state] = :err
|
265
|
-
@outputs[index][:msg] = 'Parent(table/features) not found!'
|
266
|
-
end
|
267
|
-
elsif count_spaces(line) == 8
|
268
|
-
@outputs[index][:level] = 4
|
269
|
-
if find_parent(index) != :template
|
270
|
-
@outputs[index][:state] = :err
|
271
|
-
@outputs[index][:msg] = 'Parent(template) not found!'
|
272
|
-
end
|
273
|
-
else
|
274
|
-
@outputs[index][:state] = :err
|
275
|
-
@outputs[index][:msg] = 'Write 6 or 8 spaces before %row'
|
276
|
-
end
|
277
|
-
end
|
278
|
-
# rubocop:enable Metrics/AbcSize
|
279
|
-
# rubocop:enable Metrics/CyclomaticComplexity
|
280
|
-
# rubocop:enable Metrics/MethodLength
|
281
|
-
# rubocop:enable Metrics/PerceivedComplexity
|
282
|
-
|
283
|
-
# rubocop:disable Metrics/AbcSize
|
284
|
-
# rubocop:disable Metrics/CyclomaticComplexity
|
285
|
-
# rubocop:disable Metrics/MethodLength
|
286
|
-
# rubocop:disable Metrics/PerceivedComplexity
|
287
|
-
def check_col(line, index)
|
288
|
-
return unless @outputs[index][:state] == :none
|
289
|
-
return unless line.include? '%col'
|
290
|
-
|
291
|
-
@outputs[index][:type] = :col
|
292
|
-
@outputs[index][:state] = :ok
|
293
|
-
if count_spaces(line) == 8
|
294
|
-
@outputs[index][:level] = 4
|
295
|
-
if find_parent(index) != :row
|
296
|
-
@outputs[index][:state] = :err
|
297
|
-
@outputs[index][:msg] = 'Parent(row) not found!'
|
298
|
-
end
|
299
|
-
elsif count_spaces(line) == 10
|
300
|
-
@outputs[index][:level] = 5
|
301
|
-
if find_parent(index) != :row
|
302
|
-
@outputs[index][:state] = :err
|
303
|
-
@outputs[index][:msg] = 'Parent(row) not found!'
|
304
|
-
end
|
305
|
-
else
|
306
|
-
@outputs[index][:state] = :err
|
307
|
-
@outputs[index][:msg] = 'Write 8 or 10 spaces before %col'
|
308
|
-
end
|
309
|
-
check_text(line, index)
|
310
|
-
end
|
311
|
-
# rubocop:enable Metrics/AbcSize
|
312
|
-
# rubocop:enable Metrics/CyclomaticComplexity
|
313
|
-
# rubocop:enable Metrics/MethodLength
|
314
|
-
# rubocop:enable Metrics/PerceivedComplexity
|
315
|
-
|
316
|
-
def check_text(line, index)
|
317
|
-
return unless @outputs[index][:state] == :ok
|
318
|
-
|
319
|
-
ok = ''
|
320
|
-
%w[< >].each do |char|
|
321
|
-
ok = char if line.include? char
|
322
|
-
end
|
323
|
-
return if ok == ''
|
324
|
-
|
325
|
-
@outputs[index][:state] = :err
|
326
|
-
@outputs[index][:msg] = "Char #{ok} not allow!"
|
327
|
-
end
|
328
|
-
|
329
|
-
# rubocop:disable Metrics/MethodLength
|
330
|
-
# rubocop:disable Metrics/AbcSize
|
331
|
-
def check_template(line, index)
|
332
|
-
return unless @outputs[index][:state] == :none
|
333
|
-
return unless line.include? '%template'
|
334
|
-
|
335
|
-
@outputs[index][:type] = :template
|
336
|
-
@outputs[index][:level] = 3
|
337
|
-
@outputs[index][:state] = :ok
|
338
|
-
if find_parent(index) != :table
|
339
|
-
@outputs[index][:state] = :err
|
340
|
-
@outputs[index][:msg] = 'Parent(concept) not found!'
|
341
|
-
elsif !line.start_with? ' %template'
|
342
|
-
@outputs[index][:state] = :err
|
343
|
-
@outputs[index][:msg] = 'Write 6 spaces before %template'
|
344
|
-
end
|
345
|
-
end
|
346
|
-
# rubocop:enable Metrics/AbcSize
|
347
|
-
# rubocop:enable Metrics/MethodLength
|
348
|
-
|
349
|
-
# rubocop:disable Metrics/MethodLength
|
350
|
-
def check_code(line, index)
|
351
|
-
return unless @outputs[index][:state] == :none
|
352
|
-
return unless line.include? '%code'
|
353
|
-
|
354
|
-
@outputs[index][:type] = :code
|
355
|
-
@outputs[index][:level] = 1
|
356
|
-
@outputs[index][:state] = :ok
|
357
|
-
if find_parent(index) != :map
|
358
|
-
@outputs[index][:state] = :err
|
359
|
-
@outputs[index][:msg] = 'Parent(map) not found!'
|
360
|
-
elsif line != ' %code'
|
361
|
-
@outputs[index][:state] = :err
|
362
|
-
@outputs[index][:msg] = 'Write 2 spaces before %code'
|
363
|
-
end
|
364
|
-
end
|
365
|
-
# rubocop:enable Metrics/MethodLength
|
366
|
-
|
367
|
-
# rubocop:disable Metrics/MethodLength
|
368
|
-
# rubocop:disable Metrics/AbcSize
|
369
|
-
def check_type(line, index)
|
370
|
-
return unless @outputs[index][:state] == :none
|
371
|
-
return unless line.include? '%type'
|
372
|
-
|
373
|
-
@outputs[index][:type] = :type
|
374
|
-
@outputs[index][:level] = 2
|
375
|
-
@outputs[index][:state] = :ok
|
376
|
-
if find_parent(index) != :code
|
377
|
-
@outputs[index][:state] = :err
|
378
|
-
@outputs[index][:msg] = 'Parent(code) not found!'
|
379
|
-
elsif !line.start_with? ' %type'
|
380
|
-
@outputs[index][:state] = :err
|
381
|
-
@outputs[index][:msg] = 'Write 4 spaces before %type'
|
382
|
-
end
|
383
|
-
end
|
384
|
-
# rubocop:enable Metrics/AbcSize
|
385
|
-
# rubocop:enable Metrics/MethodLength
|
386
|
-
|
387
|
-
# rubocop:disable Metrics/MethodLength
|
388
|
-
# rubocop:disable Metrics/AbcSize
|
389
|
-
def check_path(line, index)
|
390
|
-
return unless @outputs[index][:state] == :none
|
391
|
-
return unless line.include? '%path'
|
392
|
-
|
393
|
-
@outputs[index][:type] = :path
|
394
|
-
@outputs[index][:level] = 2
|
395
|
-
@outputs[index][:state] = :ok
|
396
|
-
if find_parent(index) != :code
|
397
|
-
@outputs[index][:state] = :err
|
398
|
-
@outputs[index][:msg] = 'Parent(code) not found!'
|
399
|
-
elsif !line.start_with? ' %path'
|
400
|
-
@outputs[index][:state] = :err
|
401
|
-
@outputs[index][:msg] = 'Write 4 spaces before %type'
|
402
|
-
end
|
403
|
-
end
|
404
|
-
# rubocop:enable Metrics/AbcSize
|
405
|
-
# rubocop:enable Metrics/MethodLength
|
406
|
-
|
407
|
-
# rubocop:disable Metrics/MethodLength
|
408
|
-
# rubocop:disable Metrics/AbcSize
|
409
|
-
def check_features(line, index)
|
410
|
-
return unless @outputs[index][:state] == :none
|
411
|
-
return unless line.include? '%features'
|
412
|
-
|
413
|
-
@outputs[index][:type] = :features
|
414
|
-
@outputs[index][:level] = 2
|
415
|
-
@outputs[index][:state] = :ok
|
416
|
-
if find_parent(index) != :code
|
417
|
-
@outputs[index][:state] = :err
|
418
|
-
@outputs[index][:msg] = 'Parent(code) not found!'
|
419
|
-
elsif !line.start_with? ' %features'
|
420
|
-
@outputs[index][:state] = :err
|
421
|
-
@outputs[index][:msg] = 'Write 4 spaces before %features'
|
422
|
-
end
|
423
|
-
end
|
424
|
-
# rubocop:enable Metrics/AbcSize
|
425
|
-
# rubocop:enable Metrics/MethodLength
|
426
|
-
|
427
|
-
def check_unknown(line, index)
|
428
|
-
return unless @outputs[index][:state] == :none
|
429
|
-
|
430
|
-
@outputs[index][:type] = :unknown
|
431
|
-
@outputs[index][:level] = count_spaces(line) / 2
|
432
|
-
@outputs[index][:state] = :err
|
433
|
-
@outputs[index][:msg] = "Unknown tag with parent(#{find_parent(index)})!"
|
434
|
-
end
|
435
|
-
|
436
|
-
def find_parent(index)
|
437
|
-
current_level = @outputs[index][:level]
|
438
|
-
return :noparent if current_level.zero?
|
439
|
-
|
440
|
-
i = index - 1
|
441
|
-
while i >= 0
|
442
|
-
return @outputs[i][:type] if @outputs[i][:level] == current_level - 1
|
443
|
-
|
444
|
-
i -= 1
|
445
|
-
end
|
446
|
-
:noparent
|
447
|
-
end
|
448
|
-
|
449
|
-
def count_spaces(line)
|
450
|
-
a = line.split('%')
|
451
|
-
a[0].count(' ')
|
452
|
-
end
|
453
|
-
end
|
454
|
-
# rubocop:enable Metrics/ClassLength
|
455
|
-
end
|
data/lib/asker/project.rb
DELETED
@@ -1,146 +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
|
-
stages: { d: true, b: true, f: true, i: true, s: true, t: true },
|
25
|
-
threshold: 0.5 }
|
26
|
-
@param = {}
|
27
|
-
end
|
28
|
-
|
29
|
-
##
|
30
|
-
# Get value param
|
31
|
-
# @param key (Symbol) key
|
32
|
-
def get(key)
|
33
|
-
return @param[key] unless @param[key].nil?
|
34
|
-
|
35
|
-
@default[key]
|
36
|
-
end
|
37
|
-
|
38
|
-
##
|
39
|
-
# Set value param
|
40
|
-
# @param key (Symbol) key
|
41
|
-
# @param value (String) value
|
42
|
-
def set(key, value)
|
43
|
-
@param[key] = value
|
44
|
-
end
|
45
|
-
|
46
|
-
##
|
47
|
-
# Open new project
|
48
|
-
# * setting new params and
|
49
|
-
# * creating output files
|
50
|
-
# IMPORTANT: We need at least theses values
|
51
|
-
# * process_file
|
52
|
-
# * inputdirs
|
53
|
-
def open
|
54
|
-
config = Application.instance.config
|
55
|
-
ext = File.extname(@param[:process_file]) || '.haml'
|
56
|
-
#@param[:process_file] = @param[:process_file] ||
|
57
|
-
# get(:projectdir).split(File::SEPARATOR).last + ext
|
58
|
-
@param[:projectname] = @param[:projectname] ||
|
59
|
-
File.basename(@param[:process_file], ext)
|
60
|
-
#@param[:inputdirs] = @param[:inputdirs] ||
|
61
|
-
# File.join(get(:inputbasedir), @param[:projectdir])
|
62
|
-
|
63
|
-
@param[:logname] = "#{@param[:projectname]}-log.txt"
|
64
|
-
@param[:outputname] = "#{@param[:projectname]}-gift.txt"
|
65
|
-
@param[:lessonname] = "#{@param[:projectname]}-doc.txt"
|
66
|
-
@param[:yamlname] = "#{@param[:projectname]}.yaml"
|
67
|
-
|
68
|
-
outputdir = config['global']['outputdir']
|
69
|
-
@param[:logpath] = File.join(outputdir, get(:logname))
|
70
|
-
@param[:outputpath] = File.join(outputdir, get(:outputname))
|
71
|
-
@param[:lessonpath] = File.join(outputdir, get(:lessonname))
|
72
|
-
@param[:yamlpath] = File.join(outputdir, get(:yamlname))
|
73
|
-
|
74
|
-
Dir.mkdir(outputdir) unless Dir.exist?(outputdir)
|
75
|
-
create_log_file
|
76
|
-
create_output_file
|
77
|
-
create_lesson_file
|
78
|
-
create_yaml_file
|
79
|
-
end
|
80
|
-
|
81
|
-
##
|
82
|
-
# Close output files
|
83
|
-
def close
|
84
|
-
get(:logfile).close
|
85
|
-
get(:outputfile).close
|
86
|
-
get(:lessonfile).close
|
87
|
-
get(:yamlfile).close
|
88
|
-
end
|
89
|
-
|
90
|
-
def method_missing(method, *_args, &_block)
|
91
|
-
get(method)
|
92
|
-
end
|
93
|
-
|
94
|
-
private
|
95
|
-
|
96
|
-
# create or reset logfile
|
97
|
-
def create_log_file
|
98
|
-
@param[:logfile] = File.open(get(:logpath), 'w')
|
99
|
-
f = get(:logfile)
|
100
|
-
f.write('=' * 50 + "\n")
|
101
|
-
f.write("Created by : #{Application::NAME}")
|
102
|
-
f.write(" (version #{Application::VERSION})\n")
|
103
|
-
f.write("File : #{get(:logname)}\n")
|
104
|
-
f.write("Time : #{Time.new}\n")
|
105
|
-
f.write("Author : David Vargas Ruiz\n")
|
106
|
-
f.write('=' * 50 + "\n\n")
|
107
|
-
|
108
|
-
Logger.verbose '[INFO] Project open'
|
109
|
-
Logger.verbose ' ├── inputdirs = ' + Rainbow(get(:inputdirs)).bright
|
110
|
-
Logger.verbose ' └── process_file = ' + Rainbow(get(:process_file)).bright
|
111
|
-
end
|
112
|
-
|
113
|
-
# Create or reset output file
|
114
|
-
def create_output_file
|
115
|
-
config = Application.instance.config
|
116
|
-
@param[:outputfile] = File.open(get(:outputpath), 'w')
|
117
|
-
f = get(:outputfile)
|
118
|
-
f.write('// ' + ('=' * 50) + "\n")
|
119
|
-
f.write("// Created by : #{Application::NAME}")
|
120
|
-
f.write(" (version #{Application::VERSION})\n")
|
121
|
-
f.write("// File : #{get(:outputname)}\n")
|
122
|
-
f.write("// Time : #{Time.new}\n")
|
123
|
-
f.write("// Author : David Vargas Ruiz\n")
|
124
|
-
f.write('// ' + ('=' * 50) + "\n\n")
|
125
|
-
category = config['questions']['category']
|
126
|
-
f.write("$CATEGORY: $course$/#{category}\n") unless category.nil?
|
127
|
-
end
|
128
|
-
|
129
|
-
# Create or reset lesson file
|
130
|
-
def create_lesson_file
|
131
|
-
@param[:lessonfile] = File.new(get(:lessonpath), 'w')
|
132
|
-
f = get(:lessonfile)
|
133
|
-
f.write('=' * 50 + "\n")
|
134
|
-
f.write("Created by : #{Application::NAME}")
|
135
|
-
f.write(" (version #{Application::VERSION})\n")
|
136
|
-
f.write("File : #{get(:lessonname)}\n")
|
137
|
-
f.write("Time : #{Time.new}\n")
|
138
|
-
f.write("Author : David Vargas Ruiz\n")
|
139
|
-
f.write('=' * 50 + "\n")
|
140
|
-
end
|
141
|
-
|
142
|
-
# Create or reset yaml file
|
143
|
-
def create_yaml_file
|
144
|
-
@param[:yamlfile] = File.open(get(:yamlpath), 'w')
|
145
|
-
end
|
146
|
-
end
|