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)
|
elsif object.is_a?(Class)
|
||||||
object
|
object
|
||||||
elsif object.is_a?(Symbol)
|
elsif object.is_a?(Symbol)
|
||||||
object.to_s.classify
|
classify(object)
|
||||||
elsif object.is_a?(Array)
|
elsif object.is_a?(Array)
|
||||||
object.join('/').to_s.classify
|
classify(object.join('/'))
|
||||||
else
|
else
|
||||||
object.class
|
object.class
|
||||||
end
|
end
|
||||||
"#{klass}#{SUFFIX}"
|
"#{klass}#{SUFFIX}"
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def classify(name)
|
||||||
|
name.to_s.sub(/.*\./, '').camelize
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -138,17 +138,17 @@ describe Pundit do
|
||||||
end
|
end
|
||||||
|
|
||||||
it "returns an instantiated policy given a symbol" do
|
it "returns an instantiated policy given a symbol" do
|
||||||
policy = Pundit.policy(user, :dashboard)
|
policy = Pundit.policy(user, :criteria)
|
||||||
expect(policy.class).to eq DashboardPolicy
|
expect(policy.class).to eq CriteriaPolicy
|
||||||
expect(policy.user).to eq user
|
expect(policy.user).to eq user
|
||||||
expect(policy.dashboard).to eq :dashboard
|
expect(policy.criteria).to eq :criteria
|
||||||
end
|
end
|
||||||
|
|
||||||
it "returns an instantiated policy given an array" do
|
it "returns an instantiated policy given an array" do
|
||||||
policy = Pundit.policy(user, [:project, :dashboard])
|
policy = Pundit.policy(user, [:project, :criteria])
|
||||||
expect(policy.class).to eq Project::DashboardPolicy
|
expect(policy.class).to eq Project::CriteriaPolicy
|
||||||
expect(policy.user).to eq user
|
expect(policy.user).to eq user
|
||||||
expect(policy.dashboard).to eq [:project, :dashboard]
|
expect(policy.criteria).to eq [:project, :criteria]
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -179,17 +179,17 @@ describe Pundit do
|
||||||
end
|
end
|
||||||
|
|
||||||
it "returns an instantiated policy given a symbol" do
|
it "returns an instantiated policy given a symbol" do
|
||||||
policy = Pundit.policy!(user, :dashboard)
|
policy = Pundit.policy!(user, :criteria)
|
||||||
expect(policy.class).to eq DashboardPolicy
|
expect(policy.class).to eq CriteriaPolicy
|
||||||
expect(policy.user).to eq user
|
expect(policy.user).to eq user
|
||||||
expect(policy.dashboard).to eq :dashboard
|
expect(policy.criteria).to eq :criteria
|
||||||
end
|
end
|
||||||
|
|
||||||
it "returns an instantiated policy given an array" do
|
it "returns an instantiated policy given an array" do
|
||||||
policy = Pundit.policy!(user, [:project, :dashboard])
|
policy = Pundit.policy!(user, [:project, :criteria])
|
||||||
expect(policy.class).to eq Project::DashboardPolicy
|
expect(policy.class).to eq Project::CriteriaPolicy
|
||||||
expect(policy.user).to eq user
|
expect(policy.user).to eq user
|
||||||
expect(policy.dashboard).to eq [:project, :dashboard]
|
expect(policy.criteria).to eq [:project, :criteria]
|
||||||
end
|
end
|
||||||
|
|
||||||
it "throws an exception if the given policy can't be found" do
|
it "throws an exception if the given policy can't be found" do
|
||||||
|
|
|
@ -93,10 +93,10 @@ class ArticleTag
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
class DashboardPolicy < Struct.new(:user, :dashboard); end
|
class CriteriaPolicy < Struct.new(:user, :criteria); end
|
||||||
|
|
||||||
module Project
|
module Project
|
||||||
class DashboardPolicy < Struct.new(:user, :dashboard); end
|
class CriteriaPolicy < Struct.new(:user, :criteria); end
|
||||||
end
|
end
|
||||||
|
|
||||||
class DenierPolicy < Struct.new(:user, :record)
|
class DenierPolicy < Struct.new(:user, :record)
|
||||||
|
|
Loading…
Add table
Reference in a new issue