mongoid_rating 0.1.0 → 0.1.1
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.
- checksums.yaml +4 -4
- data/README.md +0 -1
- data/lib/mongoid_rating/model.rb +6 -41
- data/lib/mongoid_rating/version.rb +1 -1
- data/spec/article_spec.rb +15 -17
- data/spec/post_spec.rb +27 -19
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c46a533fed5f93903eea6cb5af5d45ad034fd14c
|
4
|
+
data.tar.gz: 0ebcd0ae9aea25aca80ad0d9712035cc7dc593bb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1e0a902185c5a8115b8f879bcf5bac2f10b3a08d3a3bfd4b127fce5e4db402d9398a67974d0c5dfe366cfdd299e0f96a23a3f18bc0667142aa44603b19c09bf7
|
7
|
+
data.tar.gz: ee70c1b36395f47eec03e008c8252a7a291289f8622f292b422c102833a4aeef46f54ff247e6f2862478f9b4e0b9c04125cd6a672f8f1a61887557a4bb41bcec
|
data/README.md
CHANGED
data/lib/mongoid_rating/model.rb
CHANGED
@@ -9,17 +9,15 @@ module Mongoid
|
|
9
9
|
# @param [Hash] options a hash containings:
|
10
10
|
#
|
11
11
|
# rateable :overall, range: -5..5
|
12
|
-
#
|
13
|
-
# Disable atomic eval (in case it's disabled on the database side)
|
14
|
-
# rateable :design, range: -5..5, average: false
|
15
12
|
#
|
16
13
|
# Disable average completely
|
14
|
+
# rateable :design, range: -5..5, average: false
|
15
|
+
#
|
17
16
|
# rateable :quality, range: -5..5, average: true
|
18
17
|
def rateable(field, options = {})
|
19
18
|
options = {
|
20
19
|
range: 1..5,
|
21
20
|
rerate: true,
|
22
|
-
eval: true,
|
23
21
|
counters: true,
|
24
22
|
float: true
|
25
23
|
}.merge(options)
|
@@ -61,44 +59,11 @@ module Mongoid
|
|
61
59
|
raise "bad vote value"
|
62
60
|
end
|
63
61
|
raise "can't rate" unless can_#{field}?(rater)
|
64
|
-
|
65
|
-
|
62
|
+
un#{field}!(rater)
|
63
|
+
atomically do
|
64
|
+
inc("#{field}_count" => 1, "#{field}_sum" => value)
|
66
65
|
#{field}_data.create!(rater: rater, value: value)
|
67
|
-
|
68
|
-
doc = collection.database.command({
|
69
|
-
eval: 'function(id) {
|
70
|
-
var oid = ObjectId(id);
|
71
|
-
var doc = db.' + collection.name + '.findOne( { _id : oid } );
|
72
|
-
if (doc) {
|
73
|
-
doc.#{field}_count = 0
|
74
|
-
doc.#{field}_sum = 0;
|
75
|
-
doc.#{field}_data.forEach(function(fd) {
|
76
|
-
doc.#{field}_sum += fd.value;
|
77
|
-
doc.#{field}_count += 1;
|
78
|
-
})
|
79
|
-
doc.#{field}_average = doc.#{field}_sum /doc.#{field}_count;
|
80
|
-
db.' + collection.name + '.save(doc);
|
81
|
-
return doc;
|
82
|
-
} else {
|
83
|
-
return false;
|
84
|
-
}
|
85
|
-
}',
|
86
|
-
args: [ id.to_s ]
|
87
|
-
})
|
88
|
-
self.#{field}_count = doc[:retval]["#{field}_count"]
|
89
|
-
self.#{field}_sum = doc[:retval]["#{field}_sum"]
|
90
|
-
self.#{field}_average = doc[:retval]["#{field}_average"]
|
91
|
-
remove_change(:#{field}_count)
|
92
|
-
remove_change(:#{field}_sum)
|
93
|
-
remove_change(:#{field}_average)
|
94
|
-
end
|
95
|
-
else
|
96
|
-
un#{field}!(rater)
|
97
|
-
atomically do
|
98
|
-
inc("#{field}_count" => 1, "#{field}_sum" => value)
|
99
|
-
#{field}_data.create!(rater: rater, value: value)
|
100
|
-
set("#{field}_average" => calc_#{field}_avg)
|
101
|
-
end
|
66
|
+
set("#{field}_average" => calc_#{field}_avg)
|
102
67
|
end
|
103
68
|
end
|
104
69
|
def calc_#{field}_avg
|
data/spec/article_spec.rb
CHANGED
@@ -39,7 +39,7 @@ describe Article do
|
|
39
39
|
|
40
40
|
describe "#overall" do
|
41
41
|
it "should track #overall properly" do
|
42
|
-
@article.overall!
|
42
|
+
@article.overall!(1, @sally)
|
43
43
|
@article.overall_count.should eql 2
|
44
44
|
@article.overall.should eql 1.0
|
45
45
|
end
|
@@ -51,17 +51,17 @@ describe Article do
|
|
51
51
|
end
|
52
52
|
|
53
53
|
it "should limit #overalls by user properly" do
|
54
|
-
@article.overall!
|
54
|
+
@article.overall!(5, @bob)
|
55
55
|
@article.overall.should eql 5.0
|
56
56
|
end
|
57
57
|
|
58
58
|
context "when overall_value in rating range" do
|
59
|
-
it { expect { @article.overall
|
59
|
+
it { expect { @article.overall(1, @sally) }.not_to raise_error }
|
60
60
|
end
|
61
61
|
|
62
62
|
context "when overall_value not in rating range" do
|
63
|
-
it { expect { @article.overall
|
64
|
-
it { expect { @article.overall
|
63
|
+
it { expect { @article.overall(17, @sally) }.to raise_error() }
|
64
|
+
it { expect { @article.overall(-17, @sally) }.to raise_error() }
|
65
65
|
end
|
66
66
|
|
67
67
|
describe "when using positive values" do
|
@@ -133,7 +133,7 @@ describe Article do
|
|
133
133
|
end
|
134
134
|
|
135
135
|
it "should calculate the average overall if the result is zero" do
|
136
|
-
@article.overall
|
136
|
+
@article.overall(-1, @sally)
|
137
137
|
@article.overall.should eq 0.0
|
138
138
|
end
|
139
139
|
end
|
@@ -165,26 +165,26 @@ describe Article do
|
|
165
165
|
|
166
166
|
context "when saving the collection" do
|
167
167
|
before (:each) do
|
168
|
-
@article.overall
|
169
|
-
@article.overall
|
168
|
+
@article.overall(3, @bob)
|
169
|
+
@article.overall(-5, @sally)
|
170
170
|
@article.save
|
171
171
|
@f_article = Article.where(:name => "Article").first
|
172
172
|
end
|
173
173
|
|
174
174
|
it "disallows incorrect rates" do
|
175
|
-
expect { @article.overall
|
176
|
-
expect { @article.overall
|
175
|
+
expect { @article.overall(8, @bob) }.to raise_error
|
176
|
+
expect { @article.overall(-10, @sally) }.to raise_error
|
177
177
|
end
|
178
178
|
|
179
179
|
describe "#overall_by?" do
|
180
180
|
describe "for Bob" do
|
181
181
|
specify { @f_article.overall_by?(@bob).should be_true }
|
182
|
-
specify { @f_article.overall_by(@bob).should eq
|
182
|
+
specify { @f_article.overall_by(@bob).should eq(3) }
|
183
183
|
end
|
184
184
|
|
185
185
|
describe "for Sally" do
|
186
186
|
specify { @f_article.overall_by?(@sally).should be_true }
|
187
|
-
specify { @f_article.overall_by(@sally).should eq
|
187
|
+
specify { @f_article.overall_by(@sally).should eq(-5) }
|
188
188
|
end
|
189
189
|
|
190
190
|
describe "for Alice" do
|
@@ -194,11 +194,11 @@ describe Article do
|
|
194
194
|
end
|
195
195
|
|
196
196
|
describe "#overall" do
|
197
|
-
specify { @f_article.overall.should
|
197
|
+
specify { @f_article.overall.should eq(-1.0) }
|
198
198
|
end
|
199
199
|
|
200
200
|
describe "#overall_count" do
|
201
|
-
specify { @f_article.overall_count.should
|
201
|
+
specify { @f_article.overall_count.should eq(2) }
|
202
202
|
end
|
203
203
|
end
|
204
204
|
end
|
@@ -268,14 +268,12 @@ describe Article do
|
|
268
268
|
describe '#by_overall' do
|
269
269
|
it "should return proper count of articles" do
|
270
270
|
Article.by_overall.limit(10).count(true).should eq 5
|
271
|
-
Article.by_overall.to_a.should eq [@article3, @article1, @article2, @article4, @article5]
|
272
271
|
end
|
273
272
|
|
274
273
|
it 'returns articles in proper order' do
|
275
|
-
|
274
|
+
Article.by_overall.to_a.should eq [@article3, @article1, @article2, @article4, @article5]
|
276
275
|
end
|
277
276
|
end
|
278
277
|
end
|
279
|
-
|
280
278
|
end
|
281
279
|
end
|
data/spec/post_spec.rb
CHANGED
@@ -178,12 +178,16 @@ describe Post do
|
|
178
178
|
@post3 = Post.create(:name => "Post 3")
|
179
179
|
@post4 = Post.create(:name => "Post 4")
|
180
180
|
@post5 = Post.create(:name => "Post 5")
|
181
|
-
@post1.rate 5, @sally
|
182
|
-
@post1.rate 3, @bob
|
183
|
-
@post4.rate 1, @sally
|
184
181
|
end
|
185
182
|
|
183
|
+
|
186
184
|
describe "#rate_by scope" do
|
185
|
+
before :each do
|
186
|
+
@post1.rate 5, @sally
|
187
|
+
@post1.rate 3, @bob
|
188
|
+
@post4.rate 1, @sally
|
189
|
+
end
|
190
|
+
|
187
191
|
it "should return proper count of posts rated by Bob" do
|
188
192
|
Post.rate_by(@bob).size.should eql 1
|
189
193
|
end
|
@@ -193,7 +197,7 @@ describe Post do
|
|
193
197
|
end
|
194
198
|
end
|
195
199
|
|
196
|
-
|
200
|
+
context 'rates' do
|
197
201
|
before (:each) do
|
198
202
|
@post1.rate 4, @alice
|
199
203
|
@post2.rate 2, @alice
|
@@ -201,6 +205,11 @@ describe Post do
|
|
201
205
|
@post4.rate 2, @alice
|
202
206
|
end
|
203
207
|
|
208
|
+
it '#highest_rate' do
|
209
|
+
Post.highest_rate.count.should eq 4
|
210
|
+
Post.highest_rate.first.id.should eq @post3.id
|
211
|
+
end
|
212
|
+
|
204
213
|
it "should return proper count of posts with rating 4..5" do
|
205
214
|
Post.rate_in(4..5).size.should eql 2
|
206
215
|
end
|
@@ -212,25 +221,24 @@ describe Post do
|
|
212
221
|
it "should return proper count of posts with rating 0..5" do
|
213
222
|
Post.rate_in(0..5).size.should eql 4
|
214
223
|
end
|
215
|
-
end
|
216
224
|
|
217
|
-
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
Post.highest_rate.limit(1).each {|x| posts_count+=1 }
|
222
|
-
posts_count.should eql 1
|
225
|
+
describe "#highest_rate" do
|
226
|
+
it "should return proper document" do
|
227
|
+
Post.highest_rate.limit(1).first.name.should eql "Post 3"
|
228
|
+
end
|
223
229
|
end
|
224
230
|
|
225
|
-
|
226
|
-
|
227
|
-
|
228
|
-
|
229
|
-
posts_count.should eql 2
|
230
|
-
end
|
231
|
+
describe '#by_rate' do
|
232
|
+
it "should return proper count of posts" do
|
233
|
+
Post.by_rate.limit(10).count(true).should eq 5
|
234
|
+
end
|
231
235
|
|
232
|
-
|
233
|
-
|
236
|
+
it 'returns articles in proper order' do
|
237
|
+
@post5.rate.should be_nil
|
238
|
+
@post5[:rate_average].should be_nil
|
239
|
+
|
240
|
+
Post.by_rate.to_a.should eq [@post3, @post1, @post2, @post4, @post5]
|
241
|
+
end
|
234
242
|
end
|
235
243
|
end
|
236
244
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mongoid_rating
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- glebtv
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-
|
11
|
+
date: 2013-11-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: mongoid
|
@@ -151,7 +151,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
151
151
|
version: '0'
|
152
152
|
requirements: []
|
153
153
|
rubyforge_project:
|
154
|
-
rubygems_version: 2.
|
154
|
+
rubygems_version: 2.1.10
|
155
155
|
signing_key:
|
156
156
|
specification_version: 4
|
157
157
|
summary: Star rating for Mongoid
|