Add HasPrivacy concern

This commit is contained in:
Robert Richter 2016-09-22 13:02:03 -05:00
parent ad178d7854
commit bf3cf4a51e
No known key found for this signature in database
GPG Key ID: BEC39BF873A0103B
5 changed files with 51 additions and 17 deletions

View File

@ -14,6 +14,7 @@ class Character < ActiveRecord::Base
belongs_to :universe
include HasPrivacy
include HasContentGroupers
# Characters
@ -31,7 +32,6 @@ class Character < ActiveRecord::Base
# Items
relates :favorite_items, with: :ownerships, where: { favorite: true }
scope :is_public, -> { joins(:universe).where(universes: { privacy: "public" }) }
def description
role
@ -45,14 +45,6 @@ class Character < ActiveRecord::Base
'group'
end
def private?
!public?
end
def public?
privacy == 'public'
end
def self.attribute_categories
{
general: {

View File

@ -0,0 +1,16 @@
require 'active_support/concern'
module HasPrivacy
extend ActiveSupport::Concern
included do
def private_content?
!public_content?
end
def public_content?
in_private_universe = respond_to?(:universe) && universe.present? && universe.private_content?
privacy == 'public' && !in_private_universe
end
end
end

View File

@ -6,6 +6,8 @@
#
# contains all canonically-related content created by Users
class Universe < ActiveRecord::Base
include HasPrivacy
validates :name, presence: true
belongs_to :user

View File

@ -9,23 +9,33 @@ class CharacterTest < ActiveSupport::TestCase
end
test 'character is public when privacy field contains "public"' do
character = build(:character, privacy: 'public')
universe = build(:universe, privacy: 'public')
character = build(:character, privacy: 'public', universe: universe)
assert character.public?
refute character.private?
assert character.public_content?
refute character.private_content?
end
test 'character is private when privacy field contains "private"' do
character = build(:character, privacy: 'private')
universe = build(:universe, privacy: 'public')
character = build(:character, privacy: 'private', universe: universe)
assert character.private?
refute character.public?
assert character.private_content?
refute character.public_content?
end
test 'character is private when privacy field is empty' do
character = build(:character, privacy: '')
assert character.private?
refute character.public?
assert character.private_content?
refute character.public_content?
end
test 'character is private when universe is private' do
universe = build(:universe, privacy: 'private')
character = build(:character, privacy: 'public', universe: universe)
assert character.private_content?
refute character.public_content?
end
end

View File

@ -7,4 +7,18 @@ class UniverseTest < ActiveSupport::TestCase
refute universe.valid?, 'Universe name is not being validated for presence'
end
test 'universe is private when privacy field contains "private"' do
universe = build(:universe, privacy: 'private')
assert universe.private_content?
refute universe.public_content?
end
test 'universe is private when privacy field is empty' do
universe = build(:universe, privacy: '')
assert universe.private_content?
refute universe.public_content?
end
end