module Clear
Defined in:
clear/cli.crclear/extensions/enum/enum.cr
clear/log.cr
clear/seed.cr
clear/sql/lock.cr
clear/sql/sql.cr
clear/version.cr
Constant Summary
-
Log =
::Log.for("clear")
-
VERSION =
{{ (`shards version /srv/crystaldoc.info/github-crystal-garage-clear-v0.8.10/src/clear`).chomp.stringify }}
Class Method Summary
- .apply_seeds
-
.seed(&block)
Register a seed block.
-
.with_cli(&)
Check for the CLI.
Macro Summary
Class Method Detail
def self.seed(&block)
#
Register a seed block.
this block will be called by Clear.apply_seeds
or conveniently by the CLI
using $cli_cmd migrate seeds
def self.with_cli(&)
#
Check for the CLI. If the CLI is not triggered, yield the block passed as parameter
Macro Detail
macro enum(name, *values, &block)
#
Enum
Clear offers full support of postgres enum strings.
Example
Let's say you need to define an enum for genders:
# Define the enum
Clear.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 Clear::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 Clear::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