voteable_mongoid 0.6.2 → 0.6.3
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/CHANGELOG.rdoc +3 -0
- data/README.rdoc +1 -2
- data/lib/voteable_mongoid/railties/database.rake +5 -0
- data/lib/voteable_mongoid/version.rb +1 -1
- data/lib/voteable_mongoid/voteable/votes.rb +44 -11
- metadata +3 -3
data/CHANGELOG.rdoc
CHANGED
data/README.rdoc
CHANGED
@@ -1,10 +1,9 @@
|
|
1
1
|
= Voteable Mongoid
|
2
2
|
|
3
3
|
Voteable Mongoid allows you to make your Mongoid::Document objects voteable (up or down)
|
4
|
-
|
5
4
|
For instance, in a forum, a user can vote up (or down) on a post or a comment.
|
6
5
|
|
7
|
-
|
6
|
+
Voteable Mongoid is built for speed. It minimizes vote data storage and uses only one database request per collection to do both data validation and data update.
|
8
7
|
|
9
8
|
Sample app at https://github.com/vinova/simple_qa
|
10
9
|
|
@@ -10,6 +10,11 @@ namespace :db do
|
|
10
10
|
task :init_stats => :environment do
|
11
11
|
Mongoid::Voteable::Stats.init(:log)
|
12
12
|
end
|
13
|
+
|
14
|
+
desc 'Migrate vote data created by version < 0.6.0 to new vote data storage'
|
15
|
+
task :migrate_old_votes => :environment do
|
16
|
+
Mongoid::Voteable.migrate_old_votes(:log)
|
17
|
+
end
|
13
18
|
end
|
14
19
|
end
|
15
20
|
end
|
@@ -1,28 +1,61 @@
|
|
1
1
|
module Mongoid
|
2
2
|
module Voteable
|
3
|
-
UP_VOTER_IDS = 'votes.u'
|
4
|
-
DOWN_VOTER_IDS = 'votes.d'
|
5
|
-
UP_VOTES_COUNT = 'votes.uc'
|
6
|
-
DOWN_VOTES_COUNT = 'votes.dc'
|
7
|
-
VOTES_COUNT = 'votes.c'
|
8
|
-
VOTES_POINT = 'votes.p'
|
9
3
|
|
10
4
|
class Votes
|
11
5
|
include Mongoid::Document
|
12
|
-
|
13
6
|
field :u, :type => Array, :default => []
|
14
7
|
field :d, :type => Array, :default => []
|
15
8
|
field :uc, :type => Integer, :default => 0
|
16
9
|
field :dc, :type => Integer, :default => 0
|
17
10
|
field :c, :type => Integer, :default => 0
|
18
11
|
field :p, :type => Integer, :default => 0
|
19
|
-
|
20
|
-
def identity
|
21
|
-
# To remove _id
|
22
|
-
end
|
23
12
|
end
|
13
|
+
|
14
|
+
UP_VOTER_IDS = 'votes.u'
|
15
|
+
DOWN_VOTER_IDS = 'votes.d'
|
16
|
+
UP_VOTES_COUNT = 'votes.uc'
|
17
|
+
DOWN_VOTES_COUNT = 'votes.dc'
|
18
|
+
VOTES_COUNT = 'votes.c'
|
19
|
+
VOTES_POINT = 'votes.p'
|
24
20
|
|
25
21
|
VOTES_DEFAULT_ATTRIBUTES = Votes.new.attributes
|
26
22
|
VOTES_DEFAULT_ATTRIBUTES.delete('_id')
|
23
|
+
|
24
|
+
def self.migrate_old_votes(log = false)
|
25
|
+
VOTEABLE.each do |class_name, value_point|
|
26
|
+
klass = class_name.constantize
|
27
|
+
klass_value_point = value_point[class_name]
|
28
|
+
puts "* Migrating old vote data for #{class_name} ..." if log
|
29
|
+
count = 0
|
30
|
+
klass.all.each do |doc|
|
31
|
+
next if doc['votes']
|
32
|
+
count += 1
|
33
|
+
up_voter_ids = doc['up_voter_ids'] || []
|
34
|
+
down_voter_ids = doc['down_voter_ids'] || []
|
35
|
+
up_count = up_voter_ids.size
|
36
|
+
down_count = down_voter_ids.size
|
37
|
+
klass.collection.update({ :_id => doc.id }, {
|
38
|
+
'$set' => {
|
39
|
+
:votes => {
|
40
|
+
:u => doc.up_voter_ids,
|
41
|
+
:d => doc.down_voter_ids,
|
42
|
+
:uc => up_count,
|
43
|
+
:dc => down_count,
|
44
|
+
:c => up_count + down_count,
|
45
|
+
:p => klass_value_point[:up]*up_count + klass_value_point[:down]*down_count
|
46
|
+
}
|
47
|
+
},
|
48
|
+
'$unset' => {
|
49
|
+
:up_voter_ids => true,
|
50
|
+
:down_voter_ids => true,
|
51
|
+
:votes_count => true,
|
52
|
+
:votes_point => true
|
53
|
+
}
|
54
|
+
})
|
55
|
+
end
|
56
|
+
puts " #{count} objects migrated." if log
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
27
60
|
end
|
28
61
|
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: voteable_mongoid
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 1
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 6
|
9
|
-
-
|
10
|
-
version: 0.6.
|
9
|
+
- 3
|
10
|
+
version: 0.6.3
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Alex Nguyen
|