Refactor AsciicastPolicy

private-asciicasts
Marcin Kulik 10 years ago
parent 6bc2fd1048
commit 6aeb8810ad

@ -9,8 +9,8 @@ class AsciicastPolicy < ApplicationPolicy
def permitted_attributes
if user.admin? || record.owner?(user)
attrs = [:title, :description, :theme_name, :snapshot_at]
attrs << :featured if user.admin?
attrs << :private if record.owner?(user)
attrs << :featured if change_featured?
attrs << :private if change_visibility?
attrs
else
@ -30,25 +30,13 @@ class AsciicastPolicy < ApplicationPolicy
user.admin? || record.owner?(user)
end
def feature?
def change_featured?
return false unless user
user.admin?
end
def unfeature?
return false unless user
user.admin?
end
def make_public?
return false unless user
record.owner?(user)
end
def make_private?
def change_visibility?
return false unless user
record.owner?(user)

@ -87,19 +87,19 @@ class AsciicastPagePresenter
end
def show_set_featured_link?
!asciicast.featured? && policy.feature?
!asciicast.featured? && policy.change_featured?
end
def show_unset_featured_link?
asciicast.featured? && policy.unfeature?
asciicast.featured? && policy.change_featured?
end
def show_make_private_link?
!asciicast.private? && policy.make_private?
!asciicast.private? && policy.change_visibility?
end
def show_make_public_link?
asciicast.private? && policy.make_public?
asciicast.private? && policy.change_visibility?
end
def show_description?

@ -74,7 +74,7 @@ describe AsciicastPolicy do
end
end
permissions :feature? do
permissions :change_featured? do
it "denies access if user is nil" do
expect(subject).not_to permit(nil, Asciicast.new)
end
@ -90,43 +90,7 @@ describe AsciicastPolicy do
end
end
permissions :unfeature? do
it "denies access if user is nil" do
expect(subject).not_to permit(nil, Asciicast.new)
end
it "grants access if user is admin" do
user = stub_model(User, admin?: true)
expect(subject).to permit(user, Asciicast.new)
end
it "denies access if user isn't admin" do
user = stub_model(User, admin?: false)
expect(subject).not_to permit(user, Asciicast.new)
end
end
permissions :make_public? do
let(:asciicast) { Asciicast.new }
it "denies access if user is nil" do
expect(subject).not_to permit(nil, asciicast)
end
it "grants access if user is owner of the asciicast" do
user = stub_model(User)
asciicast.user = user
expect(subject).to permit(user, asciicast)
end
it "denies access if user isn't owner of the asciicast" do
user = stub_model(User)
asciicast.user = stub_model(User)
expect(subject).not_to permit(user, asciicast)
end
end
permissions :make_private? do
permissions :change_visibility? do
let(:asciicast) { Asciicast.new }
it "denies access if user is nil" do

Loading…
Cancel
Save