Jennifer
What is Jennifer?
Jennifer is an ActiveRecord pattern for Crystal with great query DSL and migration mechanism.
Installing Jennifer for Maze
Generate a normal maze app
maze new {project}
Update your project shard.yml
Add this to your application's
# Add the following dependencies
jennifer:
github: imdrasil/jennifer.cr
sam:
github: imdrasil/sam.cr
Choose one of existing adapters for your db: mysql or postgres.
Then in the console
shards update
Setup your database information
defaults : &defaults
host: localhost
adapter: postgres
user: root
password: somepassword
migration_files_path: db/migrations # this is the default location for all migrations
development:
db: blog_development
<<: *defaults
test:
db: blog_test
<<: *defaults
Create a jennifer.cr under the /config directory
require "colorize"
Jennifer::Config.read("config/database.yml", MAZE_ENV)
Jennifer::Config.configure do |conf|
conf.logger = Logger.new(STDOUT)
conf.logger.formatter = Logger::Formatter.new do |severity, datetime, progname, message, io|
io << datetime.colorize(:cyan) << ": \n" << message.colorize(:light_magenta)
end
conf.logger.level = Logger::DEBUG
end
Create a sam.cr in {project/src}
Jennifer uses Sam for running tasks pertinent to ORM operations. Sam is a Make-like utility which allows to specify tasks like Ruby's Rake do using plain Crystal. For how to use Sam visit the Github repository https://github.com/imdrasil/sam.cr
# src/sam.cr
require "jennifer/adapter/postgres"
require "jennifer"
require "../config/jennifer"
require "../db/migrations/*"
require "sam"
require "jennifer/sam"
load_dependencies "jennifer"
Sam.help
Edit your src/{project}.cr file
This should be done before you load your application configurations (or at least models). With Maze this is very easy. Also the order is very important the adapter should come before Jennifer.
require "jennifer/adapter/postgres" # for postgres
require "jennifer"
require "maze"
require "./controllers/**"
require "./mailers/**"
require "./models/**"
require "./views/**"
require "../config/*"
Maze::Server.instance.run
You're all set with the configuration. Next using Jennifer Migrations and Models.
Last updated