Class: Hollerith::ArgumentDecoder
- Inherits:
-
Object
- Object
- Hollerith::ArgumentDecoder
- Defined in:
- lib/hollerith/utilities/argument_decoder.rb
Class Method Summary collapse
-
.decode_argument(declaration) ⇒ Object
“result,%%_make_external_request($$_oi,true)” becomes [‘result’, ‘%%_make_external_request($$_oi,true)’].
Class Method Details
.decode_argument(declaration) ⇒ Object
“result,%%_make_external_request($$_oi,true)” becomes
- ‘result’, ‘%%_make_external_request($$_oi,true)’
-
harder than it looks :)
7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
# File 'lib/hollerith/utilities/argument_decoder.rb', line 7 def self.decode_argument declaration arguments = declaration.match(/\((?>[^)(]+|\g<0>)*\)/)[0][1..-2] arguments_array = [] each_argument = '' unclosed_parens = 0 unclosed_square_brackets = 0 unclosed_single_quotes = 0 unclosed_double_quotes = 0 arguments.split('').each do |char| everything_is_closed = ( unclosed_parens == 0 && unclosed_square_brackets == 0 && unclosed_single_quotes == 0 && unclosed_double_quotes == 0 ) if everything_is_closed && char == ',' arguments_array << each_argument each_argument = '' elsif char == '(' unclosed_parens += 1 each_argument += char elsif char == ')' unclosed_parens -= 1 each_argument+= char elsif char == "[" unclosed_square_brackets += 1 each_argument += char elsif char == ']' unclosed_square_brackets -= 1 each_argument+= char elsif char == "'" && unclosed_single_quotes == 0 unclosed_single_quotes += 1 each_argument += char elsif char == "'" unclosed_single_quotes -= 1 each_argument+= char elsif char == '"' && unclosed_double_quotes == 0 unclosed_double_quotes += 1 each_argument += char elsif char == '"' unclosed_double_quotes -= 1 each_argument+= char else each_argument += char end end arguments_array << each_argument arguments_array end |