module Sequel::Postgres::JSONDatabaseMethods

Methods enabling Database object integration with the json type.

Public Class Methods

extended(db) click to toggle source

Reset the conversion procs when extending the Database object, so it will pick up the json convertor. This is only done for the native postgres adapter.

# File lib/sequel/extensions/pg_json.rb, line 109
def self.extended(db)
  db.reset_conversion_procs if db.respond_to?(:reset_conversion_procs)
end
parse_json(s) click to toggle source

Parse the given string as json, returning either a JSONArray or JSONHash instance, and raising an error if the JSON parsing does not yield an array or hash.

# File lib/sequel/extensions/pg_json.rb, line 89
def self.parse_json(s)
  begin
    value = JSON.parse(s)
  rescue JSON::ParserError=>e
    raise Sequel.convert_exception_class(e, Sequel::InvalidValue)
  end

  case value
  when Array
    JSONArray.new(value)
  when Hash 
    JSONHash.new(value)
  else
    raise Sequel::InvalidValue, "unhandled json value: #{value.inspect} (from #{s.inspect})"
  end
end

Public Instance Methods

bound_variable_arg(arg, conn) click to toggle source

Handle JSONArray and JSONHash in bound variables

# File lib/sequel/extensions/pg_json.rb, line 114
def bound_variable_arg(arg, conn)
  case arg
  when JSONArray, JSONHash
    arg.to_json
  else
    super
  end
end
schema_column_type(db_type) click to toggle source

Make the column type detection recognize the json type.

# File lib/sequel/extensions/pg_json.rb, line 124
def schema_column_type(db_type)
  case db_type
  when 'json'
    :json
  else
    super
  end
end