Module: Simple::SQL::Decoder::HStore
- Defined in:
- lib/simple/sql/decoder.rb
Overview
HStore parsing
Constant Summary collapse
- QUOTED_LITERAL =
thanks to github.com/engageis/activerecord-postgres-hstore for regexps!
/"[^"\\]*(?:\\.[^"\\]*)*"/
- 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 |