require 'date'
class GraphController < ApplicationController
-
+
class GruffGraff
def initialize(options)
:y_axis_label => "Number of Votes")
send_data(*graph.output)
end
-
- def quickvote_bar
- @election = Election.find(params[:id])
- end
-
+
def borda_bar
@election = Election.find(params[:id])
pref_tally = make_preference_tally(@election)
send_data(*graph.output)
end
+ def choices_positions
+ @election = Election.find(params[:id])
+ pref_tally = make_preference_tally(@election)
+
+ fulldata = get_positions_info(@election)
+ (0...@election.candidates.size).each do |i|
+ sbar.data("Candidate#{i+1}", fulldata[i])
+ end
+
+ sbar = Gruff::Bar.new
+ sbar.title = "Times Voted in Each Position"
+ #sbar.theme = { :background_colors => ['#73BF26', '#ffffff'] }
+ sbar.font = File.expand_path('/usr/X11R6/lib/X11/fonts/TTF/Vera.ttf',
+ RAILS_ROOT)
+
+ graph = GruffGraff.new( :graph_type => Gruff::Bar,
+ :data_name => @election.name,
+ :data => data,
+ :interval_labels => labels,
+ :title => "Times Candidate Was Voted Each Position",
+ :x_axis_label => "Rank",
+ :y_axis_label => "Number of Times")
+
+
+
+
+ sbar.x_axis_label = "Rank"
+ sbar.y_axis_label = "Number of Times Ranked"
+
+ sbar.minimum_value = 0.0
+ send_data(sbar.to_blob, :disposition => 'inline', :type => 'image/png')
+
+
+ #data, labels = get_positions_info(@election)
+
+ end
private
+
+ def get_positions_info(election)
+ buckets = Hash.new
+ buckets2= Hash.new
+ ranks = Hash.new
+
+ election.candidates.each do |candidate|
+ buckets[candidate.id] = []
+ buckets2[candidate.id] = []
+ end
+
+ election.votes.each do |vote|
+ vote.rankings.each do |ranking|
+ buckets[ranking.candidate_id] << ranking.rank
+ end
+ end
+
+ buckets.each_pair do |id, array|
+ (1..election.candidates.size).each do |i|
+ buckets2[id] << (array.find_all {|rank| rank == i}).size
+ end
+ end
+
+ return buckets2.values
+
+ end
# generate the data and labels for each graph
def get_votes_per_day_data(election)
# Put votes into bucket according to the time interval to which they belong,
# referenced by their key
- # Will build a graph over time, as each successive interval wil lhave more
+ # Will build a graph over time, as each successive interval will have more
# vote objects
election.votes.each do |vote|
buckets.keys.sort.each do |inter|
interval_type = "Hour of the Day on 24 hour scale"
else #more than 2 days means use dates for labels
labels_hash[0] = (Date.parse(starttime.to_s)).to_s
- labels_hash[(numcols/2)-1] = (Date.parse(starttime + (timedelta/2))).to_s
+ labels_hash[(numcols/2)-1] = (Date.parse((starttime + (timedelta/2)).to_s)).to_s
labels_hash[numcols-1] = (Date.today).to_s
interval_type = "The Date"
end