Is Positionable
What is “Is Positionable”?
Is Positionable handles the positioning (ordering) your ActiveRecord Objects. It makes use of the “Acts As List” gem to do it the most efficient way. Is Positionable basically creates a front-end (dynamically generates buttons and actions) for moving ActiveRecord Objects “up”, “down”, to the “top” and to the “bottom”. Doing the simplest set up takes just 1 word: “is_positionable”.
Quick and Simple Example
config/environment.rb
config.gem "is_positionable", :source => "http://gemcutter.org/"
app/controllers/posts_controller.rb
PostsController < ApplicationController
is_positionable
def index
@posts = Post.all
end
...
end
app/models/post.rb
class Post < ActiveRecord::Base
default_scope :order => :position
end
app/views/posts/index.html.erb
for post in @posts
<%= up_button_for_posts(@posts, post) %>
<%= down_button_for_posts(@posts, post) %>
<%= top_button_for_posts(@posts, post) %>
<%= bottom_button_for_posts(@posts, post) %>
...
# Other Stuff like post.name post.user.name etc.
end
With just this bit of code, you now enabled positioning with “posts”. This might already be obvious, but the following 4 buttons are generated per post:
-
Up Button
-
Down Button
-
To Top Button
-
To Bottom Button
Now, this is the most basic setup. You might have “users” manage posts. So that’d mean “User has_many :posts”. In this case you can add a “scope” and “scope_object” so that one user cannot conflict with another user’s post positions.
This would look something like this
is_listable :scope => :user_id,
:scope_object => current_user
# Assuming that "current_user" is the currently logged in use
The above will ensure that, not only will one users’ post NOT conflict with another users’ post, but if one user tries to be hack-ish and try to attempt to change post position of a different user through cURL or the AddressBar it will be out of scope cause of the :scope_object attribute, restricting access to any other user, but the owner of the post.
Of course, these are not the only options you can set, for more information, see the Wiki pages!
Setting all this up takes me about 1-2 minutes
Interested in trying out “Is Positionable”?
Check out the following Wiki pages:
Installation
wiki.github.com/meskyanichi/is_positionable/installation
Getting Started
wiki.github.com/meskyanichi/is_positionable/getting-started
Options
wiki.github.com/meskyanichi/is_positionable/options
Copyright
Copyright © 2009 meskyanichi. See LICENSE for details.