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
@@ -0,0 +1,29 @@
1
+ module Languages
2
+
3
+ # @abstract Aggregation is a container for handling aggregation among classes
4
+ class Aggregation
5
+
6
+ public
7
+
8
+ # Verify if line has an aggregation.
9
+ # @param pLine Line with the potential class.
10
+ # @return Return an object AggregationData if it find a class in the
11
+ # line, otherwise return nil.
12
+ def get_aggregation(pLine)
13
+ raise NotImplementedError
14
+ end
15
+
16
+ protected
17
+
18
+ # Detect if an aggregation exists.
19
+ # @param pLine Line to inspect.
20
+ # @return Returns an row string, otherwise returns nil.
21
+ def detect_aggregation(pLine)
22
+ raise NotImplementedError
23
+ end
24
+
25
+ # class
26
+ end
27
+
28
+ # module
29
+ end
@@ -26,46 +26,6 @@ module Languages
26
26
  raise NotImplementedError
27
27
  end
28
28
 
29
- # Remove unnecessary information from line. For example, remove
30
- # everything into parenthesis or line comment.
31
- # @param pString String for remove unnecessary information.
32
- # @return If match any unnecessary character defined by the programmer
33
- # returns the new string, otherwise return the same string.
34
- def remove_unnecessary_information(pString)
35
- raise NotImplementedError
36
- end
37
-
38
- # Take the string, and do some final changes on the data before save it.
39
- # @param pLine Target string to be saved.
40
- # @return Returns a final string or array with final attributes.
41
- def prepare_final_string(pLine)
42
- raise NotImplementedError
43
- end
44
-
45
- # Some attributes can be declared in the same line separated only by
46
- # comma. Here is the place to handling it!
47
- # @param pString String with all attributes separated by comma.
48
- # @return Return an array of attributes.
49
- def handle_multiple_declaration_with_comma(pString)
50
- raise NotImplementedError
51
- end
52
-
53
- # Some languages allows do declare and set initial value in the same line
54
- # by using equal. This method is responsible for handling this kind of
55
- # situation.
56
- # @param pString String with multiple declaration of string.
57
- # @return Return an array of attributes.
58
- def handle_multiple_declaration_with_equal(pString)
59
- raise NotImplementedError
60
- end
61
-
62
- # Handling the simple case of line declaration
63
- # @param pString String with attribute
64
- # @return Return an String with the attribute.
65
- def handle_line_declaration(pString)
66
- raise NotImplementedError
67
- end
68
-
69
29
  # Class
70
30
  end
71
31
 
@@ -0,0 +1,20 @@
1
+ module Languages
2
+
3
+ # Token types used for standardize assignments.
4
+ IF_LABEL ||= "IF"
5
+ ELSE_LABEL ||= "ELSE"
6
+ ELSIF_LABEL ||= "ELSIF"
7
+ UNLESS_LABEL ||= "UNLESS"
8
+ CASE_LABEL ||= "CASE"
9
+ WHEN_LABEL ||= "WHEN"
10
+ WHILE_LABEL ||= "WHILE"
11
+ FOR_LABEL ||= "FOR"
12
+ DO_WHILE_LABEL ||= "DOWHILE"
13
+ UNTIL_LABEL ||= "UNTIL"
14
+ LAMBDA_LABEL ||= "LAMBDA"
15
+ # Handle nested conditional and loops
16
+ UP_LEVEL ||= -1
17
+ DOWN_LEVEL ||= 1
18
+ KEEP_LEVEL ||= 0
19
+
20
+ end
@@ -30,8 +30,16 @@ module Languages
30
30
 
31
31
  # Try to extract the expression.
32
32
  # @param pString String with conditional expression.
33
+ # @param pType Loop type.
33
34
  # @return Return a partial string.
34
- def get_expression(pString)
35
+ def get_expression(pType, pString)
36
+ raise NotImplementedError
37
+ end
38
+
39
+ # Take an partial result of string, and remove unnecessary informations.
40
+ # @param pString Line with string.
41
+ # @return Return a string without any unnecessary information.
42
+ def remove_unnecessary_information(pString)
35
43
  raise NotImplementedError
36
44
  end
37
45
 
@@ -25,41 +25,6 @@ module Languages
25
25
  raise NotImplementedError
26
26
  end
27
27
 
28
- # Remove unnecessary information.
29
- # @param pLine String to be improved.
30
- # @return Return an partial string, or the same if no work is needed.
31
- def remove_unnecessary_information(pLine)
32
- raise NotImplementedError
33
- end
34
-
35
- # Make some prunes and adjustments in the string.
36
- # @param pLine String to be prepared.
37
- # @return Return a string.
38
- def prepare_final_string(pLine)
39
- raise NotImplementedError
40
- end
41
-
42
- # Handling multiple line declaration with comma.
43
- # @param pString String with multiple declaration with comma.
44
- # @return Return a string.
45
- def handle_multiple_declaration_with_comma(pString)
46
- raise NotImplementedError
47
- end
48
-
49
- # Handling multiple declaration with equal.
50
- # @param pString String to be handled.
51
- # @return Return an array with all variables.
52
- def handle_multiple_declaration_with_equal(pString)
53
- raise NotImplementedError
54
- end
55
-
56
- # Handling simple line declaration.
57
- # @param pString String with simple declaration.
58
- # @return Return a string.
59
- def handle_line_declaration(pString)
60
- raise NotImplementedError
61
- end
62
-
63
28
  # class
64
29
  end
65
30
 
@@ -0,0 +1,23 @@
1
+ require_relative 'basic_data'
2
+
3
+ module Languages
4
+
5
+ # Handling aggregations data.
6
+ class AggregationData < Languages::BasicData
7
+
8
+ public
9
+
10
+ # Basic initialization of aggregation.
11
+ # @param pAggregationName Aggregation name for basic initialization.
12
+ def initialize (pAggregationName)
13
+ return nil if pAggregationName.nil? or !pAggregationName.is_a? String
14
+
15
+ @name = pAggregationName
16
+ @isInProject = false
17
+ end
18
+
19
+ # Class
20
+ end
21
+
22
+ # Module
23
+ end
@@ -9,8 +9,10 @@ module Languages
9
9
 
10
10
  # Basic initialization of attribute.
11
11
  # @param pAttribute_name Attribute name for basic initialization.
12
- def initialize (pAttribute_name)
13
- @name = pAttribute_name
12
+ def initialize (pAttributeName)
13
+ return nil if pAttributeName.nil? or !pAttributeName.is_a? String
14
+
15
+ @name = pAttributeName
14
16
  @visibility = "public"
15
17
  end
16
18
 
@@ -0,0 +1,24 @@
1
+ require_relative 'basic_data'
2
+
3
+ module Languages
4
+
5
+ # Class responsible to be an abstraction for conditional and repetition data.
6
+ class BasicStructure < Languages::BasicData
7
+
8
+ public
9
+
10
+ attr_accessor :type
11
+ attr_accessor :expression
12
+ attr_accessor :level
13
+
14
+ def initialize
15
+ @type = "none"
16
+ @expression = "empty"
17
+ @level = 0
18
+ end
19
+
20
+ # class
21
+ end
22
+
23
+ # module
24
+ end
@@ -2,6 +2,7 @@ require_relative 'basic_data'
2
2
  require_relative 'attribute_data'
3
3
  require_relative 'method_data'
4
4
  require_relative 'constructor_data'
5
+ require_relative 'aggregation_data'
5
6
 
6
7
  module Languages
7
8
 
@@ -11,16 +12,19 @@ module Languages
11
12
  public
12
13
 
13
14
  attr_accessor :inheritances
15
+ attr_accessor :aggregations
14
16
  attr_reader :attributes
15
17
  attr_reader :methods
16
18
  attr_reader :constructors
17
19
 
18
20
  def initialize
19
- @inheritances = []
21
+ @inheritances = []
20
22
  @attributes = []
21
23
  @methods = []
22
24
  @constructors = []
25
+ @aggregations = []
23
26
  @visibility = "public"
27
+ @comments = ""
24
28
  end
25
29
 
26
30
  # Add attribute to class data, notice the possibility of call this
@@ -29,7 +33,7 @@ module Languages
29
33
  # is a list of AttributeData.
30
34
  def add_attribute(pAttribute)
31
35
  pAttribute.each do |attributeElement|
32
- return unless attributeElement.is_a?(Languages::AttributeData)
36
+ next unless attributeElement.is_a?(Languages::AttributeData)
33
37
  @attributes.push(attributeElement)
34
38
  end
35
39
  end
@@ -39,7 +43,7 @@ module Languages
39
43
  # @param pMethod It is an object of FunctionData with the method
40
44
  # informations.
41
45
  def add_method(pMethod)
42
- return unless pMethod.is_a?(Languages::FunctionData)
46
+ return nil unless pMethod.is_a?(Languages::MethodData)
43
47
 
44
48
  @methods.push(pMethod)
45
49
  end
@@ -47,28 +51,18 @@ module Languages
47
51
  # Add constructor inside class.
48
52
  # @param pConstructor Object of FunctionData to be added at class.
49
53
  def add_constructor(pConstructor)
50
- return unless pConstructor.is_a?(Languages::FunctionData)
54
+ return nil unless pConstructor.is_a?(Languages::ConstructorData)
51
55
 
52
56
  @constructors.push(pConstructor)
53
57
  end
54
58
 
55
- # TODO: REMOVE IT!
56
- def get_methods
57
- @methods
58
- end
59
-
60
- def get_attributes
61
- @attributes
62
- end
59
+ # Add aggregation inside class.
60
+ # @param pAggregation Object of AggregationData to be added at class.
61
+ def add_aggregation(pAggregation)
62
+ return nil unless pAggregation.is_a?(Languages::AggregationData)
63
63
 
64
- def get_constructors
65
- @constructors
64
+ @aggregations.push(pAggregation)
66
65
  end
67
-
68
- def get_parameters
69
- @parameters
70
- end
71
-
72
66
  # Class
73
67
  end
74
68
 
@@ -1,20 +1,9 @@
1
- require_relative 'basic_data'
1
+ require_relative 'basic_structure'
2
2
 
3
3
  module Languages
4
4
 
5
5
  # Class responsible for handling conditional data
6
- class ConditionalData < Languages::BasicData
7
-
8
- public
9
-
10
- attr_accessor :type
11
- attr_accessor :expression
12
-
13
- def initialize
14
- @name = "nothing"
15
- @type = "none"
16
- @expression = "empty"
17
- end
6
+ class ConditionalData < Languages::BasicStructure
18
7
 
19
8
  # class
20
9
  end
@@ -7,8 +7,10 @@ module Languages
7
7
 
8
8
  public
9
9
 
10
+ # Constructor based on name.
10
11
  def initialize(pConstructorName)
11
12
  super(pConstructorName)
13
+ @type = CONSTRUCTOR_DATA
12
14
  end
13
15
 
14
16
  # Class
@@ -7,16 +7,21 @@ module Languages
7
7
 
8
8
  public
9
9
 
10
- attr_reader :path
10
+ attr_reader :library
11
11
 
12
12
  def initialize(pRequirement)
13
- @name = pRequirement
13
+ return nil if pRequirement.nil? or !pRequirement.is_a? String
14
+ @library = pRequirement
14
15
  end
15
16
 
16
- # Set path of extern requirement.
17
- # @param pPath Path inside the extern requirement.
18
- def setPath(pPath)
19
- @path = pPath
17
+ # Set library of extern requirement.
18
+ # @param pLibrary Library inside the extern requirement.
19
+ def set_library(pLibrary)
20
+ if pLibrary.nil? or !pLibrary.is_a? String or pLibrary.empty?
21
+ return nil
22
+ end
23
+
24
+ @library = pLibrary
20
25
  end
21
26
 
22
27
  # Class
@@ -7,9 +7,9 @@ require_relative 'class_data'
7
7
 
8
8
  module Languages
9
9
 
10
- # FileElement is the upper element related with container data, this class
10
+ # FileElementData is the upper element related with container data, this class
11
11
  # refers to file.
12
- class FileElement < Languages::BasicData
12
+ class FileElementData < Languages::BasicData
13
13
 
14
14
  public
15
15
 
@@ -20,6 +20,8 @@ module Languages
20
20
  attr_reader :modules
21
21
 
22
22
  def initialize(pName)
23
+ return nil if pName.nil? or !pName.is_a? String
24
+
23
25
  @global_functions = []
24
26
  @global_variables = []
25
27
  @extern_requirements = []
@@ -32,15 +34,15 @@ module Languages
32
34
  # Add global function to the file.
33
35
  # @param pFunction An object of FunctionData to be added at the file.
34
36
  def add_global_function(pFunction)
35
- return if not pFunction.is_a?(Languages::FunctionData)
37
+ return nil unless pFunction.is_a?(Languages::FunctionData)
36
38
 
37
39
  @global_functions.push(pFunction)
38
40
  end
39
41
 
40
42
  # Add global variable inside file.
41
- # @param pVariable An VariableGlobalData object to be added.
42
- def add_global_variable(pVariable)
43
- pVariable.each do |element|
43
+ # @param pVariable A single VariableGlobalData object or list to be added.
44
+ def add_global_variable(*pVariable)
45
+ pVariable.flatten.each do |element|
44
46
  next unless element.is_a?(Languages::VariableGlobalData)
45
47
  @global_variables.push(element)
46
48
  end
@@ -49,7 +51,7 @@ module Languages
49
51
  # Add extern requirement inside file.
50
52
  # @param pOutside Add an object of ExternRequirementData.
51
53
  def add_extern_requirement(pOutside)
52
- return unless pOutside.is_a?(Languages::ExternRequirementData)
54
+ return nil unless pOutside.is_a?(Languages::ExternRequirementData)
53
55
 
54
56
  @extern_requirements.push(pOutside)
55
57
  end
@@ -57,7 +59,7 @@ module Languages
57
59
  # Add a class inside file.
58
60
  # @param pClass Add an object of ClassData.
59
61
  def add_class(pClass)
60
- return unless pClass.is_a?(Languages::ClassData)
62
+ return nil unless pClass.is_a?(Languages::ClassData)
61
63
 
62
64
  @classes.push(pClass)
63
65
  end
@@ -65,7 +67,7 @@ module Languages
65
67
  # Add a module inside file.
66
68
  # @param pModule Add an object of ModuleNamespaceData
67
69
  def add_modules(pModule)
68
- return unless pModule.is_a?(Languages::ModuleNamespaceData)
70
+ return nil unless pModule.is_a?(Languages::ModuleNamespaceData)
69
71
 
70
72
  @modules.push(pModule)
71
73
  end
@@ -1,6 +1,8 @@
1
1
  require_relative 'basic_data'
2
2
  require_relative 'conditional_data'
3
3
  require_relative 'repetition_data'
4
+ require_relative 'attribute_data'
5
+ require_relative 'manager_basic_structure_data'
4
6
 
5
7
  module Languages
6
8
 
@@ -10,21 +12,33 @@ module Languages
10
12
  public
11
13
 
12
14
  attr_reader :parameters
13
- attr_reader :conditionals
14
- attr_reader :repetitions
15
15
  attr_accessor :type
16
+ attr_reader :managerCondAndLoop
17
+
18
+ METHOD_DATA ||= "METHOD"
19
+ CONSTRUCTOR_DATA ||= "CONSTRUCTOR"
20
+ GLOBAL_FUNCTION_DATA ||= "GLOBALFUNCTION"
16
21
 
17
22
  def initialize(pFunctionName)
23
+ return nil if pFunctionName.nil? or !pFunctionName.is_a? String
24
+
18
25
  @name = pFunctionName
19
26
  @parameters = []
20
- @conditionals = []
21
- @repetitions = []
27
+ @visibility = "public"
28
+ @comments = ""
29
+ @type = "unknown"
30
+ @managerCondAndLoop = Languages::ManagerBasicStructureData.new
22
31
  end
23
32
 
24
33
  # Add parameters inside function.
25
34
  # @param pValue Add a parameter inside function.
35
+ # @return if pValue is not String or Hash with more than one element.
36
+ # return nil.
26
37
  def add_parameters(pValue)
27
- # TODO: You have to fix it.
38
+ unless ((pValue.is_a? Hash and pValue.length == 1) or
39
+ pValue.is_a? String)
40
+ return nil
41
+ end
28
42
  @parameters.push(pValue)
29
43
  end
30
44
 
@@ -32,19 +46,52 @@ module Languages
32
46
  # @param pConditional An object of ConditionalData.
33
47
  # @return If pConditional is not an instance of ConditionalData,
34
48
  # return nil.
35
- def add_conditional(pConditional)
49
+ def add_conditional(pConditional, pBehaviour = Languages::KEEP_LEVEL)
36
50
  return nil unless (pConditional.instance_of?Languages::ConditionalData)
37
- @conditionals.push(pConditional)
51
+ add_with_manager(pConditional, "conditional", pBehaviour)
38
52
  end
39
53
 
40
54
  # Add repetition element inside function.
41
- # @param pRepetition An object of RepetionData.
42
- # @return If pRepetition is not RepetionData instance return nil.
43
- def add_repetition(pRepetition)
55
+ # @param pRepetition An object of RepetitionData.
56
+ # @return If pRepetition is not RepetitionData instance return nil.
57
+ def add_repetition(pRepetition, pBehaviour = Languages::KEEP_LEVEL)
44
58
  return nil unless (pRepetition.instance_of?Languages::RepetitionData)
45
- @repetitions.push(pRepetition)
59
+ add_with_manager(pRepetition, "repetition", pBehaviour)
46
60
  end
47
61
 
62
+ # Copy elements from an object of FunctionAbstract to specific element
63
+ # @param fromTo Reference from FunctionAbstract
64
+ def << (fromTo)
65
+ unless fromTo.is_a?(Languages::FunctionAbstract)
66
+ return nil
67
+ end
68
+ @name = fromTo.name
69
+ @parameters = fromTo.parameters
70
+ @managerCondAndLoop = fromTo.managerCondAndLoop
71
+ @visibility = fromTo.visibility
72
+ @comments = fromTo.comments
73
+ @type = @type
74
+ end
75
+
76
+ private
77
+
78
+ # Add to a manager conditional or repetition.
79
+ # @param pElementToAdd Element wish we want to add.
80
+ # @param pMetaData String with name for of element we want to add.
81
+ # @param pBehaviour Flag with behaviour.
82
+ def add_with_manager(pElementToAdd, pMetaData, pBehaviour)
83
+ case pBehaviour
84
+ when Languages::KEEP_LEVEL
85
+ @managerCondAndLoop.send("add_#{pMetaData}", pElementToAdd)
86
+ when Languages::UP_LEVEL
87
+ @managerCondAndLoop.up_level
88
+ @managerCondAndLoop.send("add_#{pMetaData}", pElementToAdd)
89
+ when Languages::DOWN_LEVEL
90
+ @managerCondAndLoop.down_level
91
+ @managerCondAndLoop.send("add_#{pMetaData}", pElementToAdd)
92
+ end
93
+ end
94
+
48
95
  # class
49
96
  end
50
97