Sha256: 4c7602cec64810a9652a7b271aca974ce3f76d97fa3ccf8daa18f550886aa97d

Contents?: true

Size: 1.18 KB

Versions: 17

Compression:

Stored size: 1.18 KB

Contents

module Spotlight
  ##
  # Exhibit authorization roles
  class Role < ActiveRecord::Base
    ROLES = %w(admin curator)
    belongs_to :exhibit
    belongs_to :user, class_name: '::User', autosave: true
    validates :role, inclusion: { in: ROLES }
    validates :user_key, presence: true
    validate :user_must_exist, if: -> { user_key.present? }
    validate :user_must_be_unique, if: :user

    def user_key
      if user
        @user_key = user.user_key
      else
        @user_key
      end
    end

    # setting user key causes the user to get set
    def user_key=(key)
      @user_key = key
      self.user ||= ::User.find_by_user_key(key)
      user.user_key = key if user
    end

    protected

    def user_must_exist
      errors.add(:user_key, 'User must sign up first.') unless user.present?
    end

    # This is just like
    #    validates :user, uniqueness: { scope: :exhibit}
    # but it puts the error message on the user_key instead of user so that the form will render correctly
    def user_must_be_unique
      errors.add(:user_key, 'already a member of this exhibit') if Spotlight::Role.where(exhibit_id: exhibit_id, user_id: user.id).where.not(id: id).any?
    end
  end
end

Version data entries

17 entries across 17 versions & 1 rubygems

Version Path
blacklight-spotlight-0.12.0 app/models/spotlight/role.rb
blacklight-spotlight-0.11.0 app/models/spotlight/role.rb
blacklight-spotlight-0.10.3 app/models/spotlight/role.rb
blacklight-spotlight-0.10.2 app/models/spotlight/role.rb
blacklight-spotlight-0.10.1 app/models/spotlight/role.rb
blacklight-spotlight-0.10.0 app/models/spotlight/role.rb
blacklight-spotlight-0.9.2 app/models/spotlight/role.rb
blacklight-spotlight-0.9.1 app/models/spotlight/role.rb
blacklight-spotlight-0.9.0 app/models/spotlight/role.rb
blacklight-spotlight-0.8.2 app/models/spotlight/role.rb
blacklight-spotlight-0.8.1 app/models/spotlight/role.rb
blacklight-spotlight-0.8.0 app/models/spotlight/role.rb
blacklight-spotlight-0.7.2 app/models/spotlight/role.rb
blacklight-spotlight-0.7.1 app/models/spotlight/role.rb
blacklight-spotlight-0.7.0 app/models/spotlight/role.rb
blacklight-spotlight-0.6.0 app/models/spotlight/role.rb
blacklight-spotlight-0.5.0 app/models/spotlight/role.rb