kuniri 0.0.1

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 (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