kuniri 0.0.1 → 0.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 (199) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/.travis.yml +9 -7
  4. data/COPYING +160 -656
  5. data/Gemfile +4 -3
  6. data/README.md +57 -27
  7. data/Rakefile +3 -1
  8. data/bin/kuniri +50 -26
  9. data/data/aggregation_lang.rb +33 -0
  10. data/data/attribute_lang.rb +14 -87
  11. data/data/class_lang.rb +19 -41
  12. data/data/comment_lang.rb +52 -0
  13. data/data/conditional_lang.rb +14 -41
  14. data/data/constructor_lang.rb +4 -12
  15. data/data/end_block_lang.rb +7 -6
  16. data/data/extern_requirement_lang.rb +10 -17
  17. data/data/function_behavior_lang.rb +17 -66
  18. data/data/global_function_lang.rb +26 -0
  19. data/data/lang_syntax.rb +82 -49
  20. data/data/method_lang.rb +26 -0
  21. data/data/module_namespace_lang.rb +8 -13
  22. data/data/repetition_lang.rb +19 -32
  23. data/data/token_lang.rb +2 -44
  24. data/data/variable_behaviour_lang.rb +43 -0
  25. data/data/variable_global_lang.rb +13 -72
  26. data/kuniri.gemspec +4 -4
  27. data/lib/kuniri/core/configuration/language_available.rb +2 -2
  28. data/lib/kuniri/core/kuniri.rb +32 -24
  29. data/lib/kuniri/core/setting.rb +51 -85
  30. data/lib/kuniri/error/parser_error.rb +9 -0
  31. data/lib/kuniri/language/abstract_container/structured_and_oo/aggregation.rb +29 -0
  32. data/lib/kuniri/language/abstract_container/structured_and_oo/attribute.rb +0 -40
  33. data/lib/kuniri/language/abstract_container/structured_and_oo/global_tokens.rb +20 -0
  34. data/lib/kuniri/language/abstract_container/structured_and_oo/repetition.rb +9 -1
  35. data/lib/kuniri/language/abstract_container/structured_and_oo/variable_global.rb +0 -35
  36. data/lib/kuniri/language/container_data/structured_and_oo/aggregation_data.rb +23 -0
  37. data/lib/kuniri/language/container_data/structured_and_oo/attribute_data.rb +4 -2
  38. data/lib/kuniri/language/container_data/structured_and_oo/basic_structure.rb +24 -0
  39. data/lib/kuniri/language/container_data/structured_and_oo/class_data.rb +13 -19
  40. data/lib/kuniri/language/container_data/structured_and_oo/conditional_data.rb +2 -13
  41. data/lib/kuniri/language/container_data/structured_and_oo/constructor_data.rb +2 -0
  42. data/lib/kuniri/language/container_data/structured_and_oo/extern_requirement_data.rb +11 -6
  43. data/lib/kuniri/language/container_data/structured_and_oo/{file_element.rb → file_element_data.rb} +11 -9
  44. data/lib/kuniri/language/container_data/structured_and_oo/function_abstract.rb +58 -11
  45. data/lib/kuniri/language/container_data/structured_and_oo/function_data.rb +3 -3
  46. data/lib/kuniri/language/container_data/structured_and_oo/manager_basic_structure_data.rb +55 -0
  47. data/lib/kuniri/language/container_data/structured_and_oo/method_data.rb +5 -4
  48. data/lib/kuniri/language/container_data/structured_and_oo/module_namespace_data.rb +3 -1
  49. data/lib/kuniri/language/container_data/structured_and_oo/repetition_data.rb +2 -13
  50. data/lib/kuniri/language/container_data/structured_and_oo/variable_global_data.rb +2 -0
  51. data/lib/kuniri/language/language.rb +37 -11
  52. data/lib/kuniri/language/metadata.rb +29 -0
  53. data/lib/kuniri/language/ruby/aggregation_ruby.rb +37 -0
  54. data/lib/kuniri/language/ruby/attribute_ruby.rb +23 -38
  55. data/lib/kuniri/language/ruby/class_ruby.rb +2 -10
  56. data/lib/kuniri/language/ruby/conditional_ruby.rb +20 -6
  57. data/lib/kuniri/language/ruby/constructor_ruby.rb +5 -7
  58. data/lib/kuniri/language/ruby/end_block_ruby.rb +1 -1
  59. data/lib/kuniri/language/ruby/function_behavior_ruby.rb +1 -9
  60. data/lib/kuniri/language/ruby/global_function_ruby.rb +32 -0
  61. data/lib/kuniri/language/ruby/method_ruby.rb +33 -0
  62. data/lib/kuniri/language/ruby/repetition_ruby.rb +60 -14
  63. data/lib/kuniri/language/ruby/ruby_syntax.rb +76 -49
  64. data/lib/kuniri/parser/output_factory.rb +29 -0
  65. data/lib/kuniri/parser/output_format.rb +134 -0
  66. data/lib/kuniri/parser/parser.rb +3 -7
  67. data/lib/kuniri/parser/xml_builder_engine.rb +94 -0
  68. data/lib/kuniri/parser/xml_output_format.rb +143 -0
  69. data/lib/kuniri/state_machine/OO_structured_fsm/aggregation_state.rb +45 -0
  70. data/lib/kuniri/state_machine/OO_structured_fsm/attribute_state.rb +0 -1
  71. data/lib/kuniri/state_machine/OO_structured_fsm/basic_structure_state.rb +182 -0
  72. data/lib/kuniri/state_machine/OO_structured_fsm/class_state.rb +12 -3
  73. data/lib/kuniri/state_machine/OO_structured_fsm/conditional_state.rb +11 -68
  74. data/lib/kuniri/state_machine/OO_structured_fsm/constructor_state.rb +7 -52
  75. data/lib/kuniri/state_machine/OO_structured_fsm/function_behaviour_state.rb +86 -0
  76. data/lib/kuniri/state_machine/OO_structured_fsm/include_state.rb +2 -3
  77. data/lib/kuniri/state_machine/OO_structured_fsm/method_state.rb +8 -50
  78. data/lib/kuniri/state_machine/OO_structured_fsm/oo_structured_state.rb +6 -1
  79. data/lib/kuniri/state_machine/OO_structured_fsm/repetition_state.rb +10 -59
  80. data/lib/kuniri/state_machine/OO_structured_fsm/token_state_machine.rb +4 -0
  81. data/lib/kuniri/state_machine/OO_structured_fsm/variable_state.rb +0 -1
  82. data/lib/kuniri/version.rb +1 -1
  83. data/other/analyseFile.asta +0 -0
  84. data/spec/core/kuniri_spec.rb +2 -1
  85. data/spec/core/setting_spec.rb +35 -61
  86. data/spec/language/abstract_container/aggregation_spec.rb +13 -0
  87. data/spec/language/abstract_container/extern_requirement_spec.rb +13 -0
  88. data/spec/language/container_data/structured_and_oo/aggregation_data_spec.rb +29 -0
  89. data/spec/language/container_data/structured_and_oo/attribute_data_spec.rb +9 -2
  90. data/spec/language/container_data/structured_and_oo/class_data_spec.rb +1 -46
  91. data/spec/language/container_data/structured_and_oo/constructor_data_spec.rb +32 -2
  92. data/spec/language/container_data/structured_and_oo/extern_requirement_data_spec.rb +31 -7
  93. data/spec/language/container_data/structured_and_oo/{file_element_spec.rb → file_element_data_spec.rb} +21 -5
  94. data/spec/language/container_data/structured_and_oo/function_abstract_spec.rb +213 -0
  95. data/spec/language/container_data/structured_and_oo/function_data_spec.rb +31 -2
  96. data/spec/language/container_data/structured_and_oo/manager_basic_structure_data_spec.rb +150 -0
  97. data/spec/language/container_data/structured_and_oo/method_data_spec.rb +80 -0
  98. data/spec/language/container_data/structured_and_oo/module_namespace_spec.rb +7 -1
  99. data/spec/language/container_data/structured_and_oo/variable_global_data_spec.rb +9 -0
  100. data/spec/language/language_factory_spec.rb +1 -1
  101. data/spec/language/language_spec.rb +46 -9
  102. data/spec/language/ruby/aggregation_ruby_spec.rb +80 -0
  103. data/spec/language/ruby/class_ruby_spec.rb +66 -6
  104. data/spec/language/ruby/constructor_ruby_spec.rb +1 -1
  105. data/spec/language/ruby/end_block_ruby_spec.rb +11 -0
  106. data/spec/language/ruby/extern_requirement_ruby_spec.rb +59 -0
  107. data/spec/language/ruby/function_behavior_ruby_spec.rb +54 -2
  108. data/spec/language/ruby/global_test/.kuniri.yml +4 -0
  109. data/spec/language/ruby/global_test/complete_class_ruby_spec.rb +161 -0
  110. data/spec/language/ruby/global_test/conditional/.kuniri.yml +4 -0
  111. data/spec/language/ruby/global_test/conditional/.kuniri1.yml +4 -0
  112. data/spec/language/ruby/global_test/conditional/.kuniri2.yml +4 -0
  113. data/spec/language/ruby/global_test/conditional/.kuniri3.yml +4 -0
  114. data/spec/language/ruby/global_test/conditional/.kuniri4.yml +4 -0
  115. data/spec/language/ruby/global_test/conditional/.kuniri5.yml +4 -0
  116. data/spec/language/ruby/global_test/conditional/.kuniri6.yml +4 -0
  117. data/spec/language/ruby/global_test/conditional/a_lot_of_conditionals_spec.rb +92 -0
  118. data/spec/language/ruby/global_test/conditional/constructor_very_mix_conditional_spec.rb +105 -0
  119. data/spec/language/ruby/global_test/conditional/function_with_conditional_spec.rb +94 -0
  120. data/spec/language/ruby/global_test/conditional/function_with_nested_conditional_spec.rb +56 -0
  121. data/spec/language/ruby/global_test/conditional/method_very_mix_conditional_spec.rb +109 -0
  122. data/spec/language/ruby/global_test/conditional/very_deep_conditional_structure_spec.rb +61 -0
  123. data/spec/language/ruby/global_test/conditional/very_mix_conditional_spec.rb +105 -0
  124. data/spec/language/ruby/global_test/conditionalAndRepetition/.kuniri.yml +4 -0
  125. data/spec/language/ruby/global_test/conditionalAndRepetition/mix_conditional_repetition_spec.rb +57 -0
  126. data/spec/language/ruby/global_test/repetition/.kuniri.yml +4 -0
  127. data/spec/language/ruby/global_test/repetition/.kuniri2.yml +4 -0
  128. data/spec/language/ruby/global_test/repetition/.kuniri3.yml +4 -0
  129. data/spec/language/ruby/global_test/repetition/.kuniri4.yml +4 -0
  130. data/spec/language/ruby/global_test/repetition/.kuniri5.yml +4 -0
  131. data/spec/language/ruby/global_test/repetition/.kuniri6.yml +4 -0
  132. data/spec/language/ruby/global_test/repetition/.kuniri7.yml +4 -0
  133. data/spec/language/ruby/global_test/repetition/.kuniri8.yml +4 -0
  134. data/spec/language/ruby/global_test/repetition/complete_class_integrity.rb +41 -0
  135. data/spec/language/ruby/global_test/repetition/complete_class_until_loop_spec.rb +42 -0
  136. data/spec/language/ruby/global_test/repetition/complete_class_while_loop_spec.rb +41 -0
  137. data/spec/language/ruby/global_test/repetition/complete_class_with_repetition_spec.rb +42 -0
  138. data/spec/language/ruby/global_test/repetition/constructor_with_mix_repetition_spec.rb +57 -0
  139. data/spec/language/ruby/global_test/repetition/method_with_mix_repetition_spec.rb +59 -0
  140. data/spec/language/ruby/global_test/repetition/very_mix_repetition_spec.rb +61 -0
  141. data/spec/language/ruby/global_test/repetition/very_nested_repetition_spec.rb +65 -0
  142. data/spec/language/ruby/method_ruby_spec.rb +52 -0
  143. data/spec/language/ruby/repetition_ruby_spec.rb +175 -8
  144. data/spec/language/ruby/ruby_syntax_spec.rb +213 -84
  145. data/spec/parser/output_factory_spec.rb +32 -0
  146. data/spec/parser/output_format_spec.rb +83 -0
  147. data/spec/parser/parser_spec.rb +7 -0
  148. data/spec/parser/xmlSchemaValidate/.kuniri1.yml +3 -0
  149. data/spec/parser/xmlSchemaValidate/.kuniri2.yml +3 -0
  150. data/spec/parser/xmlSchemaValidate/.kuniri3.yml +3 -0
  151. data/spec/parser/xmlSchemaValidate/class_data.xsd +99 -0
  152. data/spec/parser/xmlSchemaValidate/fullCodeTwo.xsd +119 -0
  153. data/spec/parser/xmlSchemaValidate/fullCodeWithComments.xsd +146 -0
  154. data/spec/parser/xmlSchemaValidate/simpleFunction.xsd +25 -0
  155. data/spec/parser/xmlSchemaValidate/validate_xml_spec.rb +52 -0
  156. data/spec/parser/xml_builder_engine_spec.rb +258 -0
  157. data/spec/parser/xml_output_format_spec.rb +274 -0
  158. data/spec/samples/rubySyntaxParts/aggregation/classAggregation.rb +37 -0
  159. data/spec/samples/rubySyntaxParts/aggregation/constructorAggregation.rb +36 -0
  160. data/spec/samples/rubySyntaxParts/aggregation/methodAggregation.rb +36 -0
  161. data/spec/samples/rubySyntaxParts/aggregation/multipleAggregation.rb +59 -0
  162. data/spec/samples/rubySyntaxParts/comment/simple_multiple_line_comment_class.rb +7 -0
  163. data/spec/samples/rubySyntaxParts/comment/simple_single_line_comment_class.rb +2 -1
  164. data/spec/samples/rubySyntaxParts/conditionalStatment/aLotOfConditionals.rb +42 -0
  165. data/spec/samples/rubySyntaxParts/conditionalStatment/commonCasesOfConditionals.rb +47 -0
  166. data/spec/samples/rubySyntaxParts/conditionalStatment/constructorConditional.rb +1 -1
  167. data/spec/samples/rubySyntaxParts/conditionalStatment/constructorMixConditional.rb +41 -0
  168. data/spec/samples/rubySyntaxParts/conditionalStatment/methodMixConditional.rb +41 -0
  169. data/spec/samples/rubySyntaxParts/conditionalStatment/mixConditionalWithRepetition.rb +20 -0
  170. data/spec/samples/rubySyntaxParts/conditionalStatment/nestedConditional.rb +61 -0
  171. data/spec/samples/rubySyntaxParts/conditionalStatment/veryDeepConditionalStructure.rb +48 -0
  172. data/spec/samples/rubySyntaxParts/conditionalStatment/veryMixConditional.rb +37 -0
  173. data/spec/samples/rubySyntaxParts/fullCode/fullCodeTwo.rb +56 -0
  174. data/spec/samples/rubySyntaxParts/fullCode/fullCodeWithComments.rb +64 -0
  175. data/spec/samples/rubySyntaxParts/fullCode/simpleFullCode.rb +9 -1
  176. data/spec/samples/rubySyntaxParts/method/simpleMethod.rb +2 -0
  177. data/spec/samples/rubySyntaxParts/repetition/beginWithWhileLoopInClass.rb +10 -0
  178. data/spec/samples/rubySyntaxParts/repetition/constructorWithMixRepetition.rb +22 -0
  179. data/spec/samples/rubySyntaxParts/repetition/forLoopInClass.rb +7 -0
  180. data/spec/samples/rubySyntaxParts/repetition/methodWithMixRepetition.rb +19 -0
  181. data/spec/samples/rubySyntaxParts/repetition/mixConditionalRepetition.rb +17 -0
  182. data/spec/samples/rubySyntaxParts/repetition/untilLoopInClass.rb +16 -0
  183. data/spec/samples/rubySyntaxParts/repetition/veryMixRepetition.rb +28 -0
  184. data/spec/samples/rubySyntaxParts/repetition/veryNestedRepetition.rb +17 -0
  185. data/spec/samples/rubySyntaxParts/repetition/whileLoopInClass.rb +12 -0
  186. data/spec/state_machine/OO_structured_fsm/aggregation_state_spec.rb +67 -0
  187. data/spec/state_machine/OO_structured_fsm/class_state_spec.rb +15 -0
  188. data/spec/state_machine/OO_structured_fsm/conditional_state_spec.rb +64 -0
  189. data/spec/state_machine/OO_structured_fsm/include_state_spec.rb +3 -3
  190. data/spec/state_machine/OO_structured_fsm/method_state_spec.rb +18 -0
  191. data/spec/state_machine/OO_structured_fsm/repetition_state_spec.rb +27 -0
  192. metadata +195 -28
  193. data/lib/kuniri/core/configuration/monitor_available.rb +0 -13
  194. data/lib/kuniri/language/abstract_container/structured_and_oo/constructor.rb +0 -52
  195. data/lib/kuniri/parser/parser_xml.rb +0 -128
  196. data/spec/language/abstract_container/constructor_spec.rb +0 -13
  197. data/spec/util/html_logger_spec.rb +0 -31
  198. data/spec/util/logger_spec.rb +0 -20
  199. data/spec/util/txt_logger_spec.rb +0 -31
@@ -5,113 +5,54 @@ module Languages
5
5
 
6
6
  module {LANG}
7
7
 
8
- # @class VariableGlobal{LANG} Handling extern requirements.
8
+ # VariableGlobal{LANG} Handling extern requirements.
9
9
  class VariableGlobal{LANG} < Languages::VariableGlobal
10
10
 
11
11
  public
12
12
 
13
+ # Get {LANG} variable.
14
+ # @see Languages::VariableGlobal
13
15
  def get_variable(pLine)
14
- result = detect_variable(pLine)
15
- return nil unless result
16
-
17
- listOfVariable = []
18
-
19
- # Separated by comma, equal or the common case
20
- if result.split(",").size > 1
21
- listOfVariable = handle_multiple_declaration_with_comma(result)
22
- elsif result.split("=").size > 1
23
- listOfVariable = handle_multiple_declaration_with_equal(result)
24
- else
25
- listOfVariable = handle_line_declaration(result)
26
- end
27
-
28
- return listOfVariable
16
+ # YOUR CODE HERE
29
17
  end
30
18
 
31
19
  protected
32
20
 
21
+ # Override
33
22
  def detect_variable(pLine)
34
- # Check basic case of non variable. Ex.: value x
35
- pLine.gsub!(/^\s*/, "")
36
- pLine.gsub!(/\s*$/, "")
37
- return nil if pLine =~ /end/
38
- return nil if pLine =~ /^def\s+/
39
- return pLine if pLine.split(",").size > 1
40
- return pLine if pLine.split("=").size > 1
41
-
42
- return nil if pLine.split(" ").size > 1
43
- return pLine
23
+ # YOUR CODE HERE
44
24
  end
45
25
 
26
+ # Override
46
27
  def remove_unnecessary_information(pLine)
47
- return pLine
28
+ # YOUR CODE HERE
48
29
  end
49
30
 
50
31
  # Override
51
32
  def prepare_final_string(pString)
52
- if pString =~ /\s+|:|@|=/
53
- return pString.gsub!(/\s+|:|@|=/,"")
54
- end
55
- return pString
33
+ # YOUR CODE HERE
56
34
  end
57
35
 
58
36
  # Override
59
37
  def handle_multiple_declaration_with_comma(pString)
60
- listOfVariable = []
61
- pString = pString.split(",")
62
- pString.each do |variable|
63
- return nil if variable.split("=").size > 2
64
-
65
- variable = variable.scan(/.*=/).join("") if variable =~ /.*=/
66
-
67
- return nil if variable =~ /\./
68
-
69
- variable = prepare_final_string(variable)
70
- globalVariable = Languages::VariableGlobalData.new(variable)
71
- listOfVariable.push(globalVariable)
72
- end
73
-
74
- return listOfVariable
38
+ # YOUR CODE HERE
75
39
  end
76
40
 
77
41
  # Override
78
42
  def handle_multiple_declaration_with_equal(pString)
79
- listOfVariable = []
80
- pString = pString.split("=")
81
- pString.each do |variable|
82
- return nil if variable =~ /\./
83
-
84
- variable = prepare_final_string(variable)
85
- globalVariable = Languages::VariableGlobalData.new(variable)
86
- listOfVariable.push(globalVariable)
87
- end
88
- value = listOfVariable.pop
89
-
90
- return listOfVariable
43
+ # YOUR CODE HERE
91
44
  end
92
45
 
93
46
  # Override
94
47
  def handle_line_declaration(pString)
95
- listOfVariable = []
96
- if pString =~ /=/
97
- pString = pString.scan(/.*=/).join("")
98
- return nil if pString =~ /\./
99
- end
100
-
101
- return nil if pString =~ /\./
102
-
103
- pString = prepare_final_string(pString)
104
- globalVariable = Languages::VariableGlobalData.new(pString)
105
- listOfVariable.push(globalVariable)
106
-
107
- return listOfVariable
48
+ # YOUR CODE HERE
108
49
  end
109
50
 
110
51
 
111
52
  # Class
112
53
  end
113
54
 
114
- # {LANG}
55
+ # Module
115
56
  end
116
57
 
117
58
  # Module
@@ -3,15 +3,15 @@ lib = File.expand_path('../lib', __FILE__)
3
3
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
4
  require 'kuniri/version'
5
5
 
6
- Gem::Specification.new do |spec|
6
+ Gem::Specification.new 'kuniri', '0.2' do |spec|
7
7
  spec.name = "kuniri"
8
8
  spec.version = Kuniri::VERSION
9
9
  spec.authors = ["Gustavo Jaruga", "Rodrigo Siqueira"]
10
- spec.email = ["darksshades@hotmail.com", "rodrigosiqueiramelo@gmail.com"]
10
+ spec.email = ["darksshades@hotmail.com", "siqueira@kuniri.org"]
11
11
  spec.summary = %q{Extract class information from code.}
12
12
  spec.description = 'Generic parser'
13
13
  spec.homepage = "http://kuniri.github.io/kuniri/"
14
- spec.license = "GPLv3"
14
+ spec.license = "LGPLv3"
15
15
 
16
16
  spec.files = `git ls-files -z`.split("\x0")
17
17
  spec.executables = ["kuniri"]
@@ -19,6 +19,6 @@ Gem::Specification.new do |spec|
19
19
  spec.require_paths = ["lib"]
20
20
 
21
21
  spec.add_development_dependency "bundler"
22
+ spec.add_development_dependency "rspec"
22
23
  spec.add_development_dependency "rake", "~> 10.0"
23
- spec.add_runtime_dependency 'nokogiri', '~> 1.6.6'
24
24
  end
@@ -1,7 +1,7 @@
1
1
  module Configuration
2
2
  #Handling the languages available in the system.
3
- class Language_Available
3
+ class LanguageAvailable
4
4
  public
5
- LANGUAGES = ["ruby", "python", "c++", "c"] #Put here new language.
5
+ LANGUAGES = ["ruby", "python", "cplusplus", "c"] #Put here new language.
6
6
  end
7
7
  end
@@ -1,9 +1,6 @@
1
1
  require_relative '../error/configuration_file_error'
2
2
  require_relative '../parser/parser'
3
- require_relative '../util/logger'
4
3
  require_relative 'configuration/language_available'
5
- require_relative 'configuration/monitor_available'
6
- require_relative 'configuration/log_available'
7
4
  require_relative 'setting'
8
5
 
9
6
  # Kuniri module connect all the elements and use it in the proper sequence.
@@ -15,60 +12,71 @@ module Kuniri
15
12
 
16
13
  public
17
14
 
15
+ attr_reader :configurationInfo # !@attribute Hash with configuration description
16
+
18
17
  # @param pPath Receives the path of configuration file. If any element
19
18
  # is given, it tries to find in the current folder.
20
- def initialize(pPath = ".kuniri")
19
+ def initialize
21
20
  @configurationInfo = {}
22
21
  @filesPathProject = []
23
22
  @parserFiles = []
24
23
  @parser = nil
25
24
 
25
+ end
26
+
27
+ def read_configuration_file(pPath = ".kuniri.yml")
26
28
  @settings = Setting.create
27
29
  @settings.initializate_settings(pPath)
28
- @log = @settings.log
30
+ @settings.read_configuration_file(pPath)
29
31
  @configurationInfo = @settings.configurationInfo
32
+ end
30
33
 
31
- @log.write_log("info: Kuniri object successfully created.")
34
+ def set_configuration(pSource, pLanguage, pOutput, pLevel)
35
+ @settings = Setting.create
36
+ @settings.initializate_settings
37
+ @settings.set_configuration(pSource, pLanguage, pOutput, pLanguage)
38
+ # XXX: Extremely "gambira" PLEASE, REMOVE METHOD BELOW!
39
+ @configurationInfo = @settings.configurationInfo
32
40
  end
33
41
 
34
- # Start Kuniri tasks based on configuration file. After read
42
+ # Start Kuniri tasks based on configuration file. After read
35
43
  # configuration file, find all files in source directory.
36
44
  def run_analysis()
37
- @log.write_log("info: Start to run analysis.")
38
- @log.write_log("debug: ConfigurationInfo: #{@configurationInfo}")
39
-
40
- @filesPathProject = get_project_file(@configurationInfo["source"])
45
+ @filesPathProject = get_project_file(@configurationInfo[:source])
41
46
  unless @filesPathProject
42
- puts "Problem on source path: #{@configurationInfo["source"]}"
43
- @log.write_log("Prolblem when tried to access source folder.")
47
+ puts "Problem on source path: #{@configurationInfo[:source]}"
44
48
  return -1
45
49
  end
46
-
47
- @log.write_log("debug: files: #{@filesPathProject.to_s}")
48
- @parser = Parser::Parser.new(@filesPathProject)
49
- @parser.start_parser()
50
+ @parser = Parser::Parser.new(@filesPathProject,
51
+ @configurationInfo[:language])
52
+ @parser.start_parser()
50
53
  end
51
-
54
+
52
55
  def get_parser
53
56
  @parser
54
57
  end
55
58
 
56
59
  private
57
60
 
58
- @configurationInfo # !@attribute Hash with configuration description
59
61
  @filesProject # !@attribute Array with object reference of all files
60
62
  @parser # !@attribute Execute the parser based on settings.
61
63
  @parserFiles # !@attribute Final output from parser.
62
- @log # !@attribute Log reference.
63
64
 
64
65
  # !@param pPath Relative path of the project.
65
66
  # !@param pLanguage Language extension for make the parser.
66
67
  def get_project_file(pPath="./", pLanguage="**.rb")
67
- return nil unless File.exists?(pPath)
68
-
69
- @log.write_log("Info: Reading all files.")
68
+ # Verify if path is a valid directory or file
69
+ return nil unless File.file?(pPath) or File.directory?(pPath)
70
+
71
+ # Handle single file
72
+ if (File.file?(pPath))
73
+ @filesProject = [pPath]
74
+ # Handle multiple files
75
+ else
76
+ @filesProject = Dir[File.join(pPath, "**", pLanguage)]
77
+ end
70
78
 
71
- @filesProject = Dir[File.join(pPath, "**", pLanguage)]
79
+ return @filesProject
72
80
  end
73
81
 
74
82
  # Class
@@ -1,9 +1,5 @@
1
+ require 'yaml'
1
2
  require_relative 'configuration/language_available'
2
- require_relative 'configuration/monitor_available'
3
- require_relative 'configuration/log_available'
4
-
5
- require_relative '../util/html_logger'
6
- require_relative '../util/txt_logger'
7
3
  require_relative '../error/configuration_file_error'
8
4
 
9
5
  module Kuniri
@@ -15,7 +11,6 @@ module Kuniri
15
11
 
16
12
  private_class_method :new
17
13
  attr_reader :configurationInfo
18
- attr_reader :log
19
14
 
20
15
  def initialize
21
16
  initializate_settings
@@ -26,113 +21,84 @@ module Kuniri
26
21
  return @@settings
27
22
  end
28
23
 
29
- def initializate_settings(pFilePath = ".kuniri")
30
- begin
31
- @configurationInfo = read_configuration_file(pFilePath)
32
- initialize_object
33
- rescue Error::ConfigurationFileError
34
- puts "You have a syntax problem on your configuration file."
35
- abort
36
- end
37
-
24
+ # TODO: Remove parameter and initialize_object. Useless.
25
+ def initializate_settings(pFilePath = ".kuniri.yml")
26
+ #@configurationInfo = read_configuration_file(pFilePath)
27
+ @configurationInfo = {}
38
28
  end
39
-
40
- # Read the configuration file and return a list with the configurations.
29
+
41
30
  # In this method it is checked the configuration file syntax.
42
- # @param pPath [String] Path to ".kuniri" file, it means, the
31
+ # @param pPath [String] Path to ".kuniri" file, it means, the
43
32
  # configurations.
44
33
  # @return [Hash] Return a Hash with the configurations read in ".kuniri",
45
34
  # otherwise, raise an exception.
46
- # @raise [type] Raise an syntax error if ".kuniri" has any syntax mistake
47
- # @raise [type] Raised in the case of the path is wrong.
48
- def read_configuration_file(pPath = ".kuniri")
49
- configuration = {}
35
+ def read_configuration_file(pPath = ".kuniri.yml")
50
36
 
51
37
  unless File.exists?(pPath)
52
- # @log.write_log("Info: Not provide configuration file. Get default")
53
- configuration = default_configuration
38
+ set_default_configuration
54
39
  else
55
- configuration = parser_configuration_file(pPath)
56
- end
57
-
58
- # @log.write_log("First reading configuration file: #{configuration}")
59
-
60
- validate_field(configuration, "language") do |language|
61
- Configuration::Language_Available::LANGUAGES.include?(language)
62
- end
63
-
64
- validate_field(configuration, "source") do |sourcePath|
65
- File.exists?(sourcePath)
66
- end
67
-
68
- validate_field(configuration, "output") do |outputPath|
69
- File.exists?(outputPath)
70
- end
71
-
72
- validate_field(configuration, "extract") do |extract|
73
- Configuration::Monitor_Available::MONITORS.include?(extract.downcase)
40
+ @configurationInfo = YAML.load(File.read(pPath))
41
+ verify_syntax
74
42
  end
75
43
 
76
- validate_field(configuration, "log") do |log|
77
- Configuration::Log_Available::LOG.include?(log.downcase)
78
- end
79
-
80
- # @log.write_log("Debug: Configuration: #{configuration}")
44
+ return @configurationInfo
45
+ end
81
46
 
82
- return configuration
47
+ def set_configuration(pSource, pLanguage, pOutput, pLevel)
48
+ @configurationInfo[:source] = pSource
49
+ @configurationInfo[:language] = pLanguage
50
+ @configurationInfo[:output] = pOutput
51
+ @configurationInfo[:level] = pLevel
52
+ return @configurationInfo
83
53
  end
84
54
 
85
55
  private
86
56
 
87
57
  @@settings = nil
88
58
 
89
- def default_configuration
90
- configuration = {"language" => "ruby",
91
- "source" => "./",
92
- "output" => "./",
93
- "extract" => "uml",
94
- "log" => "html"}
95
- return configuration
59
+ def set_default_configuration
60
+ @configurationInfo = {:language => "ruby",
61
+ :source => "./",
62
+ :output => "./"}
96
63
  end
97
64
 
98
- def parser_configuration_file(pPath)
99
- configuration = default_configuration
100
-
101
- # @log.write_log("Debug: Reading cofiguration file in: #{pPath}")
102
- File.open(pPath, mode="r").each_line do |line|
103
- parts = line.split(':').size
104
- unless (parts == 2)
105
- # @log.write_log("Syntax error on configuration file.")
106
- raise Error::ConfigurationFileError
107
- end
108
- key = handling_basic_syntax(line, 0)
109
- value = handling_basic_syntax(line, 1)
110
- configuration[key] = value
65
+ def verify_syntax
66
+ unless @configurationInfo.is_a? Hash
67
+ raise Error::ConfigurationFileError
111
68
  end
112
- return configuration
69
+
70
+ check_source
71
+ check_output
72
+ check_language
113
73
  end
114
74
 
115
- def validate_field(pConfiguration_hash, pKey)
116
- if pConfiguration_hash.has_key?(pKey)
117
- value = pConfiguration_hash[pKey]
118
- value.split(',').each do |element|
119
- raise Error::ConfigurationFileError unless yield(element)
75
+ def check_source
76
+ unless @configurationInfo.has_key?:source
77
+ raise Error::ConfigurationFileError
78
+ else
79
+ source = @configurationInfo[:source]
80
+ result = (File.directory?source) || (File.exists?source)
81
+ unless result
82
+ raise Error::ConfigurationFileError
120
83
  end
121
84
  end
122
85
  end
123
86
 
124
- def handling_basic_syntax(pLine, pIndex)
125
- text = pLine.split(':')[pIndex].downcase
126
- text.gsub!(/\s/, '')
127
- return text
87
+ def check_output
88
+ unless @configurationInfo.has_key?:output
89
+ raise Error::ConfigurationFileError
90
+ end
128
91
  end
129
92
 
130
- def initialize_object
131
- logType = @configurationInfo["log"]
132
- if logType == "html"
133
- @log = Util::HtmlLogger.new
134
- elsif logType == "txt"
135
- @log = Util::TxtLogger.new
93
+ def check_language
94
+ unless @configurationInfo.has_key?:language
95
+ raise Error::ConfigurationFileError
96
+ else
97
+ result = Configuration::LanguageAvailable::LANGUAGES.include?(
98
+ @configurationInfo[:language])
99
+ unless result
100
+ raise Error::ConfigurationFileError
101
+ end
136
102
  end
137
103
  end
138
104
 
@@ -0,0 +1,9 @@
1
+ module Error
2
+
3
+ class ParserError < RuntimeError
4
+
5
+ # Class
6
+ end
7
+
8
+ # Error
9
+ end