A small JSON ODM.
Goal
Tyrion's goal is to provide a fast (as in easy to setup) and dirty unstructured document store.
Usage
Connection
Tyrion uses a folder to store JSON files, one for each Tyrion document defined. Each file is an array of homogeneous documents (much like collections).
Tyrion::Connection.path = "/a/folder"Document
It supports validations from ActiveModel::Validations.
class Post
include Tyrion::Document
field :title
field :body
field :rank
validates_presence_of :title, :body, :rank
endPersistence
Save
post = Post.new :title => "Hello", :body => "Hi there, ..."
post.save Post.create :title => "Hello", :body => "Hi there, ..."Delete
post = Post.create :title => "Hello", :body => "Hi there, ..."
post.delete Post.delete_allQuerying
Chainable querying is allowed.
First called is first executed and an enumerable is returned.
where: all matching documents
Post.where :title => 'Hello', :rank => 3limit: limits returned documents
Post.limit(5)skip: offsets returned documents
Post.skip(5)asc: sorts ascendingly according to passed keys
Post.asc(:rank, :title)desc: sorts discendingly according to passed keys
Post.desc(:rank, :title)Fancy chains
Post.where(:rank => 5).desc(:title, :body).skip(5).limit(5)And since it delegates to an enumerable...
Post.where(:rank => 5).count
Post.where(:rank => 10).each{ |doc| ... }ToDos
- Modifiers on criterias (delete, update, ...)
- Default values for attributes
- Embedded documents
- Keys (_id?)