Module: Simple::SQL::Helpers::Decoder::HStore
- Defined in:
- lib/simple/sql/helpers/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
58 59 60 61 62 63 64 65 |
# File 'lib/simple/sql/helpers/decoder.rb', line 58 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
67 68 69 70 |
# File 'lib/simple/sql/helpers/decoder.rb', line 67 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 |