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.
Files changed (68) hide show
  1. checksums.yaml +4 -4
  2. data/{LICENSE.txt → LICENSE} +0 -0
  3. data/README.md +14 -15
  4. data/bin/asker +1 -1
  5. data/lib/asker/ai/ai.rb +6 -3
  6. data/lib/asker/ai/ai_calculate.rb +20 -6
  7. data/lib/asker/ai/concept_ai.rb +12 -3
  8. data/lib/asker/ai/question.rb +28 -6
  9. data/lib/asker/ai/stages/base_stage.rb +45 -6
  10. data/lib/asker/ai/stages/stage_b.rb +90 -49
  11. data/lib/asker/ai/stages/stage_d.rb +69 -90
  12. data/lib/asker/ai/stages/stage_f.rb +47 -38
  13. data/lib/asker/ai/stages/stage_i.rb +79 -92
  14. data/lib/asker/ai/stages/stage_s.rb +41 -36
  15. data/lib/asker/ai/stages/stage_t.rb +114 -73
  16. data/lib/asker/application.rb +7 -15
  17. data/lib/asker/check_input/input_data.rb +358 -0
  18. data/lib/asker/check_input.rb +51 -0
  19. data/lib/asker/cli.rb +28 -28
  20. data/lib/asker/data/code.rb +5 -16
  21. data/lib/asker/data/concept.rb +71 -24
  22. data/lib/asker/data/project_data.rb +63 -0
  23. data/lib/asker/data/table.rb +2 -0
  24. data/lib/asker/data/template.rb +3 -1
  25. data/lib/asker/data/world.rb +8 -16
  26. data/lib/asker/displayer/code_displayer.rb +7 -0
  27. data/lib/asker/displayer/concept_ai_displayer.erb +10 -0
  28. data/lib/asker/displayer/concept_ai_displayer.rb +24 -22
  29. data/lib/asker/displayer/concept_displayer.rb +9 -4
  30. data/lib/asker/displayer/stats_displayer.rb +8 -0
  31. data/lib/asker/exporter/concept_ai_gift_exporter.rb +16 -10
  32. data/lib/asker/exporter/concept_ai_moodle_exporter.rb +44 -0
  33. data/lib/asker/exporter/concept_ai_yaml_exporter.rb +6 -3
  34. data/lib/asker/exporter/concept_doc_exporter.rb +14 -1
  35. data/lib/asker/exporter/data_gift_exporter.rb +29 -0
  36. data/lib/asker/exporter/output_file_exporter.rb +9 -6
  37. data/lib/asker/files/{config.ini → asker.ini} +14 -4
  38. data/lib/asker/files/language/du/connectors.yaml +81 -0
  39. data/lib/asker/files/language/du/mistakes.yaml +82 -0
  40. data/lib/asker/files/language/du/templates.yaml +28 -49
  41. data/lib/asker/files/language/en/templates.yaml +19 -19
  42. data/lib/asker/files/language/es/mistakes.yaml +9 -7
  43. data/lib/asker/files/language/es/templates.yaml +19 -19
  44. data/lib/asker/files/language/fr/connectors.yaml +68 -84
  45. data/lib/asker/files/language/fr/templates.yaml +22 -22
  46. data/lib/asker/formatter/concept_doc_formatter.rb +0 -4
  47. data/lib/asker/formatter/concept_string_formatter.rb +7 -4
  48. data/lib/asker/formatter/moodle/matching.erb +38 -0
  49. data/lib/asker/formatter/moodle/multichoice.erb +49 -0
  50. data/lib/asker/formatter/moodle/shortanswer.erb +30 -0
  51. data/lib/asker/formatter/moodle/truefalse.erb +47 -0
  52. data/lib/asker/formatter/question_gift_formatter.rb +30 -20
  53. data/lib/asker/formatter/question_moodle_formatter.rb +27 -0
  54. data/lib/asker/lang/lang_factory.rb +7 -1
  55. data/lib/asker/loader/code_loader.rb +1 -1
  56. data/lib/asker/loader/content_loader.rb +12 -14
  57. data/lib/asker/loader/directory_loader.rb +1 -8
  58. data/lib/asker/loader/embedded_file.rb +42 -0
  59. data/lib/asker/loader/file_loader.rb +1 -3
  60. data/lib/asker/loader/image_url_loader.rb +8 -9
  61. data/lib/asker/loader/input_loader.rb +5 -6
  62. data/lib/asker/loader/project_loader.rb +18 -10
  63. data/lib/asker/logger.rb +35 -8
  64. data/lib/asker/skeleton.rb +3 -2
  65. data/lib/asker.rb +72 -43
  66. metadata +43 -17
  67. data/lib/asker/checker.rb +0 -455
  68. 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
- Logger.verboseln msg
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
- msg = "[ERROR] FileLoader: Format error #{filename}"
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
- Logger.verboseln '[ERROR] ImageUrlLoader'
40
- Logger.verboseln " => #{search_url}"
41
- Logger.verboseln ' => Check Internet connections'
42
- Logger.verboseln ' => Ensure URL is well formed'
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| input.gsub!(item[0], item[1]) }
48
+ r.each { |item| text.gsub!(item[0], item[1]) }
50
49
  r = ['-', '_', ',', '"']
51
- r.each { |item| input.gsub!(item, ' ') }
52
- input.split(' ')
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.verbose "\n[INFO] Loading input data"
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 '../project'
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 = Project.instance
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
- Logger.verbose Rainbow(msg).red
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 = Project.instance
46
+ project = ProjectData.instance
42
47
  unless File.exist?(filepath)
43
48
  msg = Rainbow("[ERROR] #{filepath} not found!").red.bright
44
- Logger.verbose msg
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 = Project.instance
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
- Logger.verbose msg
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
- module Logger
8
- ##
9
- # Display and log text
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
- puts msg if Application.instance.config['global']['verbose'] == 'yes'
12
- Project.instance.get(:logfile)&.write("#{msg}\n")
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
@@ -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', 'config.ini')
37
- dst = File.join('config.ini')
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
- # Asker main class
13
+ require_relative 'asker/loader/project_loader'
14
+ require_relative 'asker/loader/input_loader'
16
15
  class Asker
17
- ##
18
- # Create asker input demo files
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
- # Create asker configuration files
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
- Checker.check(filepath)
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
- project, data = load_input(filepath)
29
+ project_data, data = load_input(filepath)
42
30
  ConceptDisplayer.show(data[:concepts])
43
- create_output(project, data)
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
- project = ProjectLoader.load(args)
51
- project.open # Open output files
52
- data = InputLoader.load(project.get(:inputdirs).split(','))
53
- [project, data]
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.verbose "\n[INFO] Creating output files"
61
- Logger.verbose ' ├── Gift questions file => ' +
62
- Rainbow(project.get(:outputpath)).bright
63
- Logger.verbose ' ├── YAML questions file => ' +
64
- Rainbow(project.get(:yamlpath)).bright
65
- Logger.verbose ' └── Lesson file => ' +
66
- Rainbow(project.get(:lessonpath)).bright
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
- project.close # Logger use Project.get(:logfile) until the end
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.1.6
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: 2020-03-12 00:00:00.000000000 Z
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: base64_compatible
98
+ name: minitest
85
99
  requirement: !ruby/object:Gem::Requirement
86
100
  requirements:
87
101
  - - "~>"
88
102
  - !ruby/object:Gem::Version
89
- version: '0.0'
90
- type: :runtime
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: '0.0'
110
+ version: '5.11'
97
111
  - !ruby/object:Gem::Dependency
98
- name: minitest
112
+ name: pry-byebug
99
113
  requirement: !ruby/object:Gem::Requirement
100
114
  requirements:
101
115
  - - "~>"
102
116
  - !ruby/object:Gem::Version
103
- version: '5.11'
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: '5.11'
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.txt
147
+ - LICENSE
134
148
  files:
135
- - LICENSE.txt
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/checker.rb
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/config.ini
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/dvarrui/asker/tree/devel
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: Use asker command!
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.5.0
265
+ version: 2.6.9
240
266
  required_rubygems_version: !ruby/object:Gem::Requirement
241
267
  requirements:
242
268
  - - ">="