topaz
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 for detail.
Here is another sample that shows how Topaz works in Kemal.
Depends on crystal-lang/crystal-mysql and crystal-lang/crystal-sqlite3
Installation
Add this to your application's shard.yml
:
dependencies:
topaz:
github: topaz-crystal/topaz
Usage
1. Setup DB
Topaz::Db.setup("mysql://root@localhost/topaz") # For MySQL
Topaz::Db.setup("sqlite3://./db/data.db") # For SQLite3
2. Define models
class SampleModel < Topaz::Model
columns(
{name: name, type: String}
)
end
# You can drop or create a table
SampleModel.create_table
SampleModel.drop_table
3. Create, find, update and delete models
s = SampleModel.create("Sample Name")
SampleModel.find(1).name
# => "Sample Name"
SampleModel.where("name = 'Sample Name'").size
# => 1
See sample code for detail.
4. Define associations between models
require "topaz"
class SampleParent < Topaz::Model
columns # Empty columns
has_many( {model: SampleChild, as: childs, key: parent_id} )
end
class SampleChild < Topaz::Model
columns( # Define foreign key
{name: parent_id, type: Int32}
)
belongs_to( {model: SampleParent, as: parent, key: parent_id} )
end
p = SampleParent.create
child1 = SampleChild.create(p.id)
child2 = SampleChild.create(p.id)
child3 = SampleChild.create(p.id)
p.childs.size
# => 3
child1.parent.id
# => 1
p.json({include: :childs})
# => {"id": 1, "childs": [{"id": 1, "parent_id": 1}, {"id": 2, "parent_id": 1}, {"id": 3, "parent_id": 1}]}
See sample code for detail.
Supported data types.
[MySQL]
String, Int32, Float64, Float32
[SQLite3]
String, Int64, Float64
TODO:
- Support DATE
- Support migration.
Contributing
- Fork it ( https://github.com/topaz-crystal/topaz )
- Create your feature branch (git checkout -b my-new-feature)
- Commit your changes (git commit -am 'Add some feature')
- Push to the branch (git push origin my-new-feature)
- Create a new Pull Request
Contributors
- tbrand Taichiro Suzuki - creator, maintainer