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.
Files changed (64) hide show
  1. checksums.yaml +4 -4
  2. data/{LICENSE.txt → LICENSE} +0 -0
  3. data/README.md +1 -1
  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 +11 -2
  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 +100 -50
  11. data/lib/asker/ai/stages/stage_d.rb +75 -90
  12. data/lib/asker/ai/stages/stage_f.rb +64 -36
  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 +8 -7
  17. data/lib/asker/checker.rb +6 -8
  18. data/lib/asker/cli.rb +27 -9
  19. data/lib/asker/data/code.rb +4 -1
  20. data/lib/asker/data/concept.rb +67 -21
  21. data/lib/asker/data/table.rb +2 -0
  22. data/lib/asker/data/template.rb +3 -1
  23. data/lib/asker/data/world.rb +7 -4
  24. data/lib/asker/displayer/code_displayer.rb +7 -0
  25. data/lib/asker/displayer/concept_ai_displayer.erb +10 -0
  26. data/lib/asker/displayer/concept_ai_displayer.rb +23 -22
  27. data/lib/asker/displayer/concept_displayer.rb +9 -4
  28. data/lib/asker/displayer/stats_displayer.rb +8 -0
  29. data/lib/asker/exporter/concept_ai_gift_exporter.rb +7 -11
  30. data/lib/asker/exporter/concept_ai_moodle_exporter.rb +44 -0
  31. data/lib/asker/exporter/concept_ai_yaml_exporter.rb +6 -3
  32. data/lib/asker/exporter/concept_doc_exporter.rb +14 -1
  33. data/lib/asker/exporter/data_gift_exporter.rb +29 -0
  34. data/lib/asker/exporter/output_file_exporter.rb +9 -6
  35. data/lib/asker/files/{config.ini → asker.ini} +14 -4
  36. data/lib/asker/files/language/du/connectors.yaml +81 -0
  37. data/lib/asker/files/language/du/mistakes.yaml +82 -0
  38. data/lib/asker/files/language/du/templates.yaml +28 -49
  39. data/lib/asker/files/language/en/templates.yaml +19 -19
  40. data/lib/asker/files/language/es/mistakes.yaml +9 -7
  41. data/lib/asker/files/language/es/templates.yaml +19 -19
  42. data/lib/asker/files/language/fr/connectors.yaml +68 -84
  43. data/lib/asker/files/language/fr/templates.yaml +22 -22
  44. data/lib/asker/formatter/concept_string_formatter.rb +7 -4
  45. data/lib/asker/formatter/moodle/matching.erb +38 -0
  46. data/lib/asker/formatter/moodle/multichoice.erb +49 -0
  47. data/lib/asker/formatter/moodle/shortanswer.erb +30 -0
  48. data/lib/asker/formatter/moodle/truefalse.erb +47 -0
  49. data/lib/asker/formatter/question_gift_formatter.rb +21 -19
  50. data/lib/asker/formatter/question_moodle_formatter.rb +27 -0
  51. data/lib/asker/lang/lang_factory.rb +7 -1
  52. data/lib/asker/loader/code_loader.rb +1 -1
  53. data/lib/asker/loader/content_loader.rb +7 -7
  54. data/lib/asker/loader/directory_loader.rb +3 -3
  55. data/lib/asker/loader/embedded_file.rb +42 -0
  56. data/lib/asker/loader/file_loader.rb +1 -1
  57. data/lib/asker/loader/image_url_loader.rb +4 -3
  58. data/lib/asker/loader/input_loader.rb +1 -1
  59. data/lib/asker/loader/project_loader.rb +14 -5
  60. data/lib/asker/logger.rb +29 -4
  61. data/lib/asker/project.rb +14 -79
  62. data/lib/asker/skeleton.rb +3 -2
  63. data/lib/asker.rb +37 -9
  64. 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
- stages: { d: true, b: true, f: true, i: true, s: true, t: true },
25
- threshold: 0.5 }
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 theses values
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['global']['outputdir']
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
- 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')
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
@@ -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
@@ -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.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
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
- project.close # Logger use Project.get(:logfile) until the end
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.1.7
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: 2020-04-01 00:00:00.000000000 Z
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.txt
119
+ - LICENSE
134
120
  files:
135
- - LICENSE.txt
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/config.ini
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/devel
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: Use asker command!
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.1.2
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.