swchoi727/LEP

View on GitHub
app/models/user.rb

Summary

Maintainability
A
0 mins
Test Coverage
class User < ActiveRecord::Base

  serialize :fluent_languages, Array
  serialize :time_preference, Array

  validates :first_name, presence: true
  validates :last_name, presence: true
  validates :email, presence: true, 
                   uniqueness: true, 
                   on: :create
  validates :sid, presence: true, uniqueness: true, on: :create,
                  format: { with: /\A[0-9]+\z/, message: "only allows numbers"},
                  length: { is: 8, message: "must be 8 characters"}
                  
  validates :hours_per_week, presence: true, format: { with: /\A[0-9]+\z/, message: "only allows numbers"}
  validates :academic_title, presence: true
  validates :major, presence: true
  validates :residency, presence: true
  validates :gender, presence: true
  validates :gender_preference, presence: true
  validates :fluent_languages, presence: true
  validates :first_lang_preference, presence: true
  validates :first_lang_proficiency, presence: true
  validates :second_lang_preference, presence: true
  validates :second_lang_proficiency, presence: true
  validates :group_leader, presence: true
  validates :time_preference, presence: true
  
  validates :user_motivation, presence: true
  validates :user_plan, presence: true


  APPLICATION_DEADLINE = Date.tomorrow.strftime("%m/%d/%Y").to_s # by default, the application is due tomorrow

  def self.set_application_deadline(deadline)
    APPLICATION_DEADLINE.replace deadline # set the application deadline
  end

  def self.get_application_deadline()
    APPLICATION_DEADLINE
  end

  # http://railscasts.com/episodes/362-exporting-csv-and-excel?view=asciicast
  def self.pairing_csv
    CSV.open('script/newsheet.csv', 'w') do |csv|
      csv << column_names
      nonadmins = User.get_users
      nonadmins.each do |user|
        csv << user.attributes.values_at(*column_names)
      end
    end
  end

  def self.to_csv(options = {})
    CSV.generate(options) do |csv|
      csv << User.column_names
      all.each do |user|
        csv << user.attributes.values_at(*column_names)
      end
    end
  end

  # set user's pair_id attr to a pair id
  def User.set_pair_id(user_id, pair_id)
    user = User.find(user_id)
    user.update_attributes pair_id: pair_id
  end

  def User.full_name(id)
    user = User.find(id) if id != nil
    return "#{user.first_name} #{user.last_name}" if !(user.nil?)
  end

  def User.activate(id)
    user = User.find(id)
    user.update_attributes active: true 
  end

  def User.deactivate(id)
    user = User.find(id)
    user.update_attributes active: false, facilitator: false 
  end

  def User.make_admin(id)
    user = User.find(id)
    user.update_attributes admin: true 
  end

  def User.revoke_admin(id)
    user = User.find(id)
    user.update_attributes admin: false
  end

  def User.make_facilitator(id)
    user = User.find(id)
    user.update_attributes facilitator: true
  end

  def User.revoke_facilitator(id)
    user = User.find(id)
    user.update_attributes facilitator: false
  end

  def User.total_users
    return User.where(admin: false).count
  end

  def User.get_users
    return User.where(admin: false)
  end

  def User.total_admins
    return User.where(admin: true).count
  end

end