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 | 52 | respond_to do |format| |
53 | 53 | if @choice = current_user.create_choice(params['params']['data'], @question, {:data => params['params']['data'], :local_identifier => params['params']['local_identifier']}) |
54 | 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 | 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 | 60 | format.json { render :json => @question.picked_prompt.to_json, :status => :ok } |
58 | 61 | else |
59 | 62 | format.xml { render :xml => @choice.errors, :status => :unprocessable_entity } |
... | ... | @@ -81,19 +84,19 @@ class ChoicesController < InheritedResources::Base |
81 | 84 | end |
82 | 85 | |
83 | 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 | 97 | end |
96 | 98 | end |
99 | + end | |
97 | 100 | |
98 | 101 | |
99 | 102 | def suspend | ... | ... |
app/controllers/questions_controller.rb
... | ... | @@ -20,7 +20,7 @@ class QuestionsController < InheritedResources::Base |
20 | 20 | def create |
21 | 21 | authenticate |
22 | 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 | 24 | respond_to do |format| |
25 | 25 | format.xml { render :xml => @question.to_xml} |
26 | 26 | end | ... | ... |
app/models/choice.rb
... | ... | @@ -7,6 +7,7 @@ class Choice < ActiveRecord::Base |
7 | 7 | |
8 | 8 | validates_presence_of :creator, :on => :create, :message => "can't be blank" |
9 | 9 | validates_presence_of :question, :on => :create, :message => "can't be blank" |
10 | + #validates_length_of :item, :maximum => 140 | |
10 | 11 | |
11 | 12 | has_many :votes, :as => :voteable |
12 | 13 | has_many :prompts_on_the_left, :class_name => "Prompt", :foreign_key => "left_choice_id" |
... | ... | @@ -51,6 +52,9 @@ class Choice < ActiveRecord::Base |
51 | 52 | unless self.score |
52 | 53 | self.score = 0.0 |
53 | 54 | end |
55 | + unless self.active? | |
56 | + question.should_autoactivate_ideas? ? self.active = true : self.active = false | |
57 | + end | |
54 | 58 | return true #so active record will save |
55 | 59 | end |
56 | 60 | ... | ... |
app/models/question.rb
... | ... | @@ -24,23 +24,27 @@ class Question < ActiveRecord::Base |
24 | 24 | choices_count |
25 | 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 | 32 | choice_id_array = distinct_array_of_choice_ids(rank) |
32 | 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 | 39 | def distinct_array_of_choice_ids(rank = 2, only_active = true) |
37 | 40 | @choice_ids = choice_ids |
38 | 41 | @s = @choice_ids.size |
39 | 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 | 45 | # @the_choice_ids << choices.active.first(:order => 'RAND()', :select => 'id').id |
42 | 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 | 48 | logger.info "set populated and looks like #{@the_choice_ids.inspect}" |
45 | 49 | return @the_choice_ids.to_a |
46 | 50 | end |
... | ... | @@ -65,6 +69,9 @@ class Question < ActiveRecord::Base |
65 | 69 | u.questions_voted_on.include? self |
66 | 70 | end |
67 | 71 | |
72 | + def should_autoactivate_ideas? | |
73 | + it_should_autoactivate_ideas? | |
74 | + end | |
68 | 75 | |
69 | 76 | validates_presence_of :site, :on => :create, :message => "can't be blank" |
70 | 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 @@ |
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 | ... | ... |