Import latest subversion RubyVote.
authorJohn Dong <jdong@mit.edu>
Wed, 15 Aug 2007 16:00:58 +0000 (12:00 -0400)
committerJohn Dong <jdong@mit.edu>
Wed, 15 Aug 2007 16:00:58 +0000 (12:00 -0400)
lib/rubyvote/election.rb

index 66e4c2a4b410b83a2af50d12172e64c644cc531a..b9bb5574c7ea03b4d9d5d6e1b544fdca640e3ee3 100644 (file)
@@ -34,7 +34,7 @@
 class ElectionVote
   attr_reader :votes
   attr_reader :candidates
-  
+
   def initialize(votes=nil)
     @votes = Hash.new unless defined?(@votes)
     @candidates = Array.new unless defined?(@candidates)
@@ -42,7 +42,11 @@ class ElectionVote
     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
@@ -75,7 +79,7 @@ class PluralityVote < ElectionVote
   
   protected
   def verify_vote(vote=nil)
-    not vote.instance_of?( Array )
+    vote ? true : false
   end
 
   def tally_vote(candidate)
@@ -114,8 +118,7 @@ end
 
 class ElectionResult
   attr_reader :winners
-  attr_reader :election
-  
+
   def initialize(voteobj=nil)
     unless voteobj and voteobj.kind_of?( ElectionVote )
       raise ArgumentError, "You must pass a ElectionVote array.", caller
@@ -164,3 +167,10 @@ end
 class ElectionError < ArgumentError
 end
 
+class InvalidVoteError < ElectionError
+  attr_accessor :voteobj
+  def initialize(msg=nil, voteobj=nil)
+    super(msg)
+    @voteobj=voteobj
+  end
+end

Benjamin Mako Hill || Want to submit a patch?