activerecord-reputation-system 2.0.1 → 2.0.2
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.
- data/README.md +6 -6
- data/lib/reputation_system/models/evaluation.rb +16 -4
- data/lib/reputation_system/version.rb +1 -1
- data/spec/reputation_system/evaluation_methods_spec.rb +12 -2
- data/spec/spec_helper.rb +14 -0
- metadata +96 -72
data/README.md
CHANGED
@@ -71,14 +71,14 @@ Once reputation system is defined, evaluations for answers and questions can be
|
|
71
71
|
|
72
72
|
Reputation value can be accessed as follow:
|
73
73
|
```ruby
|
74
|
-
@answer.
|
75
|
-
@question.
|
76
|
-
@user.
|
74
|
+
@answer.reputation_for(:avg_rating) #=> 3
|
75
|
+
@question.reputation_for(:votes) #=> 1
|
76
|
+
@user.reputation_for(:karma)
|
77
77
|
```
|
78
78
|
|
79
79
|
You can query for records using reputation value:
|
80
80
|
```ruby
|
81
|
-
|
81
|
+
User.find_with_reputation(:karma, :all, { :condition => 'karma > 10' })
|
82
82
|
```
|
83
83
|
|
84
84
|
You can get source records that have evaluated the target record:
|
@@ -93,13 +93,13 @@ Question.evaluated_by(:votes, @user) #=> [@question]
|
|
93
93
|
|
94
94
|
## Documentation
|
95
95
|
|
96
|
-
Please refer [Wiki](https://github.com/twitter/activerecord-reputation-system/wiki) for available APIs.
|
96
|
+
Please refer [Wiki](https://github.com/twitter/activerecord-reputation-system/wiki) for available APIs and more information.
|
97
97
|
|
98
98
|
## Authors
|
99
99
|
|
100
100
|
Katsuya Noguchi
|
101
101
|
* [http://twitter.com/kn](http://twitter.com/kn)
|
102
|
-
* [http://github.com/
|
102
|
+
* [http://github.com/kn](http://github.com/kn)
|
103
103
|
|
104
104
|
## Contributors
|
105
105
|
|
@@ -32,7 +32,7 @@ module ReputationSystem
|
|
32
32
|
validate :source_must_be_defined_for_reputation_in_network
|
33
33
|
|
34
34
|
def self.find_by_reputation_name_and_source_and_target(reputation_name, source, target)
|
35
|
-
source_type = get_source_type_for_sti(source, target.class.name, reputation_name)
|
35
|
+
source_type = get_source_type_for_sti(source.class.name, target.class.name, reputation_name)
|
36
36
|
ReputationSystem::Evaluation.find(:first,
|
37
37
|
:conditions => {:reputation_name => reputation_name.to_s,
|
38
38
|
:source_id => source.id,
|
@@ -48,11 +48,23 @@ module ReputationSystem
|
|
48
48
|
:target_id => target.id, :target_type => target.class.name)
|
49
49
|
end
|
50
50
|
|
51
|
+
# Override exists? class method.
|
52
|
+
class << self
|
53
|
+
alias :original_exists? :exists?
|
54
|
+
|
55
|
+
def exists?(options={})
|
56
|
+
if options[:source_type] && options[:target_type] && options[:reputation_name]
|
57
|
+
options[:source_type] = get_source_type_for_sti(options[:source_type], options[:target_type], options[:reputation_name])
|
58
|
+
end
|
59
|
+
original_exists? options
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
51
63
|
protected
|
52
64
|
|
53
|
-
def self.get_source_type_for_sti(
|
65
|
+
def self.get_source_type_for_sti(source_type, target_type, reputation_name)
|
54
66
|
valid_source_type = ReputationSystem::Network.get_reputation_def(target_type, reputation_name)[:source].to_s.camelize
|
55
|
-
source_class =
|
67
|
+
source_class = source_type.constantize
|
56
68
|
while source_class && valid_source_type != source_class.name && source_class.name != "ActiveRecord::Base"
|
57
69
|
source_class = source_class.superclass
|
58
70
|
end
|
@@ -60,7 +72,7 @@ module ReputationSystem
|
|
60
72
|
end
|
61
73
|
|
62
74
|
def set_source_type_for_sti
|
63
|
-
sti_source_type = self.class.get_source_type_for_sti(
|
75
|
+
sti_source_type = self.class.get_source_type_for_sti(source_type, target_type, reputation_name)
|
64
76
|
self.source_type = sti_source_type if sti_source_type
|
65
77
|
end
|
66
78
|
|
@@ -140,7 +140,7 @@ describe ReputationSystem::EvaluationMethods do
|
|
140
140
|
lambda { answer.add_evaluation(:avg_rating, 3, @user) }.should_not raise_error
|
141
141
|
end
|
142
142
|
|
143
|
-
context "
|
143
|
+
context "with scopes" do
|
144
144
|
it "should add evaluation on appropriate scope" do
|
145
145
|
@phrase.add_evaluation(:difficulty_with_scope, 1, @user, :s1).should be_true
|
146
146
|
@phrase.add_evaluation(:difficulty_with_scope, 2, @user, :s2).should be_true
|
@@ -171,7 +171,7 @@ describe ReputationSystem::EvaluationMethods do
|
|
171
171
|
@question.reputation_for(:total_votes).should == 2
|
172
172
|
end
|
173
173
|
|
174
|
-
context "
|
174
|
+
context "with scopes" do
|
175
175
|
it "should add evaluation on appropriate scope if it does not exist" do
|
176
176
|
@phrase.add_or_update_evaluation(:difficulty_with_scope, 1, @user, :s1).should be_true
|
177
177
|
@phrase.add_or_update_evaluation(:difficulty_with_scope, 2, @user, :s2).should be_true
|
@@ -190,6 +190,16 @@ describe ReputationSystem::EvaluationMethods do
|
|
190
190
|
@phrase.reputation_for(:difficulty_with_scope, :s3).should == 0
|
191
191
|
end
|
192
192
|
end
|
193
|
+
|
194
|
+
context "with STI" do
|
195
|
+
it "should be able to update evaluation by an object of a class with sti" do
|
196
|
+
@post = Post.create! :name => "Post1"
|
197
|
+
@designer = Designer.create! :name => "John"
|
198
|
+
@post.add_or_update_evaluation(:votes, 1, @designer)
|
199
|
+
@post.add_or_update_evaluation(:votes, -1, @designer)
|
200
|
+
@post.reputation_for(:votes).should == -1
|
201
|
+
end
|
202
|
+
end
|
193
203
|
end
|
194
204
|
|
195
205
|
describe "#update_evaluation" do
|
data/spec/spec_helper.rb
CHANGED
@@ -108,6 +108,11 @@ ActiveRecord::Schema.define do
|
|
108
108
|
t.string :type
|
109
109
|
t.timestamps
|
110
110
|
end
|
111
|
+
|
112
|
+
create_table :posts do |t|
|
113
|
+
t.string :name
|
114
|
+
t.timestamps
|
115
|
+
end
|
111
116
|
end
|
112
117
|
|
113
118
|
class User < ActiveRecord::Base
|
@@ -193,6 +198,8 @@ class Translation < ActiveRecord::Base
|
|
193
198
|
:source_of => { :reputation => :maturity, :of => :phrase, :scope => :locale}
|
194
199
|
end
|
195
200
|
|
201
|
+
# For STI Specs
|
202
|
+
|
196
203
|
class Person < ActiveRecord::Base
|
197
204
|
has_reputation :leadership,
|
198
205
|
:source => :person,
|
@@ -204,3 +211,10 @@ end
|
|
204
211
|
|
205
212
|
class Designer < Person
|
206
213
|
end
|
214
|
+
|
215
|
+
class Post < ActiveRecord::Base
|
216
|
+
belongs_to :person
|
217
|
+
|
218
|
+
has_reputation :votes,
|
219
|
+
:source => :person
|
220
|
+
end
|
metadata
CHANGED
@@ -1,93 +1,120 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: activerecord-reputation-system
|
3
|
-
version: !ruby/object:Gem::Version
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 2.0.2
|
4
5
|
prerelease:
|
5
|
-
version: 2.0.1
|
6
6
|
platform: ruby
|
7
|
-
authors:
|
7
|
+
authors:
|
8
8
|
- Katsuya Noguchi
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
- !ruby/object:Gem::Dependency
|
12
|
+
date: 2012-12-01 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
16
15
|
name: activerecord
|
17
|
-
|
18
|
-
requirement: &id001 !ruby/object:Gem::Requirement
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
19
17
|
none: false
|
20
|
-
requirements:
|
21
|
-
- -
|
22
|
-
- !ruby/object:Gem::Version
|
23
|
-
version:
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
24
22
|
type: :development
|
25
|
-
version_requirements: *id001
|
26
|
-
- !ruby/object:Gem::Dependency
|
27
|
-
name: rake
|
28
23
|
prerelease: false
|
29
|
-
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ! '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '0'
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: rake
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
30
33
|
none: false
|
31
|
-
requirements:
|
32
|
-
- -
|
33
|
-
- !ruby/object:Gem::Version
|
34
|
+
requirements:
|
35
|
+
- - ! '>='
|
36
|
+
- !ruby/object:Gem::Version
|
34
37
|
version: 0.8.7
|
35
38
|
type: :development
|
36
|
-
version_requirements: *id002
|
37
|
-
- !ruby/object:Gem::Dependency
|
38
|
-
name: rspec
|
39
39
|
prerelease: false
|
40
|
-
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: 0.8.7
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: rspec
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
41
49
|
none: false
|
42
|
-
requirements:
|
50
|
+
requirements:
|
43
51
|
- - ~>
|
44
|
-
- !ruby/object:Gem::Version
|
45
|
-
version:
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '2.8'
|
46
54
|
type: :development
|
47
|
-
version_requirements: *id003
|
48
|
-
- !ruby/object:Gem::Dependency
|
49
|
-
name: rdoc
|
50
55
|
prerelease: false
|
51
|
-
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ~>
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '2.8'
|
62
|
+
- !ruby/object:Gem::Dependency
|
63
|
+
name: rdoc
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
52
65
|
none: false
|
53
|
-
requirements:
|
54
|
-
- -
|
55
|
-
- !ruby/object:Gem::Version
|
56
|
-
version:
|
66
|
+
requirements:
|
67
|
+
- - ! '>='
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '0'
|
57
70
|
type: :development
|
58
|
-
version_requirements: *id004
|
59
|
-
- !ruby/object:Gem::Dependency
|
60
|
-
name: database_cleaner
|
61
71
|
prerelease: false
|
62
|
-
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ! '>='
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: '0'
|
78
|
+
- !ruby/object:Gem::Dependency
|
79
|
+
name: database_cleaner
|
80
|
+
requirement: !ruby/object:Gem::Requirement
|
63
81
|
none: false
|
64
|
-
requirements:
|
82
|
+
requirements:
|
65
83
|
- - ~>
|
66
|
-
- !ruby/object:Gem::Version
|
84
|
+
- !ruby/object:Gem::Version
|
67
85
|
version: 0.7.1
|
68
86
|
type: :development
|
69
|
-
version_requirements: *id005
|
70
|
-
- !ruby/object:Gem::Dependency
|
71
|
-
name: sqlite3
|
72
87
|
prerelease: false
|
73
|
-
|
88
|
+
version_requirements: !ruby/object:Gem::Requirement
|
89
|
+
none: false
|
90
|
+
requirements:
|
91
|
+
- - ~>
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: 0.7.1
|
94
|
+
- !ruby/object:Gem::Dependency
|
95
|
+
name: sqlite3
|
96
|
+
requirement: !ruby/object:Gem::Requirement
|
74
97
|
none: false
|
75
|
-
requirements:
|
98
|
+
requirements:
|
76
99
|
- - ~>
|
77
|
-
- !ruby/object:Gem::Version
|
100
|
+
- !ruby/object:Gem::Version
|
78
101
|
version: 1.3.5
|
79
102
|
type: :development
|
80
|
-
|
81
|
-
|
82
|
-
|
103
|
+
prerelease: false
|
104
|
+
version_requirements: !ruby/object:Gem::Requirement
|
105
|
+
none: false
|
106
|
+
requirements:
|
107
|
+
- - ~>
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: 1.3.5
|
110
|
+
description: ActiveRecord Reputation System gem allows rails apps to compute and publish
|
111
|
+
reputation scores for active record models.
|
112
|
+
email:
|
83
113
|
- katsuya@twitter.com
|
84
114
|
executables: []
|
85
|
-
|
86
115
|
extensions: []
|
87
|
-
|
88
116
|
extra_rdoc_files: []
|
89
|
-
|
90
|
-
files:
|
117
|
+
files:
|
91
118
|
- LICENSE
|
92
119
|
- README.md
|
93
120
|
- Rakefile
|
@@ -125,30 +152,27 @@ files:
|
|
125
152
|
- spec/spec_helper.rb
|
126
153
|
homepage: https://github.com/twitter/activerecord-reputation-system
|
127
154
|
licenses: []
|
128
|
-
|
129
155
|
post_install_message:
|
130
156
|
rdoc_options: []
|
131
|
-
|
132
|
-
require_paths:
|
157
|
+
require_paths:
|
133
158
|
- lib
|
134
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
159
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
135
160
|
none: false
|
136
|
-
requirements:
|
137
|
-
- -
|
138
|
-
- !ruby/object:Gem::Version
|
139
|
-
version:
|
140
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
161
|
+
requirements:
|
162
|
+
- - ! '>='
|
163
|
+
- !ruby/object:Gem::Version
|
164
|
+
version: '0'
|
165
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
141
166
|
none: false
|
142
|
-
requirements:
|
143
|
-
- -
|
144
|
-
- !ruby/object:Gem::Version
|
145
|
-
version:
|
167
|
+
requirements:
|
168
|
+
- - ! '>='
|
169
|
+
- !ruby/object:Gem::Version
|
170
|
+
version: '0'
|
146
171
|
requirements: []
|
147
|
-
|
148
172
|
rubyforge_project:
|
149
|
-
rubygems_version: 1.8.
|
173
|
+
rubygems_version: 1.8.23
|
150
174
|
signing_key:
|
151
175
|
specification_version: 3
|
152
|
-
summary: ActiveRecord Reputation System gem allows rails apps to compute and publish
|
176
|
+
summary: ActiveRecord Reputation System gem allows rails apps to compute and publish
|
177
|
+
reputation scores for active record models
|
153
178
|
test_files: []
|
154
|
-
|