voteable_mongoid 0.4.4 → 0.4.5

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.
@@ -0,0 +1,17 @@
1
+ module Rails #:nodoc:
2
+ module VoteableMongoid #:nodoc:
3
+ class Railtie < Rails::Railtie #:nodoc:
4
+
5
+ initializer "preload all application models" do |app|
6
+ config.to_prepare do
7
+ ::Rails::Mongoid.load_models(app)
8
+ end
9
+ end
10
+
11
+ rake_tasks do
12
+ load 'voteable_mongoid/railties/database.rake'
13
+ end
14
+
15
+ end
16
+ end
17
+ end
@@ -3,7 +3,7 @@ namespace :db do
3
3
  namespace :voteable do
4
4
  desc 'Update up_votes_count, down_votes_count, votes_count and votes_point'
5
5
  task :remake_stats => :environment do
6
- Mongoid::Voteable::Stats.remake_stats
6
+ Mongoid::Voteable::Stats.remake(:log)
7
7
  end
8
8
  end
9
9
  end
@@ -1,3 +1,3 @@
1
1
  module VoteableMongoid
2
- VERSION = "0.4.4"
2
+ VERSION = '0.4.5'
3
3
  end
@@ -15,15 +15,55 @@ module Mongoid
15
15
  scope :best_voted, order_by(['voteable.votes_point', :desc])
16
16
  end
17
17
 
18
- def self.remake_stats
18
+ # Get the number of up votes
19
+ def up_votes_count
20
+ voteable.try(:[], 'up_votes_count') || 0
21
+ end
22
+
23
+ # Get the number of down votes
24
+ def down_votes_count
25
+ voteable.try(:[], 'down_votes_count') || 0
26
+ end
27
+
28
+ # Get the number of votes
29
+ def votes_count
30
+ voteable.try(:[], 'votes_count') || 0
31
+ end
32
+
33
+ # Get the votes point
34
+ def votes_point
35
+ voteable.try(:[], 'votes_point') || 0
36
+ end
37
+
38
+ def self.remake(log = false)
39
+ remake_stats(log)
40
+ update_parent_stats(log)
41
+ end
42
+
43
+ def self.remake_stats(log)
19
44
  Mongoid::Voteable::VOTE_POINT.each do |class_name, value_point|
20
45
  klass = class_name.constantize
21
46
  klass_value_point = value_point[class_name]
47
+ puts "Generating stats for #{class_name}" if log
22
48
  klass.voteable_related.each{ |doc|
23
49
  doc.remake_stats(klass_value_point)
24
50
  }
25
51
  end
52
+ end
53
+
54
+ def remake_stats(value_point)
55
+ up_count = up_voter_ids.length
56
+ down_count = down_voter_ids.length
26
57
 
58
+ update_attributes(
59
+ 'voteable.up_votes_count' => up_count,
60
+ 'voteable.down_votes_count' => down_count,
61
+ 'voteable.votes_count' => up_count + down_count,
62
+ 'voteable.votes_point' => value_point[:up]*up_count + value_point[:down]*down_count
63
+ )
64
+ end
65
+
66
+ def self.update_parent_stats(log)
27
67
  VOTE_POINT.each do |class_name, value_point|
28
68
  klass = class_name.constantize
29
69
  value_point.each do |parent_class_name, parent_value_point|
@@ -31,6 +71,7 @@ module Mongoid
31
71
  if relation_metadata
32
72
  parent_class = parent_class_name.constantize
33
73
  foreign_key = relation_metadata.foreign_key
74
+ puts "Updating stats for #{class_name} > #{parent_class_name}" if log
34
75
  klass.voteable_related.each{ |doc|
35
76
  doc.update_parent_stats(parent_class, foreign_key, parent_value_point)
36
77
  }
@@ -38,31 +79,19 @@ module Mongoid
38
79
  end
39
80
  end
40
81
  end
41
-
42
- def remake_stats(value_point)
43
- up_count = up_voter_ids.length
44
- down_count = down_voter_ids.length
45
- # puts "#{self.class}(#{id}): #{up_count}, #{down_count}" # DEBUG
46
- update_attributes(
47
- 'voteable.up_votes_count' => up_count,
48
- 'voteable.down_votes_count' => down_count,
49
- 'voteable.votes_count' => up_count + down_count,
50
- 'voteable.votes_point' => value_point[:up]*up_count + value_point[:down]*down_count
51
- )
52
- end
53
-
82
+
54
83
  def update_parent_stats(parent_class, foreign_key, value_point)
55
84
  parent_id = read_attribute(foreign_key.to_sym)
56
85
  if parent_id
57
86
  up_count = up_voter_ids.length
58
87
  down_count = down_voter_ids.length
59
-
88
+
60
89
  return if up_count == 0 && down_count == 0
61
90
 
62
91
  inc_options = {
63
92
  'voteable.votes_point' => value_point[:up]*up_count + value_point[:down]*down_count
64
93
  }
65
-
94
+
66
95
  unless value_point[:update_counters] == false
67
96
  inc_options.merge!(
68
97
  'voteable.votes_count' => up_count + down_count,
@@ -70,35 +99,14 @@ module Mongoid
70
99
  'voteable.down_votes_count' => down_count
71
100
  )
72
101
  end
73
-
74
- # puts inc_options.inspect # DEBUG
102
+
75
103
  parent_class.collection.update(
76
104
  { :_id => parent_id },
77
105
  { '$inc' => inc_options }
78
106
  )
79
107
  end
80
108
  end
81
-
82
- # Get the number of up votes
83
- def up_votes_count
84
- voteable.try(:[], 'up_votes_count') || 0
85
- end
86
-
87
- # Get the number of down votes
88
- def down_votes_count
89
- voteable.try(:[], 'down_votes_count') || 0
90
- end
91
-
92
- # Get the number of votes
93
- def votes_count
94
- voteable.try(:[], 'votes_count') || 0
95
- end
96
-
97
- # Get the votes point
98
- def votes_point
99
- voteable.try(:[], 'votes_point') || 0
100
- end
101
-
109
+
102
110
  end
103
111
  end
104
112
  end
@@ -2,3 +2,7 @@ require 'voteable_mongoid/voteable/stats'
2
2
  require 'voteable_mongoid/voteable'
3
3
  require 'voteable_mongoid/voter'
4
4
 
5
+ # add railtie
6
+ if defined?(Rails)
7
+ require 'voteable_mongoid/railtie'
8
+ end
@@ -60,7 +60,7 @@ describe Mongoid::Voteable do
60
60
  context 'user1 vote up post1 the first time' do
61
61
  before :all do
62
62
  Post.vote(:votee_id => @post1.id, :voter_id => @user1.id, :value => :up)
63
- Mongoid::Voteable::Stats.remake_stats
63
+ Mongoid::Voteable::Stats.remake
64
64
  @post1.reload
65
65
  end
66
66
 
@@ -93,7 +93,7 @@ describe Mongoid::Voteable do
93
93
  context 'user2 vote down post1 the first time' do
94
94
  before :all do
95
95
  Post.vote(:votee_id => @post1.id, :voter_id => @user2.id, :value => :down)
96
- Mongoid::Voteable::Stats.remake_stats
96
+ Mongoid::Voteable::Stats.remake
97
97
  @post1.reload
98
98
  end
99
99
 
@@ -114,7 +114,7 @@ describe Mongoid::Voteable do
114
114
  context 'user1 change vote on post1 from up to down' do
115
115
  before :all do
116
116
  Post.vote(:revote => true, :votee_id => @post1.id, :voter_id => @user1.id, :value => :down)
117
- Mongoid::Voteable::Stats.remake_stats
117
+ Mongoid::Voteable::Stats.remake
118
118
  @post1.reload
119
119
  end
120
120
 
@@ -135,7 +135,7 @@ describe Mongoid::Voteable do
135
135
  context 'user1 vote down post2 the first time' do
136
136
  before :all do
137
137
  Post.vote(:votee_id => @post2.id, :voter_id => @user1.id, :value => :down)
138
- Mongoid::Voteable::Stats.remake_stats
138
+ Mongoid::Voteable::Stats.remake
139
139
  @post2.reload
140
140
  end
141
141
 
@@ -155,7 +155,7 @@ describe Mongoid::Voteable do
155
155
  context 'user1 change vote on post2 from down to up' do
156
156
  before :all do
157
157
  Post.vote(:revote => true, :votee_id => @post2.id.to_s, :voter_id => @user1.id.to_s, :value => :up)
158
- Mongoid::Voteable::Stats.remake_stats
158
+ Mongoid::Voteable::Stats.remake
159
159
  @post2.reload
160
160
  end
161
161
 
@@ -176,7 +176,7 @@ describe Mongoid::Voteable do
176
176
  context 'user1 vote up post2 comment the first time' do
177
177
  before :all do
178
178
  @comment.vote(:voter_id => @user1.id, :value => :up)
179
- Mongoid::Voteable::Stats.remake_stats
179
+ Mongoid::Voteable::Stats.remake
180
180
  @comment.reload
181
181
  @post2.reload
182
182
  end
@@ -198,7 +198,7 @@ describe Mongoid::Voteable do
198
198
  context 'user1 revote post2 comment from up to down' do
199
199
  before :all do
200
200
  @user1.vote(:votee => @comment, :value => :down)
201
- Mongoid::Voteable::Stats.remake_stats
201
+ Mongoid::Voteable::Stats.remake
202
202
  @comment.reload
203
203
  @post2.reload
204
204
  end
@@ -233,7 +233,7 @@ describe Mongoid::Voteable do
233
233
  context "user1 unvote on post1" do
234
234
  before(:all) do
235
235
  @post1.vote(:voter_id => @user1.id, :votee_id => @post1.id, :unvote => true)
236
- Mongoid::Voteable::Stats.remake_stats
236
+ Mongoid::Voteable::Stats.remake
237
237
  @post1.reload
238
238
  end
239
239
 
@@ -276,7 +276,7 @@ describe Mongoid::Voteable do
276
276
  context "user1 unvote on comment" do
277
277
  before(:all) do
278
278
  @user1.unvote(@comment)
279
- Mongoid::Voteable::Stats.remake_stats
279
+ Mongoid::Voteable::Stats.remake
280
280
  @comment.reload
281
281
  @post2.reload
282
282
  end
@@ -296,7 +296,7 @@ describe Mongoid::Voteable do
296
296
 
297
297
  context 'final' do
298
298
  it "test remake stats" do
299
- Mongoid::Voteable::Stats.remake_stats
299
+ Mongoid::Voteable::Stats.remake
300
300
 
301
301
  @post1.up_votes_count.should == 0
302
302
  @post1.down_votes_count.should == 1
@@ -8,11 +8,11 @@ Gem::Specification.new do |s|
8
8
  s.platform = Gem::Platform::RUBY
9
9
  s.authors = ["Alex Nguyen"]
10
10
  s.email = ["alex@vinova.sg"]
11
- s.homepage = "http://vinova.sg"
11
+ s.homepage = "http://vinova.sg/"
12
12
  s.summary = %q{Add Up / Down Voting for Mongoid}
13
13
  s.description = %q{Add Up / Down Voting for Mongoid (built for speed by using one Mongodb update-in-place for each collection when provided enough information)}
14
14
 
15
- s.add_dependency 'mongoid', '~> 2.0.0.rc'
15
+ s.add_dependency 'mongoid', '~> 2.0.0'
16
16
  s.add_development_dependency 'rspec'
17
17
  s.add_development_dependency 'bson_ext'
18
18
  s.add_development_dependency 'watchr'
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: 7
4
+ hash: 5
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 4
9
- - 4
10
- version: 0.4.4
9
+ - 5
10
+ version: 0.4.5
11
11
  platform: ruby
12
12
  authors:
13
13
  - Alex Nguyen
@@ -26,13 +26,12 @@ dependencies:
26
26
  requirements:
27
27
  - - ~>
28
28
  - !ruby/object:Gem::Version
29
- hash: 7712058
29
+ hash: 15
30
30
  segments:
31
31
  - 2
32
32
  - 0
33
33
  - 0
34
- - rc
35
- version: 2.0.0.rc
34
+ version: 2.0.0
36
35
  type: :runtime
37
36
  version_requirements: *id001
38
37
  - !ruby/object:Gem::Dependency
@@ -113,6 +112,7 @@ files:
113
112
  - doc/method_list.html
114
113
  - doc/top-level-namespace.html
115
114
  - lib/voteable_mongoid.rb
115
+ - lib/voteable_mongoid/railtie.rb
116
116
  - lib/voteable_mongoid/railties/database.rake
117
117
  - lib/voteable_mongoid/version.rb
118
118
  - lib/voteable_mongoid/voteable.rb
@@ -127,7 +127,7 @@ files:
127
127
  - spec/voteable_mongoid/voter_spec.rb
128
128
  - voteable_mongoid.gemspec
129
129
  has_rdoc: true
130
- homepage: http://vinova.sg
130
+ homepage: http://vinova.sg/
131
131
  licenses: []
132
132
 
133
133
  post_install_message: