SwordElucidator/American-parliamentary-debate-society

View on GitHub
app/models/debate.rb

Summary

Maintainability
A
1 hr
Test Coverage
class Debate < ActiveRecord::Base
    has_many :slots, :dependent => :destroy
    has_many :users, through: :slots
    validate :debate_input_correct
    
    
    def self.filter_by_title(arg)
      record = Debate.where('topic LIKE ?', '%'+ arg.strip+ '%').all
      return record
    end
    
    def debate_input_correct
        if !time.empty? and !topic.empty? and !location.empty?
            if Debate.parse_time(time).to_i + 7 * 60 * 60 - Time.now.to_i < 0
               errors.add(:time, "outdated time")
            end
        else
            errors.add(:time, "empty field")
        end
    end
    
    def self.parse_name(user)
        first_name = user.firstname[0, 10]
        last_initial = user.lastname[0] + "."
        return last_initial + first_name
    end
    
    def self.parse_time(str_time)
        array1 = str_time.split("/")
        month = array1[0].to_i
        day = array1[1].to_i
        array2 = array1[2].split(" ")
        year = array2[0].to_i
        array3 = array2[1].split(":")
        if array2[2] == "PM"
            hour = array3[0].to_i + 12 
        else
            hour = array3[0].to_i
        end
        minute = array3[1]
        parsed_time = Time.new(year, month, day, hour, minute)
        return parsed_time
    end
    
    def self.find_past_debates(debates)
        past_debates = Array.new
        debates.each do |debate|
            if Debate.parse_time(debate.time).to_i + 7 * 60 * 60 - Time.now.to_i < 0
                past_debates.push(debate)
            end
        end
        return past_debates
    end
    
    def self.find_future_debates(debates)
        future_debates = Array.new
        debates.each do |debate|
            if Debate.parse_time(debate.time).to_i + 7 * 60 * 60 - Time.now.to_i >= 0
                future_debates.push(debate)
            end
        end
        return future_debates
    end
end