Viewtastic
About this fork
This is the viewtastic for Rails 3. Original one, intended for 2.x, can be found here.
Installation
Install the gem
gem install viewtastic
Load the gem in your environment.rb
file
config.gem "viewtastic"
Usage
My presenters go into the app/presenters
directory of the application so this is added to the load_path in Rails by default by Viewtastic.
Presenters
A Presenter inherits from Viewtastic::Base
and should use the presents
method to declare presented objects.
class CommentPresenter < Viewtastic::Base
presents :comment
end
This gives you several 'magic' methods:
- All attributes of comment with the prefix 'comment'. For instance:
comment_body
,comment_post
,comment_created_at
. comment_dom_id
is the same as callingdom_id(comment)
in a view.
If you want to skip the prefix and just have the attribute name, you can declare:
presents :comment => [:body, :created_at]
and you get presenter.body
and presenter.created_at
.
Assuming you have a Comment
model and your controller has a helper method current_user
that returns the user currently logged in, you could make the following presenter to help in presenting products.
class CommentPresenter < Viewtastic::Base
presents :comment
def dom_id
comment_dom_id
end
def owner?
controller.current_user.comments.include?(comment)
end
def links
returning([]) do |links|
links << link_to("Edit", [:edit, comment]) if owner?
links << link_to("Reply", [:new, :comment]) if controller.current_user
end
end
end
Convenience
each_with_presenter
is available on any Array
, and it is designed to reuse a single Presenter instance and pass every element in the array as the presented object.
In your view (maybe posts/show.html.erb
):
<ul>
<% @post.comments.each_with_presenter(CommentPresenter, :comment) do |comment| %>
<li id="<%= comment.dom_id %>">
<%= comment.body %>
<%= comment.links %>
</li>
<% end %>
</ul>
Credits
- ActivePresenter was the inspiration for this project and some of the presenter code was used from ActivePresenter.
- Authlogic -- the Authlogic activation code is used to activate Viewtastic on each request.
License
Copyright (c) 2009 Istvan Hoka, released under the MIT license