mirror of
https://github.com/varvet/pundit.git
synced 2022-11-09 12:30:11 -05:00
Fixes unexpected symbol-to-policy resolution described in #280
This commit is contained in:
parent
1fa413c3de
commit
bb7ec831fb
3 changed files with 20 additions and 16 deletions
|
@ -47,14 +47,18 @@ module Pundit
|
|||
elsif object.is_a?(Class)
|
||||
object
|
||||
elsif object.is_a?(Symbol)
|
||||
object.to_s.classify
|
||||
classify(object)
|
||||
elsif object.is_a?(Array)
|
||||
object.join('/').to_s.classify
|
||||
classify(object.join('/'))
|
||||
else
|
||||
object.class
|
||||
end
|
||||
"#{klass}#{SUFFIX}"
|
||||
end
|
||||
end
|
||||
|
||||
def classify(name)
|
||||
name.to_s.sub(/.*\./, '').camelize
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -138,17 +138,17 @@ describe Pundit do
|
|||
end
|
||||
|
||||
it "returns an instantiated policy given a symbol" do
|
||||
policy = Pundit.policy(user, :dashboard)
|
||||
expect(policy.class).to eq DashboardPolicy
|
||||
policy = Pundit.policy(user, :criteria)
|
||||
expect(policy.class).to eq CriteriaPolicy
|
||||
expect(policy.user).to eq user
|
||||
expect(policy.dashboard).to eq :dashboard
|
||||
expect(policy.criteria).to eq :criteria
|
||||
end
|
||||
|
||||
it "returns an instantiated policy given an array" do
|
||||
policy = Pundit.policy(user, [:project, :dashboard])
|
||||
expect(policy.class).to eq Project::DashboardPolicy
|
||||
policy = Pundit.policy(user, [:project, :criteria])
|
||||
expect(policy.class).to eq Project::CriteriaPolicy
|
||||
expect(policy.user).to eq user
|
||||
expect(policy.dashboard).to eq [:project, :dashboard]
|
||||
expect(policy.criteria).to eq [:project, :criteria]
|
||||
end
|
||||
end
|
||||
end
|
||||
|
@ -179,17 +179,17 @@ describe Pundit do
|
|||
end
|
||||
|
||||
it "returns an instantiated policy given a symbol" do
|
||||
policy = Pundit.policy!(user, :dashboard)
|
||||
expect(policy.class).to eq DashboardPolicy
|
||||
policy = Pundit.policy!(user, :criteria)
|
||||
expect(policy.class).to eq CriteriaPolicy
|
||||
expect(policy.user).to eq user
|
||||
expect(policy.dashboard).to eq :dashboard
|
||||
expect(policy.criteria).to eq :criteria
|
||||
end
|
||||
|
||||
it "returns an instantiated policy given an array" do
|
||||
policy = Pundit.policy!(user, [:project, :dashboard])
|
||||
expect(policy.class).to eq Project::DashboardPolicy
|
||||
policy = Pundit.policy!(user, [:project, :criteria])
|
||||
expect(policy.class).to eq Project::CriteriaPolicy
|
||||
expect(policy.user).to eq user
|
||||
expect(policy.dashboard).to eq [:project, :dashboard]
|
||||
expect(policy.criteria).to eq [:project, :criteria]
|
||||
end
|
||||
|
||||
it "throws an exception if the given policy can't be found" do
|
||||
|
|
|
@ -93,10 +93,10 @@ class ArticleTag
|
|||
end
|
||||
end
|
||||
|
||||
class DashboardPolicy < Struct.new(:user, :dashboard); end
|
||||
class CriteriaPolicy < Struct.new(:user, :criteria); end
|
||||
|
||||
module Project
|
||||
class DashboardPolicy < Struct.new(:user, :dashboard); end
|
||||
class CriteriaPolicy < Struct.new(:user, :criteria); end
|
||||
end
|
||||
|
||||
class DenierPolicy < Struct.new(:user, :record)
|
||||
|
|
Loading…
Add table
Reference in a new issue