A persistence framework used in my ruby trainings.
Ruby
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.
lib
spec
.gitignore
Gemfile
Gemfile.lock
Readme.md
jason.gemspec

Readme.md

Jason (Json Persistence Framework) Code Climate

Introduction

It's only for demonstration purposes. If you want to use it in your application - feel free:

gem "jason-orm", :require => "jason"

It uses .json files for persistence. One for each model (imagine as *row).

Features

By now, Jason supports:

  • a persistence_layer
  • a simple relation (association) mapper

It's customizable:

Jason.setup do |config|

  config.persistence_path = "/Users/bob/jsons"

  config.restore_app      = MyOwn::RestoreApp

end

config.restore_app allows to use an own Class which handles restoring from .json files. If this is set, it replaces the integrated Encoding::PersistenceHandler::Restorable class.

The persistence layer

Usage of the persistence layer is widly known from other libraries.

By now, it supports the following datatypes:

  • Integer
  • String
  • Date
class Person

  include Jason::Persistence

  attribute :first_name,  String
  attribute :last_name,   String

end

person = Person.new(:first_name => "Michail", :last_name => "Bulgakov")
person.save

person.update_attributes(:first_name => "Sascha")

person.delete

Person.find("1223wer43")
Person.find_by_id("1223wer43")
Person.find_by_last_name("Bulgakov") #=> returns Array, it's kind of 'where'
Person.find_by_first_name("Michael")

The relation mapper

Usage of the relation mapper is also widly known from other libraries.

By now it supports:

  • belongs_to
  • has_many (work in progress)
class Person

  include Jason::Persistence
  include Jason::Relation

  attribute :first_name,  String
  attribute :last_name,   String  
  attribute :age,         Integer

  belongs_to :wife

end

class Wife

  include Jason::Persistence
  include Jason::Relation

  attribute :name,  String
end

person = Person.new(:first_name => "Michail", :last_name => "Bulgakov")

woman = Wife.new(:name => "Natascha Rutskovskaja")

person.wife = woman 
person.save

belongs_to takes also a second parameter which is a hash:

belongs_to :wife, :class => "Woman"

so different class (names) are assignable to the relation name.

TODO

Feature Status
Date DONE
has_many DONE
Custom data types TODO
deletable only if already saved DONE
code documentation Partly & TODO
Gemspec DONE

Last words

Author: Daniel Schmidt, 15/16/17. July 2012