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…
Reference in New Issue
Block a user