Skip to content

neotericdesign/pubdraft

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

27 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Pubdraft

Publication state management for the Neoteric Design CMS

Mark models as 'published', 'drafted', or whatever you like. Filter out drafted material from public view.

Installation

Add pubdraft to your Gemfile

# Gemfile
  gem 'pubdraft', "~> 1.0.0"
$ bundle install

Usage

Pubdraft requires a string column on your parent model.

class MyModel < ActiveRecord::Base
  pubdraft

  # or

  pubdraft field: :publication_status,
           states: { in_review: :mark_for_review, drafted: :draft },
           default: :in_review
end

record = MyModel.create!
record.published? #=> true

record.draft!
record.drafted?   #=> true

record.publish!
record.published? #=> true

MyModel.published #=> [published records]
MyModel.drafted   #=> [drafted records]

Options

You can customize Pubdraft per model by setting options when calling the pubdraft method.

Option Default Description
field 'state' Name of the attribute to use to store state
states { published: :publish, drafted: :draft } Hash of states to use. See States
default 'published' Default state to set when none is provided. Disable setting a default by setting this to false

States

When setting up pubdraft on a model, you can supply your own custom set of states. States consist of a name, and an action descriptor. THe name is used as the value of the state, while the action is the natural language verb to put in that state.

  class Post < ApplicationRecord
    pubdraft states: {
              # Name        # Action
              published:    :publish,
              drafted:      :draft
              in_review:    :mark_for_review
            }
  end

  @post.publish!
  @post.published?                 #=> true
  Post.published.includes?(@post)  #=> true

  @post.mark_for_review!
  @post.in_review?                 #=> true
  Post.in_review.includes?(@post)  #=> true

View Helpers

The gem provides a view helper to easily populate select boxes. It requires the object's class to read its configured states.

<!-- Standard Form Helpers -->
<%= form_for @record do |f| %>
  <%= f.select :state, pubdraft_state_options(f.object.class) %>
<% end %>

<!-- Formtastic -->
<%= semantic_form_for @record do |f| %>
  <%= f.input :state, :as => :select,
              :collection => pubdraft_states_for_select(f.object.class) %>
<% end %>

Contributing

Testing

In the base directory:

$ rspec