mirror of
https://github.com/indentlabs/notebook.git
synced 2025-10-26 11:19:22 +00:00
Add HasPrivacy concern
This commit is contained in:
parent
ad178d7854
commit
bf3cf4a51e
@ -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: {
|
||||
|
||||
16
app/models/concerns/has_privacy.rb
Normal file
16
app/models/concerns/has_privacy.rb
Normal 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
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
Loading…
Reference in New Issue
Block a user