activerecord-reputation-system 1.5.1 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (26) hide show
  1. data/README.md +29 -198
  2. data/lib/activerecord-reputation-system.rb +1 -0
  3. data/lib/reputation_system.rb +6 -6
  4. data/lib/reputation_system/base.rb +16 -6
  5. data/lib/reputation_system/{evaluation.rb → evaluation_methods.rb} +32 -13
  6. data/lib/reputation_system/models/evaluation.rb +73 -0
  7. data/lib/reputation_system/models/reputation.rb +211 -0
  8. data/lib/reputation_system/models/reputation_message.rb +49 -0
  9. data/lib/reputation_system/network.rb +2 -0
  10. data/lib/reputation_system/query_builder.rb +4 -4
  11. data/lib/reputation_system/{reputation.rb → reputation_methods.rb} +5 -15
  12. data/lib/reputation_system/{scope.rb → scope_methods.rb} +2 -2
  13. data/lib/reputation_system/version.rb +1 -1
  14. data/spec/reputation_system/base_spec.rb +46 -6
  15. data/spec/reputation_system/{evaluation_spec.rb → evaluation_methods_spec.rb} +52 -9
  16. data/spec/{models/rs_evaluation_spec.rb → reputation_system/models/evaluation_spec.rb} +8 -8
  17. data/spec/{models/rs_reputation_message_spec.rb → reputation_system/models/reputation_message_spec.rb} +10 -10
  18. data/spec/reputation_system/models/reputation_spec.rb +136 -0
  19. data/spec/reputation_system/{reputation_spec.rb → reputation_methods_spec.rb} +2 -2
  20. data/spec/reputation_system/{scope_spec.rb → scope_methods_spec.rb} +0 -0
  21. data/spec/spec_helper.rb +2 -4
  22. metadata +15 -14
  23. data/lib/models/rs_evaluation.rb +0 -69
  24. data/lib/models/rs_reputation.rb +0 -204
  25. data/lib/models/rs_reputation_message.rb +0 -46
  26. data/spec/models/rs_reputation_spec.rb +0 -119
@@ -48,15 +48,55 @@ describe ActiveRecord::Base do
48
48
 
49
49
  it "should delete reputations if target is deleted" do
50
50
  @question.add_evaluation(:total_votes, 5, @user)
51
- reputation_count = RSReputation.count
52
- message_count = RSReputationMessage.count
51
+ reputation_count = ReputationSystem::Reputation.count
52
+ message_count = ReputationSystem::ReputationMessage.count
53
53
  @question.destroy
54
- RSReputation.count.should < reputation_count
55
- RSReputationMessage.count.should < message_count
54
+ ReputationSystem::Reputation.count.should < reputation_count
55
+ ReputationSystem::ReputationMessage.count.should < message_count
56
56
  end
57
+ end
58
+ end
57
59
 
58
- it "should have declared default value if any" do
59
- @answer.reputation_for(:avg_rating).should == 1
60
+ context "Association" do
61
+ describe "#reputations" do
62
+ it "should define reputations association" do
63
+ @question.respond_to?(:reputations).should == true
64
+ end
65
+ it "should return all reputations for the target" do
66
+ @question.add_evaluation(:total_votes, 2, @user)
67
+ @question.add_evaluation(:difficulty, 2, @user)
68
+ @question.reputations.count.should == 2
69
+ end
70
+ describe "#for" do
71
+ it "should return empty array if there is no reputation for the target" do
72
+ @question.reputations.for(:total_votes).should == []
73
+ end
74
+ it "should return all reputations of the given type for the target" do
75
+ @question.add_evaluation(:total_votes, 2, @user)
76
+ @question.add_evaluation(:difficulty, 2, @user)
77
+ @question.reputations.for(:total_votes).count.should == 1
78
+ end
79
+ end
80
+ end
81
+
82
+ describe "#evaluations" do
83
+ it "should define evaluations association" do
84
+ @question.respond_to?(:evaluations).should == true
85
+ end
86
+ it "should return all evaluations for the target" do
87
+ @question.add_evaluation(:total_votes, 2, @user)
88
+ @question.add_evaluation(:difficulty, 2, @user)
89
+ @question.evaluations.count.should == 2
90
+ end
91
+ describe "#for" do
92
+ it "should return empty array if there is no evaluation for the target" do
93
+ @question.evaluations.for(:total_votes).should == []
94
+ end
95
+ it "should return all evaluations of the given type for the target" do
96
+ @question.add_evaluation(:total_votes, 2, @user)
97
+ @question.add_evaluation(:difficulty, 2, @user)
98
+ @question.evaluations.for(:total_votes).count.should == 1
99
+ end
60
100
  end
61
101
  end
62
102
  end
@@ -26,11 +26,33 @@ describe ActiveRecord::Base do
26
26
  end
27
27
 
28
28
  context "Primary Reputation" do
29
+ describe "#has_evaluation?" do
30
+ it "should return false if it has not already been evaluated by a given source" do
31
+ user = User.create! :name => 'katsuya'
32
+ @question.add_evaluation(:total_votes, 3, user)
33
+ @question.has_evaluation?(:total_votes, @user).should be_false
34
+ end
35
+ it "should return true if it has been evaluated by a given source" do
36
+ @question.add_evaluation(:total_votes, 3, @user)
37
+ @question.has_evaluation?(:total_votes, @user).should be_true
38
+ end
39
+ context "With Scopes" do
40
+ it "should return false if it has not already been evaluated by a given source" do
41
+ @phrase.add_evaluation(:difficulty_with_scope, 3, @user, :s1)
42
+ @phrase.has_evaluation?(:difficulty_with_scope, @user, :s2).should be_false
43
+ end
44
+ it "should return true if it has been evaluated by a given source" do
45
+ @phrase.add_evaluation(:difficulty_with_scope, 3, @user, :s1)
46
+ @phrase.has_evaluation?(:difficulty_with_scope, @user, :s1).should be_true
47
+ end
48
+ end
49
+ end
50
+
29
51
  describe "#evaluated_by" do
30
- it "should return an empty array if it is not evaluaated by a given source" do
52
+ it "should return an empty array if it is not evaluated by a given source" do
31
53
  Question.evaluated_by(:total_votes, @user).should == []
32
54
  end
33
-
55
+
34
56
  it "should return an array of targets evaluated by a given source" do
35
57
  user2 = User.create!(:name => 'katsuya')
36
58
  question2 = Question.create!(:text => 'Question 2', :author_id => @user.id)
@@ -61,13 +83,34 @@ describe ActiveRecord::Base do
61
83
  Phrase.evaluated_by(:difficulty_with_scope, @user, :s3).should == [phrase2]
62
84
  Phrase.evaluated_by(:difficulty_with_scope, user2, :s3).should == [@phrase]
63
85
  end
86
+ end
87
+ end
64
88
 
65
- it "should raise exception if invalid scope is given" do
66
- lambda { @phrase.add_evaluation(:difficulty_with_scope, 1, :invalid_scope) }.should raise_error(ArgumentError)
67
- end
89
+ describe "#evaluators_for" do
90
+ it "should return an empty array if it is not evaluated for a given reputation" do
91
+ @question.evaluators_for(:total_votes).should == []
92
+ end
68
93
 
69
- it "should raise exception if scope is not given" do
70
- lambda { @phrase.add_evaluation(:difficulty_with_scope, 1) }.should raise_error(ArgumentError)
94
+ it "should return an array of sources evaluated the target" do
95
+ user2 = User.create!(:name => 'katsuya')
96
+ question2 = Question.create!(:text => 'Question 2', :author_id => @user.id)
97
+ @question.add_evaluation(:total_votes, 1, @user).should be_true
98
+ question2.add_evaluation(:total_votes, 1, @user).should be_true
99
+ question2.add_evaluation(:total_votes, 2, user2).should be_true
100
+ @question.evaluators_for(:total_votes).should == [@user]
101
+ question2.evaluators_for(:total_votes).should == [@user, user2]
102
+ end
103
+
104
+ context "With Scopes" do
105
+ it "should return an array of targets evaluated by a given source on appropriate scope" do
106
+ user2 = User.create!(:name => 'katsuya')
107
+ @phrase.add_evaluation(:difficulty_with_scope, 1, @user, :s1).should be_true
108
+ @phrase.add_evaluation(:difficulty_with_scope, 2, @user, :s2).should be_true
109
+ @phrase.add_evaluation(:difficulty_with_scope, 3, user2, :s2).should be_true
110
+ @phrase.add_evaluation(:difficulty_with_scope, 4, user2, :s3).should be_true
111
+ @phrase.evaluators_for(:difficulty_with_scope, :s1).should == [@user]
112
+ @phrase.evaluators_for(:difficulty_with_scope, :s2).should == [@user, user2]
113
+ @phrase.evaluators_for(:difficulty_with_scope, :s3).should == [user2]
71
114
  end
72
115
  end
73
116
  end
@@ -251,8 +294,8 @@ describe ActiveRecord::Base do
251
294
  lambda { @question.delete_evaluation(:invalid, @user) }.should raise_error(ArgumentError)
252
295
  end
253
296
 
254
- it "should return nil if evaluation does not exist" do
255
- @answer.delete_evaluation(:avg_rating, @user).should be_nil
297
+ it "should return false if evaluation does not exist" do
298
+ @answer.delete_evaluation(:avg_rating, @user).should be_false
256
299
  end
257
300
 
258
301
  context "With Scopes" do
@@ -16,7 +16,7 @@
16
16
 
17
17
  require 'spec_helper'
18
18
 
19
- describe RSEvaluation do
19
+ describe ReputationSystem::Evaluation do
20
20
  before(:each) do
21
21
  @user = User.create!(:name => 'jack')
22
22
  @question = Question.create!(:text => 'What is Twitter?', :author_id => @user.id)
@@ -27,8 +27,8 @@ describe RSEvaluation do
27
27
  @attributes = {:reputation_name => 'total_votes', :source => @user, :target => @question, :value => 1}
28
28
  end
29
29
  it "should not be able to create an evaluation from given source if it has already evaluated the same reputation of the target" do
30
- RSEvaluation.create!(@attributes)
31
- lambda {RSEvaluation.create!(@attributes)}.should raise_error
30
+ ReputationSystem::Evaluation.create!(@attributes)
31
+ lambda {ReputationSystem::Evaluation.create!(@attributes)}.should raise_error
32
32
  end
33
33
  end
34
34
 
@@ -37,14 +37,14 @@ describe RSEvaluation do
37
37
  it "should assign source class name as source type if not STI" do
38
38
  question = Question.create!(:text => 'Does this work?', :author_id => @user.id)
39
39
  question.add_evaluation(:total_votes, 5, @user)
40
- evaluation = RSEvaluation.find_by_reputation_name_and_source_and_target(:total_votes, @user, question)
40
+ evaluation = ReputationSystem::Evaluation.find_by_reputation_name_and_source_and_target(:total_votes, @user, question)
41
41
  evaluation.source_type.should == @user.class.name
42
42
  end
43
43
  it "should assign source's ancestors class name where reputation is declared if STI" do
44
44
  designer = Designer.create! :name => 'hiro'
45
45
  programmer = Programmer.create! :name => 'katsuya'
46
46
  programmer.add_evaluation(:leadership, 1, designer)
47
- evaluation = RSEvaluation.find_by_reputation_name_and_source_and_target(:leadership, designer, programmer)
47
+ evaluation = ReputationSystem::Evaluation.find_by_reputation_name_and_source_and_target(:leadership, designer, programmer)
48
48
  evaluation.source_type.should == Person.name
49
49
  end
50
50
  end
@@ -53,10 +53,10 @@ describe RSEvaluation do
53
53
  context "Association" do
54
54
  it "should delete associated reputation message" do
55
55
  @question.add_evaluation(:total_votes, 5, @user)
56
- evaluation = RSEvaluation.find_by_reputation_name_and_source_and_target(:total_votes, @user, @question)
57
- RSReputationMessage.find_by_sender_id_and_sender_type(evaluation.id, evaluation.class.name).should_not be_nil
56
+ evaluation = ReputationSystem::Evaluation.find_by_reputation_name_and_source_and_target(:total_votes, @user, @question)
57
+ ReputationSystem::ReputationMessage.find_by_sender_id_and_sender_type(evaluation.id, evaluation.class.name).should_not be_nil
58
58
  @question.delete_evaluation(:total_votes, @user)
59
- RSReputationMessage.find_by_sender_id_and_sender_type(evaluation.id, evaluation.class.name).should be_nil
59
+ ReputationSystem::ReputationMessage.find_by_sender_id_and_sender_type(evaluation.id, evaluation.class.name).should be_nil
60
60
  end
61
61
  end
62
62
  end
@@ -16,21 +16,21 @@
16
16
 
17
17
  require 'spec_helper'
18
18
 
19
- describe RSReputationMessage do
19
+ describe ReputationSystem::ReputationMessage do
20
20
  before(:each) do
21
21
  @user = User.create!(:name => 'jack')
22
- @rep1 = RSReputation.create!(:reputation_name => "karma1", :target_id => @user.id, :target_type => @user.class.to_s, :aggregated_by => 'sum')
23
- @rep2 = RSReputation.create!(:reputation_name => "karma2", :target_id => @user.id, :target_type => @user.class.to_s, :aggregated_by => 'sum')
22
+ @rep1 = ReputationSystem::Reputation.create!(:reputation_name => "karma1", :target_id => @user.id, :target_type => @user.class.to_s, :aggregated_by => 'sum')
23
+ @rep2 = ReputationSystem::Reputation.create!(:reputation_name => "karma2", :target_id => @user.id, :target_type => @user.class.to_s, :aggregated_by => 'sum')
24
24
  end
25
25
 
26
26
  context "Validation" do
27
27
  it "should not be able to create a message from given sender if it has already sent one to the same receiver" do
28
- RSReputationMessage.create(:sender => @rep1, :receiver => @rep2).should be_valid
29
- RSReputationMessage.create(:sender => @rep1, :receiver => @rep2).should_not be_valid
28
+ ReputationSystem::ReputationMessage.create(:sender => @rep1, :receiver => @rep2).should be_valid
29
+ ReputationSystem::ReputationMessage.create(:sender => @rep1, :receiver => @rep2).should_not be_valid
30
30
  end
31
31
 
32
- it "should have raise error if sender is neither RSEvaluation and RSReputation" do
33
- RSReputationMessage.create(:sender => @user, :receiver => @rep2).errors[:sender].should_not be_nil
32
+ it "should have raise error if sender is neither ReputationSystem::Evaluation and ReputationSystem::Reputation" do
33
+ ReputationSystem::ReputationMessage.create(:sender => @user, :receiver => @rep2).errors[:sender].should_not be_nil
34
34
  end
35
35
  end
36
36
 
@@ -38,10 +38,10 @@ describe RSReputationMessage do
38
38
  it "should delete associated sender if it is evaluation" do
39
39
  question = Question.create!(:text => 'What is Twitter?', :author_id => @user.id)
40
40
  question.add_evaluation(:total_votes, 5, @user)
41
- evaluation = RSEvaluation.find_by_reputation_name_and_source_and_target(:total_votes, @user, question)
42
- m = RSReputationMessage.find_by_sender_id_and_sender_type(evaluation.id, evaluation.class.name)
41
+ evaluation = ReputationSystem::Evaluation.find_by_reputation_name_and_source_and_target(:total_votes, @user, question)
42
+ m = ReputationSystem::ReputationMessage.find_by_sender_id_and_sender_type(evaluation.id, evaluation.class.name)
43
43
  m.destroy
44
44
  lambda { evaluation.reload }.should raise_error ActiveRecord::RecordNotFound
45
45
  end
46
46
  end
47
- end
47
+ end
@@ -0,0 +1,136 @@
1
+ ##
2
+ # Copyright 2012 Twitter, Inc
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+ ##
16
+
17
+ require 'spec_helper'
18
+
19
+ describe ReputationSystem::Reputation do
20
+ before(:each) do
21
+ @user = User.create!(:name => 'jack')
22
+ end
23
+
24
+ context "Validation" do
25
+ it "should have value 0 by default in case of non product process" do
26
+ r = ReputationSystem::Reputation.create!(:reputation_name => "karma", :target_id => @user.id, :target_type => @user.class.to_s, :aggregated_by => 'sum')
27
+ r.value.should == 0
28
+ end
29
+
30
+ it "should be able to change value to 0 if process is not product process" do
31
+ r = ReputationSystem::Reputation.create!(:reputation_name => "karma", :target_id => @user.id, :target_type => @user.class.to_s, :aggregated_by => 'sum', :value => 10)
32
+ r.value = 0
33
+ r.save!
34
+ r.reload
35
+ r.value.should == 0
36
+ end
37
+
38
+ it "should have value 1 by default in case of product process" do
39
+ r = ReputationSystem::Reputation.create!(:reputation_name => "karma", :target_id => @user.id, :target_type => @user.class.to_s, :aggregated_by => 'product')
40
+ r.value.should == 1
41
+ end
42
+
43
+ it "should be able to create reputation with process 'sum', 'average' and 'product'" do
44
+ ReputationSystem::Reputation.create(:reputation_name => "karma1", :target_id => @user.id, :target_type => @user.class.to_s, :aggregated_by => 'sum').should be_valid
45
+ ReputationSystem::Reputation.create(:reputation_name => "karma2", :target_id => @user.id, :target_type => @user.class.to_s, :aggregated_by => 'average').should be_valid
46
+ ReputationSystem::Reputation.create(:reputation_name => "karma3", :target_id => @user.id, :target_type => @user.class.to_s, :aggregated_by => 'product').should be_valid
47
+ end
48
+
49
+ it "should not be able to create reputation with process other than 'sum', 'average' and 'product'" do
50
+ ReputationSystem::Reputation.create(:reputation_name => "karma", :target_id => @user.id, :target_type => @user.class.to_s, :aggregated_by => 'invalid').should_not be_valid
51
+ end
52
+
53
+ it "should not be able to create reputation of the same name for the same target" do
54
+ ReputationSystem::Reputation.create(:reputation_name => "karma", :target_id => @user.id, :target_type => @user.class.to_s, :aggregated_by => 'sum').should be_valid
55
+ ReputationSystem::Reputation.create(:reputation_name => "karma", :target_id => @user.id, :target_type => @user.class.to_s, :aggregated_by => 'sum').should_not be_valid
56
+ end
57
+ end
58
+
59
+ context "Callback" do
60
+ describe "#set_target_type_for_sti" do
61
+ it "should assign target class name as target type if not STI" do
62
+ question = Question.create!(:text => 'Does this work?', :author_id => @user.id)
63
+ question.add_evaluation(:total_votes, 5, @user)
64
+ rep = ReputationSystem::Reputation.find_by_reputation_name_and_target(:total_votes, question)
65
+ rep.target_type.should == question.class.name
66
+ end
67
+ it "should assign target's ancestors class name where reputation is declared if STI" do
68
+ designer = Designer.create! :name => 'hiro'
69
+ programmer = Programmer.create! :name => 'katsuya'
70
+ programmer.add_evaluation(:leadership, 1, designer)
71
+ rep = ReputationSystem::Reputation.find_by_reputation_name_and_target(:leadership, programmer)
72
+ rep.target_type.should == Person.name
73
+ end
74
+ end
75
+ end
76
+
77
+ context "Association" do
78
+ before :each do
79
+ @question = Question.create!(:text => 'What is Twitter?', :author_id => @user.id)
80
+ @question.add_evaluation(:total_votes, 5, @user)
81
+ end
82
+
83
+ it "should delete associated received messages" do
84
+ rep = ReputationSystem::Reputation.find_by_target_id_and_target_type(@question.id, 'Question')
85
+ ReputationSystem::ReputationMessage.find_by_receiver_id(rep.id).should_not be_nil
86
+ rep.destroy
87
+ ReputationSystem::ReputationMessage.find_by_receiver_id(rep.id).should be_nil
88
+ end
89
+
90
+ it "should delete associated sent messages" do
91
+ rep = ReputationSystem::Reputation.find_by_target_id_and_target_type(@user.id, 'User')
92
+ ReputationSystem::ReputationMessage.find_by_sender_id_and_sender_type(rep.id, rep.class.name).should_not be_nil
93
+ rep.destroy
94
+ ReputationSystem::ReputationMessage.find_by_sender_id_and_sender_type(rep.id, rep.class.name).should be_nil
95
+ end
96
+ end
97
+
98
+ describe "#normalized_value" do
99
+ before :each do
100
+ @user2 = User.create!(:name => 'dick')
101
+ @user3 = User.create!(:name => 'foo')
102
+ question = Question.new(:text => "Does this work?", :author_id => @user.id)
103
+ @r1 = ReputationSystem::Reputation.create!(:reputation_name => "karma", :value => 2, :target_id => @user.id, :target_type => @user.class.to_s, :aggregated_by => 'sum')
104
+ @r2 = ReputationSystem::Reputation.create!(:reputation_name => "karma", :value => 6, :target_id => @user2.id, :target_type => @user2.class.to_s, :aggregated_by => 'sum')
105
+ @r3 = ReputationSystem::Reputation.create!(:reputation_name => "karma", :value => 10, :target_id => @user3.id, :target_type => @user3.class.to_s, :aggregated_by => 'sum')
106
+ @r4 = ReputationSystem::Reputation.create!(:reputation_name => "karma", :value => 10, :target_id => question.id, :target_type => question.class.to_s, :aggregated_by => 'sum')
107
+ end
108
+
109
+ it "should return correct normalized value" do
110
+ @r1.normalized_value.should be_within(DELTA).of(0)
111
+ @r2.normalized_value.should be_within(DELTA).of(0.5)
112
+ @r3.normalized_value.should be_within(DELTA).of(1)
113
+ end
114
+
115
+ it "should return 0 if max and min are the same" do
116
+ @r4.normalized_value.should be_within(DELTA).of(0)
117
+ end
118
+ end
119
+
120
+ describe "value propagation with average process" do
121
+ it "should calculate average reputation even after evaluation is deleted" do
122
+ user1 = User.create! :name => 'dick'
123
+ user2 = User.create! :name => 'katsuya'
124
+ answer = Answer.create!
125
+ answer.add_evaluation(:avg_rating, 3, user1)
126
+ answer.add_evaluation(:avg_rating, 2, user2)
127
+ answer.reputation_for(:avg_rating).should be_within(DELTA).of(2.5)
128
+ answer.delete_evaluation(:avg_rating, user1)
129
+ answer.reputation_for(:avg_rating).should be_within(DELTA).of(2)
130
+ answer.delete_evaluation(:avg_rating, user2)
131
+ answer.reputation_for(:avg_rating).should be_within(DELTA).of(0)
132
+ answer.add_evaluation(:avg_rating, 3, user1)
133
+ answer.reputation_for(:avg_rating).should be_within(DELTA).of(3)
134
+ end
135
+ end
136
+ end
@@ -153,9 +153,9 @@ describe ActiveRecord::Base do
153
153
  @question2.add_evaluation(:total_votes, 70, @user)
154
154
  @question.add_evaluation(:total_votes, 100, @user)
155
155
  @question.deactivate_all_reputations
156
- RSReputation.maximum(:value, :conditions => {:reputation_name => 'total_votes', :active => true}).should == 70
156
+ ReputationSystem::Reputation.maximum(:value, :conditions => {:reputation_name => 'total_votes', :active => true}).should == 70
157
157
  @question.activate_all_reputations
158
- RSReputation.maximum(:value, :conditions => {:reputation_name => 'total_votes', :active => true}).should == 100
158
+ ReputationSystem::Reputation.maximum(:value, :conditions => {:reputation_name => 'total_votes', :active => true}).should == 100
159
159
  end
160
160
  end
161
161
  end
@@ -135,7 +135,6 @@ class Question < ActiveRecord::Base
135
135
 
136
136
  has_reputation :total_votes,
137
137
  :source => :user,
138
- :aggregated_by => :sum,
139
138
  :source_of => { :reputation => :question_karma, :of => :author }
140
139
 
141
140
  has_reputation :difficulty,
@@ -156,8 +155,7 @@ class Answer < ActiveRecord::Base
156
155
 
157
156
  has_reputation :avg_rating,
158
157
  :source => :user,
159
- :aggregated_by => :average,
160
- :init_value => 1
158
+ :aggregated_by => :average
161
159
  end
162
160
 
163
161
  class Phrase < ActiveRecord::Base
@@ -192,7 +190,7 @@ class Translation < ActiveRecord::Base
192
190
  has_reputation :votes,
193
191
  :source => :user,
194
192
  :aggregated_by => :sum,
195
- :source_of => { :reputation => :maturity, :of => :phrase, :scope => :locale}
193
+ :source_of => { :reputation => :maturity, :of => :phrase, :scope => :locale}
196
194
  end
197
195
 
198
196
  class Person < ActiveRecord::Base
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: activerecord-reputation-system
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 1.5.1
5
+ version: 2.0.0
6
6
  platform: ruby
7
7
  authors:
8
8
  - Katsuya Noguchi
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2012-10-04 00:00:00 Z
13
+ date: 2012-10-05 00:00:00 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: activerecord
@@ -91,6 +91,7 @@ files:
91
91
  - LICENSE
92
92
  - README.md
93
93
  - Rakefile
94
+ - lib/activerecord-reputation-system.rb
94
95
  - lib/generators/reputation_system/reputation_system_generator.rb
95
96
  - lib/generators/reputation_system/templates/add_evaluations_index.rb
96
97
  - lib/generators/reputation_system/templates/add_reputation_messages_index.rb
@@ -99,28 +100,28 @@ files:
99
100
  - lib/generators/reputation_system/templates/change_reputation_messages_index_to_unique.rb
100
101
  - lib/generators/reputation_system/templates/change_reputations_index_to_unique.rb
101
102
  - lib/generators/reputation_system/templates/create_reputation_system.rb
102
- - lib/models/rs_evaluation.rb
103
- - lib/models/rs_reputation.rb
104
- - lib/models/rs_reputation_message.rb
105
103
  - lib/reputation_system/base.rb
106
- - lib/reputation_system/evaluation.rb
104
+ - lib/reputation_system/evaluation_methods.rb
107
105
  - lib/reputation_system/finder_methods.rb
106
+ - lib/reputation_system/models/evaluation.rb
107
+ - lib/reputation_system/models/reputation.rb
108
+ - lib/reputation_system/models/reputation_message.rb
108
109
  - lib/reputation_system/network.rb
109
110
  - lib/reputation_system/query_builder.rb
110
111
  - lib/reputation_system/query_methods.rb
111
- - lib/reputation_system/reputation.rb
112
- - lib/reputation_system/scope.rb
112
+ - lib/reputation_system/reputation_methods.rb
113
+ - lib/reputation_system/scope_methods.rb
113
114
  - lib/reputation_system/version.rb
114
115
  - lib/reputation_system.rb
115
- - spec/models/rs_evaluation_spec.rb
116
- - spec/models/rs_reputation_message_spec.rb
117
- - spec/models/rs_reputation_spec.rb
118
116
  - spec/reputation_system/base_spec.rb
119
- - spec/reputation_system/evaluation_spec.rb
117
+ - spec/reputation_system/evaluation_methods_spec.rb
120
118
  - spec/reputation_system/finder_methods_spec.rb
119
+ - spec/reputation_system/models/evaluation_spec.rb
120
+ - spec/reputation_system/models/reputation_message_spec.rb
121
+ - spec/reputation_system/models/reputation_spec.rb
121
122
  - spec/reputation_system/query_methods_spec.rb
122
- - spec/reputation_system/reputation_spec.rb
123
- - spec/reputation_system/scope_spec.rb
123
+ - spec/reputation_system/reputation_methods_spec.rb
124
+ - spec/reputation_system/scope_methods_spec.rb
124
125
  - spec/spec_helper.rb
125
126
  homepage: https://github.com/twitter/activerecord-reputation-system
126
127
  licenses: []