module Mimi::DB::Dictate::TypeDefaults

Constants

DEF_OPT_SIZE_PROC

Constructs a Proc that returns “<type>” or “<type>(n)” depending on whether the size is provided

TYPE_DECIMAL_PROC

Produces a “decimal”, “decimal(p)” or “decimal(p,s)” depending on whether size is provided

TYPE_INTEGER_PROC

Produces an “integer” or “integer(n)” depending on whether size is provided

TYPE_MAP

Type converters, accept Sequel type (field as: …) as a key, return:

  • a Hash of field params or

  • a Proc returning a Hash of field params

TYPE_POSTGRES_NUMERIC_PROC

Produces a “numeric” or “numeric(p, s)” depending on whether size is provided

TYPE_POSTGRES_VARCHAR_PROC

Produces a “character varying” or “character varying(n)” depending on whether the size is provided

TYPE_SQLITE_DECIMAL_PROC

Produces a “decimal”, “decimal(p)” or “decimal(p, s)” depending on whether size is provided

TYPE_STRING_PROC

Produces a “string” or “string(n)” depending on whether the size is provided

Public Class Methods

infer_params(params) click to toggle source

The method infers column params based on column definition

@param params [Hash] @return [Hash]

# File lib/mimi/db/dictate/type_defaults.rb, line 149
def self.infer_params(params)
  type = params[:type].to_sym
  defaults = {
    db_type: type.to_s,
    sequel_type: type,
    primary_key: !!params[:primary_key],
    not_null: !!params[:primary_key],
    db_default: params[:default]
  }
  adapter_name = Mimi::DB.sequel_config[:adapter]
  raise "Failed to infer_params, adapter is not set: #{adapter_name}" unless adapter_name
  inferred_params = TYPE_MAP[adapter_name.to_sym][type] || TYPE_MAP[:default][type] || {}
  inferred_params = inferred_params.call(params) if inferred_params.is_a?(Proc)
  defaults.merge(inferred_params).merge(params)
end