Commit 33dac88d0bb200d45bf92b775233d99787b1f852
1 parent
23a288e7
Exists in
master
and in
1 other branch
to be staged
Showing
5 changed files
with
44 additions
and
21 deletions
Show diff stats
app/controllers/choices_controller.rb
@@ -52,8 +52,11 @@ class ChoicesController < InheritedResources::Base | @@ -52,8 +52,11 @@ class ChoicesController < InheritedResources::Base | ||
52 | respond_to do |format| | 52 | respond_to do |format| |
53 | if @choice = current_user.create_choice(params['params']['data'], @question, {:data => params['params']['data'], :local_identifier => params['params']['local_identifier']}) | 53 | if @choice = current_user.create_choice(params['params']['data'], @question, {:data => params['params']['data'], :local_identifier => params['params']['local_identifier']}) |
54 | saved_choice_id = Proc.new { |options| options[:builder].tag!('saved_choice_id', @choice.id) } | 54 | saved_choice_id = Proc.new { |options| options[:builder].tag!('saved_choice_id', @choice.id) } |
55 | + choice_status = Proc.new { |options| | ||
56 | + the_status = @choice.active? ? 'active' : 'inactive' | ||
57 | + options[:builder].tag!('choice_status', the_status) } | ||
55 | logger.info "successfully saved the choice #{@choice.inspect}" | 58 | logger.info "successfully saved the choice #{@choice.inspect}" |
56 | - format.xml { render :xml => @question.picked_prompt.to_xml(:methods => [:left_choice_text, :right_choice_text], :procs => [saved_choice_id]), :status => :ok } | 59 | + format.xml { render :xml => @question.picked_prompt.to_xml(:methods => [:left_choice_text, :right_choice_text], :procs => [saved_choice_id, choice_status]), :status => :ok } |
57 | format.json { render :json => @question.picked_prompt.to_json, :status => :ok } | 60 | format.json { render :json => @question.picked_prompt.to_json, :status => :ok } |
58 | else | 61 | else |
59 | format.xml { render :xml => @choice.errors, :status => :unprocessable_entity } | 62 | format.xml { render :xml => @choice.errors, :status => :unprocessable_entity } |
@@ -81,19 +84,19 @@ class ChoicesController < InheritedResources::Base | @@ -81,19 +84,19 @@ class ChoicesController < InheritedResources::Base | ||
81 | end | 84 | end |
82 | 85 | ||
83 | def activate | 86 | def activate |
84 | - authenticate | ||
85 | - @question = current_user.questions.find(params[:question_id]) | ||
86 | - @choice = @question.choices.find(params[:id]) | ||
87 | - respond_to do |format| | ||
88 | - if @choice.activate! | ||
89 | - format.xml { render :xml => @choice.to_xml, :status => :created } | ||
90 | - format.json { render :json => @choice.to_json, :status => :created } | ||
91 | - else | ||
92 | - format.xml { render :xml => @choice.errors, :status => :unprocessable_entity } | ||
93 | - format.json { render :json => @choice.to_json } | ||
94 | - end | 87 | + authenticate |
88 | + @question = current_user.questions.find(params[:question_id]) | ||
89 | + @choice = @question.choices.find(params[:id]) | ||
90 | + respond_to do |format| | ||
91 | + if @choice.activate! | ||
92 | + format.xml { render :xml => @choice.to_xml, :status => :created } | ||
93 | + format.json { render :json => @choice.to_json, :status => :created } | ||
94 | + else | ||
95 | + format.xml { render :xml => @choice.errors, :status => :unprocessable_entity } | ||
96 | + format.json { render :json => @choice.to_json } | ||
95 | end | 97 | end |
96 | end | 98 | end |
99 | + end | ||
97 | 100 | ||
98 | 101 | ||
99 | def suspend | 102 | def suspend |
app/controllers/questions_controller.rb
@@ -20,7 +20,7 @@ class QuestionsController < InheritedResources::Base | @@ -20,7 +20,7 @@ class QuestionsController < InheritedResources::Base | ||
20 | def create | 20 | def create |
21 | authenticate | 21 | authenticate |
22 | logger.info "vi is #{params['question']['visitor_identifier']} and local are #{params['question']['local_identifier']}. all params are #{params.inspect}" | 22 | logger.info "vi is #{params['question']['visitor_identifier']} and local are #{params['question']['local_identifier']}. all params are #{params.inspect}" |
23 | - if @question = current_user.create_question(params['question']['visitor_identifier'], :name => params['question']['name'], :local_identifier => params['question']['local_identifier'], :ideas => begin (params['question']['ideas'].lines.to_a) rescue [] end) | 23 | + if @question = current_user.create_question(params['question']['visitor_identifier'], :name => params['question']['name'], :local_identifier => params['question']['local_identifier'], :ideas => begin (params['question']['ideas'].lines.to_a.delete_if? {|i| i.blank?}) rescue [] end) |
24 | respond_to do |format| | 24 | respond_to do |format| |
25 | format.xml { render :xml => @question.to_xml} | 25 | format.xml { render :xml => @question.to_xml} |
26 | end | 26 | end |
app/models/choice.rb
@@ -7,6 +7,7 @@ class Choice < ActiveRecord::Base | @@ -7,6 +7,7 @@ class Choice < ActiveRecord::Base | ||
7 | 7 | ||
8 | validates_presence_of :creator, :on => :create, :message => "can't be blank" | 8 | validates_presence_of :creator, :on => :create, :message => "can't be blank" |
9 | validates_presence_of :question, :on => :create, :message => "can't be blank" | 9 | validates_presence_of :question, :on => :create, :message => "can't be blank" |
10 | + #validates_length_of :item, :maximum => 140 | ||
10 | 11 | ||
11 | has_many :votes, :as => :voteable | 12 | has_many :votes, :as => :voteable |
12 | has_many :prompts_on_the_left, :class_name => "Prompt", :foreign_key => "left_choice_id" | 13 | has_many :prompts_on_the_left, :class_name => "Prompt", :foreign_key => "left_choice_id" |
@@ -51,6 +52,9 @@ class Choice < ActiveRecord::Base | @@ -51,6 +52,9 @@ class Choice < ActiveRecord::Base | ||
51 | unless self.score | 52 | unless self.score |
52 | self.score = 0.0 | 53 | self.score = 0.0 |
53 | end | 54 | end |
55 | + unless self.active? | ||
56 | + question.should_autoactivate_ideas? ? self.active = true : self.active = false | ||
57 | + end | ||
54 | return true #so active record will save | 58 | return true #so active record will save |
55 | end | 59 | end |
56 | 60 |
app/models/question.rb
@@ -24,23 +24,27 @@ class Question < ActiveRecord::Base | @@ -24,23 +24,27 @@ class Question < ActiveRecord::Base | ||
24 | choices_count | 24 | choices_count |
25 | end | 25 | end |
26 | 26 | ||
27 | - #TODO: generalize for prompts of rank > 2 | ||
28 | - #TODO: add index for rapid finding | ||
29 | - def picked_prompt(rank = 2) | ||
30 | - raise NotImplementedError.new("Sorry, we currently only support pairwise prompts. Rank of the prompt must be 2.") unless rank == 2 | 27 | + #TODO: generalize for prompts of rank > 2 |
28 | + #TODO: add index for rapid finding | ||
29 | + def picked_prompt(rank = 2) | ||
30 | + raise NotImplementedError.new("Sorry, we currently only support pairwise prompts. Rank of the prompt must be 2.") unless rank == 2 | ||
31 | + begin | ||
31 | choice_id_array = distinct_array_of_choice_ids(rank) | 32 | choice_id_array = distinct_array_of_choice_ids(rank) |
32 | @p ||= prompts.find_or_create_by_left_choice_id_and_right_choice_id(choice_id_array[0], choice_id_array[1], :include => [{ :left_choice => :item }, { :right_choice => :item }]) | 33 | @p ||= prompts.find_or_create_by_left_choice_id_and_right_choice_id(choice_id_array[0], choice_id_array[1], :include => [{ :left_choice => :item }, { :right_choice => :item }]) |
33 | - end | ||
34 | - memoize :picked_prompt | 34 | + end until @p.active? |
35 | + return @p | ||
36 | + end | ||
37 | + memoize :picked_prompt | ||
35 | 38 | ||
36 | def distinct_array_of_choice_ids(rank = 2, only_active = true) | 39 | def distinct_array_of_choice_ids(rank = 2, only_active = true) |
37 | @choice_ids = choice_ids | 40 | @choice_ids = choice_ids |
38 | @s = @choice_ids.size | 41 | @s = @choice_ids.size |
39 | begin | 42 | begin |
40 | - @the_choice_ids = Set.new(@choice_ids.values_at(rand(@s), rand(@s))) | 43 | + first_one, second_one = rand(@s), rand(@s) |
44 | + @the_choice_ids = Set.new(@choice_ids.values_at(first_one, second_one)) | ||
41 | # @the_choice_ids << choices.active.first(:order => 'RAND()', :select => 'id').id | 45 | # @the_choice_ids << choices.active.first(:order => 'RAND()', :select => 'id').id |
42 | # @the_choice_ids << choices.active.last(:order => 'RAND()', :select => 'id').id | 46 | # @the_choice_ids << choices.active.last(:order => 'RAND()', :select => 'id').id |
43 | - end until @the_choice_ids.size == rank | 47 | + end until (@the_choice_ids.size == rank) |
44 | logger.info "set populated and looks like #{@the_choice_ids.inspect}" | 48 | logger.info "set populated and looks like #{@the_choice_ids.inspect}" |
45 | return @the_choice_ids.to_a | 49 | return @the_choice_ids.to_a |
46 | end | 50 | end |
@@ -65,6 +69,9 @@ class Question < ActiveRecord::Base | @@ -65,6 +69,9 @@ class Question < ActiveRecord::Base | ||
65 | u.questions_voted_on.include? self | 69 | u.questions_voted_on.include? self |
66 | end | 70 | end |
67 | 71 | ||
72 | + def should_autoactivate_ideas? | ||
73 | + it_should_autoactivate_ideas? | ||
74 | + end | ||
68 | 75 | ||
69 | validates_presence_of :site, :on => :create, :message => "can't be blank" | 76 | validates_presence_of :site, :on => :create, :message => "can't be blank" |
70 | validates_presence_of :creator, :on => :create, :message => "can't be blank" | 77 | validates_presence_of :creator, :on => :create, :message => "can't be blank" |
db/migrate/20100107200151_add_flag_for_idea_activation_to_questions.rb
0 → 100644
@@ -0,0 +1,9 @@ | @@ -0,0 +1,9 @@ | ||
1 | +class AddFlagForIdeaActivationToQuestions < ActiveRecord::Migration | ||
2 | + def self.up | ||
3 | + add_column :questions, :it_should_autoactivate_ideas, :boolean, :default => false | ||
4 | + end | ||
5 | + | ||
6 | + def self.down | ||
7 | + remove_column :questions, :it_should_autoactivate_ideas | ||
8 | + end | ||
9 | +end |