if votes
if votes.instance_of?( Array )
votes.each do |vote|
- self.tally_vote(vote) if self.verify_vote(vote)
+ if self.verify_vote(vote)
+ self.tally_vote(vote)
+ else
+ raise InvalidVoteError.new ("Invalid vote object", vote)
+ end
end
else
raise ElectionError, "Votes must be in the form of an array.", caller
end
def filter_out(winner)
- if winner.winners[0].class == Array
- to_filter = winner.winners[0]
- else
- to_filter = [winner.winners[0]]
- end
- @candidates.delete_if {|x| to_filter.include?(x)}
+ @candidates.delete_if {|x| winner.winners.include?(x)}
end
end
protected
def verify_vote(vote=nil)
- vote.instance_of?( String )
+ vote ? true : false
end
def tally_vote(candidate)
class ElectionResult
attr_reader :winners
- attr_accessor :full_results
def initialize(voteobj=nil)
unless voteobj and voteobj.kind_of?( ElectionVote )
@election = voteobj
@winners = Array.new
- @full_results = Array.new
end
def winner
@winners.length > 0
end
- def get_full_results
- @full_results.collect {|x| x.winners}
- end
-
end
class PluralityResult < ElectionResult
class ElectionError < ArgumentError
end
+class InvalidVoteError < ElectionError
+ attr_accessor :voteobj
+ def initialize(msg=nil, voteobj=nil)
+ super(msg)
+ @voteobj=voteobj
+ end
+end