NeedyControllers ================ Needy Controllers is a way to DRY up commonly used tasks from both controllers and views to save time and effort. It consists of a single call with a number of options. Description ----------- With needy controllers, you can include stylesheets, javascripts, and memoized record helpers in your controllers and views with a much greater deal of specificity and automation than hand-coding. Installation ------------ script/plugin install http://svn.intridea.com/svn/public/needy_controllers Usage ===== Styles and Scripts ------------------ To use Needy Controllers for styles and scripts, you simply call a "needs" option inside your controller like so: class MyController < ApplicationController needs :styles => :standard needs :styles => :show, :only => :show needs :scripts => :behave, :except => :show def index # this action will have access to the 'standard.css' stylesheet end def show # this action will have access to the 'show.css' stylesheet # in addition to 'standard.css' # but will not have access to 'behave.js' end end Now that you have created your behavior and style chains, you need to include them in the view. Luckily, this is exceedingly easy! Just include :needs in your include and link tags like so: <%= stylesheet_link_tag 'something', :needs %> <%= javascript_include_tag 'prototype', :needs, 'effects' %> Model Fetching -------------- To use Needy Controllers for fetching records, you use it similarly, and it sets the instance variable: class MyController < ApplicationController # here's a standard problem needs :record => :user, :from => :id, :as => :user end The :from and :as options in this example are the defaults (:id for :from and :as defaults to the name of the record). This will create a method ("user" in the example) that will be accessible both from the controller and from the view as a helper. It will find the record with a matching ID to the URL parameter associated with the :from option. Therefore if you had nested resources you could call it as such: needs :record => :user, :from => :user_id Flushing and Removal of Needs ----------------------------- If for some reason you want a controller not to inherit existing needs or you for some reason want to remove needs, there's a simple way to remove them: class MyController < ApplicationController does_not_need :anything # removes all styles and behaviors from the need chain does_not_need :any_styles does_not_need :any_scripts does_not_need :styles => "some_style" does_not_need :styles => ["some_style", "another_one"] does_not_need :scripts => "some_script" end Resources ========= Created by Michael Bleigh (michael@intridea.com) of Intridea (http://www.intridea.com) Comments, bugs, and patches go to http://trac.intridea.com/trac/public
mbleigh/needy-controllers
Include stylesheets and scripts in a before_filter-esque fashion, and set up simple memoized methods for record fetches.
Ruby