Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Newer
Older
100644 412 lines (334 sloc) 16.327 kb
7d48b2b @waffle-with-pears add waffle.io badge
waffle-with-pears authored
1 [![Stories in Ready](https://badge.waffle.io/1602/jugglingdb.png?label=ready)](https://waffle.io/1602/jugglingdb)
8591195 @Mithgol use SVG to display Travis CI build testing status
Mithgol authored
2 ## About [<img src="https://api.travis-ci.org/1602/jugglingdb.svg" />](http://travis-ci.org/#!/1602/jugglingdb)
66f813c @1602 README.md
authored
3
f35160d @1602 Upd readme and changelog
authored
4 [JugglingDB(3)](http://jugglingdb.co) is cross-db ORM for nodejs, providing
5 **common interface** to access most popular database formats. Currently
6 supported are: mysql, sqlite3, postgres, couchdb, mongodb, redis, neo4j and
7 js-memory-storage (yep, self-written engine for test-usage only). You can add
8 your favorite database adapter, checkout one of the existing adapters to learn
9 how, it's super-easy, I guarantee.
ea01571 @1602 Update readme: clienside, describe built-in adapters
authored
10
11 Jugglingdb also works on client-side (using WebService and Memory adapters),
12 which allows to write rich client-side apps talking to server using JSON API.
66f813c @1602 README.md
authored
13
14 ## Installation
15
680d123 @1602 Update readme
authored
16 npm install jugglingdb
66f813c @1602 README.md
authored
17
18b1510 @1602 Added some adapters descriptions
authored
18 plus you should install appropriated adapter, for example for redis:
19
20 npm install jugglingdb-redis
21
22 check following list of available adapters
23
24 ## JugglingDB adapters
25
26 <table>
27 <thead>
28 <tr>
29 <th>Database type</th>
30 <th>Package name</th>
31 <th>Maintainer</th>
32 <th>Build status</th>
33 </tr>
34 </thead>
35 <tbody>
262c618 @1602 Update readme
authored
36 <!-- Firebird -->
18b1510 @1602 Added some adapters descriptions
authored
37 <tr>
38 <td><a href="http://firebirdsql.org"><img src="http://firebirdsql.org/favicon.ico" alt="Firebird"/></a> Firebird</td>
39 <td><a href="http://github.com/hgourvest/jugglingdb-firebird">jugglingdb-firebird</a></td>
40 <td><a href="http://github.com/hgourvest">Henri Gourvest</a></td>
262c618 @1602 Update readme
authored
41 <td></td>
18b1510 @1602 Added some adapters descriptions
authored
42 </tr>
262c618 @1602 Update readme
authored
43
44 <!-- MongoDB -->
18b1510 @1602 Added some adapters descriptions
authored
45 <tr>
46 <td><a href="http://www.mongodb.org"><img src="http://mongodb.ru/favicon.ico" alt="MongoDB" /></a> MongoDB</td>
7a65afa @1602 Upd readme
authored
47 <td><a href="https://github.com/jugglingdb/mongodb-adapter">jugglingdb/mongodb-adapter</a></td>
48 <td><a href="https://github.com/anatoliychakkaev">Anatoliy Chakkaev</a></td>
8591195 @Mithgol use SVG to display Travis CI build testing status
Mithgol authored
49 <td><a href="https://travis-ci.org/jugglingdb/mongodb-adapter"><img src="https://travis-ci.org/jugglingdb/mongodb-adapter.svg?branch=master" alt="Build Status" /></a></td>
18b1510 @1602 Added some adapters descriptions
authored
50 </tr>
262c618 @1602 Update readme
authored
51
52 <!-- MySQL -->
18b1510 @1602 Added some adapters descriptions
authored
53 <tr>
3d64056 @1602 Absolute paths in README.md, fixes #208
authored
54 <td><a href="http://www.mysql.com/"><img src="https://github.com/1602/jugglingdb/raw/master/media/mysql.ico" style="vertical-align:middle"" alt="MySQL" /></a> MySQL</td>
a8d50b3 @1602 Update README.md
authored
55 <td><a href="https://github.com/jugglingdb/mysql-adapter">jugglingdb/mysql</a></td>
56 <td><a href="https://github.com/dgsan">dgsan</a></td>
8591195 @Mithgol use SVG to display Travis CI build testing status
Mithgol authored
57 <td><a href="https://travis-ci.org/jugglingdb/mysql-adapter"><img src="https://travis-ci.org/jugglingdb/mysql-adapter.svg?branch=master" alt="Build Status" /></a></td>
18b1510 @1602 Added some adapters descriptions
authored
58 </tr>
262c618 @1602 Update readme
authored
59
60 <!-- CouchDB / nano -->
61 <tr>
9fed918 @1602 Update README.md
authored
62 <td><a href="http://couchdb.apache.org/"><img width="16" src="http://couchdb.apache.org/favicon.ico" style="vertical-align:middle"" alt="CouchDB" /></a> CouchDB / nano</td>
7a65afa @1602 Upd readme
authored
63 <td><a href="https://github.com/jugglingdb/nano-adapter">jugglingdb/nano-adapter</a></td>
64 <td><a href="https://github.com/nrw">Nicholas Westlake</a></td>
8591195 @Mithgol use SVG to display Travis CI build testing status
Mithgol authored
65 <td><a href="https://travis-ci.org/jugglingdb/nano-adapter"><img src="https://travis-ci.org/jugglingdb/nano-adapter.svg?branch=master" alt="Build Status" /></a></td>
262c618 @1602 Update readme
authored
66 </tr>
67
68 <!-- PostgreSQL -->
69 <tr>
70 <td><a href="http://www.postgresql.org/"><img src="http://www.postgresql.org/favicon.ico" style="vertical-align:middle"" alt="PostgreSQL" /></a> PostgreSQL</td>
7a65afa @1602 Upd readme
authored
71 <td><a href="https://github.com/jugglingdb/postgres-adapter">jugglingdb/postgres-adapter</a></td>
72 <td><a href="https://github.com/anatoliychakkaev">Anatoliy Chakkaev</a></td>
8591195 @Mithgol use SVG to display Travis CI build testing status
Mithgol authored
73 <td><a href="https://travis-ci.org/jugglingdb/postgres-adapter"><img src="https://travis-ci.org/jugglingdb/postgres-adapter.svg?branch=master" alt="Build Status" /></a></td>
262c618 @1602 Update readme
authored
74 </tr>
75
76 <!-- Redis -->
18b1510 @1602 Added some adapters descriptions
authored
77 <tr>
78 <td><a href="http://redis.io/"><img src="http://redis.io/images/favicon.png" alt="Redis" /></a> Redis</td>
7a65afa @1602 Upd readme
authored
79 <td><a href="https://github.com/jugglingdb/redis-adapter">jugglingdb-redis</a></td>
80 <td><a href="https://github.com/anatoliychakkaev">Anatoliy Chakkaev</a></td>
8591195 @Mithgol use SVG to display Travis CI build testing status
Mithgol authored
81 <td><a href="https://travis-ci.org/jugglingdb/redis-adapter"><img src="https://travis-ci.org/jugglingdb/redis-adapter.svg?branch=master" alt="Build Status" /></a></td>
18b1510 @1602 Added some adapters descriptions
authored
82 </tr>
262c618 @1602 Update readme
authored
83
2595fa9 @1602 Added RethinkDB, #285
authored
84 <!-- RethinkDB -->
85 <tr>
f6182ba @1602 Update README.md
authored
86 <td><a href="http://www.rethinkdb.com/"><img src="http://www.rethinkdb.com/favicon.ico" alt="RethinkDB" width="16" height="16" /></a> RethinkDB</td>
2595fa9 @1602 Added RethinkDB, #285
authored
87 <td><a href="https://github.com/fuwaneko/jugglingdb-rethink">jugglingdb-rethink</a></td>
88 <td><a href="https://github.com/fuwaneko">Tewi Inaba</a></td>
8591195 @Mithgol use SVG to display Travis CI build testing status
Mithgol authored
89 <td><a href="https://travis-ci.org/fuwaneko/jugglingdb-rethink"><img src="https://travis-ci.org/fuwaneko/jugglingdb-rethink.svg?branch=master" alt="Build Status" /></a></td>
2595fa9 @1602 Added RethinkDB, #285
authored
90 </tr>
91
262c618 @1602 Update readme
authored
92 <!-- SQLite -->
93 <tr>
007f86a @m0ppers Include ArangoDB
m0ppers authored
94 <td><a href="http://www.sqlite.org/"><img width="16" src="https://github.com/1602/jugglingdb/raw/master/media/sqlite.png" style="vertical-align:middle" alt="SQLite" /></a> SQLite</td>
7a65afa @1602 Upd readme
authored
95 <td><a href="https://github.com/jugglingdb/sqlite3-adapter">jugglingdb/sqlite3-adapter</a></td>
96 <td><a href="https://github.com/anatoliychakkaev">Anatoliy Chakkaev</a></td>
8591195 @Mithgol use SVG to display Travis CI build testing status
Mithgol authored
97 <td><a href="https://travis-ci.org/jugglingdb/sqlite3-adapter"><img src="https://travis-ci.org/jugglingdb/sqlite3-adapter.svg?branch=master" alt="Build Status" /></a></td>
262c618 @1602 Update readme
authored
98 </tr>
007f86a @m0ppers Include ArangoDB
m0ppers authored
99 <!-- ArangoDB -->
100 <tr>
101 <td><a href="http://www.arangodb.org/"><img src="http://www.arangodb.org/wp-content/themes/triagens/images/favicon.ico" style="vertical-align:middle" alt="ArangoDB" /></a> ArangoDB</td>
102 <td><a href="https://github.com/m0ppers/jugglingdb-arango">jugglingdb-arango</a></td>
103 <td><a href="https://github.com/m0ppers">Andreas Streichardt</a></td>
8591195 @Mithgol use SVG to display Travis CI build testing status
Mithgol authored
104 <td><a href="https://travis-ci.org/m0ppers/jugglingdb-arango"><img src="https://travis-ci.org/m0ppers/jugglingdb-arango.svg?branch=master" alt="Build Status" /></a></td>
007f86a @m0ppers Include ArangoDB
m0ppers authored
105 </tr>
ea01571 @1602 Update readme: clienside, describe built-in adapters
authored
106 <tr>
107 <td>WebService</td>
108 <td>built-in</td>
7a65afa @1602 Upd readme
authored
109 <td><a href="https://github.com/anatoliychakkaev">Anatoliy Chakkaev</a></td>
ea01571 @1602 Update readme: clienside, describe built-in adapters
authored
110 <td>n/a</td>
111 </tr>
112 <tr>
113 <td>Memory (bogus)</td>
114 <td>built-in</td>
7a65afa @1602 Upd readme
authored
115 <td><a href="https://github.com/anatoliychakkaev">Anatoliy Chakkaev</a></td>
ea01571 @1602 Update readme: clienside, describe built-in adapters
authored
116 <td>n/a</td>
117 </tr>
118 <tr>
119 <td>Neo4j</td>
7a65afa @1602 Upd readme
authored
120 <td>built-in <i>TODO: move</i></td>
121 <td><a href="https://github.com/anatoliychakkaev"><strike>Anatoliy Chakkaev</strike></a> <u>/!\</u> Looking for
ea01571 @1602 Update readme: clienside, describe built-in adapters
authored
122 maintainer</td>
123 <td>n/a</td>
124 </tr>
bc663e4 @1602 Added dynamodb by @tmpaul
authored
125
126 <!-- DynamoDB -->
127 <tr>
6fb6ee5 @1602 Update README.md
authored
128 <td><a href="http://en.wikipedia.org/wiki/Amazon_DynamoDB"> DynamoDB </a></td>
bc663e4 @1602 Added dynamodb by @tmpaul
authored
129 <td><a href="https://github.com/tmpaul/jugglingdb-dynamodb">tmpaul/jugglingdb-dynamodb</a></td>
130 <td><a href="https://github.com/tmpaul">tmpaul</a></td>
131 <td><a href="https://travis-ci.org/tmpaul/jugglingdb-dynamodb"><img src="https://travis-ci.org/tmpaul/jugglingdb-dynamodb.svg?branch=master" alt="Build Status" /></a></td>
132 </tr>
262c618 @1602 Update readme
authored
133
18b1510 @1602 Added some adapters descriptions
authored
134 </tbody>
135 </table>
136
c4b0f3b @1602 Update README.md
authored
137 ## Participation
138
52b830d @1602 Update README.md
authored
139 - Check status of project on trello board: https://trello.com/board/jugglingdb/4f0a0b1e27d3103c64288388
140 - Make sure all tests pass (`npm test` command)
141 - Feel free to vote and comment on cards (tickets/issues), if you want to join team -- send me a message with your email.
c4b0f3b @1602 Update README.md
authored
142
100b532 @1602 Remove sql adapters and tests
authored
143 If you want to create your own jugglingdb adapter, you should publish your
144 adapter package with name `jugglingdb-ADAPTERNAME`. Creating adapter is simple,
7a65afa @1602 Upd readme
authored
145 check [jugglingdb/redis-adapter](https://github.com/jugglingdb/redis-adapter) for example. JugglingDB core
100b532 @1602 Remove sql adapters and tests
authored
146 exports common tests each adapter should pass, you could create your adapter in
147 TDD style, check that adapter pass all tests defined in `test/common_test.js`.
148
66f813c @1602 README.md
authored
149 ## Usage
150
151 ```javascript
52b830d @1602 Update README.md
authored
152 var Schema = require('jugglingdb').Schema;
100b532 @1602 Remove sql adapters and tests
authored
153 var schema = new Schema('redis', {port: 6379}); //port number depends on your configuration
66f813c @1602 README.md
authored
154 // define models
155 var Post = schema.define('Post', {
156 title: { type: String, length: 255 },
157 content: { type: Schema.Text },
f877dab @1602 Update README.md
authored
158 date: { type: Date, default: function () { return new Date;} },
159 timestamp: { type: Number, default: Date.now },
cb9f0c3 @1602 Better docs, no warning
authored
160 published: { type: Boolean, default: false, index: true }
66f813c @1602 README.md
authored
161 });
cb9f0c3 @1602 Better docs, no warning
authored
162
098fa98 Edited README.md via GitHub
Anatoliy Chakkaev authored
163 // simplier way to describe model
66f813c @1602 README.md
authored
164 var User = schema.define('User', {
165 name: String,
098fa98 Edited README.md via GitHub
Anatoliy Chakkaev authored
166 bio: Schema.Text,
66f813c @1602 README.md
authored
167 approved: Boolean,
168 joinedAt: Date,
169 age: Number
ea01571 @1602 Update readme: clienside, describe built-in adapters
authored
170 }, {
171 restPath: '/users' // tell WebService adapter which path use as API endpoint
66f813c @1602 README.md
authored
172 });
173
3a732cc @1602 Upd readme
authored
174 var Group = schema.define('Group', {name: String});
175
cb9f0c3 @1602 Better docs, no warning
authored
176 // define any custom method
177 User.prototype.getNameAndAge = function () {
178 return this.name + ', ' + this.age;
179 };
180
181 // models also accessible in schema:
182 schema.models.User;
183 schema.models.Post;
3a732cc @1602 Upd readme
authored
184 ```
cb9f0c3 @1602 Better docs, no warning
authored
185
3a732cc @1602 Upd readme
authored
186 SEE [schema(3)](http://jugglingdb.co/schema.3.html) for details schema usage.
187
188 ```javascript
66f813c @1602 README.md
authored
189 // setup relationships
190 User.hasMany(Post, {as: 'posts', foreignKey: 'userId'});
191 // creates instance methods:
192 // user.posts(conds)
8e05e59 @1602 Scopes
authored
193 // user.posts.build(data) // like new Post({userId: user.id});
194 // user.posts.create(data) // build and save
66f813c @1602 README.md
authored
195
196 Post.belongsTo(User, {as: 'author', foreignKey: 'userId'});
197 // creates instance methods:
198 // post.author(callback) -- getter when called with function
199 // post.author() -- sync getter when called without params
200 // post.author(user) -- setter when called with object
201
3a732cc @1602 Upd readme
authored
202 User.hasAndBelongsToMany('groups');
203 // user.groups(callback) - get groups of user
204 // user.groups.create(data, callback) - create new group and connect with user
205 // user.groups.add(group, callback) - connect existing group with user
206 // user.groups.remove(group, callback) - remove connection between group and user
207
5702d41 @woonketwong update README automigrate comment and replace tableName with table in…
woonketwong authored
208 schema.automigrate(); // required only for mysql and postgres NOTE: it will drop User and Post tables
66f813c @1602 README.md
authored
209
210 // work with models:
211 var user = new User;
212 user.save(function (err) {
8e05e59 @1602 Scopes
authored
213 var post = user.posts.build({title: 'Hello world'});
66f813c @1602 README.md
authored
214 post.save(console.log);
215 });
216
ae41cd6 @1602 Describe consturctor calling without "new"
authored
217 // or just call it as function (with the same result):
218 var user = User();
219 user.save(...);
220
66f813c @1602 README.md
authored
221 // Common API methods
222
223 // just instantiate model
224 new Post
225 // save model (of course async)
226 Post.create(cb);
227 // all posts
228 Post.all(cb)
229 // all posts by user
918fed0 @icaliman typo
icaliman authored
230 Post.all({where: {userId: user.id}, order: 'id', limit: 10, skip: 20}, cb);
66f813c @1602 README.md
authored
231 // the same as prev
232 user.posts(cb)
cb9f0c3 @1602 Better docs, no warning
authored
233 // get one latest post
234 Post.findOne({where: {published: true}, order: 'date DESC'}, cb);
66f813c @1602 README.md
authored
235 // same as new Post({userId: user.id});
8e05e59 @1602 Scopes
authored
236 user.posts.build
66f813c @1602 README.md
authored
237 // save as Post.create({userId: user.id}, cb);
8e05e59 @1602 Scopes
authored
238 user.posts.create(cb)
66f813c @1602 README.md
authored
239 // find instance by id
240 User.find(1, cb)
241 // count instances
4a94b6f @1602 Update README.md
authored
242 User.count([conditions, ]cb)
66f813c @1602 README.md
authored
243 // destroy instance
244 user.destroy(cb);
245 // destroy all instances
246 User.destroyAll(cb);
5b68847 @pasindud added update query to readme
pasindud authored
247 // update a post (currently only on the mysql adapter)
248 Post.update({ where:{id:'1'}, update:{ published:false }}, cb);
c797c11 @pasindud added bulk update readme
pasindud authored
249 // update bulk posts (currently only on the mysql adapter)
250 Post.update([{ where:{id:'1'}, update:{ published:false }},{ where:{id:'2'}, update:{ published:true }}], cb);
3a732cc @1602 Upd readme
authored
251 ```
252
253 SEE [model(3)](http://jugglingdb.co/model.3.html) for more information about
254 jugglingdb Model API. Or `man jugglingdb-model` in terminal.
255
256 ```javascript
8abce47 @1602 Update validations stuff in README
authored
257
258 // Setup validations
259 User.validatesPresenceOf('name', 'email')
260 User.validatesLengthOf('password', {min: 5, message: {min: 'Password is too short'}});
261 User.validatesInclusionOf('gender', {in: ['male', 'female']});
262 User.validatesExclusionOf('domain', {in: ['www', 'billing', 'admin']});
263 User.validatesNumericalityOf('age', {int: true});
63192ff @1602 Describe object livecycle, update isValid usage
authored
264 User.validatesUniquenessOf('email', {message: 'email is not unique'});
8abce47 @1602 Update validations stuff in README
authored
265
63192ff @1602 Describe object livecycle, update isValid usage
authored
266 user.isValid(function (valid) {
267 if (!valid) {
268 user.errors // hash of errors {attr: [errmessage, errmessage, ...], attr: ...}
269 }
270 })
271
272 ```
273
3a732cc @1602 Upd readme
authored
274 SEE ALSO [jugglingdb-validations(3)](http://jugglingdb.co/validations.3.html) or
275 `man jugglingdb-validations` in terminal. Validation tests: ./test/validations.test.js
276
277 ## Hooks
63192ff @1602 Describe object livecycle, update isValid usage
authored
278
3a732cc @1602 Upd readme
authored
279 The following hooks supported:
63192ff @1602 Describe object livecycle, update isValid usage
authored
280
281 - afterInitialize
282 - beforeCreate
283 - afterCreate
284 - beforeSave
285 - afterSave
286 - beforeUpdate
287 - afterUpdate
288 - beforeDestroy
289 - afterDestroy
e2a9fc9 @mhupman Update README.md
mhupman authored
290 - beforeValidate
291 - afterValidate
63192ff @1602 Describe object livecycle, update isValid usage
authored
292
93d9552 Update README.md
Henrik Myntti authored
293 Each callback is class method of the model, it should accept single argument: `next`, this is callback which should be called after end of the hook. Except `afterInitialize` because this method is syncronous (called after `new Model`).
294
295 During beforehooks the `next` callback accepts one argument, which is used to terminate flow. The argument passed on as the `err` parameter to the API method callback.
63192ff @1602 Describe object livecycle, update isValid usage
authored
296
297 ## Object lifecycle:
298
299 ```javascript
300 var user = new User;
301 // afterInitialize
e2a9fc9 @mhupman Update README.md
mhupman authored
302 user.save(callback); // If Model.id isn't set, save will invoke Model.create() instead
303 // beforeValidate
304 // afterValidate
63192ff @1602 Describe object livecycle, update isValid usage
authored
305 // beforeSave
e2a9fc9 @mhupman Update README.md
mhupman authored
306 // beforeUpdate
307 // afterUpdate
63192ff @1602 Describe object livecycle, update isValid usage
authored
308 // afterSave
309 // callback
310 user.updateAttribute('email', 'email@example.com', callback);
e2a9fc9 @mhupman Update README.md
mhupman authored
311 // beforeValidate
312 // afterValidate
313 // beforeSave
f35160d @1602 Upd readme and changelog
authored
314 // beforeUpdate
63192ff @1602 Describe object livecycle, update isValid usage
authored
315 // afterUpdate
e2a9fc9 @mhupman Update README.md
mhupman authored
316 // afterSave
63192ff @1602 Describe object livecycle, update isValid usage
authored
317 // callback
318 user.destroy(callback);
319 // beforeDestroy
320 // afterDestroy
321 // callback
322 User.create(data, callback);
323 // beforeValidate
324 // afterValidate
325 // beforeCreate
e2a9fc9 @mhupman Update README.md
mhupman authored
326 // beforeSave
327 // afterSave
63192ff @1602 Describe object livecycle, update isValid usage
authored
328 // afterCreate
329 // callback
66f813c @1602 README.md
authored
330 ```
331
3a732cc @1602 Upd readme
authored
332 SEE [jugglingdb-hooks](http://jugglingdb.co/hooks.3.html) or type this command
333 in your fav terminal: `man jugglingdb-hooks`. Also check tests for usage
334 examples: ./test/hooks.test.js
66f813c @1602 README.md
authored
335
336 ## Your own database adapter
337
40b346d @1602 Edited README.md via GitHub
authored
338 To use custom adapter, pass it's package name as first argument to `Schema` constructor:
66f813c @1602 README.md
authored
339
282d685 @1602 Updated readme
authored
340 var mySchema = new Schema('mycouch', {host:.., port:...});
66f813c @1602 README.md
authored
341
282d685 @1602 Updated readme
authored
342 In that case your adapter should be named as 'jugglingdb-mycouch' npm package.
66f813c @1602 README.md
authored
343
3a732cc @1602 Upd readme
authored
344 ## Testing [outdated]
345
346 TODO: upd this section
aa1ff53 @1602 Update README.md
authored
347
282d685 @1602 Updated readme
authored
348 Core of jugglingdb tests only basic features (database-agnostic) like
349 validations, hooks and runs db-specific tests using memory storage. It also
350 exports complete bucket of tests for external running. Each adapter should run
351 this bucket (example from `jugglingdb-redis`):
66f813c @1602 README.md
authored
352
282d685 @1602 Updated readme
authored
353 var jdb = require('jugglingdb'),
354 Schema = jdb.Schema,
355 test = jdb.test;
66f813c @1602 README.md
authored
356
282d685 @1602 Updated readme
authored
357 var schema = new Schema(__dirname + '/..', {host: 'localhost', database: 1});
66f813c @1602 README.md
authored
358
282d685 @1602 Updated readme
authored
359 test(module.exports, schema);
360
361 Each adapter could add specific tests to standart bucket:
66f813c @1602 README.md
authored
362
282d685 @1602 Updated readme
authored
363 test.it('should do something special', function (test) {
364 test.done();
365 });
66f813c @1602 README.md
authored
366
282d685 @1602 Updated readme
authored
367 Or it could tell core to skip some test from bucket:
66f813c @1602 README.md
authored
368
282d685 @1602 Updated readme
authored
369 test.skip('name of test case');
66f813c @1602 README.md
authored
370
282d685 @1602 Updated readme
authored
371 To run tests use this command:
66f813c @1602 README.md
authored
372
282d685 @1602 Updated readme
authored
373 npm test
66f813c @1602 README.md
authored
374
282d685 @1602 Updated readme
authored
375 Before running make sure you've installed package (`npm install`) and if you
376 running some specific adapter tests, ensure you've configured database
377 correctly (host, port, username, password).
66f813c @1602 README.md
authored
378
379 ## Contributing
380
3a732cc @1602 Upd readme
authored
381 If you have found a bug please try to write unit test before reporting. Before
382 submit pull request make sure all tests still passed. Check
383 [roadmap](http://jugglingdb.co/roadmap.3.html), github issues if you want to
384 help. Contribution to docs highly appreciated. Contents of man pages and
385 http://jugglingdb.co generated from md files stored in this repo at ./docs repo
386
387 ## MIT License
388
389 Copyright (C) 2011 by Anatoliy Chakkaev <mail [åt] anatoliy [døt] in>
390
391 Permission is hereby granted, free of charge, to any person obtaining a copy
392 of this software and associated documentation files (the "Software"), to deal
393 in the Software without restriction, including without limitation the rights
394 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
395 copies of the Software, and to permit persons to whom the Software is
396 furnished to do so, subject to the following conditions:
397
398 The above copyright notice and this permission notice shall be included in
399 all copies or substantial portions of the Software.
400
401 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
402 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
403 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
404 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
405 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
406 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
407 THE SOFTWARE.
c5f87e3 @bitdeli-chef Add a Bitdeli badge to README
bitdeli-chef authored
408
409
410 [![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/1602/jugglingdb/trend.png)](https://bitdeli.com/free "Bitdeli Badge")
411
Something went wrong with that request. Please try again.