activerecord-reputation-system 1.5.1 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
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: []