method
parse_array_contents
v4.2.9 -
Show latest stable
- Class:
ActiveRecord::ConnectionAdapters::PostgreSQL::ArrayParser
parse_array_contents(array, string, index)private
No documentation available.
# File activerecord/lib/active_record/connection_adapters/postgresql/array_parser.rb, line 30
def parse_array_contents(array, string, index)
is_escaping = false
is_quoted = false
was_quoted = false
current_item = ''
local_index = index
while local_index
token = string[local_index]
if is_escaping
current_item << token
is_escaping = false
else
if is_quoted
case token
when DOUBLE_QUOTE
is_quoted = false
was_quoted = true
when BACKSLASH
is_escaping = true
else
current_item << token
end
else
case token
when BACKSLASH
is_escaping = true
when COMMA
add_item_to_array(array, current_item, was_quoted)
current_item = ''
was_quoted = false
when DOUBLE_QUOTE
is_quoted = true
when BRACKET_OPEN
internal_items = []
local_index,internal_items = parse_array_contents(internal_items, string, local_index + 1)
array.push(internal_items)
when BRACKET_CLOSE
add_item_to_array(array, current_item, was_quoted)
return local_index,array
else
current_item << token
end
end
end
local_index += 1
end
return local_index,array
end