Sha256: 91a5ce2067d37758ec28acece0e104c65080c64fca6a21dace38b8f4d37fe473

Contents?: true

Size: 1.11 KB

Versions: 6

Compression:

Stored size: 1.11 KB

Contents

class Spotlight::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)
    if user
      user.user_key = key
    end
  end

  protected

  def user_must_exist
    unless user.present?
      errors.add(:user_key, "User must sign up first.")
    end
  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
    if Spotlight::Role.where(exhibit_id: exhibit_id, user_id: user.id).where.not(id: id).any? 
      errors.add(:user_key, "already a member of this exhibit")
    end
  end

end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
blacklight-spotlight-0.4.1 app/models/spotlight/role.rb
blacklight-spotlight-0.3.1 app/models/spotlight/role.rb
blacklight-spotlight-0.3.0 app/models/spotlight/role.rb
blacklight-spotlight-0.2.0 app/models/spotlight/role.rb
blacklight-spotlight-0.1.0 app/models/spotlight/role.rb
blacklight-spotlight-0.0.3 app/models/spotlight/role.rb