Maneki

Maneki is a simple file-based model for your Ruby projects. Give it a directory and it will parse any relevant files within.

For example you might have a model like this:

class Document < Maneki
  path_is '../content/documents'
end

...and a directory, documents, that contains a bunch of markdown documents:

documents/
  first-document.text
  second-document.text
  third-document.text

...and each file might be in a form similar to:

# This is the title

 - published: yes
 - authors: Aristoclea Cattington, Sebastian Fluffybottom

This is the content of the document. It is written in Markdown.

This example parsed document would have the following properties:

  • Title: This is the title
  • Headers:
    • Published: True
    • Authors:
      • 'Aristoclea Cattington'
      • 'Sebastian Fluffybottom'
  • Body: This is the content of the document. It is written in Markdown.

Getting some documents

If you want all of the documents.

Document.all

Or you can find items by their slug.

Document.find :slug => 'test-document'

Or you can also search for the inclusion of certain headers.

Document.find :headers => { :published => true }
Document.find :headers => { :authors => 'Aristoclea Cattington' }

You can also grab any documents from a given category (read on).

Document categories

If documents are found within folders then they will also be added to a categorised list.

For example, given this directory structure:

content/
  documents/
    first-document.text
    second-document.text
    third-document.text
  projects/
    a-project.text
    here-is-another-project.text

Now assume that Maneki has its path set to content:

Maneki.path = 'content'

Here if we want to grab any posts we can just ask for the category.

Maneki.documents

Here we will get:

  • First document
  • Second document
  • Third document

Whereas if you did:

Maneki.projects

You would get:

  • A Project
  • Here is another project

If you want to get a list of the found categories then ask for it.

Maneki.categories

Full Example

Have a look at my Maneki Example repository for a full example of using Maneki (with Sinatra).

Suggestions?

Find me on Twitter