class ElectionsController < ApplicationController
+ model :raw_voter_list, :voter, :vote, :candidate
+
+
+ # general methods for dealing with elections
def index
list
render :action => 'list'
@election_pages, @elections = paginate :elections, :per_page => 10
end
+ # methods for displaying, creating, and manipulating election overview
+ # data
def show
@election = Election.find(params[:id])
end
def new
@election = Election.new
end
+
+ def edit
+ @election = Election.find(params[:id])
+ end
def create_election
@election = Election.new(params[:election])
end
end
+ def update
+ @election = Election.find(params[:id])
+ if @election.update_attributes(params[:election])
+ flash[:notice] = 'Election was successfully updated.'
+ redirect_to :action => 'show', :id => @election
+ else
+ render :action => 'edit'
+ end
+ end
+
+ def destroy
+ election = Election.find(params[:id]).destroy
+ redirect_to :action => 'list'
+ end
+
+ # methods fod display, adding, deleting, and manipulating candidate
+ # information for elections
def new_candidates
@election = Election.find( params[:id] )
end
candidate.destroy
end
- def edit
- @election = Election.find(params[:id])
+ def edit_candidates
+ @election = Election.find( params[:id] )
end
- def edit_candidates
+ # methods for displaying, adding, deleting, and manipulating voters
+ # for a particular election
+ def new_voters
@election = Election.find( params[:id] )
+ if params.has_key?[:raw_voter_list]
+ process_incoming_voters( params[:raw_voter_list] )
+ end
+ @raw_voter_list = RawVoterList.new
+
end
def edit_voters
@election = Election.find( params[:id] )
+ if params.has_key?( :raw_voter_list )
+ process_incoming_voters( params[:raw_voter_list] )
+ end
+
+ @raw_voter_list = RawVoterList.new
end
- def update
- @election = Election.find(params[:id])
- if @election.update_attributes(params[:election])
- flash[:notice] = 'Election was successfully updated.'
- redirect_to :action => 'show', :id => @election
- else
- render :action => 'edit'
- end
+ def delete_voter
+ voter = Voter.find( params[:id] )
+ voter.destroy
end
+
+ private
- def destroy
- election = Election.find(params[:id]).destroy
- redirect_to :action => 'list'
- end
+ def process_incoming_voters(raw_voter_list)
+ incoming_voters = RawVoterList.new( raw_voter_list )
+
+ unless incoming_voters.entries.empty?
+ incoming_voters.each do |new_voter|
+
+ if incoming_voters.email == 0
+ new_voter.contacted = 1
+ elsif incoming_voters.email == 1
+ email_voter( new_voter )
+ new_voter.contacted = 1
+ else
+ new_voter.contacted = 0
+ end
+
+ # the new voter should be in good shape. save add to the election
+ new_voter.save
+ @election.voters << new_voter
+ end
+ end
+
+ # reset the next time to have a the same default value for emailing
+ @raw_voter_list = RawVoterList.new
+ @raw_voter_list.email = incoming_voters.email
+ end
end