Module: CaberObject
- Extended by:
- ActiveSupport::Concern
- Includes:
- Caber::Object
- Included in:
- Collection, Creator, List, Model
- Defined in:
- app/models/concerns/caber_object.rb
Instance Method Summary collapse
- #just_became_public? ⇒ Boolean
- #matching_permission_preset ⇒ Object
- #owners ⇒ Object
- #private? ⇒ Boolean
- #public? ⇒ Boolean
- #set_default_permission_preset ⇒ Object
- #set_owner ⇒ Object
- #set_permissions_from_preset ⇒ Object
- #will_be_public? ⇒ Boolean
Instance Method Details
#just_became_public? ⇒ Boolean
31 32 33 |
# File 'app/models/concerns/caber_object.rb', line 31 def just_became_public? public? && @was_private end |
#matching_permission_preset ⇒ Object
70 71 72 73 74 75 76 77 78 79 80 81 |
# File 'app/models/concerns/caber_object.rb', line 70 def non_owner_total = caber_relations.where.not(permission: "own").count if non_owner_total == 0 "private" elsif non_owner_total == 1 && caber_relations.where(permission: "view", subject: Role.find_or_create_by(name: "member")).one? "member" elsif non_owner_total == 1 && caber_relations.where(permission: "view", subject: nil).one? "public" else "" end end |
#owners ⇒ Object
61 62 63 |
# File 'app/models/concerns/caber_object.rb', line 61 def owners permitted_users.("own") end |
#private? ⇒ Boolean
27 28 29 |
# File 'app/models/concerns/caber_object.rb', line 27 def private? caber_relations.where(subject_type: "Role").or(caber_relations.where(subject: nil)).none? end |
#public? ⇒ Boolean
22 23 24 25 |
# File 'app/models/concerns/caber_object.rb', line 22 def public? return false unless caber_ready? Pundit::PolicyFinder.new(self.class).policy.new(nil, self).show? end |
#set_default_permission_preset ⇒ Object
35 36 37 |
# File 'app/models/concerns/caber_object.rb', line 35 def @permission_preset ||= SiteSettings.default_viewer_role end |
#set_owner ⇒ Object
54 55 56 57 58 59 |
# File 'app/models/concerns/caber_object.rb', line 54 def set_owner # Set owner if not already set if @owner && owners.empty? ("own", @owner) end end |
#set_permissions_from_preset ⇒ Object
39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
# File 'app/models/concerns/caber_object.rb', line 39 def case @permission_preset&.to_sym when :public ("view", nil) ("view", Role.find_or_create_by(name: "member")) when :member (nil) ("view", Role.find_or_create_by(name: "member")) when :private Caber::Relation.where(object: self, permission: ["preview", "view", "edit"]).destroy_all # rubocop:disable Pundit/UsePolicyScope end # Clear attribute so we don't pollute later operations on the same object @permission_preset = nil end |
#will_be_public? ⇒ Boolean
65 66 67 68 |
# File 'app/models/concerns/caber_object.rb', line 65 def will_be_public? return false unless caber_ready? @permission_preset == "public" || caber_relations.find { it.subject.nil? } end |