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

View file

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

View file

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