avram

Version, currently 1.5.057 versions

github.com/luckyframework/avram

A Crystal database wrapper for reading, writing, and migrating Postgres databases.

183 stars
53 dependents
License: MIT

Installation

# Add this to your shard.yml
dependencies:
  avram:
    github: luckyframework/avram
    version: ~> 1.5.0

Then run:

shards install

shard.yml

Crystal
>= 1.16.3
License
MIT
Author
Paul Smith
Executable
  • lucky.gen.migration.cr

Dependencies

Runtime Dependencies

  • pg~> 0.29.0github: will/crystal-pg
  • dexter~> 0.3.4github: luckyframework/dexter
  • pulsar~> 0.2.3github: luckyframework/pulsar
  • habitat~> 0.4.9github: luckyframework/habitat
  • wordsmith~> 0.5.0github: luckyframework/wordsmith
  • lucky_task~> 0.3.0github: luckyframework/lucky_task
  • lucky_cache~> 0.2.0github: luckyframework/lucky_cache
  • shell-table~> 0.9.3github: luckyframework/shell-table.cr
  • lucky_template~> 0.2.0github: luckyframework/lucky_template
  • cadmium_transliterator*github: cadmiumcr/transliterator, branch: master

Development Dependencies

  • ameba~> 1.6.4github: crystal-ameba/amebadev
  • lucky*github: luckyframework/lucky, branch: maindev

README

Avram

API Documentation Website

Database ORM built for the Lucky Framework written in Crystal. Supporting PostgreSQL 12+ and based off principals of Elixir Ecto and Rails ActiveRecord.

Why Avram?

The name comes from Henriette Avram.

Henriette Davidson Avram (October 7, 1919 – April 22, 2006) was a computer programmer and systems analyst who developed the MARC format (Machine Readable Cataloging), the international data standard for bibliographic and holdings information in libraries.

Installation

Add this to your application's shard.yml:

dependencies:
  avram:
    github: luckyframework/avram

Usage

require "avram"

# Define your database
class AppDatabase < Avram::Database
end

AppDatabase.configure do |settings|
  settings.credentials = Avram::Credentials.new(
    database: "my_app_development",
    username: "postgres",
    hostname: "localhost",
    password: "password",
    port: 5432,
  )
end

# Configure Avram to use your database
Avram.configure do |settings|
  settings.database_to_migrate = AppDatabase

  # When `true`, allow lazy loading (N+1).
  # If `false` raise an error if you forget to preload associations
  settings.lazy_load_enabled = true
  settings.query_cache_enabled = false
end

# Create your read-only model
class Person < Avram::Model
  def self.database : Avram::Database.class
    AppDatabase
  end

  table :people do
    column name : String
    column age : Int32
    column programmer : Bool = true
  end
end

# Insert a new record
Person::SaveOperation.create!(name: "Henriette Davidson Avram", age: 86)
# Query for a record
person = Person::BaseQuery.new.name.ilike("%avram")
person.programmer? #=> true

For more details, read the guides.

Contributing

  1. Fork it ( https://github.com/luckyframework/avram/fork )
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Make your changes
  4. Run specs crystal spec
  5. Check formatting crystal tool format spec/ src/
  6. Check ameba ./bin/ameba
  7. Commit your changes (git commit -am 'Add some feature')
  8. Push to the branch (git push origin my-new-feature)
  9. Create a new Pull Request

Docker is provided for quick setup and testing. You can run ./script/setup and ./script/test for ease.

Contributors

paulcsmith Paul Smith - Original Creator of Lucky

Made with contrib.rocks.