Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/topaz-crystal/topaz
A simple and useful db wrapper for Crystal-lang
https://github.com/topaz-crystal/topaz
activerecord crystal database db db-wrapper model orm orm-library topaz
Last synced: about 2 months ago
JSON representation
A simple and useful db wrapper for Crystal-lang
- Host: GitHub
- URL: https://github.com/topaz-crystal/topaz
- Owner: topaz-crystal
- License: mit
- Created: 2016-11-26T08:51:46.000Z (about 8 years ago)
- Default Branch: master
- Last Pushed: 2017-09-16T19:38:11.000Z (about 7 years ago)
- Last Synced: 2024-10-02T03:03:42.072Z (2 months ago)
- Topics: activerecord, crystal, database, db, db-wrapper, model, orm, orm-library, topaz
- Language: Crystal
- Homepage:
- Size: 126 KB
- Stars: 59
- Watchers: 7
- Forks: 4
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- awesome-crystal - topaz - A simple and useful db wrapper (ORM/ODM Extensions)
- awesome-crystal - topaz - A simple and useful db wrapper (ORM/ODM Extensions)
README
# Topaz [![Build Status](https://travis-ci.org/topaz-crystal/topaz.svg?branch=master)](https://travis-ci.org/topaz-crystal/topaz) [![GitHub release](https://img.shields.io/github/release/topaz-crystal/topaz.svg)]()
[![Dependency Status](https://shards.rocks/badge/github/topaz-crystal/topaz/status.svg)](https://shards.rocks/github/topaz-crystal/topaz)
[![devDependency Status](https://shards.rocks/badge/github/topaz-crystal/topaz/dev_status.svg)](https://shards.rocks/github/topaz-crystal/topaz)Topaz is a simple and useful db wrapper for crystal lang.
Topaz is inspired by active record design pattern, but not fully implemented.
See [sample code](https://github.com/topaz-crystal/topaz/blob/master/samples) for detail.
[Here](https://github.com/topaz-crystal/topaz-kemal-sample) is another sample that shows how Topaz works in Kemal.
Depends on [crystal-lang/crystal-mysql](https://github.com/crystal-lang/crystal-mysql), [crystal-lang/crystal-sqlite3](https://github.com/crystal-lang/crystal-sqlite3) and [crystal-pg](https://github.com/will/crystal-pg)## Usage
**1. Setup DB**
```crystal
Topaz::Db.setup("mysql://root@localhost/topaz") # For MySQL
Topaz::Db.setup("postgres://root@localhost/topaz") # For PostgreSQL
Topaz::Db.setup("sqlite3://./db/data.db") # For SQLite3
```**2. Define models**
```crystal
class SampleModel < Topaz::Model
columns(
name: String
)
end# You can drop or create a table
SampleModel.create_table
SampleModel.drop_table
```**3. Create, find, update and delete models**
```crystal
s = SampleModel.create("Sample Name")SampleModel.find(1).name
# => "Sample Name"
SampleModel.where("name = 'Sample Name'").size
# => 1
```
See [sample code](https://github.com/topaz-crystal/topaz/blob/master/samples/model.cr) for detail.**4. Define associations between models**
```crystal
require "topaz"class SampleParent < Topaz::Model
columns # Empty columns
has_many(children: {model: SampleChild, key: parent_id})
endclass SampleChild < Topaz::Model
columns( # Define foreign key
parent_id: Int32
)
belongs_to(parent: {model: SampleParent, key: parent_id})
endp = SampleParent.create
child1 = SampleChild.create(p.id)
child2 = SampleChild.create(p.id)
child3 = SampleChild.create(p.id)p.children.size
# => 3child1.parent.id
# => 1
```
See [sample code](https://github.com/topaz-crystal/topaz/blob/master/samples/association.cr) for detail.**Other features**
* Transaction
* Table migration
* `Model#to_json` and `Model#from_json`
* `created_at` and `updated_at` column
* Nullable column
* Column with default value
* Change id from Int32 to Int64See [sample codes](https://github.com/topaz-crystal/topaz/tree/master/samples) for detail.
**Supported data types.**
String, Int32, Int64, Float32, Float64## Development
Setting up PostgreSQL:
```
$ psql
# CREATE USER root WITH CREATEDB;
# CREATE DATABASE topaz_test WITH OWNER = root;
```Setting up MySQL:
```
$ mysql -u root
mysql> create database topaz_test;
```## Contributing
1. Fork it ( https://github.com/topaz-crystal/topaz/fork )
2. Create your feature branch (git checkout -b my-new-feature)
3. Commit your changes (git commit -am 'Add some feature')
4. Push to the branch (git push origin my-new-feature)
5. Create a new Pull Request## Contributors
- [tbrand](https://github.com/tbrand) Taichiro Suzuki - creator, maintainer