# In views

def add_employee
_form_for(@employee,R(AddEmployee))
end

def edit_employee
_form_for(@employee,R(EditEmployee,@employee.id))
end

def show_employee
h1 @employee.name
end


# In controllers
module CRUDHelper
module ClassMethods
def create_template(model,options={})
@model = model.to_s
@record = options[:record] || @model.downcase
@post_route = options[:post_route]
end

attr_reader :model,:record,:post_route
end

end

module AddTemplate

def get
instance_variable_set( "@#{self.class.record}",
eval(self.class.model).new)
render "add_#{self.class.model.downcase}"
end

def post
eval(self.class.model).create(input)
redirect R(eval(self.class.post_route.to_s)) #fix later
end

def self.included(base)
base.extend(CRUDHelper::ClassMethods)
end

end

module EditTemplate

def get(eid)
instance_variable_set( "@#{self.class.record}",
eval(self.class.model).find(eid))
render "edit_#{self.class.model.downcase}"
end

def post(eid)
eval(self.class.model).update(eid,input)
redirect R(eval(self.class.post_route.to_s))
end

def self.included(base)
base.extend(CRUDHelper::ClassMethods)
end

end

class AddEmployee < R '/employee/new'
include AddTemplate

create_template(:Employee, :post_route => :Admin)
end

class EditEmployee < R '/employee/edit/(\d+)'

include EditTemplate

create_template(:Employee, :post_route => :Admin)

end

class ShowEmployee < R '/employee/show/(\d+)'
def get(eid)
@employee = Employee.find(eid)
render :show_employee
end
end

class DeleteEmployee < R '/employee/delete/(\d+)'
def get(eid)
Employee.delete(eid)
redirect Admin
end
end