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

Instance Method Details

#just_became_public? ⇒ Boolean

Returns:

  • (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 matching_permission_preset
  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.with_permission("own")
end

#private? ⇒ Boolean

Returns:

  • (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

Returns:

  • (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 set_default_permission_preset
  @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?
    grant_permission_to("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 set_permissions_from_preset
  case @permission_preset&.to_sym
  when :public
    grant_permission_to("view", nil)
    revoke_permission("view", Role.find_or_create_by(name: "member"))
  when :member
    revoke_all_permissions(nil)
    grant_permission_to("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

Returns:

  • (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