Code Monkey home page Code Monkey logo

vault's Introduction

Vault, a lightweight Object Document Mapper

class User
  include Vault

  key      :id
  property :name
  property :email
end

user = User.new(:id => 1, :name => "John", :email => "[email protected]")
user.save

User.find(1) #=> user
User.all     #=> [user]
User.size    #=> 1

Storage

By default Vault stores everything in an in-memory hash. Each model (class in which you included the Vault module) has its own, independent storage.

Subclasses of a model share their storage with their parent.

To change the storage you can call store_objects_in(store) in the class definition. A store is any object that implements this API:

  • Store#size returns an integer with the total amount of elements in the store
  • Store#each(&block) a store must implement each and include Enumerable
  • Store#[](key) receiving the key it should return a hash of all attributes except for the key.
  • Store#[]=(key, attributes) attributes will be a hash with the attributes except for the key.
  • Store#delete(key) shall delete the item without the given key.
  • Store#filter(hash) should return a new object of the same class as the original store, but only with objects whose properties match those of the argument.

This library provides two storage mechanisms out of the box:

  • Vault::Storage::InMemoryStore is a simple hash storage (and the default)
  • Vault::Storage::YamlStore serializes the contents to disk as a YAML file

TODO

  • Relationships/Associations

More docs?

I will get to it eventually. For now, read the specs and the source—it is a small library. Or help and write some docs :)

Note on Patches/Pull Requests

  • Fork the project.
  • Make your feature addition or bug fix.
  • Add tests for it. This is important so I don’t break it in a future version unintentionally.
  • Commit, do not mess with Rakefile, version, or history. (if you want to have your own version, that is fine but bump version in a commit by itself I can ignore when I pull.)
  • Send me a pull request. Bonus points for topic branches.

Copyright

Copyright © 2010 Nicolás Sanguinetti, licensed under an MIT license. See MIT-LICENSE for details.

vault's People

Contributors

foca avatar

Stargazers

 avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.