swchoi727/LEP

View on GitHub
app/models/pair.rb

Summary

Maintainability
A
1 hr
Test Coverage
class Pair < ActiveRecord::Base

  serialize :languages, Array

  # true if s is nil or empty
  # false otherwise
  def self.check_nil_or_empty(s)
    return (s.nil? || s.empty?) ? true : false
  end

  def has_member?(id)
    members = [self.member1, self.member2, self.member3]
    members.include?(id) ? true : false
  end

  def self.remove_user_from_pair(pair_id, user_id)
    @pair = Pair.find(pair_id)
    @user = User.find(user_id)
    user_id = user_id.to_s
    if (@user.pair_id == pair_id.to_i)
      if @pair.member1 == user_id
        @pair.update_attributes(:member1 => '')
      elsif @pair.member2 == user_id
        @pair.update_attributes(:member2 => '')
      elsif @pair.member3 == user_id
        @pair.update_attributes(:member3 => '')
      end
      #@pair.save
      User.set_pair_id(user_id, 0)
    end
  end

  def self.add_user_to_pair(pair_id, user_id)
    @pair = Pair.find(pair_id)
    @user = User.find(user_id)
    # only add user if user is not in a pair
    if (@user.pair_id == 0)
      if Pair.check_nil_or_empty(@pair.member1)
        @pair.update_attributes(:member1 => user_id.to_s)
      elsif Pair.check_nil_or_empty(@pair.member2)
        @pair.update_attributes(:member2 => user_id.to_s)
      elsif Pair.check_nil_or_empty(@pair.member3)
        @pair.update_attributes(:member3 => user_id.to_s)
      end
      #@pair.save
      User.set_pair_id(user_id, pair_id)
    end
  end

  def self.generate_pairs()
    CSV.foreach('script/final_pairs.csv', headers: true) do |row|
      @member1 = row['partner1']
      @member2 = row['partner2']
      @languages = nil
      @languages = row['language(s)'].split(",") if row['language(s)'] != nil
      if Pair.verify_pair(@member1, @member2)
        @pair = Pair.create(:member1 => @member1,
            :member2 => @member2,
            :member3 => '',
            :languages => @languages
        )
        member1 = User.set_pair_id(@member1, @pair.id) if @member1
        member2 = User.set_pair_id(@member2, @pair.id) if @member2
      end
    end
  end

  def self.verify_pair(m1, m2)
    pair1 = Pair.where(member1: m1) or Pair.where(member2: m1)
    pair2 = Pair.where(member1: m2) or Pair.where(member2: m2)
    if pair1.nil? and pair2.nil?
      return false
    else
      return true
    end
  end

  def Pair.total_pairs
    return Pair.count
  end

  def Pair.to_csv
    CSV.generate do |csv|
      csv << Pair.column_names
      all.each do |pair|
        csv << pair.attributes.values_at(*column_names)
      end
    end
  end

end