voteable_mongoid 0.7.4 → 0.7.5
Sign up to get free protection for your applications and to get access to all the features.
- data/.rvmrc +1 -1
- data/CHANGELOG.rdoc +4 -4
- data/README.rdoc +23 -11
- data/lib/voteable_mongoid/version.rb +1 -1
- data/lib/voteable_mongoid/voteable/tasks.rb +9 -3
- data/lib/voteable_mongoid/voteable.rb +8 -6
- data/spec/spec_helper.rb +0 -1
- data/voteable_mongoid.gemspec +1 -1
- metadata +3 -3
data/.rvmrc
CHANGED
@@ -1,2 +1,2 @@
|
|
1
1
|
rvm_gemset_create_on_use_flag=1
|
2
|
-
rvm use 1.9.2@
|
2
|
+
rvm use 1.9.2@voteable
|
data/CHANGELOG.rdoc
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
== 0.7.4
|
2
|
-
* Add
|
3
|
-
* Add Voter scopes: Voter.up_voted_for(
|
2
|
+
* Add Votee#up_voters(VoterClass), Votee#down_voters(VoterClass), Votee#voters(VoterClass)
|
3
|
+
* Add Voter scopes: Voter.up_voted_for(votee), Voter.down_voted_for(votee), Voter.voted_for(votee)
|
4
4
|
* Add voteable ..., :index => true options
|
5
5
|
* Optimization on unvote and revote validations
|
6
6
|
* Fix for :up & :down points are nil in rake tasks
|
7
7
|
|
8
8
|
== 0.7.3
|
9
9
|
* Add :return_votee => true option to vote function to warranty always return voteable object
|
10
|
-
* Add
|
10
|
+
* Add Votee.voted?, Votee.up_voted?, Votee.down_voted?
|
11
11
|
* Update parent for ManyToMany relationship
|
12
12
|
* Refactor
|
13
13
|
|
@@ -23,7 +23,7 @@
|
|
23
23
|
* Use readable field names (up, down, up_count, down_count, count, point) instead of very short field names (u, d, uc, dc, c, p)
|
24
24
|
|
25
25
|
== 0.6.4
|
26
|
-
* Drop Voter#votees, Voter#up_votees, Voter#down_votees in favor of
|
26
|
+
* Drop Voter#votees, Voter#up_votees, Voter#down_votees in favor of Votee#voted_by(voter), Votee#up_voted_by(voter), Votee#down_voted_by(voter) scopes
|
27
27
|
|
28
28
|
== 0.6.3
|
29
29
|
* Add rake db:mongoid:voteable:migrate_old_votes to migrate vote data created by version < 0.6.0 to new vote data storage
|
data/README.rdoc
CHANGED
@@ -1,14 +1,17 @@
|
|
1
1
|
= Voteable Mongoid
|
2
2
|
|
3
|
-
Voteable Mongoid allows you to make your Mongoid::Document objects voteable (up or down).
|
4
|
-
For instance, in a forum, a user can vote up (or down) on a post or a comment.
|
3
|
+
Voteable Mongoid allows you to make your Mongoid::Document objects voteable (up or down) and tabulate votes count and votes point for you. For instance, in a forum, a user can vote up (or down) on a post or a comment.
|
5
4
|
|
6
|
-
Initial idea is based on http://cookbook.mongodb.org/patterns/votes
|
7
|
-
|
8
|
-
Voteable Mongoid is built for speed. It uses only one database request per collection to validate data, update data, and get updated data.
|
5
|
+
Voteable Mongoid is built for speed. It uses only one database request per collection to validate data, update data, and get updated data. Initial idea is based on http://cookbook.mongodb.org/patterns/votes
|
9
6
|
|
10
7
|
Sample app at https://github.com/vinova/simple_qa
|
11
8
|
|
9
|
+
Benchmarks at https://github.com/vinova/voteable_benchmarks
|
10
|
+
|
11
|
+
=== Sites using voteable_mongoid
|
12
|
+
* http://www.amorveneris.com
|
13
|
+
* http://zheye.org (https://github.com/huacnlee/quora)
|
14
|
+
|
12
15
|
== Installation
|
13
16
|
|
14
17
|
=== Rails 3.0.x
|
@@ -21,7 +24,7 @@ After that, remember to run "bundle install"
|
|
21
24
|
|
22
25
|
== Usage
|
23
26
|
|
24
|
-
===
|
27
|
+
=== Make Post and Comment voteable, User become the voter
|
25
28
|
|
26
29
|
post.rb
|
27
30
|
|
@@ -58,7 +61,7 @@ user.rb
|
|
58
61
|
include Mongoid::Voter
|
59
62
|
end
|
60
63
|
|
61
|
-
===
|
64
|
+
=== Make a vote
|
62
65
|
|
63
66
|
@user.vote(@post, :up)
|
64
67
|
|
@@ -89,7 +92,7 @@ Un-vote
|
|
89
92
|
In-case you need updated voteable object, add :return_votee => true
|
90
93
|
votee = Post.vote(:voter_id => user_id, :votee_id => post_id, :value => :up, :return_votee => true)
|
91
94
|
|
92
|
-
===
|
95
|
+
=== Get vote_value
|
93
96
|
|
94
97
|
@user.vote_value(@post)
|
95
98
|
@user.vote_value(:class_type => 'Post', :votee_id => post_id)
|
@@ -103,14 +106,24 @@ In-case you need updated voteable object, add :return_votee => true
|
|
103
106
|
@post.voted_by?(@user)
|
104
107
|
@post.voted_by?(user_id)
|
105
108
|
|
106
|
-
===
|
109
|
+
=== Get votes counts and points
|
107
110
|
|
108
111
|
puts @post.votes_point
|
109
112
|
puts @post.votes_count
|
110
113
|
puts @post.up_votes_count
|
111
114
|
puts @post.down_votes_count
|
112
115
|
|
113
|
-
===
|
116
|
+
=== Get voters given voted object and voter class
|
117
|
+
|
118
|
+
@post.up_voters(User)
|
119
|
+
@post.down_voters(User)
|
120
|
+
@post.voters(User)
|
121
|
+
- or -
|
122
|
+
User.up_voted_for(@post)
|
123
|
+
User.down_voted_for(@post)
|
124
|
+
User.voted_for(@post)
|
125
|
+
|
126
|
+
=== Get the list of voted objects of a class
|
114
127
|
|
115
128
|
Post.voted_by(@user)
|
116
129
|
Post.up_voted_by(@user)
|
@@ -137,7 +150,6 @@ Ruby
|
|
137
150
|
Mongoid::Voteable::Tasks.migrate_old_votes
|
138
151
|
|
139
152
|
== Credits
|
140
|
-
|
141
153
|
* Alex Nguyen (alex@vinova.sg) - Author
|
142
154
|
* Stefan Nguyen (stefan@vinova.sg) - Unvoting
|
143
155
|
|
@@ -42,10 +42,10 @@ module Mongoid
|
|
42
42
|
# count, point)
|
43
43
|
votes = doc['votes'] || doc['voteable'] || {}
|
44
44
|
|
45
|
-
up_voter_ids = votes['
|
45
|
+
up_voter_ids = votes['up'] || votes['u'] ||
|
46
46
|
votes['up_voter_ids'] || doc['up_voter_ids'] || []
|
47
47
|
|
48
|
-
down_voter_ids = votes['
|
48
|
+
down_voter_ids = votes['down'] || votes['d'] ||
|
49
49
|
votes['down_voter_ids'] || doc['down_voter_ids'] || []
|
50
50
|
|
51
51
|
up_count = up_voter_ids.size
|
@@ -67,7 +67,13 @@ module Mongoid
|
|
67
67
|
'down_voter_ids' => true,
|
68
68
|
'votes_count' => true,
|
69
69
|
'votes_point' => true,
|
70
|
-
'voteable' => true
|
70
|
+
'voteable' => true,
|
71
|
+
'votes.u' => true,
|
72
|
+
'votes.d' => true,
|
73
|
+
'votes.uc' => true,
|
74
|
+
'votes.dc' => true,
|
75
|
+
'votes.c' => true,
|
76
|
+
'votes.p' => true
|
71
77
|
}
|
72
78
|
}, { :safe => true })
|
73
79
|
end
|
@@ -99,14 +99,16 @@ module Mongoid
|
|
99
99
|
# Should run in background since it introduce new index value and
|
100
100
|
# while waiting to build, the system can use _id for voting
|
101
101
|
# http://www.mongodb.org/display/DOCS/Indexing+as+a+Background+Operation
|
102
|
-
index [['votes.up',
|
103
|
-
|
102
|
+
index [['votes.up', ::Mongo::ASCENDING], ['_id', ::Mongo::ASCENDING]],
|
103
|
+
:unique => true, :background => true
|
104
|
+
index [['votes.down', ::Mongo::ASCENDING], ['_id', ::Mongo::ASCENDING]],
|
105
|
+
:unique => true, :background => true
|
104
106
|
|
105
107
|
# Index counters and point for desc ordering
|
106
|
-
index [['votes.
|
107
|
-
index [['votes.
|
108
|
-
index [['votes.
|
109
|
-
index [['votes.point',
|
108
|
+
index [['votes.up_count', ::Mongo::DESCENDING]]
|
109
|
+
index [['votes.down_count', ::Mongo::DESCENDING]]
|
110
|
+
index [['votes.count', ::Mongo::DESCENDING]]
|
111
|
+
index [['votes.point', ::Mongo::DESCENDING]]
|
110
112
|
end
|
111
113
|
end
|
112
114
|
end
|
data/spec/spec_helper.rb
CHANGED
data/voteable_mongoid.gemspec
CHANGED
@@ -10,7 +10,7 @@ Gem::Specification.new do |s|
|
|
10
10
|
s.email = ["alex@vinova.sg"]
|
11
11
|
s.homepage = "https://github.com/vinova/voteable_mongoid"
|
12
12
|
s.summary = %q{Add Up / Down Voting for Mongoid}
|
13
|
-
s.description = %q{
|
13
|
+
s.description = %q{Renamed to voteable_mongo to support both Mongoid and MongoMapper.}
|
14
14
|
|
15
15
|
s.add_dependency 'mongoid', '~> 2.0.0'
|
16
16
|
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: voteable_mongoid
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.7.
|
5
|
+
version: 0.7.5
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Alex Nguyen
|
@@ -10,7 +10,7 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2011-05-
|
13
|
+
date: 2011-05-03 00:00:00 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: mongoid
|
@@ -45,7 +45,7 @@ dependencies:
|
|
45
45
|
version: "0"
|
46
46
|
type: :development
|
47
47
|
version_requirements: *id003
|
48
|
-
description:
|
48
|
+
description: Renamed to voteable_mongo to support both Mongoid and MongoMapper.
|
49
49
|
email:
|
50
50
|
- alex@vinova.sg
|
51
51
|
executables: []
|