diff --git a/lib/pundit/policy_finder.rb b/lib/pundit/policy_finder.rb index 61fd702..7b4c9c1 100644 --- a/lib/pundit/policy_finder.rb +++ b/lib/pundit/policy_finder.rb @@ -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 diff --git a/spec/pundit_spec.rb b/spec/pundit_spec.rb index e559fc1..7de6fbf 100644 --- a/spec/pundit_spec.rb +++ b/spec/pundit_spec.rb @@ -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 diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index 0d4d6d3..cdbf0dd 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -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)