Skip to content

Commit

Permalink
Remove rails default doc stuff; clean up rocco tasks; create an index…
Browse files Browse the repository at this point in the history
… file
  • Loading branch information
carols10cents committed Jan 20, 2012
1 parent d5c375b commit 5ceeb2d
Show file tree
Hide file tree
Showing 4 changed files with 254 additions and 9 deletions.
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
*.swp
docs
docs/*
!docs/index.html
config.yml
.sass-cache
tmp
Expand Down
2 changes: 0 additions & 2 deletions doc/README_FOR_APP

This file was deleted.

240 changes: 240 additions & 0 deletions docs/index.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,240 @@
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
<title>application_controller.rb</title>
<link rel="stylesheet" href="http://jashkenas.github.com/docco/resources/docco.css">
</head>
<body>
<div id='container'>
<div id="background"></div>
<div id="jump_to">
Jump To &hellip;
<div id="jump_wrapper">
<div id="jump_page">
<a class="source" href="application_controller.html">application_controller.rb</a>
<a class="source" href="auth_controller.html">auth_controller.rb</a>
<a class="source" href="feeds_controller.html">feeds_controller.rb</a>
<a class="source" href="salmon_controller.html">salmon_controller.rb</a>
<a class="source" href="searches_controller.html">searches_controller.rb</a>
<a class="source" href="sessions_controller.html">sessions_controller.rb</a>
<a class="source" href="static_controller.html">static_controller.rb</a>
<a class="source" href="subscriptions_controller.html">subscriptions_controller.rb</a>
<a class="source" href="updates_controller.html">updates_controller.rb</a>
<a class="source" href="users_controller.html">users_controller.rb</a>
<a class="source" href="webfinger_controller.html">webfinger_controller.rb</a>
<a class="source" href="../models/author.html">author.rb</a>
<a class="source" href="../models/authorization.html">authorization.rb</a>
<a class="source" href="../models/feed.html">feed.rb</a>
<a class="source" href="../models/notifier.html">notifier.rb</a>
<a class="source" href="../models/update.html">update.rb</a>
<a class="source" href="../models/user.html">user.rb</a>
</div>
</div>
</div>
<table cellspacing=0 cellpadding=0>
<thead>
<tr>
<th class=docs><h1>application_controller.rb</h1></th>
<th class=code></th>
</tr>
</thead>
<tbody>
<tr id='section-1'>
<td class=docs>
<div class="pilwrap">
<a class="pilcrow" href="#section-1">&#182;</a>
</div>

</td>
<td class=code>
<div class='highlight'><pre><span class="k">class</span> <span class="nc">ApplicationController</span> <span class="o">&lt;</span> <span class="no">ActionController</span><span class="o">::</span><span class="no">Base</span>
<span class="n">protect_from_forgery</span></pre></div>
</td>
</tr>
<tr id='section-2'>
<td class=docs>
<div class="pilwrap">
<a class="pilcrow" href="#section-2">&#182;</a>
</div>
<p>layout :detect_browser</p>
</td>
<td class=code>
<div class='highlight'><pre> <span class="n">helper_method</span> <span class="ss">:current_user</span>
<span class="n">helper_method</span> <span class="ss">:logged_in?</span>
<span class="n">helper_method</span> <span class="ss">:admin_only!</span>
<span class="n">helper_method</span> <span class="ss">:menu_item</span>
<span class="n">helper_method</span> <span class="ss">:require_user</span>
<span class="n">helper_method</span> <span class="ss">:set_params_page</span>
<span class="n">helper_method</span> <span class="ss">:show_layout?</span>
<span class="n">helper_method</span> <span class="ss">:pjax_request?</span>
<span class="n">helper_method</span> <span class="ss">:title</span>
<span class="n">helper_method</span> <span class="ss">:set_pagination_buttons</span>

<span class="kp">protected</span></pre></div>
</td>
</tr>
<tr id='section-3'>
<td class=docs>
<div class="pilwrap">
<a class="pilcrow" href="#section-3">&#182;</a>
</div>
<p>This incredibly useful helper gives us the currently logged in user. We
keep track of that by just setting a session variable with their id. If it
doesn&rsquo;t exist, we just want to return nil.</p>
</td>
<td class=code>
<div class='highlight'><pre> <span class="k">def</span> <span class="nf">current_user</span>
<span class="k">return</span> <span class="k">unless</span> <span class="n">session</span><span class="o">[</span><span class="ss">:user_id</span><span class="o">]</span>
<span class="vi">@current_user</span> <span class="o">||=</span> <span class="no">User</span><span class="o">.</span><span class="n">first</span><span class="p">(</span><span class="ss">:id</span> <span class="o">=&gt;</span> <span class="n">session</span><span class="o">[</span><span class="ss">:user_id</span><span class="o">]</span><span class="p">)</span>
<span class="k">end</span></pre></div>
</td>
</tr>
<tr id='section-4'>
<td class=docs>
<div class="pilwrap">
<a class="pilcrow" href="#section-4">&#182;</a>
</div>
<p>This very simple method checks if we&rsquo;ve got a logged in user. That&rsquo;s pretty
easy: just check our current_user.</p>
</td>
<td class=code>
<div class='highlight'><pre> <span class="k">def</span> <span class="nf">logged_in?</span>
<span class="n">current_user</span>
<span class="k">end</span></pre></div>
</td>
</tr>
<tr id='section-5'>
<td class=docs>
<div class="pilwrap">
<a class="pilcrow" href="#section-5">&#182;</a>
</div>
<p>Our <code>admin_only!</code> helper will only let admin users visit the page. If
they&rsquo;re not an admin, we redirect them to either / or the page that we
specified when we called it.</p>
</td>
<td class=code>
<div class='highlight'><pre> <span class="k">def</span> <span class="nf">admin_only!</span><span class="p">(</span><span class="n">opts</span> <span class="o">=</span> <span class="p">{</span><span class="ss">:return</span> <span class="o">=&gt;</span> <span class="s2">&quot;/&quot;</span><span class="p">})</span>
<span class="k">unless</span> <span class="n">logged_in?</span> <span class="o">&amp;&amp;</span> <span class="n">current_user</span><span class="o">.</span><span class="n">admin?</span>
<span class="n">flash</span><span class="o">[</span><span class="ss">:error</span><span class="o">]</span> <span class="o">=</span> <span class="s2">&quot;Sorry, buddy&quot;</span>
<span class="n">redirect_to</span> <span class="n">opts</span><span class="o">[</span><span class="ss">:return</span><span class="o">]</span>
<span class="k">end</span>
<span class="k">end</span></pre></div>
</td>
</tr>
<tr id='section-6'>
<td class=docs>
<div class="pilwrap">
<a class="pilcrow" href="#section-6">&#182;</a>
</div>
<p>Similar to <code>admin_only!</code>, <code>require_login!</code> only lets logged in users access
a particular page, and redirects them if they&rsquo;re not.</p>
</td>
<td class=code>
<div class='highlight'><pre> <span class="k">def</span> <span class="nf">require_login!</span><span class="p">(</span><span class="n">opts</span> <span class="o">=</span> <span class="p">{</span><span class="ss">:return</span> <span class="o">=&gt;</span> <span class="s2">&quot;/&quot;</span><span class="p">})</span>
<span class="k">unless</span> <span class="n">logged_in?</span>
<span class="n">flash</span><span class="o">[</span><span class="ss">:error</span><span class="o">]</span> <span class="o">=</span> <span class="s2">&quot;Sorry, buddy&quot;</span>
<span class="n">redirect_to</span> <span class="n">opts</span><span class="o">[</span><span class="ss">:return</span><span class="o">]</span>
<span class="k">end</span>
<span class="k">end</span>

<span class="k">def</span> <span class="nf">menu_item</span><span class="p">(</span><span class="nb">name</span><span class="p">,</span> <span class="n">url</span><span class="p">,</span> <span class="n">options</span> <span class="o">=</span> <span class="p">{})</span>
<span class="n">icon</span> <span class="o">=</span> <span class="n">options</span><span class="o">.</span><span class="n">fetch</span><span class="p">(</span><span class="ss">:icon</span><span class="p">){</span> <span class="kp">false</span> <span class="p">}</span>
<span class="n">classes</span> <span class="o">=</span> <span class="n">options</span><span class="o">.</span><span class="n">fetch</span><span class="p">(</span><span class="ss">:classes</span><span class="p">){</span> <span class="o">[]</span> <span class="p">}</span>

<span class="n">classes</span> <span class="o">&lt;&lt;</span> <span class="nb">name</span><span class="o">.</span><span class="n">downcase</span><span class="o">.</span><span class="n">gsub</span><span class="p">(</span><span class="s2">&quot; &quot;</span><span class="p">,</span> <span class="s2">&quot;_&quot;</span><span class="p">)</span>
<span class="n">classes</span> <span class="o">&lt;&lt;</span> <span class="p">(</span><span class="n">request</span><span class="o">.</span><span class="n">path_info</span> <span class="o">==</span> <span class="n">url</span> <span class="p">?</span> <span class="s2">&quot;active&quot;</span> <span class="p">:</span> <span class="s2">&quot;&quot;</span><span class="p">)</span>

<span class="s2">&quot;&lt;li class=&#39;</span><span class="si">#{</span><span class="n">classes</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="s2">&quot; &quot;</span><span class="p">)</span><span class="si">}</span><span class="s2">&#39;&gt;</span>
<span class="s2"> &lt;a href=&#39;</span><span class="si">#{</span><span class="n">url</span><span class="si">}</span><span class="s2">&#39;&gt;&quot;</span> <span class="o">+</span>
<span class="p">(</span><span class="n">icon</span> <span class="p">?</span> <span class="s2">&quot;&lt;div class=&#39;icon&#39;&gt;&lt;/div&gt;&quot;</span> <span class="p">:</span> <span class="s2">&quot;&quot;</span><span class="p">)</span> <span class="o">+</span>
<span class="s2">&quot;</span><span class="si">#{</span><span class="nb">name</span><span class="si">}</span><span class="s2">&lt;/a&gt;</span>
<span class="s2"> &lt;/li&gt;&quot;</span>
<span class="k">end</span>

<span class="k">def</span> <span class="nf">require_user</span>
<span class="n">redirect_to</span> <span class="n">root_path</span> <span class="k">unless</span> <span class="n">current_user</span>
<span class="k">end</span></pre></div>
</td>
</tr>
<tr id='section-7'>
<td class=docs>
<div class="pilwrap">
<a class="pilcrow" href="#section-7">&#182;</a>
</div>
<p>Many pages on rstatus are paginated. To keep track of it in all the
different routes we have this handy helper that either picks up
the previous setting or resets it to a default value.</p>
</td>
<td class=code>
<div class='highlight'><pre> <span class="k">def</span> <span class="nf">set_params_page</span>
<span class="n">params</span><span class="o">[</span><span class="ss">:page</span><span class="o">]</span> <span class="o">=</span> <span class="n">params</span><span class="o">.</span><span class="n">fetch</span><span class="p">(</span><span class="s2">&quot;page&quot;</span><span class="p">){</span><span class="mi">1</span><span class="p">}</span><span class="o">.</span><span class="n">to_i</span>
<span class="n">params</span><span class="o">[</span><span class="ss">:per_page</span><span class="o">]</span> <span class="o">=</span> <span class="n">params</span><span class="o">.</span><span class="n">fetch</span><span class="p">(</span><span class="s2">&quot;per_page&quot;</span><span class="p">){</span><span class="mi">20</span><span class="p">}</span><span class="o">.</span><span class="n">to_i</span>
<span class="k">end</span></pre></div>
</td>
</tr>
<tr id='section-8'>
<td class=docs>
<div class="pilwrap">
<a class="pilcrow" href="#section-8">&#182;</a>
</div>
<p>Similar to the set_params_page helper this one creates the links
for the previous and the next page on all routes that display
stuff on more than one page.
If needed it can also take options for more parameters</p>

</td>
<td class=code>
<div class='highlight'><pre> <span class="k">def</span> <span class="nf">set_pagination_buttons</span><span class="p">(</span><span class="n">data</span><span class="p">,</span> <span class="n">options</span> <span class="o">=</span> <span class="p">{})</span>
<span class="k">return</span> <span class="k">if</span> <span class="n">data</span><span class="o">.</span><span class="n">nil?</span> <span class="o">||</span> <span class="n">data</span><span class="o">.</span><span class="n">empty?</span>

<span class="k">if</span> <span class="n">data</span><span class="o">.</span><span class="n">next_page</span>
<span class="n">params</span> <span class="o">=</span> <span class="p">{</span>
<span class="ss">:page</span> <span class="o">=&gt;</span> <span class="n">data</span><span class="o">.</span><span class="n">next_page</span><span class="p">,</span>
<span class="ss">:per_page</span> <span class="o">=&gt;</span> <span class="n">data</span><span class="o">.</span><span class="n">per_page</span>
<span class="p">}</span><span class="o">.</span><span class="n">merge</span><span class="p">(</span><span class="n">options</span><span class="p">)</span>

<span class="vi">@next_page</span> <span class="o">=</span> <span class="s2">&quot;?</span><span class="si">#{</span><span class="no">Rack</span><span class="o">::</span><span class="no">Utils</span><span class="o">.</span><span class="n">build_query</span> <span class="n">params</span><span class="si">}</span><span class="s2">&quot;</span>
<span class="k">end</span>

<span class="k">if</span> <span class="n">data</span><span class="o">.</span><span class="n">previous_page</span>
<span class="n">params</span> <span class="o">=</span> <span class="p">{</span>
<span class="ss">:page</span> <span class="o">=&gt;</span> <span class="n">data</span><span class="o">.</span><span class="n">previous_page</span><span class="p">,</span>
<span class="ss">:per_page</span> <span class="o">=&gt;</span> <span class="n">data</span><span class="o">.</span><span class="n">per_page</span>
<span class="p">}</span><span class="o">.</span><span class="n">merge</span><span class="p">(</span><span class="n">options</span><span class="p">)</span>

<span class="vi">@prev_page</span> <span class="o">=</span> <span class="s2">&quot;?</span><span class="si">#{</span><span class="no">Rack</span><span class="o">::</span><span class="no">Utils</span><span class="o">.</span><span class="n">build_query</span> <span class="n">params</span><span class="si">}</span><span class="s2">&quot;</span>
<span class="k">end</span>
<span class="k">end</span>

<span class="k">def</span> <span class="nf">title</span><span class="p">(</span><span class="n">str</span><span class="p">)</span>
<span class="vi">@title</span> <span class="o">=</span> <span class="n">str</span>
<span class="n">pjax_request?</span> <span class="p">?</span> <span class="vi">@title</span> <span class="p">:</span> <span class="kp">nil</span>
<span class="k">end</span>

<span class="k">def</span> <span class="nf">pjax_request?</span>
<span class="n">env</span><span class="o">[</span><span class="s1">&#39;HTTP_X_PJAX&#39;</span><span class="o">]</span>
<span class="k">end</span>

<span class="k">def</span> <span class="nf">show_layout?</span>
<span class="o">!</span><span class="n">pjax_request?</span>
<span class="k">end</span>

<span class="kp">private</span>

<span class="no">MOBILE_BROWSERS</span> <span class="o">=</span> <span class="o">[</span><span class="s2">&quot;android&quot;</span><span class="p">,</span> <span class="s2">&quot;ipod&quot;</span><span class="p">,</span> <span class="s2">&quot;opera mini&quot;</span><span class="p">,</span> <span class="s2">&quot;blackberry&quot;</span><span class="p">,</span> <span class="s2">&quot;palm&quot;</span><span class="p">,</span><span class="s2">&quot;hiptop&quot;</span><span class="p">,</span><span class="s2">&quot;avantgo&quot;</span><span class="p">,</span><span class="s2">&quot;plucker&quot;</span><span class="p">,</span> <span class="s2">&quot;xiino&quot;</span><span class="p">,</span><span class="s2">&quot;blazer&quot;</span><span class="p">,</span><span class="s2">&quot;elaine&quot;</span><span class="p">,</span> <span class="s2">&quot;windows ce; ppc;&quot;</span><span class="p">,</span> <span class="s2">&quot;windows ce; smartphone;&quot;</span><span class="p">,</span><span class="s2">&quot;windows ce; iemobile&quot;</span><span class="p">,</span> <span class="s2">&quot;up.browser&quot;</span><span class="p">,</span><span class="s2">&quot;up.link&quot;</span><span class="p">,</span><span class="s2">&quot;mmp&quot;</span><span class="p">,</span><span class="s2">&quot;symbian&quot;</span><span class="p">,</span><span class="s2">&quot;smartphone&quot;</span><span class="p">,</span> <span class="s2">&quot;midp&quot;</span><span class="p">,</span><span class="s2">&quot;wap&quot;</span><span class="p">,</span><span class="s2">&quot;vodafone&quot;</span><span class="p">,</span><span class="s2">&quot;o2&quot;</span><span class="p">,</span><span class="s2">&quot;pocket&quot;</span><span class="p">,</span><span class="s2">&quot;kindle&quot;</span><span class="p">,</span> <span class="s2">&quot;mobile&quot;</span><span class="p">,</span><span class="s2">&quot;pda&quot;</span><span class="p">,</span><span class="s2">&quot;psp&quot;</span><span class="p">,</span><span class="s2">&quot;treo&quot;</span><span class="o">]</span>

<span class="k">def</span> <span class="nf">detect_browser</span>
<span class="n">agent</span> <span class="o">=</span> <span class="n">request</span><span class="o">.</span><span class="n">headers</span><span class="o">[</span><span class="s2">&quot;HTTP_USER_AGENT&quot;</span><span class="o">].</span><span class="n">downcase</span>
<span class="no">MOBILE_BROWSERS</span><span class="o">.</span><span class="n">each</span> <span class="k">do</span> <span class="o">|</span><span class="n">m</span><span class="o">|</span>
<span class="k">return</span> <span class="s2">&quot;mobile&quot;</span> <span class="k">if</span> <span class="n">agent</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="n">m</span><span class="p">)</span>
<span class="k">end</span>
<span class="k">return</span> <span class="s2">&quot;application&quot;</span>
<span class="k">end</span>

<span class="k">end</span></pre></div>
</td>
</tr>
</table>
</div>
</body>
18 changes: 12 additions & 6 deletions lib/tasks/rocco.rake
Original file line number Diff line number Diff line change
@@ -1,19 +1,25 @@
# Remove the rails-provided rake task for docs that we're not using
Rake.application.instance_variable_get('@tasks').delete('doc:app')

begin
require 'rocco/tasks'
Rocco::make 'docs/', ["app/models/*.rb", "app/controllers/*.rb"]

desc 'Build rocco docs'
task :docs => :rocco
directory 'docs/'
task :rocco
Rocco::make 'docs/', ["app/models/*.rb", "app/controllers/*.rb"]

desc 'Build docs and open in browser for the reading'
task :read => :docs do
task :read => :rocco do
sh 'open docs/index.html'
end

# Alias for docs task
task :doc => :docs
# Convenient aliases
desc 'Build rocco docs'
task :doc => :rocco
desc 'Build rocco docs'
task :docs => :rocco

rescue LoadError
warn "#$! -- rocco tasks not loaded."
task :rocco
end

0 comments on commit 5ceeb2d

Please sign in to comment.