module

Lustra

Constants

Log = ::Log.for("lustra")
VERSION = {{ (`shards version /tmp/tmp.KmdCgH/src/src/lustra`).chomp.stringify }}

Class methods

apply_seeds
Source
seed

Register a seed block. this block will be called by Lustra.apply_seeds or conveniently by the CLI using $cli_cmd migrate seeds

Source
with_cli

Check for the CLI. If the CLI is not triggered, yield the block passed as parameter

Source

Macros

enum(name, *values, &block)

Enum

Lustra offers full support of postgres enum strings.

Example

Let's say you need to define an enum for genders:

# Define the enum
Lustra.enum MyApp::Gender, "male", "female" # , ...

In migration, we tell Postgres about the enum:

create_enum :gender, MyApp::Gender # < Create the new type `gender` in the database

create_table :users do |t|
  # ...
  t.gender "gender" # < first `gender` is the type of column, while second is the name of the column
end

Finally in your model, simply add the enum as column:

class User
  include Lustra::Model
  # ...

  column gender : MyApp::Gender
end

Now, you can assign the enum:

u = User.new
u.gender = MyApp::Gender::Male

You can dynamically check and build the enumeration values:

MyApp::Gender.authorized_values # < return ["male", "female"]
MyApp::Gender.all               # < return [MyApp::Gender::Male, MyApp::Gender::Female]

MyApp::Gender.from_string("male")    # < return MyApp::Gender::Male
MyApp::Gender.from_string("unknown") # < throw Lustra::IllegalEnumValueError

MyApp::Gender.valid?("female")  # < Return true
MyApp::Gender.valid?("unknown") # < Return false

However, you cannot write:

u = User.new
u.gender = "male"

But instead:

u = User.new
u.gender = MyApp::Gender::Male
Source
json_serializable_converter(type)

Register a type to allow use in Lustra column system. Type must include JSON::Serializable. More info about how to use JSON::Serializable it can be found here

Lustra.json_serializable_converter(MyJsonType)

# ...

class YourModel
  include Lustra::Model
  # ...
  column my_column : MyJsonType # jsonb (recommended), json or string column in postgresql.
end
Source

Nested types