0.0
No commit activity in last 3 years
No release in over 3 years
Specify whether or not a document is visible.
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Development

Runtime

 Project Readme

CouchVisible

CouchVisible is a mixin for your CouchRest::Model documents that provides a simple API for specifying the visibility of a document. This comes in handy in content publishing systems where you want to be able to hide and show documents on your website.

Installation

It's a gem. Either run gem install couch_visible at the command line, or add gem 'couch_visible' to your Gemfile.

Usage

The gem provides a mixin CouchVisible for your CouchRest::Model::Base derived documents:

class Article < CouchRest::Model::Base
  include CouchVisible
end

Hidden by default

Mixing it into your document will create a boolean "couch_visible" property on your document. By default, documents will be hidden; if you'd prefer your documents to be visible by default, simply use the show_by_default! macro:

class Article < CouchRest::Model::Base
  include CouchVisible
  show_by_default!
end

You can also configure this globally:

CouchVisible.show_by_default!

Now, all document models that include CouchVisible will be shown by default. They could override the global default by calling "hide_by_default!":

class Post < CouchRest::Model::Base
  include CouchVisible
  hide_by_default!
end

Showing and Hiding Documents

CouchVisible lets you toggle the visibility of documents via show! and hide! (and show and hide methods):

a = Article.first

a.hide! 
  #==> sets the couch_visible property to false _AND_ saves the document 

a.show!
  #==> sets the couch_visible property to true _AND_ saves the document

a.hide
  #==> sets the couch_visible property to false, but does _NOT_ save the document

a.show
  #==> sets the couch_visible property to true, but does _NOT_ save the document

You can also ask whether the document is currently hidden? or shown?:

a = Article.first
a.hide!   
a.shown?  #==> false
a.hidden? #==> true

Fetching Hidden/Shown documents

Lastly, when you mixed CouchVisible into your document, a new map/reduce was created for your document that allows you to easily find shown and hidden documents:

hidden_article = Article.create
hidden_article.hide!
hidden_article.save

Article.map_by_hidden.get!
Article.count_by_hidden.get!
Article.map_by_shown.get!
Article.count_by_shown.get!

You can use all of the typical CouchDB options you would normally use in your queries. If you're unfamiliar with this format, checkout the couch_view gem, which couch_visible depends on: http://github.com/moonmaster9000/couch_view

CouchPublish / Memories Integration

The couch_visible integrates nicely with the couch_publish and memories gems for versioning / publishing. If you mix Memories or CouchPublish into your document, then mix CouchVisible into it, then CouchVisible will create an unversioned couch_visible property, so that reverting versions won't unintentionally toggle the visibility of the document.

For example, let's create a document with several versions, then inspect that state of couch_visible after reverting:

class Article < CouchRest::Model::Base
  include Publish
  include CouchVisible
  
  property :title
end

a = Article.create :title => "The Mavs spank the Heat"

a.hidden? 
  #==> true

a.publish!

a.version
  #==> 2

Our document is published, but hidden. Now let's unhide the document:

a.show!
a.version 
  #==> 3

Now the document is shown. Presumably, it would start showing up on the website.

Next, let's imagine our editor wanted to make the title more specific. You update the title and republish:

a.title
  #==> "The spank the Heat in game 6"

a.publish!

The editor's boss wasn't happy with the change; they ask you to revert back to the old title. Here's where it gets interesting. If memories had versioned the couch_visible boolean property, then reverting back to version 2 would hide the document again. But since CouchVisible detected that you were using Memories or CouchPublish, it created the couch_visible property as a non-versioned property.

a.published_versions.first.publish! 

a.hidden?
  #==> false

So even though you've reverted back to version 2, your document is still visible.

Filtering your views by published and unpublished

Another nice integration: when you include CouchVisible into a model that already includes CouchPublish, you'll be able to filter your map_by_hidden/count_by_hidden/map_by_shown/count_by_shown queries for published and unpublished documents:

class Article < CouchRest::Model::Base
  include CouchPublish
  include CouchVisible
end

Article.map_by_shown.published.get!
  #==> all of the shown and published Article documents

Article.count_by_hidden.unpublished.get!
  #==> all of the hidden documents that have never been published