Draiken/opinio

View on GitHub
doc/Opinio/OpinioModel/ClassMethods.html

Summary

Maintainability
Test Coverage
<?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&amp;height=550&amp;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 =&gt; &quot;Admin&quot;</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">&gt;</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">&gt;</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">&gt;</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">&gt;</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">&gt;</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">&gt;</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">&gt;</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">&gt;</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">&gt;</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">&gt;</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>