• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

pulibrary / pdc_describe / 7031ff5b-e2d7-4285-af8b-e7b55adfc48a

pending completion
7031ff5b-e2d7-4285-af8b-e7b55adfc48a

Pull #899

circleci

mccalluc
Finish removal of explicit if-then in js
Pull Request #899: Move messages up to sidebar on the right which can be toggled

1623 of 1788 relevant lines covered (90.77%)

105.5 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

82.89
/app/models/collection.rb
1
# frozen_string_literal: true
2

3
class Collection < ApplicationRecord
1✔
4
  resourcify
1✔
5

6
  # CollectionOptions model extensible options set for Collections and Users
7
  has_many :collection_options, dependent: :destroy
1✔
8
  has_many :collection_messaging_options, -> { where(option_type: CollectionOption::EMAIL_MESSAGES) }, class_name: "CollectionOption", dependent: :destroy
149✔
9

10
  has_many :users_with_options, through: :collection_options, source: :user
1✔
11
  has_many :users_with_messaging, through: :collection_messaging_options, source: :user
1✔
12

13
  validate do |collection|
1✔
14
    if collection.title.blank?
486✔
15
      collection.errors.add :base, "Title cannot be empty"
×
16
    end
17
  end
18

19
  def default_admins_list
1✔
20
    return [] if code.blank?
2✔
21
    key = code.downcase.to_sym
2✔
22
    Rails.configuration.collection_defaults.dig(key, :admin) || []
2✔
23
  end
24

25
  def default_submitters_list
1✔
26
    key = code.downcase.to_sym
2✔
27
    Rails.configuration.collection_defaults.dig(key, :submit) || []
2✔
28
  end
29

30
  def administrators
1✔
31
    User.with_role(:collection_admin, self)
137✔
32
  end
33

34
  def super_administrators
1✔
35
    User.with_role(:super_admin)
7✔
36
  end
37

38
  def datasets
1✔
39
    Work.where(collection_id: id)
2✔
40
  end
41

42
  ##
43
  # The current user adds a new admin user to a collection.
44
  # For use in the UI - we need to check whether the current_user
45
  # has the right permissions to add someone as an admin_user.
46
  # @param [User] current_user - the currently logged in user
47
  # @param [User] admin_user - the user who will be granted admin rights on this collection
48
  def add_administrator(current_user, admin_user)
1✔
49
    if current_user.has_role?(:super_admin) || current_user.has_role?(:collection_admin, self)
2✔
50
      if admin_user.has_role? :collection_admin, self
2✔
51
        errors.add(:admin, "User has already been added")
×
52
      else
53
        errors.delete(:admin)
2✔
54
        admin_user.add_role :collection_admin, self
2✔
55
      end
56
    else
57
      errors.add(:admin, "Unauthorized")
×
58
    end
59
  end
60

61
  def add_submitter(current_user, additional_user)
1✔
62
    if current_user.has_role?(:super_admin) || current_user.has_role?(:collection_admin, self)
4✔
63
      return if (self == additional_user.default_collection) && additional_user.just_created
4✔
64

65
      if additional_user.has_role? :submitter, self
3✔
66
        errors.add(:submitter, "User has already been added")
1✔
67
      else
68
        errors.delete(:submitter)
2✔
69
        additional_user.add_role :submitter, self
2✔
70
      end
71
    else
72
      errors.add(:submitter, "Unauthorized")
×
73
    end
74
  end
75

76
  def delete_permission(current_user, removed_user)
1✔
77
    if current_user.has_role?(:super_admin) || current_user.has_role?(:collection_admin, self)
×
78
      if removed_user.nil?
×
79
        errors.add(:delete_permission, "User was not found")
×
80
      elsif removed_user == current_user
×
81
        errors.add(:delete_permission, "Cannot remove yourself from a collection. Contact a super-admin for help.")
×
82
      else
83
        errors.delete(:delete_permission)
×
84
        removed_user.remove_role :collection_admin, self
×
85
        removed_user.remove_role :submitter, self
×
86
      end
87
    else
88
      errors.add(:delete_permission, "Unauthorized")
×
89
    end
90
  end
91

92
  def submitters
1✔
93
    User.with_role(:submitter, self)
7✔
94
  end
95

96
  # Permit a User to receive notification messages for members of this Collection
97
  # @param user [User]
98
  def enable_messages_for(user:)
1✔
99
    raise(ArgumentError, "User #{user.uid} is not an administrator for this collection #{title}") unless user.can_admin?(self)
2✔
100
    collection_messaging_options << CollectionOption.new(option_type: CollectionOption::EMAIL_MESSAGES, collection: self, user: user)
2✔
101
  end
102

103
  # Disable a User from receiving notification messages for members of this Collection
104
  # @param user [User]
105
  def disable_messages_for(user:)
1✔
106
    raise(ArgumentError, "User #{user.uid} is not an administrator for this collection #{title}") unless user.can_admin?(self)
3✔
107
    users_with_messaging.destroy(user)
2✔
108
  end
109

110
  # Returns true if a given user has notification e-mails enabled for this collection
111
  # @param user [User]
112
  # @return [Boolean]
113
  def messages_enabled_for?(user:)
1✔
114
    found = users_with_messaging.find_by(id: user.id)
142✔
115

116
    found.present?
142✔
117
  end
118

119
  def self.create_defaults
1✔
120
    return if Collection.count > 0
2,177✔
121
    Rails.logger.info "Creating default Collections"
233✔
122
    Collection.create(title: "Research Data", code: "RD")
233✔
123
    Collection.create(title: "Princeton Plasma Physics Laboratory", code: "PPPL")
233✔
124
  end
125

126
  # Returns the default collection.
127
  # Used when we don't have anything else to determine a more specific collection for a user.
128
  def self.default
1✔
129
    create_defaults
903✔
130
    research_data
903✔
131
  end
132

133
  # Returns the default collection for a given department number.
134
  # Reference: https://docs.google.com/spreadsheets/d/1_Elxs3Ex-2wCbbKUzD4ii3k16zx36sYf/edit#gid=1484576831
135
  def self.default_for_department(department_number)
1✔
136
    if department_number.present? && department_number >= "31000" && department_number <= "31026"
117✔
137
      plasma_laboratory
32✔
138
    else
139
      default
85✔
140
    end
141
  end
142

143
  def self.research_data
1✔
144
    create_defaults
1,157✔
145
    Collection.where(code: "RD").first
1,157✔
146
  end
147

148
  def self.plasma_laboratory
1✔
149
    create_defaults
62✔
150
    Collection.where(code: "PPPL").first
62✔
151
  end
152
end
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc