asker-tool 2.1.7 → 2.2.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/{LICENSE.txt → LICENSE} +0 -0
- data/README.md +1 -1
- 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 +11 -2
- 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 +100 -50
- data/lib/asker/ai/stages/stage_d.rb +75 -90
- data/lib/asker/ai/stages/stage_f.rb +64 -36
- 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 +8 -7
- data/lib/asker/checker.rb +6 -8
- data/lib/asker/cli.rb +27 -9
- data/lib/asker/data/code.rb +4 -1
- data/lib/asker/data/concept.rb +67 -21
- data/lib/asker/data/table.rb +2 -0
- data/lib/asker/data/template.rb +3 -1
- data/lib/asker/data/world.rb +7 -4
- 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 +23 -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 +7 -11
- 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_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 +21 -19
- 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 +7 -7
- data/lib/asker/loader/directory_loader.rb +3 -3
- data/lib/asker/loader/embedded_file.rb +42 -0
- data/lib/asker/loader/file_loader.rb +1 -1
- data/lib/asker/loader/image_url_loader.rb +4 -3
- data/lib/asker/loader/input_loader.rb +1 -1
- data/lib/asker/loader/project_loader.rb +14 -5
- data/lib/asker/logger.rb +29 -4
- data/lib/asker/project.rb +14 -79
- data/lib/asker/skeleton.rb +3 -2
- data/lib/asker.rb +37 -9
- metadata +19 -22
data/lib/asker/project.rb
CHANGED
@@ -2,7 +2,6 @@
|
|
2
2
|
|
3
3
|
require 'singleton'
|
4
4
|
require 'rainbow'
|
5
|
-
# require 'fileutils'
|
6
5
|
require_relative 'application'
|
7
6
|
require_relative 'logger'
|
8
7
|
|
@@ -21,8 +20,8 @@ class Project
|
|
21
20
|
# Reset project params
|
22
21
|
def reset
|
23
22
|
@default = { inputbasedir: FileUtils.pwd,
|
24
|
-
|
25
|
-
|
23
|
+
stages: { d: true, b: true, f: true, i: true, s: true, t: true },
|
24
|
+
threshold: 0.5 }
|
26
25
|
@param = {}
|
27
26
|
end
|
28
27
|
|
@@ -47,100 +46,36 @@ class Project
|
|
47
46
|
# Open new project
|
48
47
|
# * setting new params and
|
49
48
|
# * creating output files
|
50
|
-
# IMPORTANT: We need at least
|
49
|
+
# IMPORTANT: We need at least these values
|
51
50
|
# * process_file
|
52
51
|
# * inputdirs
|
52
|
+
# rubocop:disable Metrics/MethodLength
|
53
|
+
# rubocop:disable Metrics/AbcSize
|
53
54
|
def open
|
54
55
|
config = Application.instance.config
|
55
56
|
ext = File.extname(@param[:process_file]) || '.haml'
|
56
|
-
#@param[:process_file] = @param[:process_file] ||
|
57
|
-
# get(:projectdir).split(File::SEPARATOR).last + ext
|
58
57
|
@param[:projectname] = @param[:projectname] ||
|
59
58
|
File.basename(@param[:process_file], ext)
|
60
|
-
#@param[:inputdirs] = @param[:inputdirs] ||
|
61
|
-
# File.join(get(:inputbasedir), @param[:projectdir])
|
62
59
|
|
63
60
|
@param[:logname] = "#{@param[:projectname]}-log.txt"
|
64
61
|
@param[:outputname] = "#{@param[:projectname]}-gift.txt"
|
65
62
|
@param[:lessonname] = "#{@param[:projectname]}-doc.txt"
|
66
63
|
@param[:yamlname] = "#{@param[:projectname]}.yaml"
|
64
|
+
@param[:moodlename] = "#{@param[:projectname]}-moodle.xml"
|
67
65
|
|
68
|
-
outputdir = config['
|
66
|
+
outputdir = config['output']['folder']
|
69
67
|
@param[:logpath] = File.join(outputdir, get(:logname))
|
70
68
|
@param[:outputpath] = File.join(outputdir, get(:outputname))
|
71
69
|
@param[:lessonpath] = File.join(outputdir, get(:lessonname))
|
72
70
|
@param[:yamlpath] = File.join(outputdir, get(:yamlname))
|
71
|
+
@param[:moodlepath] = File.join(outputdir, get(:moodlename))
|
73
72
|
|
74
73
|
Dir.mkdir(outputdir) unless Dir.exist?(outputdir)
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
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')
|
74
|
+
Logger.create(self) # Create log file where to save log messages
|
75
|
+
Logger.verboseln '[INFO] Project open'
|
76
|
+
Logger.verboseln ' ├── inputdirs = ' + Rainbow(get(:inputdirs)).bright
|
77
|
+
Logger.verboseln ' └── process_file = ' + Rainbow(get(:process_file)).bright
|
145
78
|
end
|
79
|
+
# rubocop:enable Metrics/MethodLength
|
80
|
+
# rubocop:enable Metrics/AbcSize
|
146
81
|
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
@@ -48,7 +48,6 @@ class Asker
|
|
48
48
|
# @param args (Hash)
|
49
49
|
private_class_method def self.load_input(args)
|
50
50
|
project = ProjectLoader.load(args)
|
51
|
-
project.open # Open output files
|
52
51
|
data = InputLoader.load(project.get(:inputdirs).split(','))
|
53
52
|
[project, data]
|
54
53
|
end
|
@@ -56,17 +55,46 @@ class Asker
|
|
56
55
|
##
|
57
56
|
# Create output files: Gift, YAML, TXT Doc
|
58
57
|
# rubocop:disable Metrics/AbcSize
|
58
|
+
# rubocop:disable Metrics/MethodLength
|
59
|
+
# rubocop:disable Metrics/PerceivedComplexity
|
59
60
|
private_class_method def self.create_output(project, data)
|
60
|
-
Logger.
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
61
|
+
Logger.verboseln "\n[INFO] Creating output files"
|
62
|
+
m = ' ├── Gift questions file => '
|
63
|
+
m += if Application.instance.config['output']['gift'] == 'yes'
|
64
|
+
Rainbow(project.get(:outputpath)).bright
|
65
|
+
else
|
66
|
+
"#{project.get(:outputpath)} (No)"
|
67
|
+
end
|
68
|
+
Logger.verboseln m
|
69
|
+
|
70
|
+
m = ' ├── Lesson file => '
|
71
|
+
m += if Application.instance.config['output']['doc'] == 'yes'
|
72
|
+
Rainbow(project.get(:lessonpath)).bright
|
73
|
+
else
|
74
|
+
"#{project.get(:lessonpath)} (No)"
|
75
|
+
end
|
76
|
+
Logger.verboseln m
|
77
|
+
|
78
|
+
m = ' ├── YAML questions file => '
|
79
|
+
m += if Application.instance.config['output']['yaml'] == 'yes'
|
80
|
+
Rainbow(project.get(:yamlpath)).bright
|
81
|
+
else
|
82
|
+
"#{project.get(:yamlpath)} (No)"
|
83
|
+
end
|
84
|
+
Logger.verboseln m
|
85
|
+
|
86
|
+
m = ' └── Moodle XML file => '
|
87
|
+
m += if Application.instance.config['output']['moodle'] == 'yes'
|
88
|
+
Rainbow(project.get(:moodlepath)).bright
|
89
|
+
else
|
90
|
+
"#{project.get(:moodlepath)} (No)"
|
91
|
+
end
|
92
|
+
Logger.verboseln m
|
67
93
|
OutputFileExporter.export(data, project)
|
68
94
|
StatsDisplayer.show(data)
|
69
|
-
|
95
|
+
Logger.close
|
70
96
|
end
|
71
97
|
# rubocop:enable Metrics/AbcSize
|
98
|
+
# rubocop:enable Metrics/MethodLength
|
99
|
+
# rubocop:enable Metrics/PerceivedComplexity
|
72
100
|
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.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:
|
11
|
+
date: 2021-12-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: haml
|
@@ -80,20 +80,6 @@ dependencies:
|
|
80
80
|
- - "~>"
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: '0.20'
|
83
|
-
- !ruby/object:Gem::Dependency
|
84
|
-
name: base64_compatible
|
85
|
-
requirement: !ruby/object:Gem::Requirement
|
86
|
-
requirements:
|
87
|
-
- - "~>"
|
88
|
-
- !ruby/object:Gem::Version
|
89
|
-
version: '0.0'
|
90
|
-
type: :runtime
|
91
|
-
prerelease: false
|
92
|
-
version_requirements: !ruby/object:Gem::Requirement
|
93
|
-
requirements:
|
94
|
-
- - "~>"
|
95
|
-
- !ruby/object:Gem::Version
|
96
|
-
version: '0.0'
|
97
83
|
- !ruby/object:Gem::Dependency
|
98
84
|
name: minitest
|
99
85
|
requirement: !ruby/object:Gem::Requirement
|
@@ -130,9 +116,9 @@ executables:
|
|
130
116
|
extensions: []
|
131
117
|
extra_rdoc_files:
|
132
118
|
- README.md
|
133
|
-
- LICENSE
|
119
|
+
- LICENSE
|
134
120
|
files:
|
135
|
-
- LICENSE
|
121
|
+
- LICENSE
|
136
122
|
- README.md
|
137
123
|
- bin/asker
|
138
124
|
- lib/asker.rb
|
@@ -167,17 +153,22 @@ files:
|
|
167
153
|
- lib/asker/data/template.rb
|
168
154
|
- lib/asker/data/world.rb
|
169
155
|
- lib/asker/displayer/code_displayer.rb
|
156
|
+
- lib/asker/displayer/concept_ai_displayer.erb
|
170
157
|
- lib/asker/displayer/concept_ai_displayer.rb
|
171
158
|
- lib/asker/displayer/concept_displayer.rb
|
172
159
|
- lib/asker/displayer/stats_displayer.rb
|
173
160
|
- lib/asker/exporter/code_gift_exporter.rb
|
174
161
|
- lib/asker/exporter/concept_ai_gift_exporter.rb
|
162
|
+
- lib/asker/exporter/concept_ai_moodle_exporter.rb
|
175
163
|
- lib/asker/exporter/concept_ai_yaml_exporter.rb
|
176
164
|
- lib/asker/exporter/concept_doc_exporter.rb
|
165
|
+
- lib/asker/exporter/data_gift_exporter.rb
|
177
166
|
- lib/asker/exporter/output_file_exporter.rb
|
178
|
-
- lib/asker/files/
|
167
|
+
- lib/asker/files/asker.ini
|
179
168
|
- lib/asker/files/example-code.haml
|
180
169
|
- lib/asker/files/example-concept.haml
|
170
|
+
- lib/asker/files/language/du/connectors.yaml
|
171
|
+
- lib/asker/files/language/du/mistakes.yaml
|
181
172
|
- lib/asker/files/language/du/templates.yaml
|
182
173
|
- lib/asker/files/language/en/connectors.yaml
|
183
174
|
- lib/asker/files/language/en/mistakes.yaml
|
@@ -206,8 +197,13 @@ files:
|
|
206
197
|
- lib/asker/formatter/code_string_formatter.rb
|
207
198
|
- lib/asker/formatter/concept_doc_formatter.rb
|
208
199
|
- lib/asker/formatter/concept_string_formatter.rb
|
200
|
+
- lib/asker/formatter/moodle/matching.erb
|
201
|
+
- lib/asker/formatter/moodle/multichoice.erb
|
202
|
+
- lib/asker/formatter/moodle/shortanswer.erb
|
203
|
+
- lib/asker/formatter/moodle/truefalse.erb
|
209
204
|
- lib/asker/formatter/question_gift_formatter.rb
|
210
205
|
- lib/asker/formatter/question_hash_formatter.rb
|
206
|
+
- lib/asker/formatter/question_moodle_formatter.rb
|
211
207
|
- lib/asker/formatter/question_moodlexml_formatter.rb
|
212
208
|
- lib/asker/formatter/rb2haml_formatter.rb
|
213
209
|
- lib/asker/lang/lang.rb
|
@@ -216,6 +212,7 @@ files:
|
|
216
212
|
- lib/asker/loader/code_loader.rb
|
217
213
|
- lib/asker/loader/content_loader.rb
|
218
214
|
- lib/asker/loader/directory_loader.rb
|
215
|
+
- lib/asker/loader/embedded_file.rb
|
219
216
|
- lib/asker/loader/file_loader.rb
|
220
217
|
- lib/asker/loader/haml_loader.rb
|
221
218
|
- lib/asker/loader/image_url_loader.rb
|
@@ -224,11 +221,11 @@ files:
|
|
224
221
|
- lib/asker/logger.rb
|
225
222
|
- lib/asker/project.rb
|
226
223
|
- lib/asker/skeleton.rb
|
227
|
-
homepage: https://github.com/dvarrui/asker/tree/
|
224
|
+
homepage: https://github.com/dvarrui/asker/tree/v2.2
|
228
225
|
licenses:
|
229
226
|
- GPL-3.0
|
230
227
|
metadata: {}
|
231
|
-
post_install_message:
|
228
|
+
post_install_message:
|
232
229
|
rdoc_options: []
|
233
230
|
require_paths:
|
234
231
|
- lib
|
@@ -243,7 +240,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
243
240
|
- !ruby/object:Gem::Version
|
244
241
|
version: '0'
|
245
242
|
requirements: []
|
246
|
-
rubygems_version: 3.
|
243
|
+
rubygems_version: 3.2.32
|
247
244
|
signing_key:
|
248
245
|
specification_version: 4
|
249
246
|
summary: Asker generates questions from input definitions file.
|