1
0
Fork 0
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:
Jason Daly 2015-05-08 20:43:48 -04:00
parent 1fa413c3de
commit bb7ec831fb
3 changed files with 20 additions and 16 deletions

View file

@ -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

View file

@ -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

View file

@ -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)