DocStorage

bitbucket.org/dmajda/doc_storage/

DocStorage is a simple Ruby library for manipulating documents containing text and metadata. These documents can be used to implement a blog, wiki, or similar application without a database.

Document Formats

The library distinguishes between simple documents and multipart documents.

A simple document is similar to a RFC 822 message and it is suitable for storing text associated with some metadata (e.g. a blog article with a title and a publication date). It looks like this:

Title: My blog article
Datetime: 2009-11-01 18:03:27

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc vel lorem
massa. Sed blandit orci id leo blandit ut fermentum lacus ullamcorper.
Suspendisse metus sapien, consectetur vitae imperdiet vel, ornare a metus.
In imperdiet euismod mi, nec volutpat lorem porta id.

A multipart document is loosely based on the MIME multipart message format and allows storing multiple simple documents (e.g. blog comments, each with an author and a publication date) in one file. It looks like this:

Boundary: =====

--=====
Author: Fan
Datetime: 2009-11-01 20:07:15

Your article is really great!
--=====
Author: Critic
Datetime: 2009-11-01 20:10:54

Your article sucks!

See the documentation of DocStorage::SimpleDocument and DocStorage::MultipartDocument classes for more formal format description.

Installation

sudo gem install doc_storage --source http://gemcutter.org/

Example Usage

Simple Documents

require "lib/doc_storage"

# Create a new document with headers and body
document = DocStorage::SimpleDocument.new(
  {
    "Title"    => "Finishing the documentation",
    "Priority" => "urgent"
  },
  "We should finish the documentation ASAP."
)

# Load from a file
document = DocStorage::SimpleDocument.load_file("examples/simple.txt")

# Document manipulation
document.headers["Tags"] = "example"
document.body += "Nulla mi dui, pellentesque et accumsan vitae, mattis et velit."

# Save the modified document
document.save_file("examples/simple_modified.txt")

Multipart Documents

require "lib/doc_storage"

# Create a new document with two parts
document = DocStorage::MultipartDocument.new([
  DocStorage::SimpleDocument.new(
    {
      "Title"    => "Finishing the documentation",
      "Priority" => "urgent"
    },
    "We should finish the documentation ASAP."
  ),
  DocStorage::SimpleDocument.new(
    {
      "Title"    => "Finishing the code",
      "Priority" => "more urgent"
    },
    "But we should finish the code first!"
  ),
])

# Load from a file
document = DocStorage::MultipartDocument.load_file("examples/multipart.txt")

# Document manipulation
document.parts << DocStorage::SimpleDocument.new(
  {
    "Author"   => "Middle man",
    "Datetime" => "2009-11-01 21:15:33",
  },
  "I think your article is neither good nor bad."
)

# Save the modified document
document.save_file("examples/multipart_modified.txt")

Author

DocStorage was brought to you by David Majda ([email protected], majda.cz).