Skip to content
Browse files

README.md

  • Loading branch information...
1 parent 5a11108 commit 66f813cd40ce2968a6a5d55c35d7cc07ec32eaaf @1602 committed
Showing with 137 additions and 1 deletion.
  1. +137 −1 README.md
View
138 README.md
@@ -1 +1,137 @@
-Read the tests!
+## About
+
+JugglingDB - cross-db ORM, providing common ORM to access most popular database formats. Currently supported: mysql, mongodb, redis, neo4j and js-memory-storage (yep, self-written engine for test-usage only). You can add your favorite database adapter, checkout one of existing adapters to learn how, it's super-easy, I guarantee.
+
+## Installation
+
+ git clone git://github.com/1602/jugglingdb.git
+
+## Usage
+
+```javascript
+var Schema = require('./juggling').Schema;
+var s = new Schema('redis');
+// define models
+var Post = schema.define('Post', {
+ title: { type: String, length: 255 },
+ content: { type: Schema.Text },
+ date: { type: Date, detault: Date.now },
+ published: { type: Boolean, default: false }
+});
+var User = schema.define('User', {
+ name: String,
+ bio: Text,
+ approved: Boolean,
+ joinedAt: Date,
+ age: Number
+});
+
+// setup relationships
+User.hasMany(Post, {as: 'posts', foreignKey: 'userId'});
+// creates instance methods:
+// user.posts(conds)
+// user.buildPost(data) // like new Post({userId: user.id});
+// user.createPost(data) // build and save
+
+Post.belongsTo(User, {as: 'author', foreignKey: 'userId'});
+// creates instance methods:
+// post.author(callback) -- getter when called with function
+// post.author() -- sync getter when called without params
+// post.author(user) -- setter when called with object
+
+s.automigrate(); // required only for mysql NOTE: it will drop User and Post tables
+
+// work with models:
+var user = new User;
+user.save(function (err) {
+ var post = user.buildPost({title: 'Hello world'});
+ post.save(console.log);
+});
+
+// Common API methods
+
+// just instantiate model
+new Post
+// save model (of course async)
+Post.create(cb);
+// all posts
+Post.all(cb)
+// all posts by user
+Post.all({userId: user.id});
+// the same as prev
+user.posts(cb)
+// same as new Post({userId: user.id});
+user.buildPost
+// save as Post.create({userId: user.id}, cb);
+user.createPost(cb)
+// find instance by id
+User.find(1, cb)
+// count instances
+User.count(cb)
+// destroy instance
+user.destroy(cb);
+// destroy all instances
+User.destroyAll(cb);
+```
+
+Read the tests for usage examples: ./test/common_test.js
+
+## Your own database adapter
+
+To use custom adapter, pass it package name as first argument to Schema constructor:
+
+ mySchema = new Schema('couch-db-adapter', {host:.., port:...});
+
+Make sure, your adapter can be required (just put it into ./node_modules):
+
+ require('couch-db-adapter');
+
+## Running tests
+
+All tests written using nodeunit:
+
+ nodeunit test/common_test.js
+
+If you run this line, of course it will fall, because it requres different databases to be up and running, but you can use js-memory-engine out of box! Specify ONLY env var:
+
+ ONLY=memory nodeunit test/common_test.js
+
+of course, if you have redis running, you can run
+
+ ONLY=redis nodeunit test/common_test.js
+
+## Package structure
+
+Now all common logic desribed in ./index.js, and database-specific stuff in ./lib/*.js. It super-tiny, yep?
+
+## Project status
+
+This project written in one weekend (1,2 oct 2011), and of course it not pretend to be preduction-ready, but I plan to use this project as default ORM for RailwayJS in nearest future. So, if you familiar with some database engines - please help me to improve adapter for that database.
+
+For example, I know, mysql implementation sucks now, 'cause I'm not digging too deep into SequelizeJS code, and I think would be better to replace sequelize with something low-level in nearest future, such as `mysql` package from npm.
+
+## Contributing
+
+If you have found a bug please write unit test, and make sure all other tests still pass before pushing code to repo.
+
+## Roadmap
+
+### Common:
+
++ validations
++ -before and -after hooks on save, update, destroy
++ default values
++ more relationships stuff
++ docs
+
+### Databases:
+
++ riak
++ couchdb
++ low-level mysql
++ postgres
++ sqlite
+
+## License
+
+MIT

0 comments on commit 66f813c

Please sign in to comment.
Something went wrong with that request. Please try again.