Skip to content

Domain model persistance library. Specifically aimed at non relational databases.

Notifications You must be signed in to change notification settings

cloudwow/not_relational

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

not_relational

Domain model persistance on non relational databases.

Not Relational is a really good thing that you really want. It is in fact a ruby library for declaring and persisting domain models. It is similiar in some ways to Active Record but is oriented towards non-relational databases such as Amazon’s Simple DB service. In version 1.x only SDBRepository and the MemoryRepository (a self contained repository for tests and small apps) are implemented.

Configuration

Add a section such as this to your yaml configuration file.

example here

Rails configuration

  • NonRelational will look for it’s configuration in config/database.yml .

  • If you will not be using ActiveREcord, turn it off.

  • Add the following to application.rb (or application_controller.rb)

Non-rails configuration

NonRelational will first check for ./database.yml and then ./config/database.yml for configuration.

Declare your models

You domain model classes must inherit from NonRelational::DomainModel

class Thingee
    # declare a primary key.
    # NonRelational will set the id to a guid if you try to save it 
    # without an id.
    property :id, :string, :primary_key=true

    property :name,     :string
    property :title,     :string
    property :the_time, :date
    property :index,    :int

    # Declare a text field if the string may be too large for SDB.
    # text properties will be stored in large object storage which
    # usually means Amazon's S3.
    property :index,    :text

    #declare an index
    index :name_and_index,[:name,index]

    #declare a one-to-many relationship
    has_many :Widget

    #declare a many-to-one relationship
    belongs_to :Person
end

Create and Save

thingee=Thingee.new()
thingee2=Thingee.new(:name='my thingee',:index =>1,:the_time => TIme.now)
thingee2.save

Query

thingee1=Thingee.find('thingee_id_1')
thingee1=Thingee.find(:first,:conditions => {:name => 'david')
thingee1=Thingee.find(:all,

:limit=>3,: order_by => :index, order => :descending, :conditions => {:name => ‘david’,:title=>‘boss’})

thingees=Thingee.find_by_name('david')
thingees=Thingee.find_by_name_and_index('david',3)

Encryption

  • Encrypt the whole model

  • Encrypt individual property

  • Remove encryption form individual property.

Unit tests

  • MemoryRepository for fast or offline tests.

Copyright © 2009 David Knight. See LICENSE for details.

About

Domain model persistance library. Specifically aimed at non relational databases.

Resources

Stars

Watchers

Forks

Packages

No packages published

Languages