diff --git a/app/controllers/densities_controller.rb b/app/controllers/densities_controller.rb new file mode 100644 index 0000000..bd4525a --- /dev/null +++ b/app/controllers/densities_controller.rb @@ -0,0 +1,14 @@ +class DensitiesController < InheritedResources::Base + respond_to :xml, :json + before_filter :authenticate + + def index + if params[:question_id] + logger.info(" Got a question id") + @densities = Density.find(:all, :conditions => {:question_id => params[:question_id] }, :order => :created_at ) + end + index! + end + + +end diff --git a/app/models/density.rb b/app/models/density.rb new file mode 100644 index 0000000..98c3570 --- /dev/null +++ b/app/models/density.rb @@ -0,0 +1,3 @@ +class Density < ActiveRecord::Base + belongs_to :question +end diff --git a/app/models/question.rb b/app/models/question.rb index bd33c33..b77df03 100644 --- a/app/models/question.rb +++ b/app/models/question.rb @@ -17,7 +17,9 @@ class Question < ActiveRecord::Base end end has_many :votes - + has_many :densities + + #comment out to run bt import script! after_save :ensure_at_least_two_choices attr_accessor :ideas @@ -146,4 +148,66 @@ class Question < ActiveRecord::Base end end + def density + # slow code, only to be run by cron job once at night + the_prompts = prompts.find(:all, :include => ['left_choice', 'right_choice']) + + seed_seed_sum = 0 + seed_seed_total = 0 + + seed_nonseed_sum= 0 + seed_nonseed_total= 0 + + nonseed_seed_sum= 0 + nonseed_seed_total= 0 + + nonseed_nonseed_sum= 0 + nonseed_nonseed_total= 0 + + the_prompts.each do |p| + if p.left_choice.user_created == false && p.right_choice.user_created == false + seed_seed_sum += p.votes.size + seed_seed_total +=1 + elsif p.left_choice.user_created == false && p.right_choice.user_created == true + seed_nonseed_sum += p.votes.size + seed_nonseed_total +=1 + elsif p.left_choice.user_created == true && p.right_choice.user_created == false + nonseed_seed_sum += p.votes.size + nonseed_seed_total +=1 + elsif p.left_choice.user_created == true && p.right_choice.user_created == true + nonseed_nonseed_sum += p.votes.size + nonseed_nonseed_total +=1 + end + end + + densities = {} + densities[:seed_seed] = seed_seed_sum.to_f / seed_seed_total.to_f + densities[:seed_nonseed] = seed_nonseed_sum.to_f / seed_nonseed_total.to_f + densities[:nonseed_seed] = nonseed_seed_sum.to_f / nonseed_seed_total.to_f + densities[:nonseed_nonseed] = nonseed_nonseed_sum.to_f / nonseed_nonseed_total.to_f + + puts "Seed_seed sum: #{seed_seed_sum}, seed_seed total num: #{seed_seed_total}" + puts "Seed_nonseed sum: #{seed_nonseed_sum}, seed_nonseed total num: #{seed_nonseed_total}" + puts "Nonseed_seed sum: #{nonseed_seed_sum}, nonseed_seed total num: #{nonseed_seed_total}" + puts "Nonseed_nonseed sum: #{nonseed_nonseed_sum}, nonseed_nonseed total num: #{nonseed_nonseed_total}" + + + densities + end + + def save_densities! + + d_hash = density + + d_hash.each do |type, average| + d = Density.new + d.question_id = self.id + d.prompt_type = type.to_s + d.value = average.nan? ? nil : average + d.save! + end + end + + + end diff --git a/config/routes.rb b/config/routes.rb index 8ba0ee4..651ba32 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -1,5 +1,6 @@ ActionController::Routing::Routes.draw do |map| #map.resources :clicks + map.resources :densities map.resources :visitors, :collection => {:votes_by_session_ids => :post} map.resources :questions, :member => { :object_info_totals_by_date => :get, :num_votes_by_visitor_id => :get, diff --git a/db/migrate/20100331161516_create_densities.rb b/db/migrate/20100331161516_create_densities.rb new file mode 100644 index 0000000..27e6cc9 --- /dev/null +++ b/db/migrate/20100331161516_create_densities.rb @@ -0,0 +1,15 @@ +class CreateDensities < ActiveRecord::Migration + def self.up + create_table :densities do |table| + table.integer :question_id + table.float :value + table.string :type, :default => "" + table.timestamps + end + + end + + def self.down + drop_table :densities + end +end diff --git a/db/migrate/20100331180328_rename_density_type_column.rb b/db/migrate/20100331180328_rename_density_type_column.rb new file mode 100644 index 0000000..817a43b --- /dev/null +++ b/db/migrate/20100331180328_rename_density_type_column.rb @@ -0,0 +1,9 @@ +class RenameDensityTypeColumn < ActiveRecord::Migration + def self.up + rename_column :densities, :type, :prompt_type + end + + def self.down + rename_column :denisities, :prompt_type, :type + end +end diff --git a/lib/tasks/test_api.rake b/lib/tasks/test_api.rake index 2066080..1961500 100644 --- a/lib/tasks/test_api.rake +++ b/lib/tasks/test_api.rake @@ -106,6 +106,13 @@ namespace :test_api do end end + + desc "Generate density information for each question - should be run nightly" + task(:generate_density_information => :environment) do + Question.find(:all).each do |q| + q.save_densities! + end + end desc "Description here" task(:question_vote_consistency => :environment) do diff --git a/test/factories/density.rb b/test/factories/density.rb new file mode 100644 index 0000000..db0f878 --- /dev/null +++ b/test/factories/density.rb @@ -0,0 +1,5 @@ +Factory.define :density do |density| + density.question_id + density.value + density.type { 'string' } +end diff --git a/test/unit/density_test.rb b/test/unit/density_test.rb new file mode 100644 index 0000000..91e68ff --- /dev/null +++ b/test/unit/density_test.rb @@ -0,0 +1,7 @@ +require 'test_helper' + +class DensityTest < ActiveSupport::TestCase + should "be valid with factory" do + assert_valid Factory.build(:density) + end +end -- libgit2 0.21.2