module Sequel::SQLite::DatabaseMethods

Constants

JSON_TYPES

Public Class Methods

db_parse_json(s) click to toggle source
# File lib/sequel/extensions/sqlite_json.rb, line 41
def self.db_parse_json(s)
  parse_json(s)
rescue Sequel.json_parser_error_class => e
  raise Sequel.convert_exception_class(e, Sequel::InvalidValue)
end
extended(db) click to toggle source
# File lib/sequel/extensions/sqlite_json.rb, line 33
def self.extended(db)
  procs = db.conversion_procs
  parse_method = method :db_parse_json
  JSON_TYPES.each do |type|
    procs[type] = parse_method
  end
end
parse_json(s) click to toggle source
# File lib/sequel/extensions/sqlite_json.rb, line 47
def self.parse_json(s)
  begin
    value = Sequel.parse_json(s)
  rescue Sequel.json_parser_error_class => 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

schema_column_type(db_type) click to toggle source
Calls superclass method
# File lib/sequel/extensions/sqlite_json.rb, line 64
def schema_column_type(db_type)
  case db_type
  when 'json'
    'json'
  when /\[\]$/
    'json'
  else
    super
  end
end
typecast_value_json(value) click to toggle source
# File lib/sequel/extensions/sqlite_json.rb, line 75
def typecast_value_json(value)
  case value
  when JSONArray, JSONHash
    value
  when Array
    JSONArray.new(value)
  when Hash
    JSONHash.new(value)
  when String
    DatabaseMethods.parse_json(value)
  else
    raise Sequel::InvalidValue, "invalid value for json: #{value.inspect}"
  end
end