Class: Surus::Array::TextSerializer

Inherits:
Object
  • Object
show all
Defined in:
lib/surus/array/text_serializer.rb

Constant Summary collapse

ARRAY_REGEX =
%r{
  [{,]                 (?# All elements are prefixed with either the opening brace or a comma)
  (?:
    "
    (?<quoted_string>(?:[^"\\]|\\.)*)
    "
    |
    (?<null>NULL)
    |
    (?<unquoted_string>[^,}]+)
  )
}x

Instance Method Summary collapse

Instance Method Details

#dump(array) ⇒ Object



25
26
27
28
# File 'lib/surus/array/text_serializer.rb', line 25

def dump(array)
  return unless array
  '{' + array.map { |s| format(s) }.join(",") + '}'
end

#escape(value) ⇒ Object



34
35
36
37
38
# File 'lib/surus/array/text_serializer.rb', line 34

def escape(value)
  value
    .gsub('\\', '\\\\\\')
    .gsub('"', '\\"')
end

#format(value) ⇒ Object



30
31
32
# File 'lib/surus/array/text_serializer.rb', line 30

def format(value)
  value == nil ? "NULL" : '"' + escape(value) + '"'
end

#load(string) ⇒ Object



17
18
19
20
21
22
23
# File 'lib/surus/array/text_serializer.rb', line 17

def load(string)
  return unless string
  string.scan(ARRAY_REGEX).map do |quoted_string, null, unquoted_string|
    element = quoted_string || unquoted_string
    element ? unescape(element) : nil
  end
end

#unescape(value) ⇒ Object



40
41
42
43
44
# File 'lib/surus/array/text_serializer.rb', line 40

def unescape(value)
  value
    .gsub('\\\\', '\\')
    .gsub('\\"', '"')
end