asker-tool 2.2.0 → 2.2.4

Sign up to get free protection for your applications and to get access to all the features.
data/lib/asker/cli.rb CHANGED
@@ -2,24 +2,49 @@
2
2
 
3
3
  require 'rainbow'
4
4
  require 'thor'
5
- require_relative 'application'
5
+ require_relative 'version'
6
6
  require_relative '../asker'
7
7
 
8
8
  ##
9
9
  # Command Line User Interface
10
10
  class CLI < Thor
11
- map ['h', '-h', '--help'] => 'help'
11
+ map ['--help'] => 'help'
12
12
 
13
- map ['v', '-v', '--version'] => 'version'
13
+ map ['--version'] => 'version'
14
14
  desc 'version', 'Show the program version'
15
- ##
16
- # Show current version
17
15
  def version
18
- puts "#{Application::NAME} version #{Application::VERSION}"
16
+ puts "#{Version::NAME} version #{Version::VERSION}"
17
+ exit 0
18
+ end
19
+
20
+ map ['--init'] => 'init'
21
+ desc 'init', 'Create default INI config file'
22
+ def init
23
+ Asker.init
24
+ exit 0
25
+ end
26
+
27
+ map ['new','--new'] => 'new_input'
28
+ desc 'new DIRPATH', 'Create Asker demo input files'
29
+ ##
30
+ # Create Asker demo input files
31
+ # @param dirname (String) Path to folder
32
+ def new_input(dirname)
33
+ Asker.new_input(dirname)
34
+ exit 0
35
+ end
36
+
37
+ map ['--check'] => 'check'
38
+ desc 'check FILEPATH', 'Check input HAML file syntax'
39
+ def check(filename)
40
+ # Enable/disable color output
41
+ Rainbow.enabled = false if options['color'] == false
42
+ # Asker start processing input file
43
+ Asker.check(filename)
19
44
  end
20
45
 
21
46
  map ['f', '-f', '--file'] => 'file'
22
- desc 'file NAME', 'Build output files, from HAML/XML input file.'
47
+ desc '[file] FILEPATH', 'Build output files, from HAML/XML input file.'
23
48
  long_desc <<-LONGDESC
24
49
 
25
50
  Build questions about contents defined into input file specified.
@@ -35,51 +60,11 @@ class CLI < Thor
35
60
  (3) #{Rainbow('asker projects/foo/foo.yaml').aqua}, Build questions from YAML project file.
36
61
 
37
62
  LONGDESC
38
- ##
39
- # Create questions from input file
40
- # @param filename (String) Path to input file
41
63
  def file(filename)
42
64
  # Asker start processing input file
43
65
  Asker.start(filename)
44
66
  end
45
67
 
46
- map ['c', '-c', '--check'] => 'check'
47
- desc 'check', 'Check input HAML file syntax'
48
- ##
49
- # Check input file syntax
50
- # @param filename (String) Path to input file
51
- def check(filename)
52
- # Enable/disable color output
53
- Rainbow.enabled = false if options['color'] == false
54
- # Asker start processing input file
55
- Asker.check(filename)
56
- end
57
-
58
- map ['h', '-h', '--homepage', 'homepage'] => 'show_homepage'
59
- desc 'homepage', 'Documentation homepage'
60
- ##
61
- # Show documentation homepage
62
- def show_homepage()
63
- puts Application::HOMEPAGE
64
- end
65
-
66
- map ['i', '-i', '--init'] => 'init'
67
- desc 'init', 'Create default INI config file'
68
- ##
69
- # Create default INI config file
70
- def init
71
- Asker.create_configuration
72
- end
73
-
74
- map ['n', '-n', '--new', 'new'] => 'create_input'
75
- desc 'new [FOLDER]', 'Create Asker demo input files'
76
- ##
77
- # Create Asker demo input files
78
- # @param dirname (String) Path to folder
79
- def create_input(dirname)
80
- Asker.create_input(dirname)
81
- end
82
-
83
68
  ##
84
69
  # This actions are equals:
85
70
  # * asker demo/foo.haml
@@ -1,22 +1,12 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require_relative '../ai/code/code_ai_factory'
4
- require_relative '../project'
5
- require_relative '../logger'
6
- require_relative '../formatter/code_string_formatter'
7
4
 
8
- ##
9
- # Code data object
10
5
  class Code
11
6
  attr_reader :dirname, :filename, :type
12
7
  attr_accessor :process, :features
13
8
  attr_reader :lines, :questions
14
9
 
15
- ##
16
- # Initialize Code object
17
- # @param dirname (String)
18
- # @param filename (String)
19
- # @param type (String)
20
10
  def initialize(dirname, filename, type)
21
11
  @dirname = dirname
22
12
  @filename = filename
@@ -40,17 +30,13 @@ class Code
40
30
  out
41
31
  end
42
32
 
43
- def debug
44
- Logger.verbose CodeStringFormatter.to_s(self)
45
- end
46
-
47
33
  private
48
34
 
49
35
  def load(filepath)
50
36
  return if filepath.nil?
51
37
 
52
38
  unless File.exist? filepath
53
- Logger.verboseln Rainbow("[ERROR] Unkown file #{filepath}").red.bright
39
+ puts Rainbow("[ERROR] Unkown file #{filepath}").red.bright
54
40
  return
55
41
  end
56
42
  content = File.read(filepath)
@@ -3,8 +3,6 @@
3
3
  require 'rainbow'
4
4
  require 'rexml/document'
5
5
 
6
- require_relative '../application'
7
- require_relative '../logger'
8
6
  require_relative '../lang/lang_factory'
9
7
  require_relative '../loader/embedded_file'
10
8
  require_relative 'table'
@@ -24,7 +22,7 @@ class Concept
24
22
  attr_reader :data # Data about this concept
25
23
  attr_accessor :process # (Boolean) if it is necesary generate questions
26
24
 
27
- @@id = 0 # Global Concept counter
25
+ @@id = 0 # Global Concept counter (concept identifier)
28
26
 
29
27
  ##
30
28
  # Initilize Concept
@@ -93,7 +91,8 @@ class Concept
93
91
  # rubocop:disable Metrics/AbcSize
94
92
  # rubocop:disable Metrics/CyclomaticComplexity
95
93
  def calculate_nearness_to_concept(other)
96
- a = Application.instance.config['ai']['formula_weights']
94
+ a = ProjectData.instance.get(:weights)
95
+ #Application.instance.config['ai']['formula_weights']
97
96
  weights = a.split(',').map(&:to_f)
98
97
 
99
98
  max1 = @context.count
@@ -180,7 +179,7 @@ class Concept
180
179
  @data[:tables] << Table.new(self, i)
181
180
  else
182
181
  text = " [ERROR] Concept #{name} with unkown attribute: #{i.name}"
183
- Logger.verboseln Rainbow(text).color(:red)
182
+ puts Rainbow(text).color(:red)
184
183
  end
185
184
  end
186
185
  end
@@ -195,7 +194,7 @@ class Concept
195
194
 
196
195
  def process_tags(value)
197
196
  if value.text.nil? || value.text.size.zero?
198
- Logger.verboseln Rainbow("[ERROR] Concept #{name} has tags empty!").red.briht
197
+ puts Rainbow("[ERROR] Concept #{name} has tags empty!").red.briht
199
198
  exit 1
200
199
  end
201
200
 
@@ -208,14 +207,16 @@ class Concept
208
207
  def process_def(value)
209
208
  case value.attributes['type']
210
209
  when 'image_url'
210
+ # Link with remote image
211
211
  @data[:images] << EmbeddedFile.load(value.text.strip, File.dirname(@filename))
212
212
  when 'file'
213
+ # Load local images and text files
213
214
  @data[:images] << EmbeddedFile.load(value.text.strip, File.dirname(@filename))
214
215
  when nil
215
216
  @data[:texts] << value.text.strip
216
217
  else
217
218
  msg = "[ERROR] Unknown type: #{value.attributes['type']}"
218
- Logger.verboseln Rainbow(msg).red.bright
219
+ puts Rainbow(msg).red.bright
219
220
  exit 1
220
221
  end
221
222
  end
@@ -1,43 +1,30 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'singleton'
4
- require 'rainbow'
5
- require_relative 'application'
6
- require_relative 'logger'
7
4
 
8
- # Contains Project data and methods
9
- class Project
5
+ class ProjectData
10
6
  include Singleton
11
7
  attr_reader :default, :param
12
8
 
13
- ##
14
- # Initialize
15
9
  def initialize
16
10
  reset
17
11
  end
18
12
 
19
- ##
20
- # Reset project params
21
13
  def reset
22
14
  @default = { inputbasedir: FileUtils.pwd,
23
15
  stages: { d: true, b: true, f: true, i: true, s: true, t: true },
24
- threshold: 0.5 }
16
+ threshold: 0.5,
17
+ outputdir: 'output',
18
+ weights: '1, 1, 1' }
25
19
  @param = {}
26
20
  end
27
21
 
28
- ##
29
- # Get value param
30
- # @param key (Symbol) key
31
22
  def get(key)
32
23
  return @param[key] unless @param[key].nil?
33
24
 
34
25
  @default[key]
35
26
  end
36
27
 
37
- ##
38
- # Set value param
39
- # @param key (Symbol) key
40
- # @param value (String) value
41
28
  def set(key, value)
42
29
  @param[key] = value
43
30
  end
@@ -52,7 +39,6 @@ class Project
52
39
  # rubocop:disable Metrics/MethodLength
53
40
  # rubocop:disable Metrics/AbcSize
54
41
  def open
55
- config = Application.instance.config
56
42
  ext = File.extname(@param[:process_file]) || '.haml'
57
43
  @param[:projectname] = @param[:projectname] ||
58
44
  File.basename(@param[:process_file], ext)
@@ -63,7 +49,7 @@ class Project
63
49
  @param[:yamlname] = "#{@param[:projectname]}.yaml"
64
50
  @param[:moodlename] = "#{@param[:projectname]}-moodle.xml"
65
51
 
66
- outputdir = config['output']['folder']
52
+ outputdir = get(:outputdir)
67
53
  @param[:logpath] = File.join(outputdir, get(:logname))
68
54
  @param[:outputpath] = File.join(outputdir, get(:outputname))
69
55
  @param[:lessonpath] = File.join(outputdir, get(:lessonname))
@@ -71,10 +57,6 @@ class Project
71
57
  @param[:moodlepath] = File.join(outputdir, get(:moodlename))
72
58
 
73
59
  Dir.mkdir(outputdir) unless Dir.exist?(outputdir)
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
78
60
  end
79
61
  # rubocop:enable Metrics/MethodLength
80
62
  # rubocop:enable Metrics/AbcSize
@@ -1,22 +1,14 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require_relative '../loader/image_url_loader'
4
- require_relative '../project'
5
- require_relative '../logger'
6
4
 
7
- ##
8
- # World data
9
5
  class World
10
6
  attr_reader :concepts, :filenames, :contexts, :image_urls
11
7
 
12
- ##
13
- # Initialize World object
14
- # @param concepts (Array)
15
- # @param show_progress (Boolean)
16
- def initialize(concepts, show_progress = true)
8
+ def initialize(concepts, internet = true)
17
9
  find_neighbors_for_every_concept(concepts)
18
10
  @concepts, @filenames, @contexts = get_lists_from(concepts)
19
- @image_urls = find_url_images_from_internet(show_progress)
11
+ @image_urls = find_url_images_from_internet(internet)
20
12
  end
21
13
 
22
14
  ##
@@ -57,10 +49,9 @@ class World
57
49
  # rubocop:disable Metrics/AbcSize
58
50
  # rubocop:disable Metrics/CyclomaticComplexity
59
51
  # rubocop:disable Metrics/PerceivedComplexity
60
- def find_url_images_from_internet(show_progress)
61
- return {} unless Application.instance.config['global']['internet'] == 'yes'
52
+ def find_url_images_from_internet(internet)
53
+ return {} unless internet
62
54
 
63
- Logger.verbose "\n[INFO] Loading data from Internet" if show_progress
64
55
  threads = []
65
56
  searchs = []
66
57
  urls = {}
@@ -68,11 +59,9 @@ class World
68
59
  @concepts&.each_key { |key| searchs << key }
69
60
  @contexts.each { |filter| searchs << filter.join(' ').to_s }
70
61
  searchs.each do |search|
71
- Logger.verbose('.') if show_progress
72
62
  threads << Thread.new { urls[search] = ImageUrlLoader.load(search) }
73
63
  end
74
64
  threads.each(&:join) # wait for all threads to finish
75
- Logger.verbose("\n") if show_progress
76
65
  urls
77
66
  end
78
67
  # rubocop:enable Metrics/MethodLength
@@ -39,6 +39,7 @@ class ConceptAIDisplayer
39
39
  next unless concept_ai.concept.process?
40
40
 
41
41
  e = concept_ai.concept.texts.size
42
+ e += concept_ai.concept.images.size
42
43
  concept_ai.concept.tables.each { |t| e += t.fields.size * t.rows.size }
43
44
 
44
45
  sd = sb = sf = 0
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require_relative '../formatter/question_moodle_formatter'
4
+ require_relative '../version'
4
5
 
5
6
  # Export ConceptIA data to gift to moodlefile
6
7
  module ConceptAIMoodleExporter
@@ -13,8 +14,8 @@ module ConceptAIMoodleExporter
13
14
  file.write("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n")
14
15
  file.write("<quiz>\n")
15
16
  file.write("<!--\n#{('=' * 50)}\n")
16
- file.write(" Created by : #{Application::NAME}")
17
- file.write(" (version #{Application::VERSION})\n")
17
+ file.write(" Created by : #{Version::NAME}")
18
+ file.write(" (version #{Version::VERSION})\n")
18
19
  file.write(" File : #{project.get(:moodlename)}\n")
19
20
  file.write(" Time : #{Time.new}\n")
20
21
  file.write(" Author : David Vargas Ruiz\n")
@@ -1,18 +1,17 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require_relative '../formatter/concept_doc_formatter'
4
+ require_relative '../version'
4
5
 
5
6
  ##
6
7
  # Export Concept to Doc file
7
8
  module ConceptDocExporter
8
9
  ##
9
- # Export arrya of concepts to doc
10
- # rubocop:disable Metrics/AbcSize
11
- # rubocop:disable Metrics/MethodLength
10
+ # Export array of concepts to doc
12
11
  def self.export_all(concepts, project)
13
12
  file = File.new(project.get(:lessonpath), 'w')
14
13
  file.write('=' * 50 + "\n")
15
- file.write("Created by : #{Application::NAME} (version #{Application::VERSION})\n")
14
+ file.write("Created by : #{Version::NAME} (version #{Version::VERSION})\n")
16
15
  file.write("File : #{project.get(:lessonname)}\n")
17
16
  file.write("Time : #{Time.new}\n")
18
17
  file.write("Author : David Vargas Ruiz\n")
@@ -23,6 +22,4 @@ module ConceptDocExporter
23
22
  end
24
23
  file.close
25
24
  end
26
- # rubocop:enable Metrics/AbcSize
27
- # rubocop:enable Metrics/MethodLength
28
25
  end
@@ -2,6 +2,8 @@
2
2
 
3
3
  require_relative 'concept_ai_gift_exporter'
4
4
  require_relative 'code_gift_exporter'
5
+ require_relative '../version'
6
+ require_relative '../application'
5
7
 
6
8
  # Export Data (ConceptIA and Code) to gift to outputfile
7
9
  module DataGiftExporter
@@ -12,8 +14,8 @@ module DataGiftExporter
12
14
  def self.export_all(data, project)
13
15
  file = File.open(project.get(:outputpath), 'w')
14
16
  file.write('// ' + ('=' * 50) + "\n")
15
- file.write("// Created by : #{Application::NAME}")
16
- file.write(" (version #{Application::VERSION})\n")
17
+ file.write("// Created by : #{Version::NAME}")
18
+ file.write(" (version #{Version::VERSION})\n")
17
19
  file.write("// File : #{project.get(:outputname)}\n")
18
20
  file.write("// Time : #{Time.new}\n")
19
21
  file.write("// Author : David Vargas Ruiz\n")
@@ -13,7 +13,7 @@
13
13
  :f2: 'The next items are "<%=text2%>".<br/>Choose the option that not belongs concept <b><%=text1%></b>.'
14
14
  :f3: 'The next items are "<%=text2%>" from <b><%=text1%></b> concept:<br><p><%=text3%></p>(Put every word into the right position)'
15
15
  :i1: '<%=text1%><br/>Choose the best association for the previous image.<br/>'
16
- :i2: '<%=text1%><br/>The previous image corresponds to <b><%=text2%></b>.'
16
+ :i2: '<%=text1%><br/>The previous image/text corresponds to <b><%=text2%></b>.'
17
17
  :i3: '<%=text1%><br/>Write the best answer <%=text2%>, for the previous image.<br/>'
18
18
  :i4: '<%=text1%><br/>Definition:<br/> <i><%=text2%></i><br/><br/>(Put every word in the right text position)'
19
19
  :s1: "About <b><%=text1%></b> concept, sort every \"<%=text2%>\", so It is true that \"<%=text3%>\".<br/>"
@@ -13,7 +13,7 @@
13
13
  :f2: 'Los siguientes elementos son "<%=text2%>".<br/>Selecciona la opción que no pertenezca al concepto <b><%=text1%></b>.'
14
14
  :f3: 'Los siguientes elementos son "<%=text2%>" del concepto <b><%=text1%></b>:<br><p><%=text3%></p>(Coloca cada palabra en su posición correcta dentro del texto)'
15
15
  :i1: '<%=text1%><br/>Elige la opción que mejor se corresponda con la imagen anterior.<br/>'
16
- :i2: '<%=text1%><br/>La imagen anterior corresponde a <b><%=text2%></b>.'
16
+ :i2: '<%=text1%><br/>La imagen/texto anterior corresponde a <b><%=text2%></b>.'
17
17
  :i3: '<%=text1%><br/>Escribe la opción <%=text2%>, que mejor corresponda con la imagen anterior.<br/>'
18
18
  :i4: '<%=text1%><br/>Definición: <i><%=text2%></i><br/><br/>(Coloca cada palabra en su posición correcta dentro del texto)'
19
19
  :s1: 'En relación al concepto <b><%=text1%></b>, ordena cada/las/los "<%=text2%>" de modo que se cumpla el criterio "<%=text3%>".<br/>'
@@ -3,10 +3,6 @@
3
3
  require 'rainbow'
4
4
  require 'terminal-table'
5
5
 
6
- require_relative '../project'
7
-
8
- ##
9
- # Formatter Concept to Doc
10
6
  module ConceptDocFormatter
11
7
  ##
12
8
  # Formatter Concept into Doc
@@ -4,8 +4,7 @@ require 'rainbow'
4
4
  require 'rexml/document'
5
5
  require_relative '../data/concept'
6
6
  require_relative 'code_loader'
7
- require_relative '../logger'
8
- require_relative '../project'
7
+ require_relative '../data/project_data'
9
8
 
10
9
  # Define methods that load data from XML contents
11
10
  module ContentLoader
@@ -13,8 +12,6 @@ module ContentLoader
13
12
  # Load XML content into Asker data objects
14
13
  # @param filepath (String) File path
15
14
  # @param content (String) XML plane text content
16
- # rubocop:disable Metrics/MethodLength
17
- # rubocop:disable Metrics/AbcSize
18
15
  def self.load(filepath, content)
19
16
  concepts = []
20
17
  codes = []
@@ -33,7 +30,7 @@ module ContentLoader
33
30
  when 'code'
34
31
  codes << read_code(xmldata, filepath)
35
32
  else
36
- Logger.verboseln Rainbow("[ERROR] Unkown tag <#{xmldata.name}>").red
33
+ puts Rainbow("[ERROR] Unkown tag <#{xmldata.name}>").red
37
34
  end
38
35
  end
39
36
 
@@ -49,7 +46,7 @@ module ContentLoader
49
46
  begin
50
47
  lang = xmldata.root.attributes['lang']
51
48
  rescue StandardError
52
- lang = Project.instance.lang
49
+ lang = ProjectData.instance.lang
53
50
  end
54
51
  lang
55
52
  end
@@ -73,7 +70,7 @@ module ContentLoader
73
70
  # @param lang
74
71
  # @param context
75
72
  private_class_method def self.read_concept(xmldata, filepath, lang, context)
76
- project = Project.instance
73
+ project = ProjectData.instance
77
74
  c = Concept.new(xmldata, filepath, lang, context)
78
75
  c.process = true if [File.basename(filepath), :default].include? project.get(:process_file)
79
76
  c
@@ -84,7 +81,7 @@ module ContentLoader
84
81
  # @param xmldata (XML Object)
85
82
  # @param filepath (String)
86
83
  private_class_method def self.read_code(xmldata, filepath)
87
- project = Project.instance
84
+ project = ProjectData.instance
88
85
  c = CodeLoader.load(xmldata, filepath)
89
86
  c.process = true if [File.basename(filepath), :default].include? project.get(:process_file)
90
87
  c
@@ -95,8 +92,9 @@ module ContentLoader
95
92
  # @param filepath (String)
96
93
  # @param content (String)
97
94
  private_class_method def self.raise_error_with(filepath, content)
98
- msg = Rainbow("[ERROR] ContentLoader: Format error in #{filepath}").red.bright
99
- Logger.verboseln msg
95
+ msg = "[ERROR] ContentLoader: Format error in #{filepath}\n"
96
+ msg += " Take a look at ouput/error.xml"
97
+ puts Rainbow(msg).red.bright
100
98
  f = File.open('output/error.xml', 'w')
101
99
  f.write(content)
102
100
  f.close
@@ -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.verboseln " * 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.verboseln " └── Input file = #{Rainbow(filepath).bright}"
53
- else
54
- Logger.verboseln " ├── Input file = #{Rainbow(filepath).bright}"
55
- end
56
49
  FileLoader.load(filepath)
57
50
  end
58
51
  end
@@ -2,21 +2,16 @@
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
9
- ##
10
- # Load asker data from file
11
- # @param filename (String) File name to be load
12
8
  def self.load(filename)
13
9
  if File.extname(filename).casecmp('.haml').zero?
14
10
  file_content = HamlLoader.load filename
15
11
  elsif File.extname(filename).casecmp('.xml').zero?
16
12
  file_content = File.read(filename)
17
13
  else
18
- msg = "[ERROR] FileLoader: Format error #{filename}"
19
- Logger.verboseln msg
14
+ puts "[ERROR] FileLoader: Format error #{filename}"
20
15
  raise msg
21
16
  end
22
17
  ContentLoader.load(filename, file_content)
@@ -4,12 +4,16 @@ require 'haml'
4
4
 
5
5
  # HAML file loader
6
6
  module HamlLoader
7
- ##
8
- # Load HAML file name
9
- # @param filename (String) HAML file name
10
7
  def self.load(filename)
11
8
  template = File.read(filename)
12
- haml_engine = Haml::Engine.new(template)
13
- haml_engine.render
9
+ begin
10
+ haml_engine = Haml::Engine.new(template)
11
+ return haml_engine.render
12
+ rescue StandardError => e
13
+ puts "[ERROR] HamlLoader: Can't load <#{filename}> file!"
14
+ puts " => #{e}"
15
+ exit 0
16
+ end
14
17
  end
18
+
15
19
  end
@@ -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,10 +34,10 @@ 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
@@ -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.verboseln "\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])