Module: Simple::SQL::Decoder::HStore

Defined in:
lib/simple/sql/decoder.rb

Overview

HStore parsing

Constant Summary collapse

QUOTED_LITERAL =
/"[^"\\]*(?:\\.[^"\\]*)*"/
UNQUOTED_LITERAL =
/[^\s=,][^\s=,\\]*(?:\\.[^\s=,\\]*|=[^,>])*/
LITERAL =
/(#{QUOTED_LITERAL}|#{UNQUOTED_LITERAL})/
PAIR =
/#{LITERAL}\s*=>\s*#{LITERAL}/
NULL =
/\ANULL\z/i
DOUBLE_QUOTE =
'"'.freeze
ESCAPED_CHAR =
/\\(.)/

Class Method Summary collapse

Class Method Details

.parse(hstore) ⇒ Object



68
69
70
71
72
73
74
75
# File 'lib/simple/sql/decoder.rb', line 68

def parse(hstore)
  hstore.scan(PAIR).each_with_object({}) do |(k, v), memo|
    k = unpack(k)
    k = k.to_sym
    v = v =~ NULL ? nil : unpack(v)
    memo[k] = v
  end
end

.unpack(string) ⇒ Object



77
78
79
80
# File 'lib/simple/sql/decoder.rb', line 77

def unpack(string)
  string = string[1..-2] if string[0] == DOUBLE_QUOTE # remove quotes, if any
  string.gsub ESCAPED_CHAR, '\1'                      # unescape, if necessary
end