asker-tool 2.6.0 → 2.7.0
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/README.md +4 -4
- data/lib/asker/ai/ai.rb +6 -6
- data/lib/asker/ai/ai_calculate.rb +3 -3
- data/lib/asker/ai/code/base_code_ai.rb +5 -30
- data/lib/asker/ai/code/code_ai_factory.rb +6 -12
- data/lib/asker/ai/code/javascript_code_ai.rb +33 -34
- data/lib/asker/ai/code/python_code_ai.rb +35 -36
- data/lib/asker/ai/code/ruby_code_ai.rb +33 -33
- data/lib/asker/ai/code/sql_code_ai.rb +20 -21
- data/lib/asker/ai/concept_ai.rb +12 -22
- data/lib/asker/ai/problem/problem_ai.rb +226 -0
- data/lib/asker/ai/question.rb +34 -45
- data/lib/asker/ai/stages/base_stage.rb +7 -7
- data/lib/asker/ai/stages/stage_b.rb +62 -28
- data/lib/asker/ai/stages/stage_d.rb +10 -10
- data/lib/asker/ai/stages/stage_f.rb +17 -17
- data/lib/asker/ai/stages/stage_i.rb +8 -18
- data/lib/asker/ai/stages/stage_s.rb +28 -26
- data/lib/asker/ai/stages/stage_t.rb +40 -51
- data/lib/asker/application.rb +15 -14
- data/lib/asker/check_input/check_haml_data.rb +52 -51
- data/lib/asker/check_input/check_table.rb +17 -20
- data/lib/asker/check_input.rb +10 -23
- data/lib/asker/cli.rb +43 -24
- data/lib/asker/data/code.rb +10 -9
- data/lib/asker/data/column.rb +21 -17
- data/lib/asker/data/concept.rb +24 -37
- data/lib/asker/data/data_field.rb +2 -2
- data/lib/asker/data/problem.rb +112 -0
- data/lib/asker/data/project_data.rb +11 -15
- data/lib/asker/data/row.rb +25 -23
- data/lib/asker/data/table.rb +25 -46
- data/lib/asker/data/template.rb +7 -7
- data/lib/asker/data/world.rb +3 -3
- data/lib/asker/{formatter → deprecated}/question_moodlexml_formatter.rb +19 -21
- data/lib/asker/displayer/code_displayer.rb +10 -10
- data/lib/asker/displayer/concept_ai_displayer.erb +1 -1
- data/lib/asker/displayer/concept_ai_displayer.rb +16 -16
- data/lib/asker/displayer/concept_displayer.rb +4 -2
- data/lib/asker/displayer/problem_displayer.rb +45 -0
- data/lib/asker/displayer/stats_displayer.rb +7 -12
- data/lib/asker/exporter/code_gift_exporter.rb +2 -2
- data/lib/asker/exporter/concept_ai_gift_exporter.rb +4 -4
- data/lib/asker/exporter/concept_ai_yaml_exporter.rb +7 -7
- data/lib/asker/exporter/concept_doc_exporter.rb +5 -5
- data/lib/asker/exporter/data_gift_exporter.rb +14 -15
- data/lib/asker/exporter/data_moodle_exporter.rb +51 -20
- data/lib/asker/exporter/output_file_exporter.rb +9 -8
- data/lib/asker/exporter/problem_gift_exporter.rb +30 -0
- data/lib/asker/files/language/ca/templates.yaml +6 -0
- data/lib/asker/files/language/du/templates.yaml +6 -0
- data/lib/asker/files/language/en/templates.yaml +7 -1
- data/lib/asker/files/language/es/templates.yaml +6 -0
- data/lib/asker/files/language/fr/templates.yaml +6 -0
- data/lib/asker/formatter/code_string_formatter.rb +5 -5
- data/lib/asker/formatter/concept_doc_formatter.rb +3 -3
- data/lib/asker/formatter/concept_string_formatter.rb +6 -6
- data/lib/asker/formatter/moodle/ddmatch.erb +40 -0
- data/lib/asker/formatter/moodle/gapfill.erb +57 -0
- data/lib/asker/formatter/moodle/ordering.erb +41 -0
- data/lib/asker/formatter/question_gift_formatter.rb +41 -14
- data/lib/asker/formatter/question_hash_formatter.rb +5 -6
- data/lib/asker/formatter/question_moodle_formatter.rb +14 -7
- data/lib/asker/formatter/rb2haml_formatter.rb +8 -7
- data/lib/asker/lang/lang.rb +16 -16
- data/lib/asker/lang/lang_factory.rb +13 -16
- data/lib/asker/lang/text_actions.rb +20 -18
- data/lib/asker/loader/code_loader.rb +10 -22
- data/lib/asker/loader/content_loader.rb +42 -49
- data/lib/asker/loader/directory_loader.rb +13 -16
- data/lib/asker/loader/embedded_file.rb +14 -14
- data/lib/asker/loader/file_loader.rb +5 -4
- data/lib/asker/loader/haml_loader.rb +4 -3
- data/lib/asker/loader/image_url_loader.rb +6 -5
- data/lib/asker/loader/input_loader.rb +24 -10
- data/lib/asker/loader/problem_loader.rb +88 -0
- data/lib/asker/loader/project_loader.rb +5 -12
- data/lib/asker/logger.rb +19 -10
- data/lib/asker/skeleton.rb +19 -35
- data/lib/asker/start.rb +44 -0
- data/lib/asker/version.rb +1 -1
- data/lib/asker.rb +7 -52
- metadata +12 -6
- data/lib/asker/ai/code/problem_code_ai.rb +0 -176
- data/lib/asker/exporter/code_moodle_exporter.rb +0 -15
- data/lib/asker/exporter/concept_ai_moodle_exporter.rb +0 -15
@@ -1,34 +1,48 @@
|
|
1
1
|
require_relative "directory_loader"
|
2
2
|
require_relative "../ai/concept_ai"
|
3
|
+
require_relative "../ai/code/code_ai_factory"
|
4
|
+
require_relative "../ai/problem/problem_ai"
|
3
5
|
require_relative "../data/world"
|
4
6
|
|
5
|
-
|
7
|
+
class InputLoader
|
6
8
|
##
|
7
9
|
# Load input data from every input directory
|
8
10
|
# @param inputdirs (Array)
|
9
|
-
def
|
10
|
-
data = {
|
11
|
+
def call(inputdirs, internet = true)
|
12
|
+
data = {
|
13
|
+
world: nil,
|
14
|
+
concepts: [], codes: [], problems: [],
|
15
|
+
concepts_ai: [], codes_ai: []
|
16
|
+
}
|
11
17
|
inputdirs.each do |dirname|
|
12
|
-
|
13
|
-
data[:concepts] +=
|
14
|
-
data[:codes] +=
|
18
|
+
loaded = DirectoryLoader.call(dirname)
|
19
|
+
data[:concepts] += loaded[:concepts]
|
20
|
+
data[:codes] += loaded[:codes]
|
21
|
+
data[:problems] += loaded[:problems]
|
15
22
|
end
|
16
23
|
create_questions(data, internet)
|
17
24
|
end
|
18
25
|
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
#
|
26
|
+
private
|
27
|
+
|
28
|
+
def create_questions(data, internet)
|
29
|
+
# Create World data. Calculate concept neighbours
|
30
|
+
# TODO: Calculate code and problem neighbours
|
23
31
|
data[:world] = World.new(data[:concepts], internet)
|
32
|
+
|
24
33
|
# Create ConceptAI data (ConceptAI = concept + questions)
|
25
34
|
data[:concepts].each do |concept|
|
26
35
|
data[:concepts_ai] << ConceptAI.new(concept, data[:world])
|
27
36
|
end
|
37
|
+
|
28
38
|
# Create CodeAI data (CodeAI = code + questions)
|
29
39
|
data[:codes].each do |code|
|
30
40
|
data[:codes_ai] << CodeAIFactory.get(code)
|
31
41
|
end
|
42
|
+
|
43
|
+
# Fill problem with questions
|
44
|
+
data[:problems].each { |problem| ProblemAI.new.call(problem) }
|
45
|
+
|
32
46
|
data
|
33
47
|
end
|
34
48
|
end
|
@@ -0,0 +1,88 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "rexml/document"
|
4
|
+
require_relative "../logger"
|
5
|
+
require_relative "../data/problem"
|
6
|
+
|
7
|
+
class ProblemLoader
|
8
|
+
def initialize(lang, context)
|
9
|
+
@lang = lang
|
10
|
+
@context = context
|
11
|
+
end
|
12
|
+
|
13
|
+
##
|
14
|
+
# Load XML data about Problem object
|
15
|
+
# @param xmldata (XML Object)
|
16
|
+
# @param filepath (String)
|
17
|
+
# @return Problem object
|
18
|
+
def call(xmldata, filepath)
|
19
|
+
data = read_problemdata_from_xml(xmldata, File.basename(filepath))
|
20
|
+
problem = Problem.from(data)
|
21
|
+
problem.lang = @lang
|
22
|
+
problem.context = @context
|
23
|
+
problem
|
24
|
+
end
|
25
|
+
|
26
|
+
private
|
27
|
+
|
28
|
+
def read_problemdata_from_xml(xmldata, filename)
|
29
|
+
data = {
|
30
|
+
filename: filename,
|
31
|
+
varnames: [],
|
32
|
+
cases: [],
|
33
|
+
descs: [],
|
34
|
+
asks: [],
|
35
|
+
formats: {}
|
36
|
+
}
|
37
|
+
xmldata.elements.each do |i|
|
38
|
+
case i.name
|
39
|
+
when "cases"
|
40
|
+
sep = i.attributes["sep"]&.strip || ","
|
41
|
+
data[:varnames] = i.attributes["varnames"].split(sep)
|
42
|
+
data[:varnames].map! { _1.strip }
|
43
|
+
data[:cases] = read_cases(i, filename, sep)
|
44
|
+
when "desc"
|
45
|
+
data[:descs] << i.text
|
46
|
+
type = i.attributes["type"]
|
47
|
+
unless type.nil?
|
48
|
+
key = "desc#{data[:descs].size}"
|
49
|
+
data[:formats][key] = type
|
50
|
+
end
|
51
|
+
when "ask"
|
52
|
+
data[:asks] << read_ask(i, filename)
|
53
|
+
else
|
54
|
+
Logger.warn "ProblemLoader: Unkown tag problem/#{i.name} (#{filename})"
|
55
|
+
end
|
56
|
+
end
|
57
|
+
data
|
58
|
+
end
|
59
|
+
|
60
|
+
def read_ask(xmldata, filename)
|
61
|
+
ask = {text: nil, answer: nil, steps: []}
|
62
|
+
xmldata.elements.each do |i|
|
63
|
+
if i.name == "text"
|
64
|
+
ask[:text] = i.text
|
65
|
+
elsif i.name == "answer"
|
66
|
+
ask[:answer] = i.text
|
67
|
+
elsif i.name == "step"
|
68
|
+
ask[:steps] << i.text
|
69
|
+
else
|
70
|
+
Logger.warn "ProblemLoader: Unkown tag problem/ask/#{i.name} (#{filename})"
|
71
|
+
end
|
72
|
+
end
|
73
|
+
ask
|
74
|
+
end
|
75
|
+
|
76
|
+
def read_cases(xmldata, filename, sep)
|
77
|
+
cases = []
|
78
|
+
|
79
|
+
xmldata.elements.each do |i|
|
80
|
+
if i.name == "case"
|
81
|
+
cases << i.text.split(sep).map { _1.strip }
|
82
|
+
else
|
83
|
+
Logger.warn "ProblemLoader: Unkown tag problem/cases/#{i.name} (#{filename})"
|
84
|
+
end
|
85
|
+
end
|
86
|
+
cases
|
87
|
+
end
|
88
|
+
end
|
@@ -2,13 +2,12 @@
|
|
2
2
|
|
3
3
|
require "yaml"
|
4
4
|
require_relative "../data/project_data"
|
5
|
+
require_relative "../logger"
|
5
6
|
|
6
|
-
# Load params into Project class using arg input
|
7
7
|
module ProjectLoader
|
8
8
|
##
|
9
9
|
# Load project from args
|
10
10
|
# @param args (String or Hash)
|
11
|
-
# rubocop:disable Metrics/MethodLength
|
12
11
|
def self.load(args)
|
13
12
|
project = ProjectData.instance
|
14
13
|
|
@@ -22,10 +21,8 @@ module ProjectLoader
|
|
22
21
|
return project
|
23
22
|
end
|
24
23
|
|
25
|
-
|
26
|
-
|
27
|
-
puts Rainbow(msg).red
|
28
|
-
raise msg
|
24
|
+
Logger.error "ProjectLoader: loading args with incorrect type (#{args.class})"
|
25
|
+
exit 1
|
29
26
|
end
|
30
27
|
|
31
28
|
##
|
@@ -34,13 +31,10 @@ module ProjectLoader
|
|
34
31
|
# * XML filepath
|
35
32
|
# * YAML filepath
|
36
33
|
# @param filepath (String)
|
37
|
-
# rubocop:disable Metrics/MethodLength
|
38
|
-
# rubocop:disable Metrics/AbcSize
|
39
34
|
def self.load_from_string(filepath)
|
40
35
|
project = ProjectData.instance
|
41
36
|
unless File.exist?(filepath)
|
42
|
-
|
43
|
-
puts msg
|
37
|
+
Logger.error "ProjectLoader: #{filepath} not found!"
|
44
38
|
exit 1
|
45
39
|
end
|
46
40
|
|
@@ -65,8 +59,7 @@ module ProjectLoader
|
|
65
59
|
##
|
66
60
|
# Error found and exit application.
|
67
61
|
def self.error_loading(arg)
|
68
|
-
|
69
|
-
puts msg
|
62
|
+
Logger.error "ProjectLoader: Loading... #{arg}"
|
70
63
|
exit 1
|
71
64
|
end
|
72
65
|
end
|
data/lib/asker/logger.rb
CHANGED
@@ -3,27 +3,36 @@ require_relative "version"
|
|
3
3
|
|
4
4
|
class Logger
|
5
5
|
include Singleton
|
6
|
-
@
|
6
|
+
@verbose = true
|
7
7
|
|
8
8
|
def set_verbose(value)
|
9
|
-
@
|
9
|
+
@verbose = (value == "yes")
|
10
10
|
end
|
11
11
|
|
12
|
-
def self.
|
13
|
-
|
12
|
+
def self.info(msg)
|
13
|
+
puts msg if @verbose
|
14
14
|
@logfile&.write(msg)
|
15
15
|
end
|
16
16
|
|
17
|
-
def self.
|
18
|
-
|
17
|
+
def self.warn(msg)
|
18
|
+
msg = Rainbow("[WARN] #{msg}\n").yellow.bright
|
19
|
+
puts msg if @verbose
|
20
|
+
@logfile&.write(msg)
|
19
21
|
end
|
20
22
|
|
21
|
-
def
|
22
|
-
|
23
|
+
def self.error(msg)
|
24
|
+
msg = Rainbow("[ERROR] #{msg}\n").red.bright
|
25
|
+
Warning.warn msg if @verbose
|
26
|
+
@logfile&.write(msg)
|
23
27
|
end
|
24
28
|
|
25
|
-
def
|
26
|
-
|
29
|
+
def self.verbose(msg)
|
30
|
+
print msg if @verbose
|
31
|
+
@logfile&.write(msg)
|
32
|
+
end
|
33
|
+
|
34
|
+
def self.verboseln(msg)
|
35
|
+
verbose(msg + "\n")
|
27
36
|
end
|
28
37
|
|
29
38
|
def self.create(logpath)
|
data/lib/asker/skeleton.rb
CHANGED
@@ -4,19 +4,16 @@ require "fileutils"
|
|
4
4
|
require "rainbow"
|
5
5
|
require_relative "version"
|
6
6
|
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
# rubocop:disable Metrics/MethodLength
|
18
|
-
def self.create_input(inputpath)
|
19
|
-
puts "\n[INFO] Creating example input #{Rainbow(inputpath).bright}"
|
7
|
+
class Skeleton
|
8
|
+
def create_configuration
|
9
|
+
puts "\nCreating configuration files"
|
10
|
+
src = File.join(File.dirname(__FILE__), "files", Asker::CONFIGFILE)
|
11
|
+
dst = File.join(Asker::CONFIGFILE)
|
12
|
+
copyfile(src, dst)
|
13
|
+
end
|
14
|
+
|
15
|
+
def create_input(inputpath)
|
16
|
+
puts "\nCreating example input #{Rainbow(inputpath).bright}"
|
20
17
|
if File.extname(inputpath) == ".haml"
|
21
18
|
dirpath = File.dirname(inputpath)
|
22
19
|
filename = File.basename(inputpath)
|
@@ -28,47 +25,34 @@ module Skeleton
|
|
28
25
|
source = File.join(File.dirname(__FILE__), "files", "example-concept.haml")
|
29
26
|
copyfile(source, File.join(dirpath, filename))
|
30
27
|
end
|
31
|
-
# rubocop:enable Metrics/MethodLength
|
32
28
|
|
33
|
-
|
34
|
-
# Create default configuration files
|
35
|
-
def self.create_configuration
|
36
|
-
puts "\n[INFO] Creating configuration files"
|
37
|
-
src = File.join(File.dirname(__FILE__), "files", Asker::CONFIGFILE)
|
38
|
-
dst = File.join(Asker::CONFIGFILE)
|
39
|
-
copyfile(src, dst)
|
40
|
-
end
|
29
|
+
private
|
41
30
|
|
42
|
-
|
43
|
-
# Create folder
|
44
|
-
# @param dirpath (String)
|
45
|
-
private_class_method def self.create_dir(dirpath)
|
31
|
+
def create_dir(dirpath)
|
46
32
|
if Dir.exist? dirpath
|
47
|
-
puts "* Exists dir! => #{Rainbow(dirpath).yellow}"
|
33
|
+
puts "* Exists dir! => #{Rainbow(dirpath).yellow.bright}"
|
48
34
|
else
|
49
35
|
begin
|
50
36
|
FileUtils.mkdir_p(dirpath)
|
51
37
|
puts "* Create dir => #{Rainbow(dirpath).green}"
|
52
38
|
rescue
|
53
|
-
|
39
|
+
warn "* Create dir ERROR => #{Rainbow(dirpath).red}"
|
40
|
+
exit 1
|
54
41
|
end
|
55
42
|
end
|
56
43
|
end
|
57
44
|
|
58
|
-
|
59
|
-
# Copy target file to dest
|
60
|
-
# @param target (String)
|
61
|
-
# @param dest (String)
|
62
|
-
private_class_method def self.copyfile(target, dest)
|
45
|
+
def copyfile(target, dest)
|
63
46
|
if File.exist? dest
|
64
|
-
puts "* Exists file! => #{Rainbow(dest).yellow}"
|
47
|
+
puts "* Exists file! => #{Rainbow(dest).yellow.bright}"
|
65
48
|
return true
|
66
49
|
end
|
67
50
|
begin
|
68
51
|
FileUtils.cp(target, dest)
|
69
52
|
puts "* Create file => #{Rainbow(dest).green}"
|
70
53
|
rescue
|
71
|
-
|
54
|
+
warn "* Create file ERROR => #{Rainbow(dest).red}"
|
55
|
+
exit 1
|
72
56
|
end
|
73
57
|
end
|
74
58
|
end
|
data/lib/asker/start.rb
ADDED
@@ -0,0 +1,44 @@
|
|
1
|
+
require_relative "application"
|
2
|
+
require_relative "logger"
|
3
|
+
require_relative "displayer/concept_displayer"
|
4
|
+
require_relative "displayer/stats_displayer"
|
5
|
+
require_relative "exporter/output_file_exporter"
|
6
|
+
require_relative "loader/project_loader"
|
7
|
+
require_relative "loader/input_loader"
|
8
|
+
|
9
|
+
class Start
|
10
|
+
def call(filepath)
|
11
|
+
project_data, data = load_input(filepath)
|
12
|
+
ConceptDisplayer.show(data[:concepts])
|
13
|
+
create_output(project_data, data)
|
14
|
+
end
|
15
|
+
|
16
|
+
private
|
17
|
+
|
18
|
+
def load_input(args)
|
19
|
+
init_project_data
|
20
|
+
project_data = ProjectLoader.load(args)
|
21
|
+
Logger.create(project_data.get(:logpath))
|
22
|
+
Logger.instance.set_verbose(Application.instance.config["verbose"])
|
23
|
+
|
24
|
+
inputdirs = project_data.get(:inputdirs).split(",")
|
25
|
+
internet = Application.instance.config["global"]["internet"] == "yes"
|
26
|
+
data = InputLoader.new.call(inputdirs, internet)
|
27
|
+
[project_data, data]
|
28
|
+
end
|
29
|
+
|
30
|
+
def init_project_data
|
31
|
+
project_data = ProjectData.instance
|
32
|
+
outputdir = Application.instance.config["output"]["folder"]
|
33
|
+
project_data.set(:outputdir, outputdir)
|
34
|
+
|
35
|
+
formula_weights = Application.instance.config["ai"]["formula_weights"]
|
36
|
+
project_data.set(:weights, formula_weights)
|
37
|
+
end
|
38
|
+
|
39
|
+
def create_output(project, data)
|
40
|
+
OutputFileExporter.export(data, project)
|
41
|
+
StatsDisplayer.show(data)
|
42
|
+
Logger.close
|
43
|
+
end
|
44
|
+
end
|
data/lib/asker/version.rb
CHANGED
data/lib/asker.rb
CHANGED
@@ -1,66 +1,21 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
require_relative
|
4
|
-
require_relative 'asker/check_input'
|
5
|
-
|
6
|
-
require_relative 'asker/displayer/concept_displayer'
|
7
|
-
require_relative 'asker/displayer/stats_displayer'
|
8
|
-
require_relative 'asker/exporter/output_file_exporter'
|
9
|
-
require_relative 'asker/logger'
|
10
|
-
|
11
|
-
require_relative 'asker/loader/project_loader'
|
12
|
-
require_relative 'asker/loader/input_loader'
|
1
|
+
require_relative "asker/check_input"
|
2
|
+
require_relative "asker/skeleton"
|
3
|
+
require_relative "asker/start"
|
13
4
|
|
14
5
|
class Asker
|
15
6
|
def self.init
|
16
|
-
Skeleton.create_configuration
|
7
|
+
Skeleton.new.create_configuration
|
17
8
|
end
|
18
9
|
|
19
10
|
def self.create_input(dirpath)
|
20
|
-
Skeleton.create_input(dirpath)
|
11
|
+
Skeleton.new.create_input(dirpath)
|
21
12
|
end
|
22
13
|
|
23
14
|
def self.check(filepath)
|
24
|
-
CheckInput.new.
|
15
|
+
CheckInput.new.check(filepath)
|
25
16
|
end
|
26
17
|
|
27
18
|
def self.start(filepath)
|
28
|
-
|
29
|
-
ConceptDisplayer.show(data[:concepts])
|
30
|
-
create_output(project_data, data)
|
31
|
-
end
|
32
|
-
|
33
|
-
private_class_method def self.load_input(args)
|
34
|
-
init_project_data
|
35
|
-
project_data = ProjectLoader.load(args)
|
36
|
-
init_logger(project_data)
|
37
|
-
|
38
|
-
inputdirs = project_data.get(:inputdirs).split(',')
|
39
|
-
internet = Application.instance.config['global']['internet'] == 'yes'
|
40
|
-
data = InputLoader.load(inputdirs, internet)
|
41
|
-
[project_data, data]
|
42
|
-
end
|
43
|
-
|
44
|
-
private_class_method def self.init_project_data()
|
45
|
-
project_data = ProjectData.instance
|
46
|
-
outputdir = Application.instance.config['output']['folder']
|
47
|
-
project_data.set(:outputdir, outputdir)
|
48
|
-
|
49
|
-
formula_weights = Application.instance.config['ai']['formula_weights']
|
50
|
-
project_data.set(:weights, formula_weights)
|
51
|
-
end
|
52
|
-
|
53
|
-
private_class_method def self.init_logger(project)
|
54
|
-
Logger.create(project.get(:logpath))
|
55
|
-
Logger.instance.set_verbose(Application.instance.config['verbose'])
|
56
|
-
Logger.verboseln '[INFO] Project open'
|
57
|
-
Logger.verboseln ' ├── inputdirs = ' + Rainbow(project.get(:inputdirs)).bright
|
58
|
-
Logger.verboseln ' └── process_file = ' + Rainbow(project.get(:process_file)).bright
|
59
|
-
end
|
60
|
-
|
61
|
-
private_class_method def self.create_output(project, data)
|
62
|
-
OutputFileExporter.export(data, project)
|
63
|
-
StatsDisplayer.show(data)
|
64
|
-
Logger.close
|
19
|
+
Start.new.call(filepath)
|
65
20
|
end
|
66
21
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: asker-tool
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.7.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- David Vargas Ruiz
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-
|
11
|
+
date: 2023-06-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: haml
|
@@ -113,11 +113,11 @@ files:
|
|
113
113
|
- lib/asker/ai/code/base_code_ai.rb
|
114
114
|
- lib/asker/ai/code/code_ai_factory.rb
|
115
115
|
- lib/asker/ai/code/javascript_code_ai.rb
|
116
|
-
- lib/asker/ai/code/problem_code_ai.rb
|
117
116
|
- lib/asker/ai/code/python_code_ai.rb
|
118
117
|
- lib/asker/ai/code/ruby_code_ai.rb
|
119
118
|
- lib/asker/ai/code/sql_code_ai.rb
|
120
119
|
- lib/asker/ai/concept_ai.rb
|
120
|
+
- lib/asker/ai/problem/problem_ai.rb
|
121
121
|
- lib/asker/ai/question.rb
|
122
122
|
- lib/asker/ai/stages/base_stage.rb
|
123
123
|
- lib/asker/ai/stages/main.rb
|
@@ -136,25 +136,27 @@ files:
|
|
136
136
|
- lib/asker/data/column.rb
|
137
137
|
- lib/asker/data/concept.rb
|
138
138
|
- lib/asker/data/data_field.rb
|
139
|
+
- lib/asker/data/problem.rb
|
139
140
|
- lib/asker/data/project_data.rb
|
140
141
|
- lib/asker/data/row.rb
|
141
142
|
- lib/asker/data/table.rb
|
142
143
|
- lib/asker/data/template.rb
|
143
144
|
- lib/asker/data/world.rb
|
145
|
+
- lib/asker/deprecated/question_moodlexml_formatter.rb
|
144
146
|
- lib/asker/displayer/code_displayer.rb
|
145
147
|
- lib/asker/displayer/concept_ai_displayer.erb
|
146
148
|
- lib/asker/displayer/concept_ai_displayer.rb
|
147
149
|
- lib/asker/displayer/concept_displayer.rb
|
150
|
+
- lib/asker/displayer/problem_displayer.rb
|
148
151
|
- lib/asker/displayer/stats_displayer.rb
|
149
152
|
- lib/asker/exporter/code_gift_exporter.rb
|
150
|
-
- lib/asker/exporter/code_moodle_exporter.rb
|
151
153
|
- lib/asker/exporter/concept_ai_gift_exporter.rb
|
152
|
-
- lib/asker/exporter/concept_ai_moodle_exporter.rb
|
153
154
|
- lib/asker/exporter/concept_ai_yaml_exporter.rb
|
154
155
|
- lib/asker/exporter/concept_doc_exporter.rb
|
155
156
|
- lib/asker/exporter/data_gift_exporter.rb
|
156
157
|
- lib/asker/exporter/data_moodle_exporter.rb
|
157
158
|
- lib/asker/exporter/output_file_exporter.rb
|
159
|
+
- lib/asker/exporter/problem_gift_exporter.rb
|
158
160
|
- lib/asker/files/asker.ini
|
159
161
|
- lib/asker/files/example-code.haml
|
160
162
|
- lib/asker/files/example-concept.haml
|
@@ -191,14 +193,16 @@ files:
|
|
191
193
|
- lib/asker/formatter/code_string_formatter.rb
|
192
194
|
- lib/asker/formatter/concept_doc_formatter.rb
|
193
195
|
- lib/asker/formatter/concept_string_formatter.rb
|
196
|
+
- lib/asker/formatter/moodle/ddmatch.erb
|
197
|
+
- lib/asker/formatter/moodle/gapfill.erb
|
194
198
|
- lib/asker/formatter/moodle/matching.erb
|
195
199
|
- lib/asker/formatter/moodle/multichoice.erb
|
200
|
+
- lib/asker/formatter/moodle/ordering.erb
|
196
201
|
- lib/asker/formatter/moodle/shortanswer.erb
|
197
202
|
- lib/asker/formatter/moodle/truefalse.erb
|
198
203
|
- lib/asker/formatter/question_gift_formatter.rb
|
199
204
|
- lib/asker/formatter/question_hash_formatter.rb
|
200
205
|
- lib/asker/formatter/question_moodle_formatter.rb
|
201
|
-
- lib/asker/formatter/question_moodlexml_formatter.rb
|
202
206
|
- lib/asker/formatter/rb2haml_formatter.rb
|
203
207
|
- lib/asker/lang/lang.rb
|
204
208
|
- lib/asker/lang/lang_factory.rb
|
@@ -211,9 +215,11 @@ files:
|
|
211
215
|
- lib/asker/loader/haml_loader.rb
|
212
216
|
- lib/asker/loader/image_url_loader.rb
|
213
217
|
- lib/asker/loader/input_loader.rb
|
218
|
+
- lib/asker/loader/problem_loader.rb
|
214
219
|
- lib/asker/loader/project_loader.rb
|
215
220
|
- lib/asker/logger.rb
|
216
221
|
- lib/asker/skeleton.rb
|
222
|
+
- lib/asker/start.rb
|
217
223
|
- lib/asker/version.rb
|
218
224
|
homepage: https://github.com/teuton-software/asker
|
219
225
|
licenses:
|