Pastie now auto-senses if line-wrap is a bad or good idea. Feedback?
## mark a section (Learn more)
## the module module RestfulActions module ActionController module BaseMethods def self.included(base) base.extend ClassMethods end module ClassMethods def restful_actions_for(resource_name, options = {}) resource = Resource.new(resource_name, options) generator = Generator.new(resource) yield generator if block_given? decl = [:index, :new, :show, :create].inject([]) { |d, action| d << generator.action!(action) } decl << generator.define!(:find_member, :find_member_filter, true) class_eval decl.join("\n"), __FILE__, __LINE__ before_filter resource.member_filter_name, :except => [:index, :new, :create] end end end end end ## the generated code module RestfulActions module ActionController class Generator def initialize(resource) @resource = resource end def index_action "@#{@resource.collection} = #{@resource.class_name}.find(:all)" end def show_action '' end def new_action "@#{@resource.member} = #{@resource.class_name}.new" end def create_action <<-end_src @#{@resource.member} = #{@resource.class_name}.new(params[:#{@resource.member}]) @#{@resource.member}.save! redirect_to #{@resource.member}_path(@#{resource.member}) end_src end def action!(action, protected = false) define! action, "#{action}_action", protected end def define!(method_name, callback, protected = false) "def #{method_name}\n#{send(callback)}\nend\n#{protected ? 'protected' : 'public'} :#{method_name}" end end end end ## the test class PostsControllerTest < Test::Unit::TestCase def setup @controller = PostsController.new @request = ActionController::TestRequest.new @response = ActionController::TestResponse.new end def test_should_create_index_action get :index assert_response :success assert_not_nil assigns(:posts) end end
This paste will be private.
From the Design Piracy series on my blog: