From c4eaad1a963dae4c7449ab93cabc8607d4e8f19c Mon Sep 17 00:00:00 2001
From:
Date: Wed, 8 Aug 2007 12:27:02 -0400
Subject: [PATCH 1/1] * Renamed graphs_controller to graph_controller. *
Reviewed and fixed up the graph_controller code.
---
app/controllers/graph_controller.rb | 61 ++++++++++++++++++++
app/controllers/graphs_controller.rb | 83 ----------------------------
app/views/quickvote/results.rhtml | 4 +-
config/routes.rb | 3 +-
4 files changed, 63 insertions(+), 88 deletions(-)
create mode 100644 app/controllers/graph_controller.rb
delete mode 100644 app/controllers/graphs_controller.rb
diff --git a/app/controllers/graph_controller.rb b/app/controllers/graph_controller.rb
new file mode 100644
index 0000000..ebc5da7
--- /dev/null
+++ b/app/controllers/graph_controller.rb
@@ -0,0 +1,61 @@
+class GraphController < ApplicationController
+
+ # produce a graph of votes per day during an election
+ def votes_per_day
+
+ @election = Election.find(params[:id])
+ data, labels = get_votes_per_day_data(@election)
+
+ line = Gruff::Line.new
+ line.title = "Voters Per Day"
+ line.font = File.expand_path('/usr/X11R6/lib/X11/fonts/TTF/Vera.ttf',
+ RAILS_ROOT)
+
+ line.data("#{@election.name}", data )
+ line.labels = labels
+
+ line.x_axis_label = "Date"
+ line.y_axis_label = "Number of Votes"
+ line.minimum_value = 0.0
+
+ line.draw
+ send_data(line.to_blob, :disposition => 'inline', :type => 'image/png')
+ end
+
+ # generate the data and labels for each graph
+ def get_votes_per_day_data(election)
+
+ voter_times = Array.new
+ unique_days = Array.new
+ voters_per_day = Array.new
+ days_hash = Hash.new
+
+ election.votes.each do |vote|
+ unless voter_times.any? {|utime| utime == vote.time}
+ voter_times << vote.time
+ end
+ end
+
+ voter_times.sort!
+
+ voter_times.each_with_index do |time, index|
+ count = 1
+ # TODO: add comment
+ unless unique_days.any? { |d1| d1.eql?(time.mon.to_s + "/" + time.day.to_s) }
+ unique_days << (time.mon.to_s + "/" + time.day.to_s)
+ count += (voter_times[(index+1)..-1].find_all \
+ {|t| t.mon == time.mon && t.day == time.day}).size
+ voters_per_day << count
+ end
+ end
+
+ unique_days.each_with_index do |fmtdate, index|
+ days_hash[index] = fmtdate
+ end
+
+ # return the data and the labels
+ return voters_per_day, days_hash
+
+ end
+
+end
diff --git a/app/controllers/graphs_controller.rb b/app/controllers/graphs_controller.rb
deleted file mode 100644
index 101dc6d..0000000
--- a/app/controllers/graphs_controller.rb
+++ /dev/null
@@ -1,83 +0,0 @@
-class GraphsController < ApplicationController
-
- # To make caching easier, add a line like this to config/routes.rb:
- # map.graph "graph/:action/:id/image.png", :controller => "graph"
- #
- # Then reference it with the named route:
- # image_tag graph_url(:action => 'show', :id => 42)
-
- def show
- g = Gruff::Line.new
- # Uncomment to use your own theme or font
- # See http://colourlovers.com or http://www.firewheeldesign.com/widgets/ for color ideas
-# g.theme = {
-# :colors => ['#663366', '#cccc99', '#cc6633', '#cc9966', '#99cc99'],
-# :marker_color => 'white',
-# :background_colors => ['black', '#333333']
-# }
-# g.font = File.expand_path('artwork/fonts/VeraBd.ttf', RAILS_ROOT)
-
- g.title = "Gruff-o-Rama"
-
- g.data("Apples", [1, 2, 3, 4, 4, 3])
- g.data("Oranges", [4, 8, 7, 9, 8, 9])
- g.data("Watermelon", [2, 3, 1, 5, 6, 8])
- g.data("Peaches", [9, 9, 10, 8, 7, 9])
-
- g.labels = {0 => '2004', 2 => '2005', 4 => '2006'}
-
- send_data(g.to_blob, :disposition => 'inline', :type => 'image/png', :filename => "gruff.png")
- end
-
- #I've started to modify the following section to fit Selectricity, still
- #desn't seem towork, issue seems tobe realted to path
- def day_votes
-
- @election = Election.find(params[:id])
- line = Gruff::Line.new
- line.title = "Voters Per Day"
- line.font = File.expand_path('/usr/X11R6/lib/X11/fonts/TTF/Vera.ttf', RAILS_ROOT)
- line.data("#{@election.name}", voter_days["voters_per_day"] )
- line.labels = voter_days["days_hash"]
- line.x_axis_label = "Date"
- line.y_axis_label = "Number of Votes"
- line.minimum_value = 0.0
- line.draw
- send_data(line.to_blob,
- :disposition => 'inline',
- :type => 'image/png',
- :filename => "dayvotes#{@poll.id}.png")
- end
-
- def voter_days
- @election = Election.find(params[:id])
- voter_times = Array.new
- unique_days = Array.new
- voters_per_day = Array.new
- days_hash = Hash.new
-
- @election.votes.each do |vote|
- voter_times << vote.time unless voter_times.any? {|utime| utime == vote.time}
- end
-
- voter_times.sort!
-
- voter_times.each_with_index do |time, index|
- count = 1
- unless unique_days.any? { |d1| d1.eql?(time.mon.to_s+"/"+time.day.to_s) }
- unique_days << (time.mon.to_s+"/"+time.day.to_s)
- count += (voter_times[(index+1)..-1].find_all {|t| t.mon == time.mon && t.day == time.day}).size
- voters_per_day << count
- end
- end
-
- unique_days.each_with_index do |fmtdate, index|
- days_hash[index] = fmtdate
- end
- return { "voters_per_day" => voters_per_day, "days_hash" => days_hash }
-
- end
- #end section
-
-
-end
diff --git a/app/views/quickvote/results.rhtml b/app/views/quickvote/results.rhtml
index 7152072..e06b5d6 100644
--- a/app/views/quickvote/results.rhtml
+++ b/app/views/quickvote/results.rhtml
@@ -162,6 +162,4 @@ by several other names.
<% end %>
-
-<%= image_tag( graph_url( :action => 'day_votes', :id => @election ) ) %>
-<%= image_tag( graph_url( :action => 'show' ) ) %>
+<%= image_tag( graph_url( :action => 'votes_per_day', :id => @election ) ) %>
diff --git a/config/routes.rb b/config/routes.rb
index a05b803..ee64eab 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -34,8 +34,7 @@ ActionController::Routing::Routes.draw do |map|
#
# Then reference it with the named route:
# image_tag graph_url(:action => 'show', :id => 42)
- map.graph "graphs/:action/:id/image.png", :controller => "graphs"
- map.graph "graphs/:action/image.png", :controller => "graphs" #pics w/o id's
+ map.graph "graph/:action/:id/graph.png", :controller => "graph"
# Install the default route as the lowest priority.
map.connect ':controller/:action/:id.:format'
--
2.39.5