asker-tool 2.1.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 (91) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE +674 -0
  3. data/README.md +53 -0
  4. data/bin/asker +4 -0
  5. data/docs/changelog/v2.1.md +99 -0
  6. data/docs/commands.md +15 -0
  7. data/docs/contributions.md +18 -0
  8. data/docs/history.md +40 -0
  9. data/docs/idea.md +44 -0
  10. data/docs/inputs/README.md +39 -0
  11. data/docs/inputs/code.md +69 -0
  12. data/docs/inputs/concepts.md +142 -0
  13. data/docs/inputs/jedi.md +68 -0
  14. data/docs/inputs/tables.md +112 -0
  15. data/docs/inputs/templates.md +87 -0
  16. data/docs/install/README.md +38 -0
  17. data/docs/install/manual.md +26 -0
  18. data/docs/install/scripts.md +26 -0
  19. data/docs/revise/asker-file.md +41 -0
  20. data/docs/revise/buenas-practicas/01-convocatoria.md +30 -0
  21. data/docs/revise/buenas-practicas/02-formulario.md +35 -0
  22. data/docs/revise/buenas-practicas/03-descripcion.md +63 -0
  23. data/docs/revise/buenas-practicas/04-resultados.md +17 -0
  24. data/docs/revise/buenas-practicas/05-reproducir.md +10 -0
  25. data/docs/revise/ejemplos/01/README.md +27 -0
  26. data/docs/revise/ejemplos/02/README.md +31 -0
  27. data/docs/revise/ejemplos/03/README.md +31 -0
  28. data/docs/revise/ejemplos/04/README.md +37 -0
  29. data/docs/revise/ejemplos/05/README.md +25 -0
  30. data/docs/revise/ejemplos/06/README.md +43 -0
  31. data/docs/revise/ejemplos/README.md +11 -0
  32. data/docs/revise/projects.md +74 -0
  33. data/lib/asker.rb +103 -0
  34. data/lib/asker/ai/ai.rb +70 -0
  35. data/lib/asker/ai/ai_calculate.rb +55 -0
  36. data/lib/asker/ai/concept_ai.rb +49 -0
  37. data/lib/asker/ai/question.rb +58 -0
  38. data/lib/asker/ai/stages/base_stage.rb +16 -0
  39. data/lib/asker/ai/stages/main.rb +8 -0
  40. data/lib/asker/ai/stages/stage_b.rb +87 -0
  41. data/lib/asker/ai/stages/stage_d.rb +160 -0
  42. data/lib/asker/ai/stages/stage_f.rb +156 -0
  43. data/lib/asker/ai/stages/stage_i.rb +140 -0
  44. data/lib/asker/ai/stages/stage_s.rb +52 -0
  45. data/lib/asker/ai/stages/stage_t.rb +170 -0
  46. data/lib/asker/application.rb +30 -0
  47. data/lib/asker/checker.rb +356 -0
  48. data/lib/asker/cli.rb +85 -0
  49. data/lib/asker/code/ai/base_code_ai.rb +48 -0
  50. data/lib/asker/code/ai/code_ai_factory.rb +26 -0
  51. data/lib/asker/code/ai/javascript_code_ai.rb +167 -0
  52. data/lib/asker/code/ai/python_code_ai.rb +167 -0
  53. data/lib/asker/code/ai/ruby_code_ai.rb +169 -0
  54. data/lib/asker/code/ai/sql_code_ai.rb +69 -0
  55. data/lib/asker/code/code.rb +53 -0
  56. data/lib/asker/data/column.rb +62 -0
  57. data/lib/asker/data/concept.rb +183 -0
  58. data/lib/asker/data/data_field.rb +87 -0
  59. data/lib/asker/data/row.rb +93 -0
  60. data/lib/asker/data/table.rb +96 -0
  61. data/lib/asker/data/template.rb +65 -0
  62. data/lib/asker/data/world.rb +53 -0
  63. data/lib/asker/exporter/code_gift_exporter.rb +35 -0
  64. data/lib/asker/exporter/code_screen_exporter.rb +45 -0
  65. data/lib/asker/exporter/concept_ai_gift_exporter.rb +33 -0
  66. data/lib/asker/exporter/concept_ai_screen_exporter.rb +115 -0
  67. data/lib/asker/exporter/concept_ai_yaml_exporter.rb +33 -0
  68. data/lib/asker/exporter/concept_doc_exporter.rb +21 -0
  69. data/lib/asker/exporter/concept_screen_exporter.rb +25 -0
  70. data/lib/asker/exporter/main.rb +9 -0
  71. data/lib/asker/files/config.ini +40 -0
  72. data/lib/asker/formatter/code_string_formatter.rb +16 -0
  73. data/lib/asker/formatter/concept_doc_formatter.rb +37 -0
  74. data/lib/asker/formatter/concept_string_formatter.rb +66 -0
  75. data/lib/asker/formatter/question_gift_formatter.rb +65 -0
  76. data/lib/asker/formatter/question_hash_formatter.rb +40 -0
  77. data/lib/asker/formatter/question_moodlexml_formatter.rb +71 -0
  78. data/lib/asker/formatter/rb2haml_formatter.rb +26 -0
  79. data/lib/asker/lang/lang.rb +42 -0
  80. data/lib/asker/lang/lang_factory.rb +19 -0
  81. data/lib/asker/lang/text_actions.rb +150 -0
  82. data/lib/asker/loader/code_loader.rb +53 -0
  83. data/lib/asker/loader/content_loader.rb +101 -0
  84. data/lib/asker/loader/directory_loader.rb +58 -0
  85. data/lib/asker/loader/file_loader.rb +33 -0
  86. data/lib/asker/loader/image_url_loader.rb +61 -0
  87. data/lib/asker/loader/input_loader.rb +24 -0
  88. data/lib/asker/loader/project_loader.rb +71 -0
  89. data/lib/asker/logger.rb +21 -0
  90. data/lib/asker/project.rb +170 -0
  91. metadata +261 -0
@@ -0,0 +1,61 @@
1
+
2
+ require 'net/http'
3
+ require 'uri'
4
+ require_relative '../project'
5
+ require_relative '../application'
6
+
7
+ # Search URL images on Internet
8
+ # Methods:
9
+ # * +load+ - Accept String or an Array with the desired search
10
+ # * +sanitize_string+ - Clean URL string
11
+ # * +sanitize_array+ - Clean URL Array
12
+ module ImageUrlLoader
13
+ # Search "input" images on Google and return URL
14
+ def self.load(input = [])
15
+ param = Application.instance.config['global']['internet'] || 'yes'
16
+ return [] unless param == 'yes'
17
+
18
+ filters = []
19
+ if input.class == String
20
+ filters += sanitize_string(input.clone)
21
+ elsif input.class == Array
22
+ filters = sanitize_array(input.clone)
23
+ else
24
+ raise "[ERROR] ImageUrlLoader: Unkown type #{input.class}"
25
+ end
26
+ # Search Image URLs from Google site, selected by <filters>
27
+ search_url = 'https://www.google.es/search?q='
28
+ search_url << filters.flatten.join('+').to_s
29
+ search_url << '&source=lnms&tbm=isch&sa=X&ved=2ahUKEwj_g8Wfst7nAhWpzoUKHf_wDbsQ_AUoAnoECBMQBA&biw=1280&bih=591'
30
+ image_urls = []
31
+ begin
32
+ uri = URI.parse(search_url)
33
+ response = Net::HTTP.get_response(uri)
34
+
35
+ r = response.body.split(' ')
36
+ r.each do |line|
37
+ if line.include? 'src="https'
38
+ image_urls << line.delete('"')[4, line.size]
39
+ end
40
+ end
41
+ rescue
42
+ Project.instance.verboseln '[ERROR] ImageUrlLoader'
43
+ Project.instance.verboseln " => #{search_url}"
44
+ Project.instance.verboseln ' => Check Internet connections'
45
+ Project.instance.verboseln ' => Ensure URL is well formed'
46
+ end
47
+ image_urls
48
+ end
49
+
50
+ def self.sanitize_string(input)
51
+ r = [ ['á', 'a'], ['é', 'e'], ['í', 'i'], ['ó', 'o'], ['ú', 'u'], ['ñ', 'n'], ['Á', 'A'], ['É', 'E'], ['Í', 'I'], ['Ó', 'O'], ['Ú', 'U'], ['Ñ', 'N']]
52
+ r.each { |item| input.gsub!(item[0], item[1]) }
53
+ r = ['-', '_', ',', '"']
54
+ r.each { |item| input.gsub!(item, ' ') }
55
+ input.split(' ')
56
+ end
57
+
58
+ def self.sanitize_array(input)
59
+ input.map { |i| sanitize_string(i) }
60
+ end
61
+ end
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'directory_loader'
4
+ require_relative '../logger'
5
+
6
+ # Load DATA defined into our Project
7
+ module InputLoader
8
+ ##
9
+ # Load input data from every input directory
10
+ # @param inputdirs (Array)
11
+ def self.load(inputdirs)
12
+ output = { concepts: [], codes: [] }
13
+ Logger.verbose "\n[INFO] Loading input data"
14
+
15
+ # inputdirs = project.inputdirs.split(',')
16
+ inputdirs.each do |dirname|
17
+ data = DirectoryLoader.load(dirname)
18
+ output[:concepts] += data[:concepts]
19
+ output[:codes] += data[:codes]
20
+ end
21
+
22
+ output
23
+ end
24
+ end
@@ -0,0 +1,71 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'yaml'
4
+ require_relative '../project'
5
+
6
+ # Load params into Project class using arg input
7
+ # * load
8
+ # * load_from_string
9
+ # * load_from_yaml
10
+ # * load_from_directory
11
+ # * load_error
12
+ module ProjectLoader
13
+ def self.load(args = {})
14
+ project = Project.instance
15
+
16
+ if args.class == Hash
17
+ project.param.merge!(args)
18
+ return true
19
+ elsif args.class == String
20
+ ProjectLoader.load_from_string(args)
21
+ return true
22
+ end
23
+
24
+ msg = '[ERROR] ProjectLoader:'
25
+ msg += "Configuration params format is <#{pArgs.class}>!"
26
+ project.verbose Rainbow(msg).red
27
+ raise msg
28
+ end
29
+
30
+ def self.load_from_string(arg)
31
+ project = Project.instance
32
+ unless File.exist?(arg)
33
+ msg = Rainbow("[WARN] ProjectLoader.load: #{arg} dosn't exists!").yellow.bright
34
+ project.verbose msg
35
+ raise msg
36
+ end
37
+
38
+ if File.extname(arg) == '.haml' || File.extname(arg) == '.xml'
39
+ project.set(:inputdirs, File.dirname(arg))
40
+ project.set(:process_file, File.basename(arg))
41
+ elsif File.extname(arg) == '.yaml'
42
+ load_from_yaml(arg)
43
+ elsif File.directory?(arg)
44
+ load_from_directory(arg)
45
+ else
46
+ load_error(arg)
47
+ end
48
+ end
49
+
50
+ def self.load_from_yaml(arg)
51
+ project = Project.instance
52
+ project.param.merge!(YAML.load(File.open(arg)))
53
+ project.set(:configfilename, arg)
54
+ project.set(:projectdir, File.dirname(arg))
55
+ end
56
+
57
+ def self.load_from_directory(dirpath)
58
+ msg = Rainbow('[WARN] ProjectLoader.load: Directory input ').yellow
59
+ msg += Rainbow(dirpath).bright.yellow
60
+ msg += Rainbow(' not implemented!').yellow
61
+ Project.instance.verbose msg
62
+ exit 1
63
+ end
64
+
65
+ def self.load_error(arg)
66
+ msg = Rainbow('[ERR ] ProjectLoader: Input ').red
67
+ msg += Rainbow(arg).red.bright + Rainbow(' unkown').red
68
+ Project.instance.verbose msg
69
+ raise msg
70
+ end
71
+ end
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'project'
4
+
5
+ # Display and log project messages
6
+ module Logger
7
+ ##
8
+ # Display and log text
9
+ def self.verbose(msg)
10
+ project = Project.instance
11
+ puts msg if project.get(:verbose)
12
+ project.get(:logfile).write("#{msg}\n") if project.get(:logfile)
13
+ # project.get(:logfile)&.project.get(:logfile).write("#{msg}\n")
14
+ end
15
+
16
+ ##
17
+ # Display and log text line
18
+ def self.verboseln(msg)
19
+ verbose(msg + "\n")
20
+ end
21
+ end
@@ -0,0 +1,170 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'singleton'
4
+ require 'rainbow'
5
+ require 'fileutils'
6
+ require_relative 'application'
7
+
8
+ # Contains Project data and methods
9
+ class Project
10
+ include Singleton
11
+ attr_reader :default, :param
12
+
13
+ ##
14
+ # Initialize
15
+ def initialize
16
+ reset
17
+ end
18
+
19
+ ##
20
+ # Reset project params
21
+ def reset
22
+ @default = { inputbasedir: FileUtils.pwd,
23
+ outputdir: 'output',
24
+ category: :none,
25
+ formula_weights: [1, 1, 1],
26
+ lang: 'en',
27
+ locales: %w[en es javascript math python ruby sql],
28
+ show_mode: :default,
29
+ verbose: true,
30
+ stages: { d: true, b: true, f: true, i: true, s: true, t: true },
31
+ threshold: 0.5,
32
+ color_output: true }
33
+ @param = {}
34
+ end
35
+
36
+ ##
37
+ # Get value param
38
+ # @param key (Symbol) key
39
+ def get(key)
40
+ return @param[key] unless @param[key].nil?
41
+
42
+ @default[key]
43
+ end
44
+
45
+ ##
46
+ # Set value param
47
+ # @param key (Symbol) key
48
+ # @param value (String) value
49
+ def set(key, value)
50
+ @param[key] = value
51
+ end
52
+
53
+ ##
54
+ # Open new project
55
+ # * setting new params and
56
+ # * creating output files
57
+ # IMPORTANT: We need at least theses values
58
+ # * process_file
59
+ # * inputdirs
60
+ def open
61
+ ext = '.haml'
62
+ @param[:process_file] = @param[:process_file] ||
63
+ get(:projectdir).split(File::SEPARATOR).last + ext
64
+ @param[:projectname] = @param[:projectname] ||
65
+ File.basename(@param[:process_file], ext)
66
+ @param[:inputdirs] = @param[:inputdirs] ||
67
+ File.join(get(:inputbasedir), @param[:projectdir])
68
+
69
+ @param[:logname] = @param[:logname] ||
70
+ "#{@param[:projectname]}-log.txt"
71
+ @param[:outputname] = @param[:outputname] ||
72
+ "#{@param[:projectname]}-gift.txt"
73
+ @param[:lessonname] = @param[:lessonname] ||
74
+ "#{@param[:projectname]}-doc.txt"
75
+ @param[:yamlname] = @param[:yamlname] ||
76
+ "#{@param[:projectname]}.yaml"
77
+
78
+ @param[:logpath] = @param[:logpath] ||
79
+ File.join(get(:outputdir), @param[:logname])
80
+ @param[:outputpath] = @param[:outputpath] ||
81
+ File.join(get(:outputdir), @param[:outputname])
82
+ @param[:lessonpath] = @param[:lessonpath] ||
83
+ File.join(get(:outputdir), @param[:lessonname])
84
+ @param[:yamlpath] = @param[:yamlpath] ||
85
+ File.join(get(:outputdir), @param[:yamlname])
86
+
87
+ Dir.mkdir(get(:outputdir)) unless Dir.exist?(get(:outputdir))
88
+ create_log_file
89
+ create_output_file
90
+ create_lesson_file
91
+ create_yaml_file
92
+ end
93
+
94
+ ##
95
+ # Close output files
96
+ def close
97
+ get(:logfile).close
98
+ get(:outputfile).close
99
+ get(:lessonfile).close
100
+ get(:yamlfile).close
101
+ end
102
+
103
+ ##
104
+ # Display and log text
105
+ def verbose(msg)
106
+ puts msg if get(:verbose)
107
+ get(:logfile).write(msg.to_s + "\n") if get(:logfile)
108
+ end
109
+
110
+ ##
111
+ # Display and log text line
112
+ def verboseln(msg)
113
+ verbose(msg + "\n")
114
+ end
115
+
116
+ def method_missing(method, *_args, &_block)
117
+ get(method)
118
+ end
119
+
120
+ private
121
+
122
+ # create or reset logfile
123
+ def create_log_file
124
+ @param[:logfile] = File.open(get(:logpath), 'w')
125
+ f = get(:logfile)
126
+ f.write('=' * 50 + "\n")
127
+ f.write("Created by : #{Application::NAME}")
128
+ f.write(" (version #{Application::VERSION})\n")
129
+ f.write("File : #{get(:logname)}\n")
130
+ f.write("Time : #{Time.new}\n")
131
+ f.write("Author : David Vargas Ruiz\n")
132
+ f.write('=' * 50 + "\n\n")
133
+
134
+ verbose '[INFO] Project open'
135
+ verbose ' ├── inputdirs = ' + Rainbow(get(:inputdirs)).bright
136
+ verbose ' └── process_file = ' + Rainbow(get(:process_file)).bright
137
+ end
138
+
139
+ # Create or reset output file
140
+ def create_output_file
141
+ @param[:outputfile] = File.open(get(:outputpath), 'w')
142
+ f = get(:outputfile)
143
+ f.write('// ' + ('=' * 50) + "\n")
144
+ f.write("// Created by : #{Application::NAME}")
145
+ f.write(" (version #{Application::VERSION})\n")
146
+ f.write("// File : #{get(:outputname)}\n")
147
+ f.write("// Time : #{Time.new}\n")
148
+ f.write("// Author : David Vargas Ruiz\n")
149
+ f.write('// ' + ('=' * 50) + "\n\n")
150
+ f.write("$CATEGORY: $course$/#{get(:category)}\n") unless get(:category) == :none
151
+ end
152
+
153
+ # Create or reset lesson file
154
+ def create_lesson_file
155
+ @param[:lessonfile] = File.new(get(:lessonpath), 'w')
156
+ f = get(:lessonfile)
157
+ f.write('=' * 50 + "\n")
158
+ f.write("Created by : #{Application::NAME}")
159
+ f.write(" (version #{Application::VERSION})\n")
160
+ f.write("File : #{get(:lessonname)}\n")
161
+ f.write("Time : #{Time.new}\n")
162
+ f.write("Author : David Vargas Ruiz\n")
163
+ f.write('=' * 50 + "\n")
164
+ end
165
+
166
+ # Create or reset yaml file
167
+ def create_yaml_file
168
+ @param[:yamlfile] = File.open(get(:yamlpath), 'w')
169
+ end
170
+ end
metadata ADDED
@@ -0,0 +1,261 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: asker-tool
3
+ version: !ruby/object:Gem::Version
4
+ version: 2.1.2
5
+ platform: ruby
6
+ authors:
7
+ - David Vargas Ruiz
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2020-02-25 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: haml
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '5.1'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '5.1'
27
+ - !ruby/object:Gem::Dependency
28
+ name: inifile
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '3.0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '3.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rainbow
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '3.0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '3.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: terminal-table
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '1.8'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '1.8'
69
+ - !ruby/object:Gem::Dependency
70
+ name: thor
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '0.20'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '0.20'
83
+ - !ruby/object:Gem::Dependency
84
+ name: minitest
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '5.11'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '5.11'
97
+ - !ruby/object:Gem::Dependency
98
+ name: rubocop
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: '0.74'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: '0.74'
111
+ description: ASKER helps trainers to create a huge amount of questions, from a definitions
112
+ input file.
113
+ email: teuton.software@protonmail.com
114
+ executables:
115
+ - asker
116
+ extensions: []
117
+ extra_rdoc_files:
118
+ - README.md
119
+ - LICENSE
120
+ - docs/idea.md
121
+ - docs/changelog/v2.1.md
122
+ - docs/revise/buenas-practicas/05-reproducir.md
123
+ - docs/revise/buenas-practicas/04-resultados.md
124
+ - docs/revise/buenas-practicas/01-convocatoria.md
125
+ - docs/revise/buenas-practicas/02-formulario.md
126
+ - docs/revise/buenas-practicas/03-descripcion.md
127
+ - docs/revise/ejemplos/01/README.md
128
+ - docs/revise/ejemplos/04/README.md
129
+ - docs/revise/ejemplos/06/README.md
130
+ - docs/revise/ejemplos/02/README.md
131
+ - docs/revise/ejemplos/05/README.md
132
+ - docs/revise/ejemplos/03/README.md
133
+ - docs/revise/ejemplos/README.md
134
+ - docs/revise/asker-file.md
135
+ - docs/revise/projects.md
136
+ - docs/commands.md
137
+ - docs/contributions.md
138
+ - docs/install/scripts.md
139
+ - docs/install/README.md
140
+ - docs/install/manual.md
141
+ - docs/inputs/concepts.md
142
+ - docs/inputs/tables.md
143
+ - docs/inputs/code.md
144
+ - docs/inputs/jedi.md
145
+ - docs/inputs/templates.md
146
+ - docs/inputs/README.md
147
+ - docs/history.md
148
+ files:
149
+ - LICENSE
150
+ - README.md
151
+ - bin/asker
152
+ - docs/changelog/v2.1.md
153
+ - docs/commands.md
154
+ - docs/contributions.md
155
+ - docs/history.md
156
+ - docs/idea.md
157
+ - docs/inputs/README.md
158
+ - docs/inputs/code.md
159
+ - docs/inputs/concepts.md
160
+ - docs/inputs/jedi.md
161
+ - docs/inputs/tables.md
162
+ - docs/inputs/templates.md
163
+ - docs/install/README.md
164
+ - docs/install/manual.md
165
+ - docs/install/scripts.md
166
+ - docs/revise/asker-file.md
167
+ - docs/revise/buenas-practicas/01-convocatoria.md
168
+ - docs/revise/buenas-practicas/02-formulario.md
169
+ - docs/revise/buenas-practicas/03-descripcion.md
170
+ - docs/revise/buenas-practicas/04-resultados.md
171
+ - docs/revise/buenas-practicas/05-reproducir.md
172
+ - docs/revise/ejemplos/01/README.md
173
+ - docs/revise/ejemplos/02/README.md
174
+ - docs/revise/ejemplos/03/README.md
175
+ - docs/revise/ejemplos/04/README.md
176
+ - docs/revise/ejemplos/05/README.md
177
+ - docs/revise/ejemplos/06/README.md
178
+ - docs/revise/ejemplos/README.md
179
+ - docs/revise/projects.md
180
+ - lib/asker.rb
181
+ - lib/asker/ai/ai.rb
182
+ - lib/asker/ai/ai_calculate.rb
183
+ - lib/asker/ai/concept_ai.rb
184
+ - lib/asker/ai/question.rb
185
+ - lib/asker/ai/stages/base_stage.rb
186
+ - lib/asker/ai/stages/main.rb
187
+ - lib/asker/ai/stages/stage_b.rb
188
+ - lib/asker/ai/stages/stage_d.rb
189
+ - lib/asker/ai/stages/stage_f.rb
190
+ - lib/asker/ai/stages/stage_i.rb
191
+ - lib/asker/ai/stages/stage_s.rb
192
+ - lib/asker/ai/stages/stage_t.rb
193
+ - lib/asker/application.rb
194
+ - lib/asker/checker.rb
195
+ - lib/asker/cli.rb
196
+ - lib/asker/code/ai/base_code_ai.rb
197
+ - lib/asker/code/ai/code_ai_factory.rb
198
+ - lib/asker/code/ai/javascript_code_ai.rb
199
+ - lib/asker/code/ai/python_code_ai.rb
200
+ - lib/asker/code/ai/ruby_code_ai.rb
201
+ - lib/asker/code/ai/sql_code_ai.rb
202
+ - lib/asker/code/code.rb
203
+ - lib/asker/data/column.rb
204
+ - lib/asker/data/concept.rb
205
+ - lib/asker/data/data_field.rb
206
+ - lib/asker/data/row.rb
207
+ - lib/asker/data/table.rb
208
+ - lib/asker/data/template.rb
209
+ - lib/asker/data/world.rb
210
+ - lib/asker/exporter/code_gift_exporter.rb
211
+ - lib/asker/exporter/code_screen_exporter.rb
212
+ - lib/asker/exporter/concept_ai_gift_exporter.rb
213
+ - lib/asker/exporter/concept_ai_screen_exporter.rb
214
+ - lib/asker/exporter/concept_ai_yaml_exporter.rb
215
+ - lib/asker/exporter/concept_doc_exporter.rb
216
+ - lib/asker/exporter/concept_screen_exporter.rb
217
+ - lib/asker/exporter/main.rb
218
+ - lib/asker/files/config.ini
219
+ - lib/asker/formatter/code_string_formatter.rb
220
+ - lib/asker/formatter/concept_doc_formatter.rb
221
+ - lib/asker/formatter/concept_string_formatter.rb
222
+ - lib/asker/formatter/question_gift_formatter.rb
223
+ - lib/asker/formatter/question_hash_formatter.rb
224
+ - lib/asker/formatter/question_moodlexml_formatter.rb
225
+ - lib/asker/formatter/rb2haml_formatter.rb
226
+ - lib/asker/lang/lang.rb
227
+ - lib/asker/lang/lang_factory.rb
228
+ - lib/asker/lang/text_actions.rb
229
+ - lib/asker/loader/code_loader.rb
230
+ - lib/asker/loader/content_loader.rb
231
+ - lib/asker/loader/directory_loader.rb
232
+ - lib/asker/loader/file_loader.rb
233
+ - lib/asker/loader/image_url_loader.rb
234
+ - lib/asker/loader/input_loader.rb
235
+ - lib/asker/loader/project_loader.rb
236
+ - lib/asker/logger.rb
237
+ - lib/asker/project.rb
238
+ homepage: https://github.com/dvarrui/asker
239
+ licenses:
240
+ - GPL-3.0
241
+ metadata: {}
242
+ post_install_message: Use asker command!
243
+ rdoc_options: []
244
+ require_paths:
245
+ - lib
246
+ required_ruby_version: !ruby/object:Gem::Requirement
247
+ requirements:
248
+ - - ">="
249
+ - !ruby/object:Gem::Version
250
+ version: 2.3.0
251
+ required_rubygems_version: !ruby/object:Gem::Requirement
252
+ requirements:
253
+ - - ">="
254
+ - !ruby/object:Gem::Version
255
+ version: '0'
256
+ requirements: []
257
+ rubygems_version: 3.1.2
258
+ signing_key:
259
+ specification_version: 4
260
+ summary: Asker generates questions from input definitions file.
261
+ test_files: []