module Lustra::Model::HasSerialPkey

Direct including types

Defined in:

lustra/model/modules/has_serial_pkey.cr

Constant Summary

PKEY_TYPE = {"bigserial" => "column(__name__ : Int64, primary: true, presence: false)", "serial" => "column(__name__ : Int32, primary: true, presence: false)", "text" => "column(__name__ : String, primary: true, presence: true)", "int" => "column(__name__ : Int32, primary: true, presence: true)", "bigint" => "column(__name__ : Int64, primary: true, presence: true)", "uuid" => "column(__name__ : UUID, primary: true, presence: true)\nbefore(:validate) do |m|\n if !m.persisted? && (m.as(self)).__name___column.value(nil).nil?\n (m.as(self)).__name__ = UUID.random\n end\nend\n"} of Nil => Nil

Macro Summary

Macro Detail

macro add_pkey_type(type, &block) #

Add a hook for the primary_key In the hook, name will be replaced by the column name required by calling primary_key

Example

Lustra::Model::HasSerialPkey.add_pkey_type("awesomepkeysystem") do
  column __name__ : AwesomePkey, primary: true, presence: false

  before_validate do
    # ...
  end
end

[View source]
macro primary_key(name = "id", type = :bigserial) #

Macro used to define serializable primary keys. Currently support bigserial, serial and uuid.

Note: the uuid pkey type is not defined here. It is provided by the UUID extension (see src/lustra/extensions/uuid/uuid.cr) which registers a uuid pkey type via Lustra::Model::HasSerialPkey.add_pkey_type. That extension sets UUID.random on new records and provides the necessary converter so models can use primary_key "id", :uuid.

For bigserial and serial, let to PostgreSQL the handling of sequence numbers. For uuid, will generate a new UUID number on creation.


[View source]