class DryAsFuckController < ActionController::Base
%w{index show new edit create update destroy}.each do |action|
before_filter "before_#{action}", :only => action
end

def index; end
def show; end
def new; end
def edit; end
def create; end
def update; end
def destroy; end

protected
def before_index
find_and_assign_single(Fuck)
end

def before_show
find_and_assign(Fuck, params[:id])
end

def before_new
initialize_and_assign(Fuck)
end

def before_edit
find_and_assign(Fuck, params[:id])
end

def before_create
initialize_and_assign(Fuck, params[:fuck]).save ? go_to_fuck : render :action => "new"
end

def before_update
find_and_assign(Fuck, params[:id]).update_attributes(params[:fuck]) ? go_to_fuck : render :action => "edit"
end

def before_destroy
find_and_assign(Fuck, params[:id]).destroy
redirect_to(fucks_url)
end

private
def find_and_assign_all(klass)
instance_variable_set("@#{klass.name.tableize}", klass.find(:all))
end

def find_and_assign(klass, id)
instance_variable_set("@#{klass.name.underscore}", klass.find(id))
end

def initialize_and_assign(klass, attributes = nil)
instance_variable_sest("@#{klass.name.underscore}", klass.new(attributes))
end

def go_to_fuck
redirect_to(@fuck)
end
end