adding :prepend option to load_and_authorize_resource - closes #290
This commit is contained in:
		
							parent
							
								
									3a07d62782
								
							
						
					
					
						commit
						951d70e057
					
				@ -109,6 +109,9 @@ module CanCan
 | 
				
			|||||||
      #
 | 
					      #
 | 
				
			||||||
      #     load_resource :new => :build
 | 
					      #     load_resource :new => :build
 | 
				
			||||||
      #
 | 
					      #
 | 
				
			||||||
 | 
					      # [:+prepend+]
 | 
				
			||||||
 | 
					      #   Passing +true+ will use prepend_before_filter instead of a normal before_filter.
 | 
				
			||||||
 | 
					      #
 | 
				
			||||||
      def load_resource(*args)
 | 
					      def load_resource(*args)
 | 
				
			||||||
        cancan_resource_class.add_before_filter(self, :load_resource, *args)
 | 
					        cancan_resource_class.add_before_filter(self, :load_resource, *args)
 | 
				
			||||||
      end
 | 
					      end
 | 
				
			||||||
@ -162,6 +165,9 @@ module CanCan
 | 
				
			|||||||
      # [:+through+]
 | 
					      # [:+through+]
 | 
				
			||||||
      #   Authorize conditions on this parent resource when instance isn't available.
 | 
					      #   Authorize conditions on this parent resource when instance isn't available.
 | 
				
			||||||
      #
 | 
					      #
 | 
				
			||||||
 | 
					      # [:+prepend+]
 | 
				
			||||||
 | 
					      #   Passing +true+ will use prepend_before_filter instead of a normal before_filter.
 | 
				
			||||||
 | 
					      #
 | 
				
			||||||
      def authorize_resource(*args)
 | 
					      def authorize_resource(*args)
 | 
				
			||||||
        cancan_resource_class.add_before_filter(self, :authorize_resource, *args)
 | 
					        cancan_resource_class.add_before_filter(self, :authorize_resource, *args)
 | 
				
			||||||
      end
 | 
					      end
 | 
				
			||||||
 | 
				
			|||||||
@ -5,7 +5,8 @@ module CanCan
 | 
				
			|||||||
    def self.add_before_filter(controller_class, method, *args)
 | 
					    def self.add_before_filter(controller_class, method, *args)
 | 
				
			||||||
      options = args.extract_options!
 | 
					      options = args.extract_options!
 | 
				
			||||||
      resource_name = args.first
 | 
					      resource_name = args.first
 | 
				
			||||||
      controller_class.before_filter(options.slice(:only, :except)) do |controller|
 | 
					      before_filter_method = options.delete(:prepend) ? :prepend_before_filter : :before_filter
 | 
				
			||||||
 | 
					      controller_class.send(before_filter_method, options.slice(:only, :except)) do |controller|
 | 
				
			||||||
        controller.class.cancan_resource_class.new(controller, resource_name, options.except(:only, :except)).send(method)
 | 
					        controller.class.cancan_resource_class.new(controller, resource_name, options.except(:only, :except)).send(method)
 | 
				
			||||||
      end
 | 
					      end
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
 | 
				
			|||||||
@ -42,6 +42,11 @@ describe CanCan::ControllerAdditions do
 | 
				
			|||||||
    @controller_class.load_and_authorize_resource :project, :foo => :bar
 | 
					    @controller_class.load_and_authorize_resource :project, :foo => :bar
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  it "load_and_authorize_resource with :prepend should prepend the before filter" do
 | 
				
			||||||
 | 
					    mock(@controller_class).prepend_before_filter({})
 | 
				
			||||||
 | 
					    @controller_class.load_and_authorize_resource :foo => :bar, :prepend => true
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  it "authorize_resource should setup a before filter which passes call to ControllerResource" do
 | 
					  it "authorize_resource should setup a before filter which passes call to ControllerResource" do
 | 
				
			||||||
    stub(CanCan::ControllerResource).new(@controller, nil, :foo => :bar).mock!.authorize_resource
 | 
					    stub(CanCan::ControllerResource).new(@controller, nil, :foo => :bar).mock!.authorize_resource
 | 
				
			||||||
    mock(@controller_class).before_filter(:except => :show) { |options, block| block.call(@controller) }
 | 
					    mock(@controller_class).before_filter(:except => :show) { |options, block| block.call(@controller) }
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user