Commit d1736d29144dee413f9c64c92f1bd6ce562b8d31
1 parent
5e0f9114
Exists in
master
and in
1 other branch
replaced choice#votes_count/loss_count with wins/losses
Showing
8 changed files
with
46 additions
and
69 deletions
Show diff stats
app/controllers/choices_controller.rb
... | ... | @@ -34,15 +34,6 @@ class ChoicesController < InheritedResources::Base |
34 | 34 | |
35 | 35 | end |
36 | 36 | |
37 | - def show | |
38 | - show! do |format| | |
39 | - format.xml { | |
40 | - @choice.reload | |
41 | - render :xml => @choice.to_xml(:methods => [:wins_plus_losses])} | |
42 | - format.json { render :json => @choice.to_json(:methods => [:data])} | |
43 | - end | |
44 | - end | |
45 | - | |
46 | 37 | def votes |
47 | 38 | @choice = Choice.find(params[:id]) |
48 | 39 | render :xml => @choice.votes.to_xml | ... | ... |
app/models/choice.rb
... | ... | @@ -16,39 +16,11 @@ class Choice < ActiveRecord::Base |
16 | 16 | |
17 | 17 | after_save :update_questions_counter |
18 | 18 | |
19 | - attr_protected :prompts_count, :votes_count, :loss_count, :wins, :losses, :score, | |
20 | - :prompts_on_the_right_count, :prompts_on_the_left_count | |
19 | + attr_protected :prompts_count, :wins, :losses, :score, :prompts_on_the_right_count, :prompts_on_the_left_count | |
21 | 20 | |
22 | 21 | def update_questions_counter |
23 | 22 | self.question.update_attribute(:inactive_choices_count, self.question.choices.inactive.length) |
24 | 23 | end |
25 | - #attr_accessor :data | |
26 | - | |
27 | - def lose! | |
28 | - Choice.increment_counter(:loss_count, self.id) | |
29 | - self.loss_count +=1 # reflect the update just done above, so score is correct | |
30 | - self.score = compute_score | |
31 | - self.save | |
32 | - end | |
33 | - | |
34 | - def win! | |
35 | - self.votes_count += 1 rescue (self.votes_count = 1) | |
36 | - self.score = compute_score | |
37 | - self.save! | |
38 | - end | |
39 | - | |
40 | - def wins_plus_losses | |
41 | - wins + losses | |
42 | - end | |
43 | - | |
44 | - # TODO delete these and refactor loss_count and votes_count into losses and wins | |
45 | - def losses | |
46 | - loss_count || 0 | |
47 | - end | |
48 | - | |
49 | - def wins | |
50 | - votes_count || 0 | |
51 | - end | |
52 | 24 | |
53 | 25 | def before_create |
54 | 26 | unless self.score | ... | ... |
app/models/vote.rb
... | ... | @@ -9,8 +9,8 @@ class Vote < ActiveRecord::Base |
9 | 9 | belongs_to :voter, :class_name => "Visitor", :foreign_key => "voter_id" |
10 | 10 | belongs_to :question, :counter_cache => true |
11 | 11 | belongs_to :prompt, :counter_cache => true |
12 | - belongs_to :choice, :counter_cache => true | |
13 | - belongs_to :loser_choice, :class_name => "Choice", :foreign_key => "loser_choice_id" | |
12 | + belongs_to :choice, :counter_cache => true, :counter_cache => :wins | |
13 | + belongs_to :loser_choice, :class_name => "Choice", :foreign_key => "loser_choice_id", :counter_cache => :losses | |
14 | 14 | has_one :appearance, :as => :answerable |
15 | 15 | |
16 | 16 | named_scope :recent, lambda { |*args| {:conditions => ["created_at > ?", (args.first || Date.today.beginning_of_day)]} } |
... | ... | @@ -25,10 +25,12 @@ class Vote < ActiveRecord::Base |
25 | 25 | after_create :update_winner_choice, :update_loser_choice |
26 | 26 | |
27 | 27 | def update_winner_choice |
28 | - choice.win! | |
28 | + choice.reload # make sure we're using updated counter values | |
29 | + choice.compute_score! | |
29 | 30 | end |
30 | 31 | |
31 | 32 | def update_loser_choice |
32 | - loser_choice.lose! | |
33 | + loser_choice.reload | |
34 | + loser_choice.compute_score! | |
33 | 35 | end |
34 | 36 | end | ... | ... |
db/migrate/20100727203816_remove_wins_losses_and_rename_counts.rb
0 → 100644
... | ... | @@ -0,0 +1,15 @@ |
1 | +class RemoveWinsLossesAndRenameCounts < ActiveRecord::Migration | |
2 | + def self.up | |
3 | + remove_column :choices, :wins | |
4 | + remove_column :choices, :losses | |
5 | + rename_column :choices, :votes_count, :wins | |
6 | + rename_column :choices, :loss_count, :losses | |
7 | + end | |
8 | + | |
9 | + def self.down | |
10 | + rename_column :choices, :wins, :votes_count | |
11 | + rename_column :choices, :losses, :loss_count | |
12 | + add_column :choices, :wins, :integer | |
13 | + add_column :choices, :losses, :integer | |
14 | + end | |
15 | +end | ... | ... |
db/schema.rb
... | ... | @@ -9,7 +9,7 @@ |
9 | 9 | # |
10 | 10 | # It's strongly recommended to check this file into your version control system. |
11 | 11 | |
12 | -ActiveRecord::Schema.define(:version => 20100722052215) do | |
12 | +ActiveRecord::Schema.define(:version => 20100727203816) do | |
13 | 13 | |
14 | 14 | create_table "appearances", :force => true do |t| |
15 | 15 | t.integer "voter_id" |
... | ... | @@ -32,9 +32,7 @@ ActiveRecord::Schema.define(:version => 20100722052215) do |
32 | 32 | t.integer "item_id" |
33 | 33 | t.integer "question_id" |
34 | 34 | t.integer "position" |
35 | - t.integer "wins" | |
36 | 35 | t.integer "ratings" |
37 | - t.integer "losses" | |
38 | 36 | t.datetime "created_at" |
39 | 37 | t.datetime "updated_at" |
40 | 38 | t.integer "request_id" |
... | ... | @@ -45,8 +43,8 @@ ActiveRecord::Schema.define(:version => 20100722052215) do |
45 | 43 | t.string "local_identifier" |
46 | 44 | t.integer "prompts_on_the_left_count", :default => 0 |
47 | 45 | t.integer "prompts_on_the_right_count", :default => 0 |
48 | - t.integer "votes_count", :default => 0 | |
49 | - t.integer "loss_count", :default => 0 | |
46 | + t.integer "wins", :default => 0 | |
47 | + t.integer "losses", :default => 0 | |
50 | 48 | t.integer "prompts_count", :default => 0 |
51 | 49 | t.string "data" |
52 | 50 | t.integer "creator_id" | ... | ... |
spec/models/choice_spec.rb
... | ... | @@ -27,8 +27,6 @@ describe Choice do |
27 | 27 | @unreasonable_value = 9999 |
28 | 28 | @protected_attributes = {} |
29 | 29 | [ :prompts_count, |
30 | - :votes_count, | |
31 | - :loss_count, | |
32 | 30 | :wins, |
33 | 31 | :losses, |
34 | 32 | :score, |
... | ... | @@ -100,15 +98,15 @@ describe Choice do |
100 | 98 | end |
101 | 99 | it "correctly compute a score based on wins and losses" do |
102 | 100 | choice1 = Choice.create!(@valid_attributes) |
103 | - choice1.votes_count = 30 | |
104 | - choice1.loss_count = 70 | |
101 | + choice1.wins = 30 | |
102 | + choice1.losses = 70 | |
105 | 103 | choice1.compute_score.should be_close(30,1) |
106 | 104 | end |
107 | 105 | it "compute score and save" do |
108 | 106 | choice1 = Choice.create!(@valid_attributes) |
109 | 107 | choice1.score.should == 50 |
110 | - choice1.votes_count= 30 | |
111 | - choice1.loss_count = 70 | |
108 | + choice1.wins = 30 | |
109 | + choice1.losses = 70 | |
112 | 110 | choice1.compute_score! |
113 | 111 | choice1.score.should be_close(30, 1) |
114 | 112 | end |
... | ... | @@ -124,15 +122,19 @@ describe Choice do |
124 | 122 | end |
125 | 123 | |
126 | 124 | describe "voting updates things" do |
127 | - before do | |
128 | - @prompt = @question.choose_prompt | |
129 | - @winning_choice = @prompt.left_choice | |
130 | - @losing_choice = @prompt.right_choice | |
131 | - @winning_choice.win! | |
132 | - @losing_choice.lose! | |
125 | + before do | |
126 | + @prompt = @question.choose_prompt | |
127 | + @winning_choice = @prompt.left_choice | |
128 | + @losing_choice = @prompt.right_choice | |
129 | + vote = Vote.create!(:choice_id => @winning_choice.id, | |
130 | + :loser_choice_id => @losing_choice.id, | |
131 | + :question_id => @question.id, | |
132 | + :voter_id => @visitor.id, | |
133 | + :prompt_id => @prompt.id ) | |
133 | 134 | end |
134 | 135 | |
135 | 136 | it "should update score on a win" do |
137 | + @winning_choice.reload | |
136 | 138 | @winning_choice.score.should be_close(67, 1) |
137 | 139 | end |
138 | 140 | it "should update score on a loss" do |
... | ... | @@ -140,15 +142,13 @@ describe Choice do |
140 | 142 | @losing_choice.score.should be_close(33,1) |
141 | 143 | end |
142 | 144 | it "should update win count on a win" do |
143 | - @winning_choice.votes_count.should == 1 | |
145 | + @winning_choice.reload | |
144 | 146 | @winning_choice.wins.should == 1 |
145 | - @winning_choice.loss_count.should == 0 | |
146 | 147 | @winning_choice.losses.should == 0 |
147 | 148 | end |
148 | 149 | it "should update loss count on a loss" do |
149 | - @losing_choice.votes_count.should == 0 | |
150 | + @losing_choice.reload | |
150 | 151 | @losing_choice.wins.should == 0 |
151 | - @losing_choice.loss_count.should == 1 | |
152 | 152 | @losing_choice.losses.should == 1 |
153 | 153 | end |
154 | 154 | end | ... | ... |
spec/models/question_spec.rb
... | ... | @@ -173,7 +173,7 @@ describe Question do |
173 | 173 | it "should provide average voter information" do |
174 | 174 | params = {:id => 124, :visitor_identifier => "jim", :with_prompt => true, :with_appearance => true, :with_average_votes => true } |
175 | 175 | @question_optional_information = @question.get_optional_information(params) |
176 | - @question_optional_information[:average_votes].should be_an_instance_of(Float) | |
176 | + @question_optional_information[:average_votes].should be_an_instance_of(Fixnum) | |
177 | 177 | @question_optional_information[:average_votes].should be_close(0.0, 0.1) |
178 | 178 | |
179 | 179 | vote_options = {:visitor_identifier => "jim", | ... | ... |
spec/models/vote_spec.rb
... | ... | @@ -38,18 +38,18 @@ describe Vote do |
38 | 38 | end |
39 | 39 | it "should update counter cache on choice" do |
40 | 40 | @prompt.left_choice.votes.size.should == 0 |
41 | - @prompt.left_choice.votes_count.should == 0 | |
41 | + @prompt.left_choice.wins.should == 0 | |
42 | 42 | Factory.create(:vote, :question => @question, :prompt => @prompt, |
43 | 43 | :choice => @prompt.left_choice) |
44 | 44 | |
45 | 45 | @prompt.left_choice.reload |
46 | 46 | @prompt.left_choice.votes.size.should == 1 |
47 | - @prompt.left_choice.votes_count.should == 1 | |
47 | + @prompt.left_choice.wins.should == 1 | |
48 | 48 | end |
49 | 49 | it "should update counter cache on loser_choice" do |
50 | 50 | @prompt.left_choice.votes.size.should == 0 |
51 | 51 | @prompt.right_choice.losses.should == 0 |
52 | - @prompt.left_choice.votes_count.should == 0 | |
52 | + @prompt.left_choice.wins.should == 0 | |
53 | 53 | Factory.create(:vote, :question => @question, :prompt => @prompt, |
54 | 54 | :choice => @prompt.left_choice, |
55 | 55 | :loser_choice => @prompt.right_choice) |
... | ... | @@ -57,8 +57,7 @@ describe Vote do |
57 | 57 | |
58 | 58 | @prompt.right_choice.reload |
59 | 59 | @prompt.right_choice.votes.size.should == 0 |
60 | - @prompt.right_choice.votes_count.should == 0 | |
61 | - @prompt.right_choice.loss_count.should == 1 | |
60 | + @prompt.right_choice.wins.should == 0 | |
62 | 61 | @prompt.right_choice.losses.should == 1 |
63 | 62 | end |
64 | 63 | ... | ... |