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
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 |