A structured content file system.
gem install contentfs
Content can be defined in a structure like this:
docs/
api/
application/
content.md
class_api/
new.md
instance_api/
...
guides/
...
Once defined, content can be accessed through ContentFS:
require "contentfs"
database = ContentFS::Database.load("path/to/docs")
database.docs.api.application.render
The content
name is special in that it defines content for the containing folder.
Markdown is supported by default. Simply add the commonmarker
gem to your project's Gemfile
. For automatic syntax highlighting, add the rouge
to your Gemfile
as well.
Unknown formats default to plain text.
Metadata can be defined on content through front-matter:
---
option: value
---
...
Metadata can be applied to all content in a folder by defining a _metadata.yml
file. The folder's metadata is merged with metadata defined in front-matter, with precedence given to the front-matter metadata values.
Content can be filtered by one or more metadata values:
database.filter(option: "value") do |content|
...
end
Iterate over content using the all
method:
database.content.all do |content|
...
end
Both folders and content can be defined with prefixes, useful for ordering:
docs/
api/
0000__application/
...
Characters up to __
(double underscore) are considered part of the prefix.