asker-tool 2.1.5 → 2.1.6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (74) hide show
  1. checksums.yaml +4 -4
  2. data/{LICENSE → LICENSE.txt} +0 -0
  3. data/README.md +2 -3
  4. data/bin/asker +1 -0
  5. data/lib/asker.rb +10 -6
  6. data/lib/asker/ai/ai.rb +4 -0
  7. data/lib/asker/ai/code/base_code_ai.rb +104 -0
  8. data/lib/asker/{code/ai → ai/code}/code_ai_factory.rb +11 -1
  9. data/lib/asker/{code/ai → ai/code}/javascript_code_ai.rb +2 -5
  10. data/lib/asker/ai/code/problem_code_ai.rb +176 -0
  11. data/lib/asker/{code/ai → ai/code}/python_code_ai.rb +2 -5
  12. data/lib/asker/{code/ai → ai/code}/ruby_code_ai.rb +14 -7
  13. data/lib/asker/{code/ai → ai/code}/sql_code_ai.rb +2 -5
  14. data/lib/asker/ai/concept_ai.rb +1 -0
  15. data/lib/asker/ai/stages/stage_t.rb +76 -76
  16. data/lib/asker/application.rb +18 -2
  17. data/lib/asker/checker.rb +112 -30
  18. data/lib/asker/cli.rb +12 -25
  19. data/lib/asker/data/code.rb +73 -0
  20. data/lib/asker/data/column.rb +31 -21
  21. data/lib/asker/data/concept.rb +42 -45
  22. data/lib/asker/data/data_field.rb +14 -0
  23. data/lib/asker/data/row.rb +75 -52
  24. data/lib/asker/data/table.rb +89 -42
  25. data/lib/asker/data/world.rb +57 -33
  26. data/lib/asker/displayer/concept_ai_displayer.rb +56 -37
  27. data/lib/asker/displayer/concept_displayer.rb +7 -5
  28. data/lib/asker/displayer/stats_displayer.rb +4 -3
  29. data/lib/asker/exporter/concept_ai_gift_exporter.rb +5 -3
  30. data/lib/asker/exporter/concept_ai_yaml_exporter.rb +7 -3
  31. data/lib/asker/exporter/output_file_exporter.rb +1 -1
  32. data/lib/asker/files/config.ini +37 -0
  33. data/lib/asker/files/example-concept.haml +0 -1
  34. data/lib/asker/{lang/locales → files/language}/du/templates.yaml +0 -0
  35. data/lib/asker/{lang/locales → files/language}/en/connectors.yaml +0 -0
  36. data/lib/asker/{lang/locales → files/language}/en/mistakes.yaml +0 -0
  37. data/lib/asker/{lang/locales → files/language}/en/templates.yaml +0 -0
  38. data/lib/asker/{lang/locales → files/language}/es/connectors.yaml +0 -0
  39. data/lib/asker/{lang/locales → files/language}/es/mistakes.yaml +0 -0
  40. data/lib/asker/{lang/locales → files/language}/es/templates.yaml +0 -0
  41. data/lib/asker/{lang/locales → files/language}/fr/connectors.yaml +0 -0
  42. data/lib/asker/{lang/locales → files/language}/fr/mistakes.yaml +0 -0
  43. data/lib/asker/{lang/locales → files/language}/fr/templates.yaml +0 -0
  44. data/lib/asker/{lang/locales → files/language}/javascript/connectors.yaml +0 -0
  45. data/lib/asker/{lang/locales → files/language}/javascript/mistakes.yaml +0 -0
  46. data/lib/asker/{lang/locales → files/language}/javascript/templates.yaml +0 -0
  47. data/lib/asker/{lang/locales → files/language}/math/connectors.yaml +0 -0
  48. data/lib/asker/{lang/locales → files/language}/math/mistakes.yaml +0 -0
  49. data/lib/asker/{lang/locales → files/language}/math/templates.yaml +0 -0
  50. data/lib/asker/{lang/locales → files/language}/python/connectors.yaml +0 -0
  51. data/lib/asker/{lang/locales → files/language}/python/mistakes.yaml +0 -0
  52. data/lib/asker/{lang/locales → files/language}/python/templates.yaml +0 -0
  53. data/lib/asker/{lang/locales → files/language}/ruby/connectors.yaml +0 -0
  54. data/lib/asker/{lang/locales → files/language}/ruby/mistakes.yaml +0 -0
  55. data/lib/asker/{lang/locales → files/language}/ruby/templates.yaml +0 -0
  56. data/lib/asker/{lang/locales → files/language}/sql/connectors.yaml +0 -0
  57. data/lib/asker/{lang/locales → files/language}/sql/mistakes.yaml +0 -0
  58. data/lib/asker/{lang/locales → files/language}/sql/templates.yaml +0 -0
  59. data/lib/asker/lang/lang.rb +17 -10
  60. data/lib/asker/lang/lang_factory.rb +26 -5
  61. data/lib/asker/lang/text_actions.rb +87 -69
  62. data/lib/asker/loader/code_loader.rb +3 -3
  63. data/lib/asker/loader/content_loader.rb +9 -5
  64. data/lib/asker/loader/file_loader.rb +2 -11
  65. data/lib/asker/loader/haml_loader.rb +15 -0
  66. data/lib/asker/loader/image_url_loader.rb +5 -8
  67. data/lib/asker/loader/input_loader.rb +8 -9
  68. data/lib/asker/loader/project_loader.rb +10 -8
  69. data/lib/asker/logger.rb +3 -3
  70. data/lib/asker/project.rb +24 -50
  71. data/lib/asker/skeleton.rb +22 -13
  72. metadata +39 -37
  73. data/lib/asker/code/ai/base_code_ai.rb +0 -48
  74. data/lib/asker/code/code.rb +0 -53
@@ -3,7 +3,7 @@
3
3
  require 'rainbow'
4
4
  require 'rexml/document'
5
5
  require_relative '../logger'
6
- require_relative '../code/code'
6
+ require_relative '../data/code'
7
7
 
8
8
  # Read XML info about Code input data
9
9
  module CodeLoader
@@ -24,7 +24,7 @@ module CodeLoader
24
24
  # @param xmldata (XML Object)
25
25
  # @param filename (String) File name that contains data
26
26
  # @return Code object
27
- def self.read_codedata_from_xml(xmldata, filename)
27
+ private_class_method def self.read_codedata_from_xml(xmldata, filename)
28
28
  data = { path: '?', type: '?', features: [] }
29
29
  xmldata.elements.each do |i|
30
30
  data[:path] = i.text if i.name == 'path'
@@ -38,7 +38,7 @@ module CodeLoader
38
38
  # Read features data from XML input
39
39
  # @param xmldata (XML object)
40
40
  # @return Array with features (Strings)
41
- def self.read_features(xmldata, filename)
41
+ private_class_method def self.read_features(xmldata, filename)
42
42
  features = []
43
43
  xmldata.elements.each do |i|
44
44
  if i.name == 'row'
@@ -41,7 +41,7 @@ module ContentLoader
41
41
  ##
42
42
  # Read lang attr from input XML data
43
43
  # @param xmldata (XML Object)
44
- def self.read_lang_attribute(xmldata)
44
+ private_class_method def self.read_lang_attribute(xmldata)
45
45
  begin
46
46
  lang = xmldata.root.attributes['lang']
47
47
  rescue StandardError
@@ -53,7 +53,7 @@ module ContentLoader
53
53
  ##
54
54
  # Read context attr from input XML data
55
55
  # @param xmldata (XML Object)
56
- def self.read_context_attribute(xmldata)
56
+ private_class_method def self.read_context_attribute(xmldata)
57
57
  begin
58
58
  context = xmldata.root.attributes['context']
59
59
  rescue StandardError
@@ -68,7 +68,7 @@ module ContentLoader
68
68
  # @param filepath (String)
69
69
  # @param lang
70
70
  # @param context
71
- def self.read_concept(xmldata, filepath, lang, context)
71
+ private_class_method def self.read_concept(xmldata, filepath, lang, context)
72
72
  project = Project.instance
73
73
  c = Concept.new(xmldata, filepath, lang, context)
74
74
  if [ File.basename(filepath), :default ].include? project.process_file
@@ -81,7 +81,7 @@ module ContentLoader
81
81
  # Read code from input XML data
82
82
  # @param xmldata (XML Object)
83
83
  # @param filepath (String)
84
- def self.read_code(xmldata, filepath)
84
+ private_class_method def self.read_code(xmldata, filepath)
85
85
  project = Project.instance
86
86
  c = CodeLoader.load(xmldata, filepath)
87
87
  if [ File.basename(filepath), :default ].include? project.process_file
@@ -90,7 +90,11 @@ module ContentLoader
90
90
  c
91
91
  end
92
92
 
93
- def self.raise_error_with(filepath, content)
93
+ ##
94
+ # Raise error and save content into error.file
95
+ # @param filepath (String)
96
+ # @param content (String)
97
+ private_class_method def self.raise_error_with(filepath, content)
94
98
  msg = Rainbow("[ERROR] ContentLoader: Format error in #{filepath}").red.bright
95
99
  Logger.verbose msg
96
100
  f = File.open('output/error.xml', 'w')
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'haml'
4
3
  require_relative 'content_loader'
4
+ require_relative 'haml_loader'
5
5
  require_relative '../logger'
6
6
 
7
7
  # Methods that load a filename and return list of concepts
@@ -11,7 +11,7 @@ module FileLoader
11
11
  # @param filename (String) File name to be load
12
12
  def self.load(filename)
13
13
  if File.extname(filename).casecmp('.haml').zero?
14
- file_content = load_haml filename
14
+ file_content = HamlLoader.load filename
15
15
  elsif File.extname(filename).casecmp('.xml').zero?
16
16
  file_content = File.read(filename)
17
17
  else
@@ -21,13 +21,4 @@ module FileLoader
21
21
  end
22
22
  ContentLoader.load(filename, file_content)
23
23
  end
24
-
25
- ##
26
- # Load HAML file name
27
- # @param filename (String) HAML file name
28
- def self.load_haml(filename)
29
- template = File.read(filename)
30
- haml_engine = Haml::Engine.new(template)
31
- haml_engine.render
32
- end
33
24
  end
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'haml'
4
+
5
+ # HAML file loader
6
+ module HamlLoader
7
+ ##
8
+ # Load HAML file name
9
+ # @param filename (String) HAML file name
10
+ def self.load(filename)
11
+ template = File.read(filename)
12
+ haml_engine = Haml::Engine.new(template)
13
+ haml_engine.render
14
+ end
15
+ end
@@ -1,8 +1,8 @@
1
1
 
2
2
  require 'net/http'
3
3
  require 'uri'
4
- require_relative '../project'
5
4
  require_relative '../application'
5
+ require_relative '../logger'
6
6
 
7
7
  # Search URL images on Internet
8
8
  # Methods:
@@ -12,9 +12,6 @@ require_relative '../application'
12
12
  module ImageUrlLoader
13
13
  # Search "input" images on Google and return URL
14
14
  def self.load(input = [])
15
- param = Application.instance.config['global']['internet'] || 'yes'
16
- return [] unless param == 'yes'
17
-
18
15
  filters = []
19
16
  if input.class == String
20
17
  filters += sanitize_string(input.clone)
@@ -39,10 +36,10 @@ module ImageUrlLoader
39
36
  end
40
37
  end
41
38
  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'
39
+ Logger.verboseln '[ERROR] ImageUrlLoader'
40
+ Logger.verboseln " => #{search_url}"
41
+ Logger.verboseln ' => Check Internet connections'
42
+ Logger.verboseln ' => Ensure URL is well formed'
46
43
  end
47
44
  image_urls
48
45
  end
@@ -11,10 +11,9 @@ module InputLoader
11
11
  # Load input data from every input directory
12
12
  # @param inputdirs (Array)
13
13
  def self.load(inputdirs)
14
- data = { concepts: [], codes: [], world: nil, concepts_ai: [] }
14
+ data = { concepts: [], codes: [], world: nil,
15
+ concepts_ai: [], codes_ai: [] }
15
16
  Logger.verbose "\n[INFO] Loading input data"
16
-
17
- # inputdirs = project.inputdirs.split(',')
18
17
  inputdirs.each do |dirname|
19
18
  temp = DirectoryLoader.load(dirname)
20
19
  data[:concepts] += temp[:concepts]
@@ -28,14 +27,14 @@ module InputLoader
28
27
  # * Calculate concept neighbours
29
28
  # * TO-DO: Calculate code neighbours
30
29
  data[:world] = World.new(data[:concepts])
31
- # Create ConceptAI data and make concept questions
30
+ # Create ConceptAI data (ConceptAI = concept + questions)
32
31
  data[:concepts].each do |concept|
33
- concept_ai = ConceptAI.new(concept, data[:world])
34
- concept_ai.make_questions
35
- data[:concepts_ai] << concept_ai
32
+ data[:concepts_ai] << ConceptAI.new(concept, data[:world])
33
+ end
34
+ # Create CodeAI data (CodeAI = code + questions)
35
+ data[:codes].each do |code|
36
+ data[:codes_ai] << CodeAIFactory.get(code)
36
37
  end
37
- # Make code questions
38
- data[:codes].each(&:make_questions)
39
38
  data
40
39
  end
41
40
  end
@@ -40,9 +40,9 @@ module ProjectLoader
40
40
  def self.load_from_string(filepath)
41
41
  project = Project.instance
42
42
  unless File.exist?(filepath)
43
- msg = Rainbow("[WARN] ProjectLoader.load: #{arg} dosn't exists!").yellow.bright
44
- project.verbose msg
45
- raise msg
43
+ msg = Rainbow("[ERROR] #{filepath} not found!").red.bright
44
+ Logger.verbose msg
45
+ exit 1
46
46
  end
47
47
 
48
48
  if File.extname(filepath) == '.haml' || File.extname(filepath) == '.xml'
@@ -52,7 +52,7 @@ module ProjectLoader
52
52
  elsif File.extname(filepath) == '.yaml'
53
53
  return load_from_yaml(filepath)
54
54
  else
55
- load_error(filepath)
55
+ error_loading(filepath)
56
56
  end
57
57
  end
58
58
 
@@ -64,9 +64,11 @@ module ProjectLoader
64
64
  project
65
65
  end
66
66
 
67
- def self.load_error(arg)
68
- msg = Rainbow("[ERROR] ProjectLoader.Input unkown: #{arg}").red.bright
69
- Project.instance.verbose msg
70
- raise msg
67
+ ##
68
+ # Error found and exit application.
69
+ def self.error_loading(arg)
70
+ msg = Rainbow("[ERROR] Loading... #{arg}").red.bright
71
+ Logger.verbose msg
72
+ exit 1
71
73
  end
72
74
  end
data/lib/asker/logger.rb CHANGED
@@ -1,5 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require_relative 'application'
3
4
  require_relative 'project'
4
5
 
5
6
  # Display and log project messages
@@ -7,9 +8,8 @@ module Logger
7
8
  ##
8
9
  # Display and log text
9
10
  def self.verbose(msg)
10
- project = Project.instance
11
- puts msg if project.get(:verbose)
12
- project.get(:logfile)&.write("#{msg}\n")
11
+ puts msg if Application.instance.config['global']['verbose'] == 'yes'
12
+ Project.instance.get(:logfile)&.write("#{msg}\n")
13
13
  end
14
14
 
15
15
  ##
data/lib/asker/project.rb CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  require 'singleton'
4
4
  require 'rainbow'
5
- require 'fileutils'
5
+ # require 'fileutils'
6
6
  require_relative 'application'
7
7
  require_relative 'logger'
8
8
 
@@ -21,16 +21,8 @@ class Project
21
21
  # Reset project params
22
22
  def reset
23
23
  @default = { inputbasedir: FileUtils.pwd,
24
- outputdir: 'output',
25
- category: :none,
26
- formula_weights: [1, 1, 1],
27
- lang: 'en',
28
- locales: %w[en es javascript math python ruby sql],
29
- show_mode: :default,
30
- verbose: true,
31
24
  stages: { d: true, b: true, f: true, i: true, s: true, t: true },
32
- threshold: 0.5,
33
- color_output: true }
25
+ threshold: 0.5 }
34
26
  @param = {}
35
27
  end
36
28
 
@@ -59,33 +51,27 @@ class Project
59
51
  # * process_file
60
52
  # * inputdirs
61
53
  def open
62
- ext = '.haml'
63
- @param[:process_file] = @param[:process_file] ||
64
- get(:projectdir).split(File::SEPARATOR).last + ext
54
+ config = Application.instance.config
55
+ ext = File.extname(@param[:process_file]) || '.haml'
56
+ #@param[:process_file] = @param[:process_file] ||
57
+ # get(:projectdir).split(File::SEPARATOR).last + ext
65
58
  @param[:projectname] = @param[:projectname] ||
66
59
  File.basename(@param[:process_file], ext)
67
- @param[:inputdirs] = @param[:inputdirs] ||
68
- File.join(get(:inputbasedir), @param[:projectdir])
69
-
70
- @param[:logname] = @param[:logname] ||
71
- "#{@param[:projectname]}-log.txt"
72
- @param[:outputname] = @param[:outputname] ||
73
- "#{@param[:projectname]}-gift.txt"
74
- @param[:lessonname] = @param[:lessonname] ||
75
- "#{@param[:projectname]}-doc.txt"
76
- @param[:yamlname] = @param[:yamlname] ||
77
- "#{@param[:projectname]}.yaml"
78
-
79
- @param[:logpath] = @param[:logpath] ||
80
- File.join(get(:outputdir), @param[:logname])
81
- @param[:outputpath] = @param[:outputpath] ||
82
- File.join(get(:outputdir), @param[:outputname])
83
- @param[:lessonpath] = @param[:lessonpath] ||
84
- File.join(get(:outputdir), @param[:lessonname])
85
- @param[:yamlpath] = @param[:yamlpath] ||
86
- File.join(get(:outputdir), @param[:yamlname])
87
-
88
- Dir.mkdir(get(:outputdir)) unless Dir.exist?(get(:outputdir))
60
+ #@param[:inputdirs] = @param[:inputdirs] ||
61
+ # File.join(get(:inputbasedir), @param[:projectdir])
62
+
63
+ @param[:logname] = "#{@param[:projectname]}-log.txt"
64
+ @param[:outputname] = "#{@param[:projectname]}-gift.txt"
65
+ @param[:lessonname] = "#{@param[:projectname]}-doc.txt"
66
+ @param[:yamlname] = "#{@param[:projectname]}.yaml"
67
+
68
+ outputdir = config['global']['outputdir']
69
+ @param[:logpath] = File.join(outputdir, get(:logname))
70
+ @param[:outputpath] = File.join(outputdir, get(:outputname))
71
+ @param[:lessonpath] = File.join(outputdir, get(:lessonname))
72
+ @param[:yamlpath] = File.join(outputdir, get(:yamlname))
73
+
74
+ Dir.mkdir(outputdir) unless Dir.exist?(outputdir)
89
75
  create_log_file
90
76
  create_output_file
91
77
  create_lesson_file
@@ -101,20 +87,6 @@ class Project
101
87
  get(:yamlfile).close
102
88
  end
103
89
 
104
- ##
105
- # Display and log text
106
- def verbose(msg)
107
- puts msg if get(:verbose)
108
- get(:logfile).write(msg.to_s + "\n") if get(:logfile)
109
- raise "verbose"
110
- end
111
-
112
- ##
113
- # Display and log text line
114
- def verboseln(msg)
115
- verbose(msg + "\n")
116
- end
117
-
118
90
  def method_missing(method, *_args, &_block)
119
91
  get(method)
120
92
  end
@@ -140,6 +112,7 @@ class Project
140
112
 
141
113
  # Create or reset output file
142
114
  def create_output_file
115
+ config = Application.instance.config
143
116
  @param[:outputfile] = File.open(get(:outputpath), 'w')
144
117
  f = get(:outputfile)
145
118
  f.write('// ' + ('=' * 50) + "\n")
@@ -149,7 +122,8 @@ class Project
149
122
  f.write("// Time : #{Time.new}\n")
150
123
  f.write("// Author : David Vargas Ruiz\n")
151
124
  f.write('// ' + ('=' * 50) + "\n\n")
152
- f.write("$CATEGORY: $course$/#{get(:category)}\n") unless get(:category) == :none
125
+ category = config['questions']['category']
126
+ f.write("$CATEGORY: $course$/#{category}\n") unless category.nil?
153
127
  end
154
128
 
155
129
  # Create or reset lesson file
@@ -12,27 +12,36 @@ require 'rainbow'
12
12
  module Skeleton
13
13
  ##
14
14
  # Create skeleton for asker input files
15
- # @param dirpath (String) Folder path to save example files
16
- def self.create(dirpath)
17
- puts "\n[INFO] Creating #{Rainbow(dirpath).bright} project skeleton"
15
+ # @param inputpath (String)
16
+ # rubocop:disable Metrics/MethodLength
17
+ def self.create_input(inputpath)
18
+ puts "\n[INFO] Creating example input #{Rainbow(inputpath).bright}"
19
+ if File.extname(inputpath) == '.haml'
20
+ dirpath = File.dirname(inputpath)
21
+ filename = File.basename(inputpath)
22
+ else
23
+ dirpath = inputpath
24
+ filename = 'example-concept.haml'
25
+ end
18
26
  create_dir dirpath
19
- copy_files_into(dirpath)
27
+ source = File.join(File.dirname(__FILE__), 'files/example-concept.haml')
28
+ copyfile(source, File.join(dirpath, filename))
20
29
  end
30
+ # rubocop:enable Metrics/MethodLength
21
31
 
22
32
  ##
23
- # Copy lib/asker/files into Folder
24
- # @param dirpath (String)
25
- def self.copy_files_into(dirpath)
26
- # Directory and files: example-concept.haml
27
- source = File.join(File.dirname(__FILE__), 'files/example-concept.haml')
28
- target = File.join(dirpath, 'example-concept.haml')
29
- copyfile(source, target)
33
+ # Create default configuration files
34
+ def self.create_configuration
35
+ puts "\n[INFO] Creating configuration files"
36
+ src = File.join(File.dirname(__FILE__), 'files', 'config.ini')
37
+ dst = File.join('config.ini')
38
+ copyfile(src, dst)
30
39
  end
31
40
 
32
41
  ##
33
42
  # Create folder
34
43
  # @param dirpath (String)
35
- def self.create_dir(dirpath)
44
+ private_class_method def self.create_dir(dirpath)
36
45
  if Dir.exist? dirpath
37
46
  puts "* Exists dir! => #{Rainbow(dirpath).yellow}"
38
47
  else
@@ -49,7 +58,7 @@ module Skeleton
49
58
  # Copy target file to dest
50
59
  # @param target (String)
51
60
  # @param dest (String)
52
- def self.copyfile(target, dest)
61
+ private_class_method def self.copyfile(target, dest)
53
62
  if File.exist? dest
54
63
  puts "* Exists file! => #{Rainbow(dest).yellow}"
55
64
  return true
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.5
4
+ version: 2.1.6
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-02-29 00:00:00.000000000 Z
11
+ date: 2020-03-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: haml
@@ -130,14 +130,21 @@ executables:
130
130
  extensions: []
131
131
  extra_rdoc_files:
132
132
  - README.md
133
- - LICENSE
133
+ - LICENSE.txt
134
134
  files:
135
- - LICENSE
135
+ - LICENSE.txt
136
136
  - README.md
137
137
  - bin/asker
138
138
  - lib/asker.rb
139
139
  - lib/asker/ai/ai.rb
140
140
  - lib/asker/ai/ai_calculate.rb
141
+ - lib/asker/ai/code/base_code_ai.rb
142
+ - lib/asker/ai/code/code_ai_factory.rb
143
+ - lib/asker/ai/code/javascript_code_ai.rb
144
+ - lib/asker/ai/code/problem_code_ai.rb
145
+ - lib/asker/ai/code/python_code_ai.rb
146
+ - lib/asker/ai/code/ruby_code_ai.rb
147
+ - lib/asker/ai/code/sql_code_ai.rb
141
148
  - lib/asker/ai/concept_ai.rb
142
149
  - lib/asker/ai/question.rb
143
150
  - lib/asker/ai/stages/base_stage.rb
@@ -151,13 +158,7 @@ files:
151
158
  - lib/asker/application.rb
152
159
  - lib/asker/checker.rb
153
160
  - lib/asker/cli.rb
154
- - lib/asker/code/ai/base_code_ai.rb
155
- - lib/asker/code/ai/code_ai_factory.rb
156
- - lib/asker/code/ai/javascript_code_ai.rb
157
- - lib/asker/code/ai/python_code_ai.rb
158
- - lib/asker/code/ai/ruby_code_ai.rb
159
- - lib/asker/code/ai/sql_code_ai.rb
160
- - lib/asker/code/code.rb
161
+ - lib/asker/data/code.rb
161
162
  - lib/asker/data/column.rb
162
163
  - lib/asker/data/concept.rb
163
164
  - lib/asker/data/data_field.rb
@@ -177,6 +178,31 @@ files:
177
178
  - lib/asker/files/config.ini
178
179
  - lib/asker/files/example-code.haml
179
180
  - lib/asker/files/example-concept.haml
181
+ - lib/asker/files/language/du/templates.yaml
182
+ - lib/asker/files/language/en/connectors.yaml
183
+ - lib/asker/files/language/en/mistakes.yaml
184
+ - lib/asker/files/language/en/templates.yaml
185
+ - lib/asker/files/language/es/connectors.yaml
186
+ - lib/asker/files/language/es/mistakes.yaml
187
+ - lib/asker/files/language/es/templates.yaml
188
+ - lib/asker/files/language/fr/connectors.yaml
189
+ - lib/asker/files/language/fr/mistakes.yaml
190
+ - lib/asker/files/language/fr/templates.yaml
191
+ - lib/asker/files/language/javascript/connectors.yaml
192
+ - lib/asker/files/language/javascript/mistakes.yaml
193
+ - lib/asker/files/language/javascript/templates.yaml
194
+ - lib/asker/files/language/math/connectors.yaml
195
+ - lib/asker/files/language/math/mistakes.yaml
196
+ - lib/asker/files/language/math/templates.yaml
197
+ - lib/asker/files/language/python/connectors.yaml
198
+ - lib/asker/files/language/python/mistakes.yaml
199
+ - lib/asker/files/language/python/templates.yaml
200
+ - lib/asker/files/language/ruby/connectors.yaml
201
+ - lib/asker/files/language/ruby/mistakes.yaml
202
+ - lib/asker/files/language/ruby/templates.yaml
203
+ - lib/asker/files/language/sql/connectors.yaml
204
+ - lib/asker/files/language/sql/mistakes.yaml
205
+ - lib/asker/files/language/sql/templates.yaml
180
206
  - lib/asker/formatter/code_string_formatter.rb
181
207
  - lib/asker/formatter/concept_doc_formatter.rb
182
208
  - lib/asker/formatter/concept_string_formatter.rb
@@ -186,36 +212,12 @@ files:
186
212
  - lib/asker/formatter/rb2haml_formatter.rb
187
213
  - lib/asker/lang/lang.rb
188
214
  - lib/asker/lang/lang_factory.rb
189
- - lib/asker/lang/locales/du/templates.yaml
190
- - lib/asker/lang/locales/en/connectors.yaml
191
- - lib/asker/lang/locales/en/mistakes.yaml
192
- - lib/asker/lang/locales/en/templates.yaml
193
- - lib/asker/lang/locales/es/connectors.yaml
194
- - lib/asker/lang/locales/es/mistakes.yaml
195
- - lib/asker/lang/locales/es/templates.yaml
196
- - lib/asker/lang/locales/fr/connectors.yaml
197
- - lib/asker/lang/locales/fr/mistakes.yaml
198
- - lib/asker/lang/locales/fr/templates.yaml
199
- - lib/asker/lang/locales/javascript/connectors.yaml
200
- - lib/asker/lang/locales/javascript/mistakes.yaml
201
- - lib/asker/lang/locales/javascript/templates.yaml
202
- - lib/asker/lang/locales/math/connectors.yaml
203
- - lib/asker/lang/locales/math/mistakes.yaml
204
- - lib/asker/lang/locales/math/templates.yaml
205
- - lib/asker/lang/locales/python/connectors.yaml
206
- - lib/asker/lang/locales/python/mistakes.yaml
207
- - lib/asker/lang/locales/python/templates.yaml
208
- - lib/asker/lang/locales/ruby/connectors.yaml
209
- - lib/asker/lang/locales/ruby/mistakes.yaml
210
- - lib/asker/lang/locales/ruby/templates.yaml
211
- - lib/asker/lang/locales/sql/connectors.yaml
212
- - lib/asker/lang/locales/sql/mistakes.yaml
213
- - lib/asker/lang/locales/sql/templates.yaml
214
215
  - lib/asker/lang/text_actions.rb
215
216
  - lib/asker/loader/code_loader.rb
216
217
  - lib/asker/loader/content_loader.rb
217
218
  - lib/asker/loader/directory_loader.rb
218
219
  - lib/asker/loader/file_loader.rb
220
+ - lib/asker/loader/haml_loader.rb
219
221
  - lib/asker/loader/image_url_loader.rb
220
222
  - lib/asker/loader/input_loader.rb
221
223
  - lib/asker/loader/project_loader.rb
@@ -234,7 +236,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
234
236
  requirements:
235
237
  - - ">="
236
238
  - !ruby/object:Gem::Version
237
- version: 2.3.0
239
+ version: 2.5.0
238
240
  required_rubygems_version: !ruby/object:Gem::Requirement
239
241
  requirements:
240
242
  - - ">="