merging with master and resolving a couple conflicts
This commit is contained in:
commit
5d8f04363d
|
@ -1,3 +1,7 @@
|
||||||
|
* Supporting deeply nested aliases - see issue #98
|
||||||
|
|
||||||
|
1.2.0 (July 16, 2010)
|
||||||
|
|
||||||
* Load nested parent resources on collection actions such as "index" (thanks dohzya)
|
* Load nested parent resources on collection actions such as "index" (thanks dohzya)
|
||||||
|
|
||||||
* Adding :name option to load_and_authorize_resource if it does not match controller - see issue #65
|
* Adding :name option to load_and_authorize_resource if it does not match controller - see issue #65
|
||||||
|
@ -10,6 +14,7 @@
|
||||||
|
|
||||||
* Adding joins clause to accessible_by when conditions are across associations
|
* Adding joins clause to accessible_by when conditions are across associations
|
||||||
|
|
||||||
|
|
||||||
1.1.1 (April 17, 2010)
|
1.1.1 (April 17, 2010)
|
||||||
|
|
||||||
* Fixing behavior in Rails 3 by properly initializing ResourceAuthorization
|
* Fixing behavior in Rails 3 by properly initializing ResourceAuthorization
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
Gem::Specification.new do |s|
|
Gem::Specification.new do |s|
|
||||||
s.name = "cancan"
|
s.name = "cancan"
|
||||||
s.version = "1.1.1"
|
s.version = "1.2.0"
|
||||||
s.author = "Ryan Bates"
|
s.author = "Ryan Bates"
|
||||||
s.email = "ryan@railscasts.com"
|
s.email = "ryan@railscasts.com"
|
||||||
s.homepage = "http://github.com/ryanb/cancan"
|
s.homepage = "http://github.com/ryanb/cancan"
|
||||||
|
|
|
@ -268,6 +268,15 @@ module CanCan
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
|
# Accepts a hash of aliased actions and returns an array of actions which match.
|
||||||
|
# This should be called before "matches?" and other checking methods since they
|
||||||
|
# rely on the actions to be expanded.
|
||||||
|
def expand_actions(actions)
|
||||||
|
actions.map do |action|
|
||||||
|
aliased_actions[action] ? [action, *expand_actions(aliased_actions[action])] : action
|
||||||
|
end.flatten
|
||||||
|
end
|
||||||
|
|
||||||
def can_definitions
|
def can_definitions
|
||||||
@can_definitions ||= []
|
@can_definitions ||= []
|
||||||
end
|
end
|
||||||
|
@ -275,7 +284,7 @@ module CanCan
|
||||||
def matching_can_definition(action, subject)
|
def matching_can_definition(action, subject)
|
||||||
if block_given?
|
if block_given?
|
||||||
can_definitions.reverse.each do |can_definition|
|
can_definitions.reverse.each do |can_definition|
|
||||||
can_definition.expand_actions(aliased_actions)
|
can_definition.expanded_actions = expand_actions(can_definition.actions)
|
||||||
if can_definition.matches? action, subject
|
if can_definition.matches? action, subject
|
||||||
yield can_definition
|
yield can_definition
|
||||||
break if can_definition.definitive?
|
break if can_definition.definitive?
|
||||||
|
|
|
@ -5,6 +5,9 @@ module CanCan
|
||||||
class CanDefinition # :nodoc:
|
class CanDefinition # :nodoc:
|
||||||
attr_reader :conditions, :block, :base_behavior, :definitive
|
attr_reader :conditions, :block, :base_behavior, :definitive
|
||||||
include ActiveSupport::Inflector
|
include ActiveSupport::Inflector
|
||||||
|
attr_reader :block
|
||||||
|
attr_reader :actions
|
||||||
|
attr_writer :expanded_actions
|
||||||
|
|
||||||
# The first argument when initializing is the base_behavior which is a true/false
|
# The first argument when initializing is the base_behavior which is a true/false
|
||||||
# value. True for "can" and false for "cannot". The next two arguments are the action
|
# value. True for "can" and false for "cannot". The next two arguments are the action
|
||||||
|
@ -18,15 +21,6 @@ module CanCan
|
||||||
@block = block
|
@block = block
|
||||||
end
|
end
|
||||||
|
|
||||||
# Accepts a hash of aliased actions and returns an array of actions which match.
|
|
||||||
# This should be called before "matches?" and other checking methods since they
|
|
||||||
# rely on the actions to be expanded.
|
|
||||||
def expand_actions(aliased_actions)
|
|
||||||
@expanded_actions = @actions.map do |action|
|
|
||||||
aliased_actions[action] ? [action, *aliased_actions[action]] : action
|
|
||||||
end.flatten
|
|
||||||
end
|
|
||||||
|
|
||||||
def matches?(action, subject)
|
def matches?(action, subject)
|
||||||
matches_action?(action) && matches_subject?(subject)
|
matches_action?(action) && matches_subject?(subject)
|
||||||
end
|
end
|
||||||
|
|
|
@ -68,6 +68,13 @@ describe CanCan::Ability do
|
||||||
@ability.can?(:destroy, 123).should == :modify_called
|
@ability.can?(:destroy, 123).should == :modify_called
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it "should allow deeply nested aliased actions" do
|
||||||
|
@ability.alias_action :increment, :to => :sort
|
||||||
|
@ability.alias_action :sort, :to => :modify
|
||||||
|
@ability.can :modify, :all
|
||||||
|
@ability.can?(:increment, 123).should be_true
|
||||||
|
end
|
||||||
|
|
||||||
it "should return block result for action, object_class, and object for any action" do
|
it "should return block result for action, object_class, and object for any action" do
|
||||||
@ability.can :manage, :all do |action, object_class, object|
|
@ability.can :manage, :all do |action, object_class, object|
|
||||||
[action, object_class, object]
|
[action, object_class, object]
|
||||||
|
|
1
spec/spec.opts
Normal file
1
spec/spec.opts
Normal file
|
@ -0,0 +1 @@
|
||||||
|
--color
|
Loading…
Reference in New Issue
Block a user