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
@@ -1,7 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require_relative 'file_loader'
|
4
|
-
require_relative '../logger'
|
5
4
|
|
6
5
|
# Load input data from one directory
|
7
6
|
module DirectoryLoader
|
@@ -13,7 +12,6 @@ module DirectoryLoader
|
|
13
12
|
files = (Dir.new(dirname).entries - ['.', '..']).sort
|
14
13
|
# Accept only HAML or XML files
|
15
14
|
accepted = files.select { |f| %w[.xml .haml].include? File.extname(f) }
|
16
|
-
Logger.verbose " * Input directory = #{Rainbow(dirname).bright}"
|
17
15
|
DirectoryLoader.load_files(accepted, dirname)
|
18
16
|
end
|
19
17
|
|
@@ -24,7 +22,7 @@ module DirectoryLoader
|
|
24
22
|
return if Dir.exist? dirname
|
25
23
|
|
26
24
|
msg = Rainbow("[ERROR] #{dirname} directory dosn't exist!").color(:red)
|
27
|
-
|
25
|
+
puts msg
|
28
26
|
raise msg
|
29
27
|
end
|
30
28
|
|
@@ -48,11 +46,6 @@ module DirectoryLoader
|
|
48
46
|
# @param filepath (String) Path to input file
|
49
47
|
# @param last (Boolean) True if it is the last filename
|
50
48
|
def self.load_file(filepath, last = false)
|
51
|
-
if last
|
52
|
-
Logger.verbose " └── Input file = #{Rainbow(filepath).bright}"
|
53
|
-
else
|
54
|
-
Logger.verbose " ├── Input file = #{Rainbow(filepath).bright}"
|
55
|
-
end
|
56
49
|
FileLoader.load(filepath)
|
57
50
|
end
|
58
51
|
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'base64'
|
4
|
+
|
5
|
+
# Methods to load embedded files defined into asker input data file
|
6
|
+
# Example:
|
7
|
+
# * def line with :type = :image_url used to link external file as https://..."
|
8
|
+
# * def line with :type = :file used to load local file as image.png or file.txt"
|
9
|
+
module EmbeddedFile
|
10
|
+
##
|
11
|
+
# @param value (String)
|
12
|
+
# @param localdir (String) Input file base folder
|
13
|
+
# @return Hash
|
14
|
+
# rubocop:disable Metrics/MethodLength
|
15
|
+
# rubocop:disable Metrics/AbcSize
|
16
|
+
def self.load(value, localdir)
|
17
|
+
# When filename is an URL
|
18
|
+
if value.start_with?('https://') || value.start_with?('http://')
|
19
|
+
return { text: "<img src=\"#{value}\" alt=\"image\" width=\"400\" height=\"300\">", file: :none }
|
20
|
+
end
|
21
|
+
|
22
|
+
filepath = File.join(localdir, value)
|
23
|
+
unless File.exist?(filepath)
|
24
|
+
# When filename is unkown!
|
25
|
+
Logger.verbose Rainbow("[ERROR] Unknown file! #{filepath}").red.bright
|
26
|
+
exit 1
|
27
|
+
end
|
28
|
+
# When filename is PNG, JPG o JPEG
|
29
|
+
if ['.png', '.jpg', '.jpeg'].include? File.extname(filepath)
|
30
|
+
# converts image into base64 strings
|
31
|
+
text = '<img src="@@PLUGINFILE@@/' + File.basename(filepath) \
|
32
|
+
+ '" alt="imagen" class="img-responsive atto_image_button_text-bottom">'
|
33
|
+
data = '<file name="' + File.basename(filepath) + '" path="/" encoding="base64">' \
|
34
|
+
+ Base64.strict_encode64(File.open(filepath, 'rb').read) + '</file>'
|
35
|
+
return { text: text, file: data }
|
36
|
+
end
|
37
|
+
# Suposse that filename is TXT file
|
38
|
+
return { text: "<pre>#{File.read(filepath)}</pre>", file: :none } if File.exist?(filepath)
|
39
|
+
end
|
40
|
+
# rubocop:enable Metrics/MethodLength
|
41
|
+
# rubocop:enable Metrics/AbcSize
|
42
|
+
end
|
@@ -2,7 +2,6 @@
|
|
2
2
|
|
3
3
|
require_relative 'content_loader'
|
4
4
|
require_relative 'haml_loader'
|
5
|
-
require_relative '../logger'
|
6
5
|
|
7
6
|
# Methods that load a filename and return list of concepts
|
8
7
|
module FileLoader
|
@@ -15,8 +14,7 @@ module FileLoader
|
|
15
14
|
elsif File.extname(filename).casecmp('.xml').zero?
|
16
15
|
file_content = File.read(filename)
|
17
16
|
else
|
18
|
-
|
19
|
-
Logger.verbose msg
|
17
|
+
puts "[ERROR] FileLoader: Format error #{filename}"
|
20
18
|
raise msg
|
21
19
|
end
|
22
20
|
ContentLoader.load(filename, file_content)
|
@@ -1,8 +1,6 @@
|
|
1
1
|
|
2
2
|
require 'net/http'
|
3
3
|
require 'uri'
|
4
|
-
require_relative '../application'
|
5
|
-
require_relative '../logger'
|
6
4
|
|
7
5
|
# Search URL images on Internet
|
8
6
|
# Methods:
|
@@ -36,20 +34,21 @@ module ImageUrlLoader
|
|
36
34
|
end
|
37
35
|
end
|
38
36
|
rescue
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
37
|
+
puts '[ERROR] ImageUrlLoader'
|
38
|
+
puts " => #{search_url}"
|
39
|
+
puts ' => Check Internet connections'
|
40
|
+
puts ' => Ensure URL is well formed'
|
43
41
|
end
|
44
42
|
image_urls
|
45
43
|
end
|
46
44
|
|
47
45
|
def self.sanitize_string(input)
|
46
|
+
text = input.dup
|
48
47
|
r = [ ['á', 'a'], ['é', 'e'], ['í', 'i'], ['ó', 'o'], ['ú', 'u'], ['ñ', 'n'], ['Á', 'A'], ['É', 'E'], ['Í', 'I'], ['Ó', 'O'], ['Ú', 'U'], ['Ñ', 'N']]
|
49
|
-
r.each { |item|
|
48
|
+
r.each { |item| text.gsub!(item[0], item[1]) }
|
50
49
|
r = ['-', '_', ',', '"']
|
51
|
-
r.each { |item|
|
52
|
-
|
50
|
+
r.each { |item| text.gsub!(item, ' ') }
|
51
|
+
text.split(' ')
|
53
52
|
end
|
54
53
|
|
55
54
|
def self.sanitize_array(input)
|
@@ -3,30 +3,29 @@
|
|
3
3
|
require_relative 'directory_loader'
|
4
4
|
require_relative '../ai/concept_ai'
|
5
5
|
require_relative '../data/world'
|
6
|
-
require_relative '../logger'
|
7
6
|
|
8
7
|
# Load DATA defined into our Project
|
9
8
|
module InputLoader
|
10
9
|
##
|
11
10
|
# Load input data from every input directory
|
12
11
|
# @param inputdirs (Array)
|
13
|
-
def self.load(inputdirs)
|
12
|
+
def self.load(inputdirs, internet = true)
|
14
13
|
data = { concepts: [], codes: [], world: nil,
|
15
14
|
concepts_ai: [], codes_ai: [] }
|
16
|
-
Logger.
|
15
|
+
#Logger.verboseln "\n[INFO] Loading input data"
|
17
16
|
inputdirs.each do |dirname|
|
18
17
|
temp = DirectoryLoader.load(dirname)
|
19
18
|
data[:concepts] += temp[:concepts]
|
20
19
|
data[:codes] += temp[:codes]
|
21
20
|
end
|
22
|
-
create_questions(data)
|
21
|
+
create_questions(data, internet)
|
23
22
|
end
|
24
23
|
|
25
|
-
private_class_method def self.create_questions(data)
|
24
|
+
private_class_method def self.create_questions(data, internet)
|
26
25
|
# Create World data
|
27
26
|
# * Calculate concept neighbours
|
28
27
|
# * TO-DO: Calculate code neighbours
|
29
|
-
data[:world] = World.new(data[:concepts])
|
28
|
+
data[:world] = World.new(data[:concepts], internet)
|
30
29
|
# Create ConceptAI data (ConceptAI = concept + questions)
|
31
30
|
data[:concepts].each do |concept|
|
32
31
|
data[:concepts_ai] << ConceptAI.new(concept, data[:world])
|
@@ -1,8 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require 'yaml'
|
4
|
-
require_relative '../
|
5
|
-
require_relative '../logger'
|
4
|
+
require_relative '../data/project_data'
|
6
5
|
|
7
6
|
# Load params into Project class using arg input
|
8
7
|
# * load
|
@@ -14,22 +13,26 @@ module ProjectLoader
|
|
14
13
|
##
|
15
14
|
# Load project from args
|
16
15
|
# @param args (String or Hash)
|
16
|
+
# rubocop:disable Metrics/MethodLength
|
17
17
|
def self.load(args)
|
18
|
-
project =
|
18
|
+
project = ProjectData.instance
|
19
19
|
|
20
20
|
if args.class == Hash
|
21
21
|
project.param.merge!(args)
|
22
|
+
project.open
|
22
23
|
return project
|
23
24
|
elsif args.class == String
|
24
25
|
ProjectLoader.load_from_string(args)
|
26
|
+
project.open
|
25
27
|
return project
|
26
28
|
end
|
27
29
|
|
28
30
|
msg = '[ERROR] ProjectLoader:'
|
29
31
|
msg += "Configuration params format is <#{pArgs.class}>!"
|
30
|
-
|
32
|
+
puts Rainbow(msg).red
|
31
33
|
raise msg
|
32
34
|
end
|
35
|
+
# rubocop:enable Metrics/MethodLength
|
33
36
|
|
34
37
|
##
|
35
38
|
# Load project from filepath. Options:
|
@@ -37,11 +40,13 @@ module ProjectLoader
|
|
37
40
|
# * XML filepath
|
38
41
|
# * YAML filepath
|
39
42
|
# @param filepath (String)
|
43
|
+
# rubocop:disable Metrics/MethodLength
|
44
|
+
# rubocop:disable Metrics/AbcSize
|
40
45
|
def self.load_from_string(filepath)
|
41
|
-
project =
|
46
|
+
project = ProjectData.instance
|
42
47
|
unless File.exist?(filepath)
|
43
48
|
msg = Rainbow("[ERROR] #{filepath} not found!").red.bright
|
44
|
-
|
49
|
+
puts msg
|
45
50
|
exit 1
|
46
51
|
end
|
47
52
|
|
@@ -51,24 +56,27 @@ module ProjectLoader
|
|
51
56
|
return project
|
52
57
|
elsif File.extname(filepath) == '.yaml'
|
53
58
|
return load_from_yaml(filepath)
|
54
|
-
else
|
55
|
-
error_loading(filepath)
|
56
59
|
end
|
60
|
+
error_loading(filepath)
|
57
61
|
end
|
62
|
+
# rubocop:enable Metrics/MethodLength
|
63
|
+
# rubocop:enable Metrics/AbcSize
|
58
64
|
|
65
|
+
# rubocop:disable Security/YAMLLoad
|
59
66
|
def self.load_from_yaml(arg)
|
60
|
-
project =
|
67
|
+
project = ProjectData.instance
|
61
68
|
project.param.merge!(YAML.load(File.open(arg)))
|
62
69
|
project.set(:configfilename, arg)
|
63
70
|
project.set(:projectdir, File.dirname(arg))
|
64
71
|
project
|
65
72
|
end
|
73
|
+
# rubocop:enable Security/YAMLLoad
|
66
74
|
|
67
75
|
##
|
68
76
|
# Error found and exit application.
|
69
77
|
def self.error_loading(arg)
|
70
78
|
msg = Rainbow("[ERROR] Loading... #{arg}").red.bright
|
71
|
-
|
79
|
+
puts msg
|
72
80
|
exit 1
|
73
81
|
end
|
74
82
|
end
|
data/lib/asker/logger.rb
CHANGED
@@ -1,20 +1,47 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require 'singleton'
|
3
4
|
require_relative 'application'
|
4
|
-
require_relative 'project'
|
5
5
|
|
6
6
|
# Display and log project messages
|
7
|
-
|
8
|
-
|
9
|
-
|
7
|
+
class Logger
|
8
|
+
include Singleton
|
9
|
+
@attr_verbose = 'yes'
|
10
|
+
|
11
|
+
def set_verbose(value)
|
12
|
+
@attr_verbose = value
|
13
|
+
end
|
14
|
+
|
10
15
|
def self.verbose(msg)
|
11
|
-
|
12
|
-
|
16
|
+
print msg if @attr_verbose == 'yes'
|
17
|
+
@logfile&.write(msg)
|
13
18
|
end
|
14
19
|
|
15
|
-
##
|
16
|
-
# Display and log text line
|
17
20
|
def self.verboseln(msg)
|
18
21
|
verbose(msg + "\n")
|
19
22
|
end
|
23
|
+
|
24
|
+
def log(msg)
|
25
|
+
verbose(msg)
|
26
|
+
end
|
27
|
+
|
28
|
+
def logln(msg)
|
29
|
+
verboseln(msg)
|
30
|
+
end
|
31
|
+
##
|
32
|
+
# Create or reset logfile
|
33
|
+
def self.create(logpath, logname)
|
34
|
+
@logfile = File.open(logpath, 'w')
|
35
|
+
@logfile.write('=' * 50 + "\n")
|
36
|
+
@logfile.write("Created by : #{Application::NAME}")
|
37
|
+
@logfile.write(" (version #{Application::VERSION})\n")
|
38
|
+
@logfile.write("File : #{logname}\n")
|
39
|
+
@logfile.write("Time : #{Time.new}\n")
|
40
|
+
@logfile.write("Author : David Vargas Ruiz\n")
|
41
|
+
@logfile.write('=' * 50 + "\n\n")
|
42
|
+
end
|
43
|
+
|
44
|
+
def self.close
|
45
|
+
@logfile.close
|
46
|
+
end
|
20
47
|
end
|
data/lib/asker/skeleton.rb
CHANGED
@@ -2,6 +2,7 @@
|
|
2
2
|
|
3
3
|
require 'fileutils'
|
4
4
|
require 'rainbow'
|
5
|
+
require_relative 'application'
|
5
6
|
|
6
7
|
# Skeleton: create skeleton for asker input files
|
7
8
|
# * create
|
@@ -33,8 +34,8 @@ module Skeleton
|
|
33
34
|
# Create default configuration files
|
34
35
|
def self.create_configuration
|
35
36
|
puts "\n[INFO] Creating configuration files"
|
36
|
-
src = File.join(File.dirname(__FILE__), 'files',
|
37
|
-
dst = File.join(
|
37
|
+
src = File.join(File.dirname(__FILE__), 'files', Application::CONFIGFILE)
|
38
|
+
dst = File.join(Application::CONFIGFILE)
|
38
39
|
copyfile(src, dst)
|
39
40
|
end
|
40
41
|
|
data/lib/asker.rb
CHANGED
@@ -2,71 +2,100 @@
|
|
2
2
|
|
3
3
|
require 'rainbow'
|
4
4
|
|
5
|
+
require_relative 'asker/skeleton'
|
6
|
+
require_relative 'asker/check_input'
|
7
|
+
|
5
8
|
require_relative 'asker/displayer/concept_displayer'
|
6
9
|
require_relative 'asker/displayer/stats_displayer'
|
7
10
|
require_relative 'asker/exporter/output_file_exporter'
|
8
|
-
require_relative 'asker/loader/project_loader'
|
9
|
-
require_relative 'asker/loader/input_loader'
|
10
|
-
require_relative 'asker/checker'
|
11
11
|
require_relative 'asker/logger'
|
12
|
-
require_relative 'asker/skeleton'
|
13
12
|
|
14
|
-
|
15
|
-
|
13
|
+
require_relative 'asker/loader/project_loader'
|
14
|
+
require_relative 'asker/loader/input_loader'
|
16
15
|
class Asker
|
17
|
-
|
18
|
-
|
19
|
-
# @param dirpath (String)
|
20
|
-
def self.create_input(dirpath)
|
21
|
-
Skeleton.create_input(dirpath)
|
16
|
+
def self.init
|
17
|
+
Skeleton.create_configuration
|
22
18
|
end
|
23
19
|
|
24
|
-
|
25
|
-
|
26
|
-
def self.create_configuration
|
27
|
-
Skeleton.create_configuration
|
20
|
+
def self.new_input(dirpath)
|
21
|
+
Skeleton.create_input(dirpath)
|
28
22
|
end
|
29
23
|
|
30
|
-
##
|
31
|
-
# Checking input file syntax
|
32
|
-
# @param filepath (String)
|
33
24
|
def self.check(filepath)
|
34
|
-
|
25
|
+
CheckInput.new.file(filepath).check
|
35
26
|
end
|
36
27
|
|
37
|
-
##
|
38
|
-
# Start working
|
39
|
-
# @param filepath (String) HAML or XML filepath
|
40
28
|
def self.start(filepath)
|
41
|
-
|
29
|
+
project_data, data = load_input(filepath)
|
42
30
|
ConceptDisplayer.show(data[:concepts])
|
43
|
-
create_output(
|
31
|
+
create_output(project_data, data)
|
44
32
|
end
|
45
33
|
|
46
|
-
##
|
47
|
-
# Load input data
|
48
|
-
# @param args (Hash)
|
49
34
|
private_class_method def self.load_input(args)
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
35
|
+
init_project_data
|
36
|
+
project_data = ProjectLoader.load(args)
|
37
|
+
init_logger(project_data)
|
38
|
+
|
39
|
+
inputdirs = project_data.get(:inputdirs).split(',')
|
40
|
+
internet = Application.instance.config['global']['internet'] == 'yes'
|
41
|
+
data = InputLoader.load(inputdirs, internet)
|
42
|
+
[project_data, data]
|
43
|
+
end
|
44
|
+
|
45
|
+
private_class_method def self.init_project_data()
|
46
|
+
project_data = ProjectData.instance
|
47
|
+
outputdir = Application.instance.config['output']['folder']
|
48
|
+
project_data.set(:outputdir, outputdir)
|
49
|
+
|
50
|
+
formula_weights = Application.instance.config['ai']['formula_weights']
|
51
|
+
project_data.set(:weights, formula_weights)
|
52
|
+
end
|
53
|
+
|
54
|
+
private_class_method def self.init_logger(project_data)
|
55
|
+
# Create log file where to save log messages
|
56
|
+
Logger.create(project_data.get(:logpath),
|
57
|
+
project_data.get(:logname))
|
58
|
+
Logger.instance.set_verbose(Application.instance.config['verbose'])
|
59
|
+
Logger.verboseln '[INFO] Project open'
|
60
|
+
Logger.verboseln ' ├── inputdirs = ' + Rainbow(project_data.get(:inputdirs)).bright
|
61
|
+
Logger.verboseln ' └── process_file = ' + Rainbow(project_data.get(:process_file)).bright
|
54
62
|
end
|
55
63
|
|
56
|
-
##
|
57
|
-
# Create output files: Gift, YAML, TXT Doc
|
58
|
-
# rubocop:disable Metrics/AbcSize
|
59
64
|
private_class_method def self.create_output(project, data)
|
60
|
-
Logger.
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
65
|
+
Logger.verboseln "\n[INFO] Creating output files"
|
66
|
+
m = ' ├── Gift questions file => '
|
67
|
+
m += if Application.instance.config['output']['gift'] == 'yes'
|
68
|
+
Rainbow(project.get(:outputpath)).bright
|
69
|
+
else
|
70
|
+
"#{project.get(:outputpath)} (No)"
|
71
|
+
end
|
72
|
+
Logger.verboseln m
|
73
|
+
|
74
|
+
m = ' ├── Lesson file => '
|
75
|
+
m += if Application.instance.config['output']['doc'] == 'yes'
|
76
|
+
Rainbow(project.get(:lessonpath)).bright
|
77
|
+
else
|
78
|
+
"#{project.get(:lessonpath)} (No)"
|
79
|
+
end
|
80
|
+
Logger.verboseln m
|
81
|
+
|
82
|
+
m = ' ├── YAML questions file => '
|
83
|
+
m += if Application.instance.config['output']['yaml'] == 'yes'
|
84
|
+
Rainbow(project.get(:yamlpath)).bright
|
85
|
+
else
|
86
|
+
"#{project.get(:yamlpath)} (No)"
|
87
|
+
end
|
88
|
+
Logger.verboseln m
|
89
|
+
|
90
|
+
m = ' └── Moodle XML file => '
|
91
|
+
m += if Application.instance.config['output']['moodle'] == 'yes'
|
92
|
+
Rainbow(project.get(:moodlepath)).bright
|
93
|
+
else
|
94
|
+
"#{project.get(:moodlepath)} (No)"
|
95
|
+
end
|
96
|
+
Logger.verboseln m
|
67
97
|
OutputFileExporter.export(data, project)
|
68
98
|
StatsDisplayer.show(data)
|
69
|
-
|
99
|
+
Logger.close
|
70
100
|
end
|
71
|
-
# rubocop:enable Metrics/AbcSize
|
72
101
|
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.2.2
|
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:
|
11
|
+
date: 2022-02-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: haml
|
@@ -52,6 +52,20 @@ dependencies:
|
|
52
52
|
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '3.0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rexml
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '3.2'
|
62
|
+
type: :runtime
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '3.2'
|
55
69
|
- !ruby/object:Gem::Dependency
|
56
70
|
name: terminal-table
|
57
71
|
requirement: !ruby/object:Gem::Requirement
|
@@ -81,33 +95,33 @@ dependencies:
|
|
81
95
|
- !ruby/object:Gem::Version
|
82
96
|
version: '0.20'
|
83
97
|
- !ruby/object:Gem::Dependency
|
84
|
-
name:
|
98
|
+
name: minitest
|
85
99
|
requirement: !ruby/object:Gem::Requirement
|
86
100
|
requirements:
|
87
101
|
- - "~>"
|
88
102
|
- !ruby/object:Gem::Version
|
89
|
-
version: '
|
90
|
-
type: :
|
103
|
+
version: '5.11'
|
104
|
+
type: :development
|
91
105
|
prerelease: false
|
92
106
|
version_requirements: !ruby/object:Gem::Requirement
|
93
107
|
requirements:
|
94
108
|
- - "~>"
|
95
109
|
- !ruby/object:Gem::Version
|
96
|
-
version: '
|
110
|
+
version: '5.11'
|
97
111
|
- !ruby/object:Gem::Dependency
|
98
|
-
name:
|
112
|
+
name: pry-byebug
|
99
113
|
requirement: !ruby/object:Gem::Requirement
|
100
114
|
requirements:
|
101
115
|
- - "~>"
|
102
116
|
- !ruby/object:Gem::Version
|
103
|
-
version: '
|
117
|
+
version: '3.9'
|
104
118
|
type: :development
|
105
119
|
prerelease: false
|
106
120
|
version_requirements: !ruby/object:Gem::Requirement
|
107
121
|
requirements:
|
108
122
|
- - "~>"
|
109
123
|
- !ruby/object:Gem::Version
|
110
|
-
version: '
|
124
|
+
version: '3.9'
|
111
125
|
- !ruby/object:Gem::Dependency
|
112
126
|
name: rubocop
|
113
127
|
requirement: !ruby/object:Gem::Requirement
|
@@ -130,9 +144,9 @@ executables:
|
|
130
144
|
extensions: []
|
131
145
|
extra_rdoc_files:
|
132
146
|
- README.md
|
133
|
-
- LICENSE
|
147
|
+
- LICENSE
|
134
148
|
files:
|
135
|
-
- LICENSE
|
149
|
+
- LICENSE
|
136
150
|
- README.md
|
137
151
|
- bin/asker
|
138
152
|
- lib/asker.rb
|
@@ -156,28 +170,35 @@ files:
|
|
156
170
|
- lib/asker/ai/stages/stage_s.rb
|
157
171
|
- lib/asker/ai/stages/stage_t.rb
|
158
172
|
- lib/asker/application.rb
|
159
|
-
- lib/asker/
|
173
|
+
- lib/asker/check_input.rb
|
174
|
+
- lib/asker/check_input/input_data.rb
|
160
175
|
- lib/asker/cli.rb
|
161
176
|
- lib/asker/data/code.rb
|
162
177
|
- lib/asker/data/column.rb
|
163
178
|
- lib/asker/data/concept.rb
|
164
179
|
- lib/asker/data/data_field.rb
|
180
|
+
- lib/asker/data/project_data.rb
|
165
181
|
- lib/asker/data/row.rb
|
166
182
|
- lib/asker/data/table.rb
|
167
183
|
- lib/asker/data/template.rb
|
168
184
|
- lib/asker/data/world.rb
|
169
185
|
- lib/asker/displayer/code_displayer.rb
|
186
|
+
- lib/asker/displayer/concept_ai_displayer.erb
|
170
187
|
- lib/asker/displayer/concept_ai_displayer.rb
|
171
188
|
- lib/asker/displayer/concept_displayer.rb
|
172
189
|
- lib/asker/displayer/stats_displayer.rb
|
173
190
|
- lib/asker/exporter/code_gift_exporter.rb
|
174
191
|
- lib/asker/exporter/concept_ai_gift_exporter.rb
|
192
|
+
- lib/asker/exporter/concept_ai_moodle_exporter.rb
|
175
193
|
- lib/asker/exporter/concept_ai_yaml_exporter.rb
|
176
194
|
- lib/asker/exporter/concept_doc_exporter.rb
|
195
|
+
- lib/asker/exporter/data_gift_exporter.rb
|
177
196
|
- lib/asker/exporter/output_file_exporter.rb
|
178
|
-
- lib/asker/files/
|
197
|
+
- lib/asker/files/asker.ini
|
179
198
|
- lib/asker/files/example-code.haml
|
180
199
|
- lib/asker/files/example-concept.haml
|
200
|
+
- lib/asker/files/language/du/connectors.yaml
|
201
|
+
- lib/asker/files/language/du/mistakes.yaml
|
181
202
|
- lib/asker/files/language/du/templates.yaml
|
182
203
|
- lib/asker/files/language/en/connectors.yaml
|
183
204
|
- lib/asker/files/language/en/mistakes.yaml
|
@@ -206,8 +227,13 @@ files:
|
|
206
227
|
- lib/asker/formatter/code_string_formatter.rb
|
207
228
|
- lib/asker/formatter/concept_doc_formatter.rb
|
208
229
|
- lib/asker/formatter/concept_string_formatter.rb
|
230
|
+
- lib/asker/formatter/moodle/matching.erb
|
231
|
+
- lib/asker/formatter/moodle/multichoice.erb
|
232
|
+
- lib/asker/formatter/moodle/shortanswer.erb
|
233
|
+
- lib/asker/formatter/moodle/truefalse.erb
|
209
234
|
- lib/asker/formatter/question_gift_formatter.rb
|
210
235
|
- lib/asker/formatter/question_hash_formatter.rb
|
236
|
+
- lib/asker/formatter/question_moodle_formatter.rb
|
211
237
|
- lib/asker/formatter/question_moodlexml_formatter.rb
|
212
238
|
- lib/asker/formatter/rb2haml_formatter.rb
|
213
239
|
- lib/asker/lang/lang.rb
|
@@ -216,19 +242,19 @@ files:
|
|
216
242
|
- lib/asker/loader/code_loader.rb
|
217
243
|
- lib/asker/loader/content_loader.rb
|
218
244
|
- lib/asker/loader/directory_loader.rb
|
245
|
+
- lib/asker/loader/embedded_file.rb
|
219
246
|
- lib/asker/loader/file_loader.rb
|
220
247
|
- lib/asker/loader/haml_loader.rb
|
221
248
|
- lib/asker/loader/image_url_loader.rb
|
222
249
|
- lib/asker/loader/input_loader.rb
|
223
250
|
- lib/asker/loader/project_loader.rb
|
224
251
|
- lib/asker/logger.rb
|
225
|
-
- lib/asker/project.rb
|
226
252
|
- lib/asker/skeleton.rb
|
227
|
-
homepage: https://github.com/
|
253
|
+
homepage: https://github.com/teuton-software/asker/tree/v2.2
|
228
254
|
licenses:
|
229
255
|
- GPL-3.0
|
230
256
|
metadata: {}
|
231
|
-
post_install_message:
|
257
|
+
post_install_message:
|
232
258
|
rdoc_options: []
|
233
259
|
require_paths:
|
234
260
|
- lib
|
@@ -236,7 +262,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
236
262
|
requirements:
|
237
263
|
- - ">="
|
238
264
|
- !ruby/object:Gem::Version
|
239
|
-
version: 2.
|
265
|
+
version: 2.6.9
|
240
266
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
241
267
|
requirements:
|
242
268
|
- - ">="
|