kuniri 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (167) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +43 -0
  3. data/.rspec +2 -0
  4. data/.travis.yml +18 -0
  5. data/.yardopts +1 -0
  6. data/COPYING +661 -0
  7. data/Gemfile +14 -0
  8. data/Guardfile +8 -0
  9. data/README.md +102 -0
  10. data/Rakefile +114 -0
  11. data/bin/kuniri +53 -0
  12. data/data/attribute_lang.rb +131 -0
  13. data/data/class_lang.rb +77 -0
  14. data/data/conditional_lang.rb +71 -0
  15. data/data/constructor_lang.rb +34 -0
  16. data/data/end_block_lang.rb +30 -0
  17. data/data/extern_requirement_lang.rb +45 -0
  18. data/data/function_behavior_lang.rb +113 -0
  19. data/data/lang_syntax.rb +111 -0
  20. data/data/module_namespace_lang.rb +43 -0
  21. data/data/repetition_lang.rb +62 -0
  22. data/data/token_lang.rb +55 -0
  23. data/data/variable_global_lang.rb +118 -0
  24. data/kuniri.gemspec +24 -0
  25. data/lib/kuniri/core/configuration/language_available.rb +7 -0
  26. data/lib/kuniri/core/configuration/log_available.rb +7 -0
  27. data/lib/kuniri/core/configuration/monitor_available.rb +13 -0
  28. data/lib/kuniri/core/kuniri.rb +78 -0
  29. data/lib/kuniri/core/setting.rb +143 -0
  30. data/lib/kuniri/error/configuration_file_error.rb +12 -0
  31. data/lib/kuniri/error/language_error.rb +12 -0
  32. data/lib/kuniri/language/abstract_container/structured_and_oo/attribute.rb +73 -0
  33. data/lib/kuniri/language/abstract_container/structured_and_oo/class.rb +51 -0
  34. data/lib/kuniri/language/abstract_container/structured_and_oo/comment.rb +57 -0
  35. data/lib/kuniri/language/abstract_container/structured_and_oo/conditional.rb +42 -0
  36. data/lib/kuniri/language/abstract_container/structured_and_oo/constructor.rb +52 -0
  37. data/lib/kuniri/language/abstract_container/structured_and_oo/end_block.rb +27 -0
  38. data/lib/kuniri/language/abstract_container/structured_and_oo/extern_requirement.rb +36 -0
  39. data/lib/kuniri/language/abstract_container/structured_and_oo/function_behavior.rb +55 -0
  40. data/lib/kuniri/language/abstract_container/structured_and_oo/module_namespace.rb +36 -0
  41. data/lib/kuniri/language/abstract_container/structured_and_oo/repetition.rb +42 -0
  42. data/lib/kuniri/language/abstract_container/structured_and_oo/variable_behaviour.rb +53 -0
  43. data/lib/kuniri/language/abstract_container/structured_and_oo/variable_global.rb +67 -0
  44. data/lib/kuniri/language/container_data/structured_and_oo/attribute_data.rb +26 -0
  45. data/lib/kuniri/language/container_data/structured_and_oo/basic_data.rb +18 -0
  46. data/lib/kuniri/language/container_data/structured_and_oo/class_data.rb +77 -0
  47. data/lib/kuniri/language/container_data/structured_and_oo/conditional_data.rb +23 -0
  48. data/lib/kuniri/language/container_data/structured_and_oo/constructor_data.rb +18 -0
  49. data/lib/kuniri/language/container_data/structured_and_oo/extern_requirement_data.rb +26 -0
  50. data/lib/kuniri/language/container_data/structured_and_oo/file_element.rb +77 -0
  51. data/lib/kuniri/language/container_data/structured_and_oo/function_abstract.rb +52 -0
  52. data/lib/kuniri/language/container_data/structured_and_oo/function_data.rb +21 -0
  53. data/lib/kuniri/language/container_data/structured_and_oo/method_data.rb +20 -0
  54. data/lib/kuniri/language/container_data/structured_and_oo/module_namespace_data.rb +18 -0
  55. data/lib/kuniri/language/container_data/structured_and_oo/repetition_data.rb +23 -0
  56. data/lib/kuniri/language/container_data/structured_and_oo/variable_global_data.rb +22 -0
  57. data/lib/kuniri/language/language.rb +222 -0
  58. data/lib/kuniri/language/language_factory.rb +48 -0
  59. data/lib/kuniri/language/ruby/attribute_ruby.rb +134 -0
  60. data/lib/kuniri/language/ruby/class_ruby.rb +83 -0
  61. data/lib/kuniri/language/ruby/comment_ruby.rb +84 -0
  62. data/lib/kuniri/language/ruby/conditional_ruby.rb +77 -0
  63. data/lib/kuniri/language/ruby/constructor_ruby.rb +36 -0
  64. data/lib/kuniri/language/ruby/end_block_ruby.rb +33 -0
  65. data/lib/kuniri/language/ruby/extern_requirement_ruby.rb +49 -0
  66. data/lib/kuniri/language/ruby/function_behavior_ruby.rb +120 -0
  67. data/lib/kuniri/language/ruby/module_namespace_ruby.rb +47 -0
  68. data/lib/kuniri/language/ruby/repetition_ruby.rb +68 -0
  69. data/lib/kuniri/language/ruby/ruby_syntax.rb +117 -0
  70. data/lib/kuniri/language/ruby/token_ruby.rb +59 -0
  71. data/lib/kuniri/language/ruby/variable_behaviour_ruby.rb +83 -0
  72. data/lib/kuniri/language/ruby/variable_global_ruby.rb +123 -0
  73. data/lib/kuniri/parser/parser.rb +45 -0
  74. data/lib/kuniri/parser/parser_xml.rb +128 -0
  75. data/lib/kuniri/state_machine/OO_structured_fsm/attribute_state.rb +51 -0
  76. data/lib/kuniri/state_machine/OO_structured_fsm/class_state.rb +94 -0
  77. data/lib/kuniri/state_machine/OO_structured_fsm/comment_state.rb +76 -0
  78. data/lib/kuniri/state_machine/OO_structured_fsm/conditional_state.rb +92 -0
  79. data/lib/kuniri/state_machine/OO_structured_fsm/constructor_state.rb +71 -0
  80. data/lib/kuniri/state_machine/OO_structured_fsm/function_state.rb +82 -0
  81. data/lib/kuniri/state_machine/OO_structured_fsm/idle_state.rb +80 -0
  82. data/lib/kuniri/state_machine/OO_structured_fsm/include_state.rb +59 -0
  83. data/lib/kuniri/state_machine/OO_structured_fsm/method_state.rb +69 -0
  84. data/lib/kuniri/state_machine/OO_structured_fsm/module_state.rb +79 -0
  85. data/lib/kuniri/state_machine/OO_structured_fsm/oo_structured_state.rb +92 -0
  86. data/lib/kuniri/state_machine/OO_structured_fsm/repetition_state.rb +85 -0
  87. data/lib/kuniri/state_machine/OO_structured_fsm/token_state_machine.rb +8 -0
  88. data/lib/kuniri/state_machine/OO_structured_fsm/variable_state.rb +49 -0
  89. data/lib/kuniri/util/html_logger.rb +41 -0
  90. data/lib/kuniri/util/logger.rb +34 -0
  91. data/lib/kuniri/util/txt_logger.rb +29 -0
  92. data/lib/kuniri/version.rb +3 -0
  93. data/lib/kuniri.rb +5 -0
  94. data/other/analyseFile.asta +0 -0
  95. data/spec/core/kuniri_spec.rb +14 -0
  96. data/spec/core/setting_spec.rb +114 -0
  97. data/spec/language/abstract_container/attribute_spec.rb +13 -0
  98. data/spec/language/abstract_container/class_spec.rb +13 -0
  99. data/spec/language/abstract_container/comment_spec.rb +31 -0
  100. data/spec/language/abstract_container/conditional_spec.rb +13 -0
  101. data/spec/language/abstract_container/constructor_spec.rb +13 -0
  102. data/spec/language/abstract_container/end_block_spec.rb +14 -0
  103. data/spec/language/abstract_container/module_namespace_spec.rb +13 -0
  104. data/spec/language/abstract_container/repetition_spec.rb +13 -0
  105. data/spec/language/container_data/structured_and_oo/attribute_data_spec.rb +32 -0
  106. data/spec/language/container_data/structured_and_oo/class_data_spec.rb +121 -0
  107. data/spec/language/container_data/structured_and_oo/conditional_data_spec.rb +34 -0
  108. data/spec/language/container_data/structured_and_oo/constructor_data_spec.rb +46 -0
  109. data/spec/language/container_data/structured_and_oo/extern_requirement_data_spec.rb +26 -0
  110. data/spec/language/container_data/structured_and_oo/file_element_spec.rb +91 -0
  111. data/spec/language/container_data/structured_and_oo/function_data_spec.rb +22 -0
  112. data/spec/language/container_data/structured_and_oo/module_namespace_spec.rb +20 -0
  113. data/spec/language/container_data/structured_and_oo/repetition_data_spec.rb +34 -0
  114. data/spec/language/container_data/structured_and_oo/variable_global_data_spec.rb +39 -0
  115. data/spec/language/language_factory_spec.rb +64 -0
  116. data/spec/language/language_spec.rb +74 -0
  117. data/spec/language/ruby/attribute_ruby_spec.rb +126 -0
  118. data/spec/language/ruby/class_ruby_spec.rb +102 -0
  119. data/spec/language/ruby/comment_ruby_spec.rb +78 -0
  120. data/spec/language/ruby/conditional_ruby_spec.rb +106 -0
  121. data/spec/language/ruby/constructor_ruby_spec.rb +57 -0
  122. data/spec/language/ruby/end_block_ruby_spec.rb +62 -0
  123. data/spec/language/ruby/function_behavior_ruby_spec.rb +246 -0
  124. data/spec/language/ruby/module_namespace_ruby_spec.rb +55 -0
  125. data/spec/language/ruby/repetition_ruby_spec.rb +33 -0
  126. data/spec/language/ruby/ruby_syntax_spec.rb +482 -0
  127. data/spec/language/ruby/variable_ruby_spec.rb +134 -0
  128. data/spec/parser/parser_spec.rb +25 -0
  129. data/spec/samples/rubySyntaxParts/attribute/simpleAttribute.rb +15 -0
  130. data/spec/samples/rubySyntaxParts/class/simpleClass.rb +19 -0
  131. data/spec/samples/rubySyntaxParts/comment/simple_multiple_line_comment_class.rb +33 -0
  132. data/spec/samples/rubySyntaxParts/comment/simple_multiple_line_comment_global.rb +20 -0
  133. data/spec/samples/rubySyntaxParts/comment/simple_single_line_comment_class.rb +23 -0
  134. data/spec/samples/rubySyntaxParts/comment/simple_single_line_comment_global.rb +16 -0
  135. data/spec/samples/rubySyntaxParts/conditionalStatment/constructorConditional.rb +28 -0
  136. data/spec/samples/rubySyntaxParts/conditionalStatment/methodConditional.rb +42 -0
  137. data/spec/samples/rubySyntaxParts/conditionalStatment/nestedConditional.rb +0 -0
  138. data/spec/samples/rubySyntaxParts/conditionalStatment/simpleConditional.rb +43 -0
  139. data/spec/samples/rubySyntaxParts/constructor/simpleConstructor.rb +27 -0
  140. data/spec/samples/rubySyntaxParts/extern/multipleLineExternRequirement.rb +0 -0
  141. data/spec/samples/rubySyntaxParts/extern/requireRelative.rb +6 -0
  142. data/spec/samples/rubySyntaxParts/extern/simpleExternRequirement.rb +14 -0
  143. data/spec/samples/rubySyntaxParts/fullCode/simpleCodeWithConditional.rb +18 -0
  144. data/spec/samples/rubySyntaxParts/fullCode/simpleFullCode.rb +19 -0
  145. data/spec/samples/rubySyntaxParts/function/simpleFunction.rb +29 -0
  146. data/spec/samples/rubySyntaxParts/method/simpleMethod.rb +13 -0
  147. data/spec/samples/rubySyntaxParts/module/simpleModule.rb +12 -0
  148. data/spec/samples/rubySyntaxParts/repetition/simpleRepetition.rb +28 -0
  149. data/spec/samples/rubySyntaxParts/variable/simpleVariable.rb +13 -0
  150. data/spec/spec_helper.rb +20 -0
  151. data/spec/state_machine/OO_structured_fsm/attribute_state_spec.rb +44 -0
  152. data/spec/state_machine/OO_structured_fsm/class_state_spec.rb +90 -0
  153. data/spec/state_machine/OO_structured_fsm/comment_state_spec.rb +30 -0
  154. data/spec/state_machine/OO_structured_fsm/conditional_state_spec.rb +83 -0
  155. data/spec/state_machine/OO_structured_fsm/constructor_state_spec.rb +48 -0
  156. data/spec/state_machine/OO_structured_fsm/function_state_spec.rb +41 -0
  157. data/spec/state_machine/OO_structured_fsm/idle_state_spec.rb +101 -0
  158. data/spec/state_machine/OO_structured_fsm/include_state_spec.rb +62 -0
  159. data/spec/state_machine/OO_structured_fsm/method_state_spec.rb +42 -0
  160. data/spec/state_machine/OO_structured_fsm/module_state_spec.rb +54 -0
  161. data/spec/state_machine/OO_structured_fsm/oo_structured_state_spec.rb +0 -0
  162. data/spec/state_machine/OO_structured_fsm/repetition_state_spec.rb +83 -0
  163. data/spec/state_machine/OO_structured_fsm/variable_state_spec.rb +40 -0
  164. data/spec/util/html_logger_spec.rb +31 -0
  165. data/spec/util/logger_spec.rb +20 -0
  166. data/spec/util/txt_logger_spec.rb +31 -0
  167. metadata +326 -0
@@ -0,0 +1,222 @@
1
+ require_relative '../state_machine/OO_structured_fsm/attribute_state'
2
+ require_relative '../state_machine/OO_structured_fsm/class_state'
3
+ require_relative '../state_machine/OO_structured_fsm/constructor_state'
4
+ require_relative '../state_machine/OO_structured_fsm/function_state'
5
+ require_relative '../state_machine/OO_structured_fsm/idle_state'
6
+ require_relative '../state_machine/OO_structured_fsm/include_state'
7
+ require_relative '../state_machine/OO_structured_fsm/method_state'
8
+ require_relative '../state_machine/OO_structured_fsm/module_state'
9
+ require_relative '../state_machine/OO_structured_fsm/variable_state'
10
+ require_relative '../state_machine/OO_structured_fsm/oo_structured_state'
11
+ require_relative '../state_machine/OO_structured_fsm/conditional_state'
12
+ require_relative '../state_machine/OO_structured_fsm/repetition_state'
13
+ require_relative '../state_machine/OO_structured_fsm/comment_state'
14
+
15
+ # Module that keeps the language syntax.
16
+ module Languages
17
+
18
+ # @abstract Abstract class for handling different types of language.
19
+ class Language
20
+
21
+ public
22
+
23
+ attr_reader :name
24
+ attr_reader :path
25
+
26
+ attr_reader :attributeState
27
+ attr_reader :state
28
+ attr_reader :previousState
29
+ attr_reader :classState
30
+ attr_reader :constructorState
31
+ attr_reader :functionState
32
+ attr_reader :idleState
33
+ attr_reader :includeState
34
+ attr_reader :methodState
35
+ attr_reader :moduleState
36
+ attr_reader :variableState
37
+ attr_reader :conditionalState
38
+ attr_reader :repetitionState
39
+ attr_reader :commentState
40
+
41
+ attr_reader :externRequirementHandler
42
+ attr_reader :variableHandler
43
+ attr_reader :functionHandler
44
+ attr_reader :moduleHandler
45
+ attr_reader :classHandler
46
+ attr_reader :endBlockHandler
47
+ attr_reader :attributeHandler
48
+ attr_reader :methodHandler
49
+ attr_reader :constructorHandler
50
+ attr_reader :conditionalHandler
51
+ attr_reader :repetitionHandler
52
+ attr_reader :commentHandler
53
+
54
+ attr_accessor :fileElements
55
+
56
+ # Those values help state machine to understand which place to add
57
+ # conditional information and repetition data.
58
+ attr_accessor :flagFunctionBehaviour
59
+
60
+ attr_accessor :string_comment_to_transfer
61
+
62
+ # This method initialize all the needed states of state machine.
63
+ # @note: Never forget to call this method before start parser.
64
+ def initialize
65
+ @attributeState =
66
+ StateMachine::OOStructuredFSM::AttributeState.new(self)
67
+ @classState = StateMachine::OOStructuredFSM::ClassState.new(self)
68
+ @constructorState =
69
+ StateMachine::OOStructuredFSM::ConstructorState.new(self)
70
+ @functionState = StateMachine::OOStructuredFSM::FunctionState.new(self)
71
+ @idleState = StateMachine::OOStructuredFSM::IdleState.new(self)
72
+ @includeState = StateMachine::OOStructuredFSM::IncludeState.new(self)
73
+ @methodState = StateMachine::OOStructuredFSM::MethodState.new(self)
74
+ @moduleState = StateMachine::OOStructuredFSM::ModuleState.new(self)
75
+ @variableState = StateMachine::OOStructuredFSM::VariableState.new(self)
76
+ @conditionalState =
77
+ StateMachine::OOStructuredFSM::ConditionalState.new(self)
78
+ @repetitionState =
79
+ StateMachine::OOStructuredFSM::RepetitionState.new(self)
80
+ @commentState = StateMachine::OOStructuredFSM::CommentState.new(self)
81
+
82
+ @state = @idleState
83
+ @previousState = []
84
+ @previousState.push (@state)
85
+
86
+ @fileElements = []
87
+ @flagFunctionBehaviour = nil
88
+
89
+ @string_comment_to_transfer = ""
90
+ end
91
+
92
+ # Set the source code to by analysed.
93
+ # @param pSource [String] Set the source string.
94
+ def set_source(pSource)
95
+ @source = pSource
96
+ end
97
+
98
+ # Based on the source, extract the informations inside of it. For example
99
+ # in this is step the algorithm try to find classes, and methods. This
100
+ # method, work like a hook for give more flexibility to implements any
101
+ # needed steps.
102
+ def analyse_source
103
+ raise NotImplementedError
104
+ end
105
+
106
+ # Extract all the comments from the source.
107
+ def comment_extract
108
+ raise NotImplementedError
109
+ end
110
+
111
+ # Extract all the method/function from the source.
112
+ def method_extract
113
+ raise NotImplementedError
114
+ end
115
+
116
+ # Extract all the class declared in the source.
117
+ def class_extract
118
+ raise NotImplementedError
119
+ end
120
+
121
+ # Extract the attribute from source file.
122
+ def attribute_extract
123
+ raise NotImplementedError
124
+ end
125
+
126
+ # Extract global variables.
127
+ def global_variable_extract
128
+ raise NotImplementedError
129
+ end
130
+
131
+ # Take all the extern requirements
132
+ def extern_requirement_extract
133
+ raise NotImplementedError
134
+ end
135
+
136
+ # Rewind state
137
+ def rewind_state
138
+ @state = @previousState.pop
139
+ end
140
+
141
+ # TODO: REMOVE IT
142
+ def get_name
143
+ return @name
144
+ end
145
+
146
+ # TODO: REMOVE IT
147
+ def get_path
148
+ return @path
149
+ end
150
+
151
+ # Handling line
152
+ def handle_line(pLine)
153
+ @state.handle_line
154
+ end
155
+
156
+ # Handling class state, i.e, this state is enable when any class is match
157
+ def class_capture
158
+ @state.class_capture
159
+ end
160
+
161
+ # Handling method state, this state is enable only after class state.
162
+ def method_capture
163
+ @state.method_capture
164
+ end
165
+
166
+ # Handling constructor, only after class state.
167
+ def constructor_capture
168
+ @state.constructor_capture
169
+ end
170
+
171
+ # Handling attribute state.
172
+ def attribute_capture
173
+ @state.attribute_capture
174
+ end
175
+
176
+ # Handling module, it can be oriented object or structured.
177
+ def module_capture
178
+ @state.module_capture
179
+ end
180
+
181
+ # Handling function, it is related with structured state
182
+ # but not exclusively.
183
+ def function_capture
184
+ @state.function_capture
185
+ end
186
+
187
+ # Handling external include
188
+ def include_capture
189
+ @state.include_capture
190
+ end
191
+
192
+ # Handling variable
193
+ def variable_capture
194
+ @state.variable_capture
195
+ end
196
+
197
+ # Idle state, waiting for action! =D
198
+ def idle_capture
199
+ @state.idle_capture
200
+ end
201
+
202
+ # Conditional state.
203
+ def conditional_capture
204
+ @state.conditional_capture
205
+ end
206
+
207
+ # keep track of state.
208
+ def set_state (pState)
209
+ @previousState.push(@state)
210
+ @state = pState
211
+ end
212
+
213
+ protected
214
+
215
+ @languageType
216
+ @source
217
+
218
+ # End class
219
+ end
220
+
221
+ # End module
222
+ end
@@ -0,0 +1,48 @@
1
+ require_relative 'language'
2
+ require_relative 'ruby/ruby_syntax'
3
+ require_relative '../error/language_error'
4
+
5
+ module Languages
6
+
7
+ # Simple factory to create language objects.
8
+ class LanguageFactory
9
+
10
+ # Handling the class creation.
11
+ # @param pType [String] Type of object
12
+ # @return Return an object of language.
13
+ def get_language(pType)
14
+ pType.downcase!
15
+
16
+ if pType == "ruby"
17
+ return Languages::RubySyntax.new
18
+ end
19
+ if pType == "python"
20
+ raise Error::LanguageError
21
+ end
22
+ if pType == "vhdl"
23
+ raise Error::LanguageError
24
+ end
25
+ if pType == "c"
26
+ raise Error::LanguageError
27
+ end
28
+ if pType == "cplusplus"
29
+ raise Error::LanguageError
30
+ end
31
+ if pType == "java"
32
+ raise Error::LanguageError
33
+ end
34
+ if pType == "assemblyarm"
35
+ raise Error::LanguageError
36
+ end
37
+ if pType == "php"
38
+ raise Error::LanguageError
39
+ else
40
+ raise Error::LanguageError
41
+ end
42
+ end
43
+
44
+ # Class
45
+ end
46
+
47
+ # Module
48
+ end
@@ -0,0 +1,134 @@
1
+ require_relative '../abstract_container/structured_and_oo/attribute'
2
+ require_relative '../container_data/structured_and_oo/attribute_data'
3
+ require_relative '../../util/html_logger'
4
+ require_relative '../../core/setting'
5
+
6
+ module Languages
7
+
8
+ module Ruby
9
+
10
+ # Ruby Handling Ruby attributes
11
+ class AttributeRuby < Languages::Attribute
12
+
13
+ public
14
+
15
+ def initialize
16
+ @log = @settings = Kuniri::Setting.create.log
17
+ @attributeList = []
18
+ end
19
+
20
+ # Get ruby attribute.
21
+ # @param pLine Verify if line has a ruby attribute.
22
+ # @return Return AttributeData or nil.
23
+ def get_attribute(pLine)
24
+ result = detect_attribute(pLine)
25
+ return nil unless result
26
+
27
+ @log.write_log("Info: Prepare to get attribute.")
28
+
29
+ listOfAttributes = []
30
+
31
+ # Has comma? Split string by comma
32
+ result = remove_unnecessary_information(result)
33
+
34
+ # Separated by comma, equal or the common case
35
+ if result.scan(/,/).count >= 1
36
+ listOfAttributes = handle_multiple_declaration_with_comma(result)
37
+ @log.write_log("Debug: Declared with comma: #{listOfAttributes}")
38
+ elsif result.scan(/=/).count > 1
39
+ listOfAttributes = handle_multiple_declaration_with_equal(result)
40
+ @log.write_log("Debug: separed by comma: #{listOfAttributes}")
41
+ else
42
+ listOfAttributes = handle_line_declaration(result)
43
+ @log.write_log("Debug: One line declaration #{listOfAttributes}")
44
+ end
45
+
46
+ return listOfAttributes
47
+ end
48
+
49
+ protected
50
+
51
+ # Override
52
+ def detect_attribute(pLine)
53
+ regexExp = /^\s*(?:@|attr_(?:accessor|read|write))(.*)$/
54
+ return nil unless pLine =~ regexExp
55
+ return pLine.scan(regexExp)[0].join("")
56
+ end
57
+
58
+ # Override
59
+ def remove_unnecessary_information(pString)
60
+ return pString.gsub!(/\(.*\)/,"") if pString =~ /\(.*\)/
61
+ return pString
62
+ end
63
+
64
+ # Override
65
+ def prepare_final_string(pString)
66
+ if pString =~ /\s+|:|@|=/
67
+ return pString.gsub!(/\s+|:|@|=/,"")
68
+ end
69
+ return pString
70
+ end
71
+
72
+ # Override
73
+ def handle_multiple_declaration_with_comma(pString)
74
+ listOfAttributes = []
75
+ pString = pString.split(",")
76
+ pString.each do |variable|
77
+ return nil if variable.scan(/=/).count > 1
78
+
79
+ variable = variable.scan(/.*=/).join("") if variable =~ /.*=/
80
+
81
+ return nil if variable =~ /\./
82
+
83
+ variable = prepare_final_string(variable)
84
+ attribute = Languages::AttributeData.new(variable)
85
+ listOfAttributes.push(attribute)
86
+ end
87
+
88
+ return listOfAttributes
89
+ end
90
+
91
+ # Override
92
+ def handle_multiple_declaration_with_equal(pString)
93
+ listOfAttributes = []
94
+ pString = pString.split("=")
95
+ pString.each do |variable|
96
+ return nil if variable =~ /\./
97
+
98
+ variable = prepare_final_string(variable)
99
+ attribute = Languages::AttributeData.new(variable)
100
+ listOfAttributes.push(attribute)
101
+ end
102
+
103
+ return listOfAttributes
104
+ end
105
+
106
+ # Override
107
+ def handle_line_declaration(pString)
108
+ listOfAttributes = []
109
+ if pString =~ /=/
110
+ pString = pString.scan(/.*=/).join("")
111
+ return nil if pString =~ /\./
112
+ end
113
+
114
+ return nil if pString =~ /\./
115
+
116
+ pString = prepare_final_string(pString)
117
+ attribute = Languages::AttributeData.new(pString)
118
+ listOfAttributes.push(attribute)
119
+
120
+ return listOfAttributes
121
+ end
122
+
123
+ private
124
+
125
+ @log
126
+ @attributeList
127
+
128
+ #Class
129
+ end
130
+
131
+ # Ruby
132
+ end
133
+ #Language
134
+ end
@@ -0,0 +1,83 @@
1
+ require_relative '../abstract_container/structured_and_oo/class'
2
+ require_relative '../container_data/structured_and_oo/class_data'
3
+ require_relative '../../util/html_logger'
4
+ require_relative '../../core/setting'
5
+
6
+ module Languages
7
+
8
+ module Ruby
9
+
10
+ # Class responsible for handling ruby classes.
11
+ class ClassRuby < Languages::Class
12
+
13
+ public
14
+
15
+ def initialize
16
+ @log = @settings = Kuniri::Setting.create.log
17
+ end
18
+
19
+ # Get ruby class.
20
+ # @see Languages::Class
21
+ def get_class(pLine)
22
+ result = detect_class(pLine)
23
+ return nil unless result
24
+
25
+ @log.write_log("Info: Detect class")
26
+
27
+ classCaptured = Languages::ClassData.new
28
+
29
+ inheritance = get_inheritance(result)
30
+ classCaptured.inheritances = inheritance if inheritance
31
+
32
+ result = prepare_final_string(result)
33
+ classCaptured.name = result
34
+
35
+ @log.write_log("Debug: Class: #{classCaptured.name}")
36
+
37
+ return classCaptured
38
+ end
39
+
40
+ protected
41
+
42
+ # Override
43
+ def detect_class(pLine)
44
+ regexExpression = /^\s*class\s+(.*)/
45
+ return nil unless pLine =~ regexExpression
46
+ return pLine.scan(regexExpression)[0].join("")
47
+ end
48
+
49
+ # Override
50
+ def get_inheritance(pString)
51
+ if pString =~ /</
52
+ partial = pString.scan(/<(.*)/)
53
+ return remove_unnecessary_information(partial)
54
+ end
55
+ return nil
56
+ end
57
+
58
+ # Override
59
+ def remove_unnecessary_information(pString)
60
+ return pString.gsub(/\s|</, "") if pString =~ /\s|</
61
+ return pString
62
+ end
63
+
64
+ def prepare_final_string(pString)
65
+ if pString =~ /\s|</
66
+ partial = pString.gsub(/<.*/,"")
67
+ return remove_unnecessary_information(partial)
68
+ end
69
+ return pString
70
+ end
71
+
72
+ private
73
+
74
+ @log
75
+
76
+ # class
77
+ end
78
+
79
+ # Ruby
80
+ end
81
+
82
+ # Languages
83
+ end
@@ -0,0 +1,84 @@
1
+ require_relative '../abstract_container/structured_and_oo/comment'
2
+
3
+ module Languages
4
+
5
+ module Ruby
6
+
7
+ # CommentRuby is responsible for handling ruby comments.
8
+ class CommentRuby < Languages::Comment
9
+
10
+ public
11
+
12
+ @flagMultipleLine
13
+
14
+ def initialize
15
+ @flagMultipleLine = false
16
+ end
17
+
18
+ # @see Comment
19
+ def get_comment(pLine)
20
+
21
+ # Single line
22
+ return pLine.scan(/#(.*)/)[0].join if is_single_line_comment?(pLine)
23
+
24
+ # Multiple line
25
+ multipleLine = handle_multiple_line(pLine)
26
+ return multipleLine if multipleLine
27
+ return nil
28
+ end
29
+
30
+ # @see Comment
31
+ def is_single_line_comment?(pLine)
32
+ return true if pLine =~ /#(.*)/
33
+ return false
34
+ end
35
+
36
+ # @see Comment
37
+ def is_multiple_line_comment?(pLine)
38
+ return true if (pLine =~ /^=begin(.*?)/ || @flagMultipleLine)
39
+ return false
40
+ end
41
+
42
+ # @see Comment
43
+ def is_multiple_line_comment_end?(pLine)
44
+ return true if pLine =~ /^=end/
45
+ return false
46
+ end
47
+
48
+ protected
49
+
50
+ # @see Comment
51
+ def prepare_line_comment(pString)
52
+ return "" if pString =~ /=begin/
53
+ return pString
54
+ end
55
+
56
+ private
57
+
58
+ def handle_multiple_line(pLine)
59
+ if is_multiple_line_comment_end?(pLine)
60
+ @flagMultipleLine = false
61
+ return ""
62
+ end
63
+
64
+ if @flagMultipleLine
65
+ pLine = prepare_line_comment(pLine)
66
+ return pLine
67
+ end
68
+
69
+ if is_multiple_line_comment?(pLine)
70
+ @flagMultipleLine = true
71
+ return ""
72
+ end
73
+
74
+ return nil
75
+ end
76
+
77
+ # class
78
+ end
79
+
80
+ # module
81
+ end
82
+
83
+ # module
84
+ end
@@ -0,0 +1,77 @@
1
+ require_relative '../abstract_container/structured_and_oo/conditional'
2
+ require_relative '../container_data/structured_and_oo/conditional_data'
3
+
4
+ module Languages
5
+
6
+ module Ruby
7
+
8
+ # Class responsible for handling ruby conditional statements.
9
+ class ConditionalRuby < Languages::Conditional
10
+
11
+ public
12
+
13
+ # Get ruby conditional.
14
+ # @see Languages::Conditional
15
+ def get_conditional(pLine)
16
+ result = detect_conditional(pLine)
17
+ return nil unless result
18
+
19
+ conditionalCaptured = Languages::ConditionalData.new
20
+ conditionalCaptured.type = conditional_type(pLine)
21
+
22
+ conditionalCaptured.expression = get_expression(result)
23
+
24
+ return conditionalCaptured
25
+ end
26
+
27
+ protected
28
+
29
+ # Override.
30
+ def detect_conditional(pLine)
31
+ regexExp = /^\s*if\s+(.*)/
32
+ return pLine.scan(regexExp)[0].join("") if regexExp =~ pLine
33
+
34
+ regexExp = /^\s*case\s+(.*)/
35
+ return pLine.scan(regexExp)[0].join("") if regexExp =~ pLine
36
+
37
+ regexExp = /^\s*unless\s+(.*)/
38
+ return pLine.scan(regexExp)[0].join("") if regexExp =~ pLine
39
+
40
+ regexExp = /^\s*elsif\s+(.*)/
41
+ return pLine.scan(regexExp)[0].join("") if regexExp =~ pLine
42
+
43
+ return nil
44
+ end
45
+
46
+ # Override
47
+ def conditional_type(pString)
48
+ regexExp = /^\s+if|^if/
49
+ return "IF" if regexExp =~ pString
50
+
51
+ regexExp = /^\s+case|^case/
52
+ return "CASE" if regexExp =~ pString
53
+
54
+ regexExp = /^\s+unless|^unless/
55
+ return "UNLESS" if regexExp =~ pString
56
+
57
+ regexExp = /^\s+elsif|^elsif/
58
+ return "ELSIF" if regexExp =~ pString
59
+
60
+ return nil
61
+ end
62
+
63
+ # Override
64
+ def get_expression(pString)
65
+ leftStrip = pString.lstrip
66
+ rightStrip = leftStrip.rstrip
67
+ return rightStrip
68
+ end
69
+
70
+ # Class
71
+ end
72
+
73
+ # Module
74
+ end
75
+
76
+ # Module
77
+ end
@@ -0,0 +1,36 @@
1
+ require_relative '../abstract_container/structured_and_oo/constructor'
2
+ require_relative '../container_data/structured_and_oo/constructor_data'
3
+ require_relative 'function_behavior_ruby'
4
+
5
+ module Languages
6
+
7
+ module Ruby
8
+
9
+ # Handling ruby constructor
10
+ class ConstructorRuby < Languages::Ruby::FunctionBehaviorRuby
11
+
12
+ public
13
+
14
+ # Get Ruby constructor.
15
+ # @see FunctionBehaviorRuby
16
+ def get_constructor(pLine, type = 'public')
17
+ result = get_function(pLine)
18
+ return nil unless result
19
+
20
+ if result.name =~ /initialize/
21
+ result.type = "CONSTRUCTOR"
22
+ else
23
+ return nil
24
+ end
25
+
26
+ return result
27
+ end
28
+
29
+ # Class
30
+ end
31
+
32
+ # Ruby
33
+ end
34
+
35
+ # Language
36
+ end