doc/Opinio/OpinioModel/ClassMethods.html
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
<title>Module: Opinio::OpinioModel::ClassMethods</title>
<link rel="stylesheet" href="../../rdoc.css" type="text/css" media="screen" />
<script src="../../js/jquery.js" type="text/javascript"
charset="utf-8"></script>
<script src="../../js/thickbox-compressed.js" type="text/javascript"
charset="utf-8"></script>
<script src="../../js/quicksearch.js" type="text/javascript"
charset="utf-8"></script>
<script src="../../js/darkfish.js" type="text/javascript"
charset="utf-8"></script>
</head>
<body class="module">
<div id="metadata">
<div id="home-metadata">
<div id="home-section" class="section">
<h3 class="section-header">
<a href="../../index.html">Home</a>
<a href="../../index.html#classes">Classes</a>
<a href="../../index.html#methods">Methods</a>
</h3>
</div>
</div>
<div id="file-metadata">
<div id="file-list-section" class="section">
<h3 class="section-header">In Files</h3>
<div class="section-body">
<ul>
<li><a href="../../lib/opinio/opinio_model_rb.html?TB_iframe=true&height=550&width=785"
class="thickbox" title="lib/opinio/opinio_model.rb">lib/opinio/opinio_model.rb</a></li>
</ul>
</div>
</div>
</div>
<div id="class-metadata">
<!-- Parent Class -->
<!-- Namespace Contents -->
<!-- Method Quickref -->
<div id="method-list-section" class="section">
<h3 class="section-header">Methods</h3>
<ul class="link-list">
<li><a href="#method-i-opinio">#opinio</a></li>
</ul>
</div>
<!-- Included Modules -->
</div>
<div id="project-metadata">
<div id="fileindex-section" class="section project-section">
<h3 class="section-header">Files</h3>
<ul>
<li class="file"><a href="../../Gemfile.html">Gemfile</a></li>
<li class="file"><a href="../../MIT-LICENSE.html">MIT-LICENSE</a></li>
<li class="file"><a href="../../README_rdoc.html">README.rdoc</a></li>
<li class="file"><a href="../../Rakefile.html">Rakefile</a></li>
<li class="file"><a href="../../spec/dummy/Rakefile.html">Rakefile</a></li>
</ul>
</div>
<div id="classindex-section" class="section project-section">
<h3 class="section-header">Class Index
<span class="search-toggle"><img src="../../images/find.png"
height="16" width="16" alt="[+]"
title="show/hide quicksearch" /></span></h3>
<form action="#" method="get" accept-charset="utf-8" class="initially-hidden">
<fieldset>
<legend>Quicksearch</legend>
<input type="text" name="quicksearch" value=""
class="quicksearch-field" />
</fieldset>
</form>
<ul class="link-list">
<li><a href="../../Opinio.html">Opinio</a></li>
<li><a href="../../Opinio/CommentsController.html">Opinio::CommentsController</a></li>
<li><a href="../../Opinio/Controllers.html">Opinio::Controllers</a></li>
<li><a href="../../Opinio/Controllers/Extensions.html">Opinio::Controllers::Extensions</a></li>
<li><a href="../../Opinio/Controllers/Extensions/ClassMethods.html">Opinio::Controllers::Extensions::ClassMethods</a></li>
<li><a href="../../Opinio/Controllers/Extensions/InstanceMethods.html">Opinio::Controllers::Extensions::InstanceMethods</a></li>
<li><a href="../../Opinio/Controllers/Helpers.html">Opinio::Controllers::Helpers</a></li>
<li><a href="../../Opinio/Controllers/InternalHelpers.html">Opinio::Controllers::InternalHelpers</a></li>
<li><a href="../../Opinio/Controllers/Replies.html">Opinio::Controllers::Replies</a></li>
<li><a href="../../Opinio/Engine.html">Opinio::Engine</a></li>
<li><a href="../../Opinio/Generators.html">Opinio::Generators</a></li>
<li><a href="../../Opinio/Generators/InstallGenerator.html">Opinio::Generators::InstallGenerator</a></li>
<li><a href="../../Opinio/Generators/ViewsGenerator.html">Opinio::Generators::ViewsGenerator</a></li>
<li><a href="../../Opinio/OpinioModel.html">Opinio::OpinioModel</a></li>
<li><a href="../../Opinio/OpinioModel/ClassMethods.html">Opinio::OpinioModel::ClassMethods</a></li>
<li><a href="../../Opinio/OpinioModel/InstanceMethods.html">Opinio::OpinioModel::InstanceMethods</a></li>
<li><a href="../../Opinio/OpinioSubjectum.html">Opinio::OpinioSubjectum</a></li>
<li><a href="../../Opinio/OpinioSubjectum/ClassMethods.html">Opinio::OpinioSubjectum::ClassMethods</a></li>
<li><a href="../../Opinio/OpinioSubjectum/InstanceMethods.html">Opinio::OpinioSubjectum::InstanceMethods</a></li>
<li><a href="../../Opinio/Orm.html">Opinio::Orm</a></li>
<li><a href="../../Opinio/Orm/ActiveRecord.html">Opinio::Orm::ActiveRecord</a></li>
<li><a href="../../Opinio/Orm/ActiveRecord/Schema.html">Opinio::Orm::ActiveRecord::Schema</a></li>
<li><a href="../../Opinio/Schema.html">Opinio::Schema</a></li>
<li><a href="../../ActionDispatch.html">ActionDispatch</a></li>
<li><a href="../../ActionDispatch/Routing.html">ActionDispatch::Routing</a></li>
<li><a href="../../ActionDispatch/Routing/Mapper.html">ActionDispatch::Routing::Mapper</a></li>
<li><a href="../../Dummy.html">Dummy</a></li>
<li><a href="../../Dummy/Application.html">Dummy::Application</a></li>
<li><a href="../../ApplicationController.html">ApplicationController</a></li>
<li><a href="../../ApplicationHelper.html">ApplicationHelper</a></li>
<li><a href="../../Comment.html">Comment</a></li>
<li><a href="../../CreateComments.html">CreateComments</a></li>
<li><a href="../../CreatePosts.html">CreatePosts</a></li>
<li><a href="../../CreateUsers.html">CreateUsers</a></li>
<li><a href="../../NavigationHelpers.html">NavigationHelpers</a></li>
<li><a href="../../Post.html">Post</a></li>
<li><a href="../../PostsController.html">PostsController</a></li>
<li><a href="../../PostsHelper.html">PostsHelper</a></li>
<li><a href="../../User.html">User</a></li>
<li><a href="../../UsersController.html">UsersController</a></li>
<li><a href="../../UsersHelper.html">UsersHelper</a></li>
<li><a href="../../WithinHelpers.html">WithinHelpers</a></li>
</ul>
<div id="no-class-search-results" style="display: none;">No matching classes.</div>
</div>
</div>
</div>
<div id="documentation">
<h1 class="module">Opinio::OpinioModel::ClassMethods</h1>
<div id="description">
</div>
<!-- Constants -->
<!-- Attributes -->
<!-- Methods -->
<div id="public-instance-method-details" class="method-section section">
<h3 class="section-header">Public Instance Methods</h3>
<div id="opinio-method" class="method-detail ">
<a name="method-i-opinio"></a>
<div class="method-heading">
<span class="method-name">opinio</span><span
class="method-args">(*args)</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<p>
Adds the <a href="../../Opinio.html">Opinio</a> functionallity to the model
You can pass a hash of options to customize the <a
href="../../Opinio.html">Opinio</a> model
</p>
<h3>Options</h3>
<dl>
<dt>:belongs_to</dt><dd><p>
You can specify the class that owns the comments on
<tt>config/initializers/opinio.rb</tt> but you can also pass it explicitly
here: eg. <tt>:belongs_to => "Admin"</tt>
</p>
</dd>
<dt>:counter_cache</dt><dd><p>
Customize the counter cache here, defaults to false
</p>
</dd>
<dt>:body_length</dt><dd><p>
You can pass a <tt>Range</tt> to determine the size of the body that will
be validated
</p>
</dd>
<dt>:title_length</dt><dd><p>
If you are using titles in your opinio model (set on the initializer) you
can pass a <tt>Range</tt> so it is validated.
</p>
</dd>
</dl>
<div class="method-source-code"
id="opinio-source">
<pre>
<span class="ruby-comment cmt"># File lib/opinio/opinio_model.rb, line 28</span>
28: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">opinio</span>(*<span class="ruby-identifier">args</span>)
29: <span class="ruby-identifier">options</span> = <span class="ruby-identifier">args</span>.<span class="ruby-identifier">extract_options!</span>
30:
31: <span class="ruby-keyword kw">if</span> <span class="ruby-constant">Opinio</span>.<span class="ruby-identifier">use_title</span>
32: <span class="ruby-identifier">attr_accessible</span> <span class="ruby-value">:title</span>
33: <span class="ruby-identifier">validates</span> <span class="ruby-value">:title</span>,
34: {}.<span class="ruby-identifier">merge</span>( <span class="ruby-value">:length</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">options</span>[<span class="ruby-value">:title_length</span>] )
35: <span class="ruby-keyword kw">end</span>
36: <span class="ruby-identifier">attr_accessible</span> <span class="ruby-value">:body</span>
37:
38: <span class="ruby-identifier">commentable_options</span> = { <span class="ruby-value">:polymorphic</span> =<span class="ruby-operator">></span> <span class="ruby-keyword kw">true</span> }
39: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">options</span>[<span class="ruby-value">:counter_cache</span>]
40: <span class="ruby-identifier">commentable_options</span>.<span class="ruby-identifier">merge</span>(<span class="ruby-value">:counter_cache</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">options</span>[<span class="ruby-value">:counter_cache</span>])
41: <span class="ruby-keyword kw">end</span>
42:
43: <span class="ruby-identifier">belongs_to</span> <span class="ruby-value">:commentable</span>, <span class="ruby-identifier">commentable_options</span>
44: <span class="ruby-identifier">belongs_to</span> <span class="ruby-value">:owner</span>, <span class="ruby-value">:class_name</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">options</span>.<span class="ruby-identifier">reverse_merge</span>(<span class="ruby-value">:belongs_to</span> =<span class="ruby-operator">></span> <span class="ruby-constant">Opinio</span>.<span class="ruby-identifier">owner_class_name</span>)[<span class="ruby-value">:belongs_to</span>]
45:
46: <span class="ruby-comment cmt">#TODO: refactor this</span>
47: <span class="ruby-keyword kw">if</span> <span class="ruby-constant">Opinio</span>.<span class="ruby-identifier">interval_between_comments</span>
48: <span class="ruby-identifier">validate</span> <span class="ruby-value">:last_comment_time</span>, <span class="ruby-value">:if</span> =<span class="ruby-operator">></span> <span class="ruby-value">:new_record?</span>
49: <span class="ruby-identifier">cattr_accessor</span> <span class="ruby-value">:comments_interval</span>
50: <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">comments_interval</span> = <span class="ruby-identifier">options</span>.<span class="ruby-identifier">reverse_merge</span>(<span class="ruby-value">:time</span> =<span class="ruby-operator">></span> <span class="ruby-constant">Opinio</span>.<span class="ruby-identifier">interval_between_comments</span>)[<span class="ruby-value">:time</span>]
51: <span class="ruby-keyword kw">end</span>
52:
53: <span class="ruby-identifier">extra_options</span> = {}
54: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">options</span>[<span class="ruby-value">:body_length</span>]
55: <span class="ruby-identifier">extra_options</span> = { <span class="ruby-value">:length</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">options</span>[<span class="ruby-value">:body_length</span>] }
56: <span class="ruby-keyword kw">end</span>
57:
58: <span class="ruby-identifier">validates</span> <span class="ruby-value">:body</span>,
59: { <span class="ruby-value">:presence</span> =<span class="ruby-operator">></span> <span class="ruby-keyword kw">true</span> }.<span class="ruby-identifier">reverse_merge</span>(<span class="ruby-identifier">extra_options</span>)
60:
61: <span class="ruby-identifier">validates_presence_of</span> <span class="ruby-value">:commentable</span>
62:
63: <span class="ruby-identifier">scope</span> <span class="ruby-value">:owned_by</span>, <span class="ruby-identifier">lambda</span> {<span class="ruby-operator">|</span><span class="ruby-identifier">owner</span><span class="ruby-operator">|</span> <span class="ruby-identifier">where</span>(<span class="ruby-value str">'owner_id = ?'</span>, <span class="ruby-identifier">owner</span>.<span class="ruby-identifier">id</span>) }
64:
65: <span class="ruby-identifier">send</span> <span class="ruby-value">:include</span>, <span class="ruby-constant">Opinio</span><span class="ruby-operator">::</span><span class="ruby-constant">OpinioModel</span><span class="ruby-operator">::</span><span class="ruby-constant">InstanceMethods</span>
66:
67: <span class="ruby-keyword kw">if</span> <span class="ruby-constant">Opinio</span>.<span class="ruby-identifier">accept_replies</span>
68: <span class="ruby-identifier">validate</span> <span class="ruby-value">:cannot_be_comment_of_a_comments_comment</span>
69: <span class="ruby-identifier">opinio_subjectum</span> <span class="ruby-value">:order</span> =<span class="ruby-operator">></span> <span class="ruby-value str">'created_at ASC'</span>
70: <span class="ruby-keyword kw">end</span>
71:
72: <span class="ruby-keyword kw">end</span></pre>
</div>
</div>
</div>
</div>
</div>
<div id="rdoc-debugging-section-dump" class="debugging-section">
<p>Disabled; run with --debug to generate this.</p>
</div>
<div id="validator-badges">
<p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
<p><small>Generated with the <a href="http://deveiate.org/projects/Darkfish-Rdoc/">Darkfish
Rdoc Generator</a> 1.1.6</small>.</p>
</div>
</body>
</html>