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

Defined in:
lib/simple/sql/helpers/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



53
54
55
56
57
58
59
60
# File 'lib/simple/sql/helpers/decoder.rb', line 53

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



62
63
64
65
# File 'lib/simple/sql/helpers/decoder.rb', line 62

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