asker-tool 2.1.2 → 2.1.7

Sign up to get free protection for your applications and to get access to all the features.
Files changed (111) hide show
  1. checksums.yaml +4 -4
  2. data/{LICENSE → LICENSE.txt} +0 -0
  3. data/README.md +17 -18
  4. data/bin/asker +1 -0
  5. data/lib/asker.rb +43 -74
  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 +19 -3
  17. data/lib/asker/checker.rb +152 -53
  18. data/lib/asker/cli.rb +19 -22
  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 +58 -32
  26. data/lib/asker/{exporter/code_screen_exporter.rb → displayer/code_displayer.rb} +6 -6
  27. data/lib/asker/displayer/concept_ai_displayer.rb +132 -0
  28. data/lib/asker/displayer/concept_displayer.rb +29 -0
  29. data/lib/asker/displayer/stats_displayer.rb +14 -0
  30. data/lib/asker/exporter/code_gift_exporter.rb +10 -11
  31. data/lib/asker/exporter/concept_ai_gift_exporter.rb +23 -11
  32. data/lib/asker/exporter/concept_ai_yaml_exporter.rb +9 -7
  33. data/lib/asker/exporter/concept_doc_exporter.rb +9 -15
  34. data/lib/asker/exporter/output_file_exporter.rb +18 -0
  35. data/lib/asker/files/config.ini +37 -0
  36. data/lib/asker/files/example-code.haml +0 -0
  37. data/lib/asker/files/example-concept.haml +29 -0
  38. data/lib/asker/files/language/du/templates.yaml +50 -0
  39. data/lib/asker/files/language/en/connectors.yaml +44 -0
  40. data/lib/asker/files/language/en/mistakes.yaml +37 -0
  41. data/lib/asker/files/language/en/templates.yaml +29 -0
  42. data/lib/asker/files/language/es/connectors.yaml +92 -0
  43. data/lib/asker/files/language/es/mistakes.yaml +82 -0
  44. data/lib/asker/files/language/es/templates.yaml +29 -0
  45. data/lib/asker/files/language/fr/connectors.yaml +92 -0
  46. data/lib/asker/files/language/fr/mistakes.yaml +82 -0
  47. data/lib/asker/files/language/fr/templates.yaml +29 -0
  48. data/lib/asker/files/language/javascript/connectors.yaml +11 -0
  49. data/lib/asker/files/language/javascript/mistakes.yaml +30 -0
  50. data/lib/asker/files/language/javascript/templates.yaml +3 -0
  51. data/lib/asker/files/language/math/connectors.yaml +2 -0
  52. data/lib/asker/files/language/math/mistakes.yaml +2 -0
  53. data/lib/asker/files/language/math/templates.yaml +1 -0
  54. data/lib/asker/files/language/python/connectors.yaml +11 -0
  55. data/lib/asker/files/language/python/mistakes.yaml +26 -0
  56. data/lib/asker/files/language/python/templates.yaml +3 -0
  57. data/lib/asker/files/language/ruby/connectors.yaml +11 -0
  58. data/lib/asker/files/language/ruby/mistakes.yaml +33 -0
  59. data/lib/asker/files/language/ruby/templates.yaml +3 -0
  60. data/lib/asker/files/language/sql/connectors.yaml +6 -0
  61. data/lib/asker/files/language/sql/mistakes.yaml +11 -0
  62. data/lib/asker/files/language/sql/templates.yaml +2 -0
  63. data/lib/asker/formatter/concept_string_formatter.rb +9 -8
  64. data/lib/asker/formatter/question_gift_formatter.rb +9 -1
  65. data/lib/asker/lang/lang.rb +18 -12
  66. data/lib/asker/lang/lang_factory.rb +26 -5
  67. data/lib/asker/lang/text_actions.rb +87 -69
  68. data/lib/asker/loader/code_loader.rb +3 -3
  69. data/lib/asker/loader/content_loader.rb +9 -5
  70. data/lib/asker/loader/file_loader.rb +2 -11
  71. data/lib/asker/loader/haml_loader.rb +15 -0
  72. data/lib/asker/loader/image_url_loader.rb +5 -8
  73. data/lib/asker/loader/input_loader.rb +23 -7
  74. data/lib/asker/loader/project_loader.rb +32 -29
  75. data/lib/asker/logger.rb +3 -4
  76. data/lib/asker/project.rb +28 -52
  77. data/lib/asker/skeleton.rb +73 -0
  78. metadata +62 -73
  79. data/docs/changelog/v2.1.md +0 -99
  80. data/docs/commands.md +0 -15
  81. data/docs/contributions.md +0 -18
  82. data/docs/history.md +0 -40
  83. data/docs/idea.md +0 -44
  84. data/docs/inputs/README.md +0 -39
  85. data/docs/inputs/code.md +0 -69
  86. data/docs/inputs/concepts.md +0 -142
  87. data/docs/inputs/jedi.md +0 -68
  88. data/docs/inputs/tables.md +0 -112
  89. data/docs/inputs/templates.md +0 -87
  90. data/docs/install/README.md +0 -38
  91. data/docs/install/manual.md +0 -26
  92. data/docs/install/scripts.md +0 -26
  93. data/docs/revise/asker-file.md +0 -41
  94. data/docs/revise/buenas-practicas/01-convocatoria.md +0 -30
  95. data/docs/revise/buenas-practicas/02-formulario.md +0 -35
  96. data/docs/revise/buenas-practicas/03-descripcion.md +0 -63
  97. data/docs/revise/buenas-practicas/04-resultados.md +0 -17
  98. data/docs/revise/buenas-practicas/05-reproducir.md +0 -10
  99. data/docs/revise/ejemplos/01/README.md +0 -27
  100. data/docs/revise/ejemplos/02/README.md +0 -31
  101. data/docs/revise/ejemplos/03/README.md +0 -31
  102. data/docs/revise/ejemplos/04/README.md +0 -37
  103. data/docs/revise/ejemplos/05/README.md +0 -25
  104. data/docs/revise/ejemplos/06/README.md +0 -43
  105. data/docs/revise/ejemplos/README.md +0 -11
  106. data/docs/revise/projects.md +0 -74
  107. data/lib/asker/code/ai/base_code_ai.rb +0 -48
  108. data/lib/asker/code/code.rb +0 -53
  109. data/lib/asker/exporter/concept_ai_screen_exporter.rb +0 -115
  110. data/lib/asker/exporter/concept_screen_exporter.rb +0 -25
  111. data/lib/asker/exporter/main.rb +0 -9
@@ -1,134 +1,152 @@
1
1
  # encoding: utf-8
2
2
 
3
+ ##
4
+ # Set of functions used by Lang class
3
5
  module TextActions
4
-
5
- def text_for(pOption, pText1="",pText2="",pText3="",pText4="",pText5="",pText6="",pText7="")
6
- text1=pText1
7
- text2=pText2
8
- text3=pText3
9
- text4=pText4
10
- text5=pText5
11
- text6=pText6
12
- text7=pText7
13
-
14
- # TODO: check if exists pOption before use it
15
- renderer = ERB.new(@templates[pOption])
16
- output = renderer.result(binding)
17
- return output
6
+ ##
7
+ # Return text indicated by lang code...
8
+ def text_for(option, *input)
9
+ text1 = input[0]
10
+ text2 = input[1]
11
+ text3 = input[2]
12
+ text4 = input[3]
13
+ text5 = input[4]
14
+ text6 = input[5]
15
+ text7 = input[6]
16
+
17
+ # Check if exists option before use it
18
+ raise "[ERROR] Unkown template #{option}" if @templates[option].nil?
19
+
20
+ renderer = ERB.new(@templates[option])
21
+ renderer.result(binding)
18
22
  end
19
23
 
20
- def text_filter_connectors(pText, pFilter)
21
- input_lines = pText.split(".")
24
+ ##
25
+ # Convert input text into output text struct
26
+ # @param input (String) Input text
27
+ # @param filter (Boolean) true => apply filter, false => dont filter
28
+ # @return Array
29
+ def text_filter_connectors(input, filter)
30
+ input_lines = input.split('.')
22
31
  output_lines = []
23
32
  output_words = []
24
33
  input_lines.each_with_index do |line, rowindex|
25
- row=[]
34
+ row = []
26
35
  line.split(' ').each_with_index do |word, colindex|
27
36
  flag = @connectors.include? word.downcase
28
37
 
29
38
  # if <word> is a conector and <pFilter>==true Then Choose this <word>
30
39
  # if <word> isn't a conector and <pFilter>==true and <word>.length>1 Then Choose this <word>
31
- if (flag and pFilter) || (!flag and !pFilter and word.length>1)
32
- output_words << {:word => word,
33
- :row => rowindex,
34
- :col => colindex }
40
+ if (flag and filter) || (!flag and !filter and word.length > 1)
41
+ output_words << {:word => word, :row => rowindex, :col => colindex }
35
42
  row << (output_words.size-1)
36
43
  else
37
44
  row << word
38
- end
45
+ end
39
46
  end
40
47
  row << '.'
41
48
  output_lines << row
42
- end
49
+ end
43
50
 
44
51
  indexes = []
45
- exclude = ['[', ']', '(', ')', "\"" ]
52
+ exclude = ['[', ']', '(', ')', '"']
46
53
  output_words.each_with_index do |item, index|
47
54
  flag = true
48
- exclude.each { |e| flag = false if (item[:word].include?(e)) }
55
+ exclude.each { |e| flag = false if item[:word].include? e }
49
56
  indexes << index if flag
50
57
  end
51
58
 
52
- result={ :lines => output_lines, :words => output_words, :indexes => indexes }
53
- return result
59
+ { lines: output_lines, words: output_words, indexes: indexes }
54
60
  end
55
61
 
62
+ ##
63
+ # Return text with connectors
56
64
  def text_with_connectors(text)
57
65
  text_filter_connectors(text, false)
58
66
  end
59
67
 
68
+ ##
69
+ # Return text without connectors
60
70
  def text_without_connectors(text)
61
- text_filter_connectors(text, true)
71
+ text_filter_connectors(text, true)
62
72
  end
63
73
 
64
- def build_text_from_filtered(pStruct, pIndexes)
65
- lines = pStruct[:lines]
66
- lIndexes = pIndexes.sort
67
- counter = 1
68
- lText = ''
74
+ def build_text_from_filtered(input_struct, input_indexes)
75
+ lines = input_struct[:lines]
76
+ indexes = input_indexes.sort
77
+ counter = 1
78
+ text = ''
69
79
 
70
80
  lines.each do |line|
71
81
  line.each do |value|
72
82
  if value.class == String
73
- lText += (' ' + value)
83
+ text += (' ' + value)
74
84
  elsif value == value.to_i
75
85
  # INFO: ruby 2.4 unifies Fixnum and Bignum into Integer
76
86
  # Avoid using deprecated classes.
77
- if lIndexes.include? value
78
- lText += " [#{counter.to_s}]"
87
+ if indexes.include? value
88
+ text += " [#{counter}]"
79
89
  counter += 1
80
90
  else
81
- lword = pStruct[:words][value][:word]
82
- lText += (' ' + lword)
91
+ word = input_struct[:words][value][:word]
92
+ text += (' ' + word)
83
93
  end
84
94
  end
85
95
  end
86
96
  end
87
- lText.gsub!(' .', '.')
88
- lText.gsub!(' ,', ',')
89
- lText = lText[1, lText.size] if lText[0] == ' '
90
- lText
97
+ text.gsub!(' .', '.')
98
+ text.gsub!(' ,', ',')
99
+ text = text[1, text.size] if text[0] == ' '
100
+ text
91
101
  end
92
102
 
93
- def count_words(pInputText)
94
- return 0 if pInputText.nil?
95
-
96
- t = pInputText.clone
97
- t.gsub!("\n"," ")
98
- t.gsub!("/"," ")
99
- #t.gsub!("-"," ")
100
- t.gsub!("."," ")
101
- t.gsub!(","," ")
102
- t.gsub!(" "," ")
103
- t.gsub!(" "," ")
104
- t.split(" ").count
103
+ ##
104
+ # Count words
105
+ # @param input (String)
106
+ # @return Integer
107
+ def count_words(input)
108
+ return 0 if input.nil?
109
+
110
+ t = input.clone
111
+ t.gsub!("\n", ' ')
112
+ t.gsub!('/', ' ')
113
+ # t.gsub!("-"," ")
114
+ t.gsub!('.', ' ')
115
+ t.gsub!(',', ' ')
116
+ t.gsub!(' ', ' ')
117
+ t.gsub!(' ', ' ')
118
+ t.split(' ').count
105
119
  end
106
120
 
107
- def do_mistake_to(pText = '')
108
- lText = pText.dup
121
+ ##
122
+ # Do mistake to input
123
+ # @param input (String)
124
+ # @return String
125
+ def do_mistake_to(input = '')
126
+ text = input.dup
109
127
  keys = @mistakes.keys
110
128
 
111
129
  # Try to do mistake with one item from the key list
112
130
  keys.shuffle!
113
131
  keys.each do |key|
114
- if lText.include? key.to_s
115
- values = @mistakes[key].split(',')
116
- values.shuffle!
117
- lText = lText.sub(key.to_s,values[0].to_s)
118
- return lText
119
- end
132
+ next unless text.include? key.to_s
133
+
134
+ values = @mistakes[key].split(',')
135
+ values.shuffle!
136
+ text = text.sub(key.to_s, values[0].to_s)
137
+ return text
120
138
  end
121
139
 
122
140
  # Force mistake by swapping letters
123
- if lText.size > 1
124
- i = rand(lText.size - 2)
125
- aux = lText[i]
126
- lText[i] = lText[i + 1]
127
- lText[i + 1] = aux
141
+ if text.size > 1
142
+ i = rand(text.size - 2)
143
+ aux = text[i]
144
+ text[i] = text[i + 1]
145
+ text[i + 1] = aux
128
146
  end
129
- return lText if lText != pText
147
+ return text if text != input
130
148
 
131
- lText + 's'
149
+ text + 's'
132
150
  end
133
151
 
134
152
  def hide_text(input_text)
@@ -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
@@ -1,6 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require_relative 'directory_loader'
4
+ require_relative '../ai/concept_ai'
5
+ require_relative '../data/world'
4
6
  require_relative '../logger'
5
7
 
6
8
  # Load DATA defined into our Project
@@ -9,16 +11,30 @@ module InputLoader
9
11
  # Load input data from every input directory
10
12
  # @param inputdirs (Array)
11
13
  def self.load(inputdirs)
12
- output = { concepts: [], codes: [] }
14
+ data = { concepts: [], codes: [], world: nil,
15
+ concepts_ai: [], codes_ai: [] }
13
16
  Logger.verbose "\n[INFO] Loading input data"
14
-
15
- # inputdirs = project.inputdirs.split(',')
16
17
  inputdirs.each do |dirname|
17
- data = DirectoryLoader.load(dirname)
18
- output[:concepts] += data[:concepts]
19
- output[:codes] += data[:codes]
18
+ temp = DirectoryLoader.load(dirname)
19
+ data[:concepts] += temp[:concepts]
20
+ data[:codes] += temp[:codes]
20
21
  end
22
+ create_questions(data)
23
+ end
21
24
 
22
- output
25
+ private_class_method def self.create_questions(data)
26
+ # Create World data
27
+ # * Calculate concept neighbours
28
+ # * TO-DO: Calculate code neighbours
29
+ data[:world] = World.new(data[:concepts])
30
+ # Create ConceptAI data (ConceptAI = concept + questions)
31
+ data[:concepts].each do |concept|
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)
37
+ end
38
+ data
23
39
  end
24
40
  end
@@ -2,6 +2,7 @@
2
2
 
3
3
  require 'yaml'
4
4
  require_relative '../project'
5
+ require_relative '../logger'
5
6
 
6
7
  # Load params into Project class using arg input
7
8
  # * load
@@ -10,40 +11,48 @@ require_relative '../project'
10
11
  # * load_from_directory
11
12
  # * load_error
12
13
  module ProjectLoader
13
- def self.load(args = {})
14
+ ##
15
+ # Load project from args
16
+ # @param args (String or Hash)
17
+ def self.load(args)
14
18
  project = Project.instance
15
19
 
16
20
  if args.class == Hash
17
21
  project.param.merge!(args)
18
- return true
22
+ return project
19
23
  elsif args.class == String
20
24
  ProjectLoader.load_from_string(args)
21
- return true
25
+ return project
22
26
  end
23
27
 
24
28
  msg = '[ERROR] ProjectLoader:'
25
29
  msg += "Configuration params format is <#{pArgs.class}>!"
26
- project.verbose Rainbow(msg).red
30
+ Logger.verbose Rainbow(msg).red
27
31
  raise msg
28
32
  end
29
33
 
30
- def self.load_from_string(arg)
34
+ ##
35
+ # Load project from filepath. Options:
36
+ # * HAML filepath
37
+ # * XML filepath
38
+ # * YAML filepath
39
+ # @param filepath (String)
40
+ def self.load_from_string(filepath)
31
41
  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
42
+ unless File.exist?(filepath)
43
+ msg = Rainbow("[ERROR] #{filepath} not found!").red.bright
44
+ Logger.verbose msg
45
+ exit 1
36
46
  end
37
47
 
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)
48
+ if File.extname(filepath) == '.haml' || File.extname(filepath) == '.xml'
49
+ project.set(:inputdirs, File.dirname(filepath))
50
+ project.set(:process_file, File.basename(filepath))
51
+ return project
52
+ elsif File.extname(filepath) == '.yaml'
53
+ return load_from_yaml(filepath)
45
54
  else
46
- load_error(arg)
55
+ error_loading(filepath)
47
56
  end
48
57
  end
49
58
 
@@ -52,20 +61,14 @@ module ProjectLoader
52
61
  project.param.merge!(YAML.load(File.open(arg)))
53
62
  project.set(:configfilename, arg)
54
63
  project.set(:projectdir, File.dirname(arg))
64
+ project
55
65
  end
56
66
 
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
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
62
72
  exit 1
63
73
  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
74
  end