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
@@ -1,4 +1,5 @@
1
1
  require_relative '../abstract_container/structured_and_oo/conditional'
2
+ require_relative '../abstract_container/structured_and_oo/global_tokens'
2
3
  require_relative '../container_data/structured_and_oo/conditional_data'
3
4
 
4
5
  module Languages
@@ -18,8 +19,9 @@ module Languages
18
19
 
19
20
  conditionalCaptured = Languages::ConditionalData.new
20
21
  conditionalCaptured.type = conditional_type(pLine)
21
-
22
- conditionalCaptured.expression = get_expression(result)
22
+ unless conditionalCaptured.type == Languages::ELSE_LABEL
23
+ conditionalCaptured.expression = get_expression(result)
24
+ end
23
25
 
24
26
  return conditionalCaptured
25
27
  end
@@ -34,28 +36,40 @@ module Languages
34
36
  regexExp = /^\s*case\s+(.*)/
35
37
  return pLine.scan(regexExp)[0].join("") if regexExp =~ pLine
36
38
 
39
+ regexExp = /^\s*when\s+(.*)/
40
+ return pLine.scan(regexExp)[0].join("") if regexExp =~ pLine
41
+
37
42
  regexExp = /^\s*unless\s+(.*)/
38
43
  return pLine.scan(regexExp)[0].join("") if regexExp =~ pLine
39
44
 
40
45
  regexExp = /^\s*elsif\s+(.*)/
41
46
  return pLine.scan(regexExp)[0].join("") if regexExp =~ pLine
42
47
 
48
+ regexExp = /^\s*else\s*/
49
+ return pLine.scan(regexExp)[0].gsub(" ", "") if regexExp =~ pLine
50
+
43
51
  return nil
44
52
  end
45
53
 
46
54
  # Override
47
55
  def conditional_type(pString)
48
56
  regexExp = /^\s+if|^if/
49
- return "IF" if regexExp =~ pString
57
+ return Languages::IF_LABEL if regexExp =~ pString
50
58
 
51
59
  regexExp = /^\s+case|^case/
52
- return "CASE" if regexExp =~ pString
60
+ return Languages::CASE_LABEL if regexExp =~ pString
61
+
62
+ regexExp = /^\s+when|^when/
63
+ return Languages::WHEN_LABEL if regexExp =~ pString
53
64
 
54
65
  regexExp = /^\s+unless|^unless/
55
- return "UNLESS" if regexExp =~ pString
66
+ return Languages::UNLESS_LABEL if regexExp =~ pString
56
67
 
57
68
  regexExp = /^\s+elsif|^elsif/
58
- return "ELSIF" if regexExp =~ pString
69
+ return Languages::ELSIF_LABEL if regexExp =~ pString
70
+
71
+ regexExp = /^\s+else|^else/
72
+ return Languages::ELSE_LABEL if regexExp =~ pString
59
73
 
60
74
  return nil
61
75
  end
@@ -1,4 +1,3 @@
1
- require_relative '../abstract_container/structured_and_oo/constructor'
2
1
  require_relative '../container_data/structured_and_oo/constructor_data'
3
2
  require_relative 'function_behavior_ruby'
4
3
 
@@ -16,14 +15,13 @@ module Languages
16
15
  def get_constructor(pLine, type = 'public')
17
16
  result = get_function(pLine)
18
17
  return nil unless result
18
+ return nil unless result.name =~ /initialize/
19
19
 
20
- if result.name =~ /initialize/
21
- result.type = "CONSTRUCTOR"
22
- else
23
- return nil
24
- end
20
+ constructorData = ConstructorData.new(result.name)
21
+ constructorData << result
22
+
23
+ return constructorData
25
24
 
26
- return result
27
25
  end
28
26
 
29
27
  # Class
@@ -19,7 +19,7 @@ module Languages
19
19
 
20
20
  def detect_end(pLine)
21
21
  #TODO: EXTREMELY SIMPLE HANDLING, IT HAVE TO BE IMPROVED!
22
- return true if pLine =~ /^\s+end|^end/
22
+ return true if pLine =~ /^\s+end|^end|\send;?$/
23
23
  return false
24
24
  end
25
25
 
@@ -12,7 +12,6 @@ module Languages
12
12
  public
13
13
 
14
14
  def initialize
15
- @log = @settings = Kuniri::Setting.create.log
16
15
  end
17
16
 
18
17
  # Get Ruby function.
@@ -20,8 +19,6 @@ module Languages
20
19
  result = detect_function(pLine)
21
20
  return nil unless result
22
21
 
23
- @log.write_log("Info: get method")
24
-
25
22
  functionRuby = Languages::FunctionData.new(result)
26
23
 
27
24
  parameters = handling_parameter(pLine)
@@ -30,9 +27,6 @@ module Languages
30
27
  functionRuby.add_parameters(parameter)
31
28
  end
32
29
  end
33
-
34
- @log.write_log("Debug: Method: #{functionRuby.name}, Parameter:
35
- #{functionRuby.parameters}")
36
30
 
37
31
  return functionRuby
38
32
  end
@@ -61,7 +55,7 @@ module Languages
61
55
  if element =~ /=/
62
56
  parameter = element.scan(/(\w*)=/).join("")
63
57
  value = element.scan(/=(\w*)/).join("")
64
- defaultParameter = Hash(parameter => value)
58
+ defaultParameter = {parameter => value}
65
59
  newList.push(defaultParameter)
66
60
  next
67
61
  end
@@ -95,8 +89,6 @@ module Languages
95
89
 
96
90
  private
97
91
 
98
- @log
99
-
100
92
  # Override
101
93
  def get_parameters(pLine, pRegex)
102
94
  partialParameters = pLine.scan(pRegex).join("")
@@ -0,0 +1,32 @@
1
+ require_relative '../container_data/structured_and_oo/function_data'
2
+ require_relative 'function_behavior_ruby'
3
+
4
+ module Languages
5
+
6
+ module Ruby
7
+
8
+ # Handling ruby global function
9
+ class GlobalFunctionRuby < Languages::Ruby::FunctionBehaviorRuby
10
+
11
+ public
12
+
13
+ # Get Ruby global function.
14
+ # @see FunctionBehaviorRuby
15
+ def get_method(pLine, type = 'public')
16
+ result = get_function(pLine)
17
+ return nil unless result
18
+
19
+ functionData = FunctionData.new(result.name)
20
+ functionData << result
21
+
22
+ return functionData
23
+ end
24
+
25
+ # Class
26
+ end
27
+
28
+ # Ruby
29
+ end
30
+
31
+ # Language
32
+ end
@@ -0,0 +1,33 @@
1
+ require_relative '../container_data/structured_and_oo/method_data'
2
+ require_relative 'function_behavior_ruby'
3
+
4
+ module Languages
5
+
6
+ module Ruby
7
+
8
+ # Handling ruby method
9
+ class MethodRuby < Languages::Ruby::FunctionBehaviorRuby
10
+
11
+ public
12
+
13
+ # Get Ruby method.
14
+ # @see FunctionBehaviorRuby
15
+ def get_method(pLine, type = 'public')
16
+ result = get_function(pLine)
17
+ return nil unless result
18
+ return nil if result.name =~ /initialize/
19
+
20
+ methodData = MethodData.new(result.name)
21
+ methodData << result
22
+
23
+ return methodData
24
+ end
25
+
26
+ # Class
27
+ end
28
+
29
+ # Ruby
30
+ end
31
+
32
+ # Language
33
+ end
@@ -1,3 +1,4 @@
1
+ require_relative '../abstract_container/structured_and_oo/global_tokens'
1
2
  require_relative '../abstract_container/structured_and_oo/repetition'
2
3
  require_relative '../container_data/structured_and_oo/repetition_data'
3
4
 
@@ -15,12 +16,12 @@ module Languages
15
16
  def get_repetition(pLine)
16
17
  result = detect_repetition(pLine)
17
18
  return nil unless result
18
-
19
+ #result = remove_unnecessary_information(result)
19
20
  repetitionCaptured = Languages::RepetitionData.new
20
- repetitionCaptured.type = repetition_type(pLine)
21
-
22
- repetitionCaptured.expression = get_expression(result)
23
-
21
+ repetitionCaptured.type = repetition_type(result)
22
+ repetitionCaptured.expression = get_expression(
23
+ repetitionCaptured.type,
24
+ result)
24
25
  return repetitionCaptured
25
26
  end
26
27
 
@@ -28,14 +29,24 @@ module Languages
28
29
 
29
30
  # Override
30
31
  def detect_repetition(pLine)
31
- regexExp = /^\s*while\s+(.*)do/
32
- return pLine.scan(regexExp)[0].join("") if regexExp =~ pLine
32
+ regexExp = /^\s*while\s+(.*)/
33
+ return pLine[regexExp, 0] if regexExp =~ pLine
34
+
35
+ regexExp = /^\s*for\s+(\w+)\s+in\s+(.+)(\bdo\b)?/
36
+ return pLine[regexExp, 0] if regexExp =~ pLine
33
37
 
34
- regexExp = /^\s*for\s+(.*)/
35
- return pLine.scan(regexExp)[0].join("") if regexExp =~ pLine
38
+ regexExp = /^\s*until\s+(.*)(\bdo\b)?/
39
+ return pLine[regexExp, 0] if regexExp =~ pLine
36
40
 
37
- regexExp = /^\s*until\s+(.*)do/
38
- return pLine.scan(regexExp)[0].join("") if regexExp =~ pLine
41
+ regexExp = /^\s*end\s+while\s+(.+)/
42
+ return pLine[regexExp, 0] if regexExp =~ pLine
43
+
44
+ regexExp = /(lambda)\s+do(.*)\s*/
45
+ return pLine[regexExp, 0] if regexExp =~ pLine
46
+
47
+ # TODO: BUG in this case -> puts "test.each do |x|"
48
+ regexExp = /\.(\s*\w+)\s+do(.*)\s*/
49
+ return pLine[regexExp, 0] if regexExp =~ pLine
39
50
 
40
51
  return nil
41
52
  end
@@ -43,21 +54,56 @@ module Languages
43
54
  # Override
44
55
  def repetition_type(pString)
45
56
  regexExp = /^\s+while|^while/
46
- return "WHILE" if regexExp =~ pString
57
+ return Languages::WHILE_LABEL if regexExp =~ pString
47
58
 
48
59
  regexExp = /^\s+for|^for/
49
- return "FOR" if regexExp =~ pString
60
+ return Languages::FOR_LABEL if regexExp =~ pString
61
+
62
+ regexExp = /^\s+until|^until/
63
+ return Languages::UNTIL_LABEL if regexExp =~ pString
64
+
65
+ regexExp = /^\s*end\s+while\s+/
66
+ return Languages::DO_WHILE_LABEL if regexExp =~ pString
67
+
68
+ regexExp = /^lambda\s+/
69
+ return Languages::LAMBDA_LABEL if regexExp =~ pString
70
+
71
+ regexExp = /\.\w+/
72
+ return pString[/\w+/, 0].upcase if regexExp =~ pString
50
73
 
51
74
  return nil
52
75
  end
53
76
 
54
77
  # Override
55
- def get_expression(pString)
78
+ def get_expression(pType, pString)
79
+ case pType
80
+ when Languages::FOR_LABEL
81
+ pString.slice!("for")
82
+ pString.slice!("do")
83
+ when Languages::WHILE_LABEL
84
+ pString.slice!("while")
85
+ pString.slice!("do")
86
+ when Languages::UNTIL_LABEL
87
+ pString.slice!("until")
88
+ pString.slice!("do")
89
+ when Languages::DO_WHILE_LABEL
90
+ pString.slice!("end")
91
+ pString.slice!("while")
92
+ else
93
+ pString.slice!(".")
94
+ end
56
95
  leftStrip = pString.lstrip
57
96
  rightStrip = leftStrip.rstrip
97
+
58
98
  return rightStrip
59
99
  end
60
100
 
101
+ # Override
102
+ def remove_unnecessary_information(pString)
103
+ return pString.gsub(/\./,"") if pString =~ /\./
104
+ return pString
105
+ end
106
+
61
107
  # class
62
108
  end
63
109
 
@@ -1,6 +1,6 @@
1
1
  require_relative '../language'
2
2
  require_relative '../container_data/structured_and_oo/class_data'
3
- require_relative '../container_data/structured_and_oo/file_element'
3
+ require_relative '../container_data/structured_and_oo/file_element_data'
4
4
  require_relative 'token_ruby'
5
5
  require_relative 'extern_requirement_ruby'
6
6
  require_relative 'variable_global_ruby'
@@ -13,6 +13,9 @@ require_relative 'repetition_ruby'
13
13
  require_relative 'function_behavior_ruby'
14
14
  require_relative 'attribute_ruby'
15
15
  require_relative 'comment_ruby'
16
+ require_relative 'method_ruby'
17
+ require_relative 'aggregation_ruby'
18
+ require_relative '../metadata'
16
19
 
17
20
  module Languages
18
21
 
@@ -30,11 +33,13 @@ module Languages
30
33
  @classHandler = Languages::Ruby::ClassRuby.new
31
34
  @attributeHandler = Languages::Ruby::AttributeRuby.new
32
35
  @endBlockHandler = Languages::Ruby::EndBlockRuby.new
33
- @methodHandler = Languages::Ruby::FunctionBehaviorRuby.new
36
+ @methodHandler = Languages::Ruby::MethodRuby.new
34
37
  @constructorHandler = Languages::Ruby::ConstructorRuby.new
35
38
  @conditionalHandler = Languages::Ruby::ConditionalRuby.new
36
39
  @repetitionHandler = Languages::Ruby::RepetitionRuby.new
37
40
  @commentHandler = Languages::Ruby::CommentRuby.new
41
+ @aggregationHandler = Languages::Ruby::AggregationRuby.new
42
+ @metadata = Languages::Metadata.create
38
43
  @visibility = "public"
39
44
  end
40
45
 
@@ -44,70 +49,92 @@ module Languages
44
49
  @name = File.basename(pPath, ".*")
45
50
  @path = File.dirname(pPath)
46
51
  analyse_first_step(pPath)
47
- #self.analyse_second_step
52
+ analyse_second_step
48
53
  end
49
54
 
50
- # TODO: remove it.
51
- def comment_extract
52
- all_comments = Array.new
53
- #Find a simple Ruby comment with '#'
54
- @source.scan(/#(.*)/).each do |comments|
55
- all_comments.push(comments[0])
56
- end
57
- #Find multiple line comment.
58
- @source.scan(/^=begin(.*?)^=end/m).each do |comment|
59
- all_comments.push(comment[0].lstrip)
60
- end
61
- return all_comments
62
- end
63
-
64
- # TODO: remove it.
65
- def method_extract
66
- return @currentClass.get_methods
67
- end
68
-
69
- # TODO: remove it.
70
- def class_extract
71
- return @currentClass
72
- end
55
+ private
73
56
 
74
- # TODO: remove it.
75
- def attribute_extract
76
- return @currentClass.get_attributes
77
- end
57
+ attr_accessor :visibility
58
+ @source
59
+ @flagMultipleLineComment = false
78
60
 
79
- # TODO: remove it.
80
- def global_variable_extract
81
- raise NotImplementedError
82
- end
61
+ # Puts every statement in a single line
62
+ # @param pLine Line of the file to be analysed.
63
+ def handle_semicolon(pLine)
64
+ commentLine = []
83
65
 
84
- # TODO: remove it.
85
- def extern_requirement_extract
86
- return @externRequirements
87
- end
66
+ if pLine =~ /^=begin(.*?)/
67
+ @flagMultipleLineComment = true
68
+ elsif pLine =~ /^=end/
69
+ @flagMultipleLineComment = false
70
+ end
88
71
 
89
- # TODO: remove it.
90
- def get_classes
72
+ unless @flagMultipleLineComment == true || pLine =~ /#(.*)/
73
+ return pLine.split(/;/)
74
+ end
75
+ commentLine << pLine
91
76
  end
92
77
 
93
- private
94
-
95
- attr_accessor :visibility
96
- @source
97
-
98
78
  # First step for analyse code, it is responsible for get only basic
99
79
  # informations.
100
80
  # @param pPath Path of file to be analysed.
101
81
  def analyse_first_step(pPath)
102
- fileElement = Languages::FileElement.new(pPath)
82
+ fileElement = Languages::FileElementData.new(pPath)
103
83
  @source = File.open(pPath, "rb")
104
84
  @source.each do |line|
105
85
  next if line.gsub(/\s+/,"").size == 0
106
-
107
- @state.handle_line(line)
108
- fileElement = @state.execute(fileElement, line)
86
+ processedLines = handle_semicolon(line)
87
+ if !processedLines.nil?
88
+ processedLines.each do |line|
89
+ @state.handle_line(line)
90
+ fileElement = @state.execute(fileElement, line)
91
+ end
92
+ end
109
93
  end
94
+
95
+ @source.close()
110
96
  @fileElements.push(fileElement)
97
+
98
+ end
99
+
100
+ def analyse_second_step
101
+ sort_all_classes
102
+ sort_all_aggregations
103
+
104
+ allActualAggregations = []
105
+
106
+ @metadata.allAggregations.each do |element|
107
+ if binary_search(@metadata.allClasses, element)
108
+ allActualAggregations << element
109
+ end
110
+ end
111
+
112
+ # TODO: Think how to improve.
113
+ @fileElements.each do |fileElement|
114
+ fileElement.classes.each do |classes|
115
+ classes.aggregations.delete_if do |aggregation|
116
+ unless allActualAggregations.include? aggregation
117
+ true
118
+ end
119
+ end
120
+ end
121
+ end
122
+ end
123
+
124
+ # TODO: Move it to utils
125
+ def binary_search(pVector, pElement)
126
+ pVector.bsearch {|obj| pElement.name <=> obj.name}
127
+ end
128
+
129
+ # TODO: Move it to utils
130
+ def sort_all_classes
131
+ @metadata.allClasses.sort! {|c1, c2| c1.name <=> c2.name}
132
+ end
133
+
134
+ # TODO: Move it to utils
135
+ def sort_all_aggregations
136
+ @metadata.allAggregations.sort! {|a1, a2| a1.name <=> a2.name}
137
+ @metadata.allAggregations.uniq! {|a| a.name}
111
138
  end
112
139
 
113
140
  # Class