rs_voteable_mongo 1.2.0 → 1.3.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: e336d4b66cdf6c689a9811b44828bf9d1d83de80
4
- data.tar.gz: e8f8782e05a8a7d3304d46206993fe01fc37b00e
2
+ SHA256:
3
+ metadata.gz: 735a5cd7ebb0ea483dcbd406c8d1c4e93ec02bd9c3cf56545d4e6ca4f3ec796d
4
+ data.tar.gz: a1a5552b51a6cd4128155fc51ae6876a50d0c0dda461733ad59526815be47b6a
5
5
  SHA512:
6
- metadata.gz: 1f4afa33365dc69931d07c4d83af6660673f6f5488ca22b62bd6eaf5b07b16aa92d2bfffe914f06e81055124e921027589b642625d1b639e958b02f069284199
7
- data.tar.gz: 76145aebeb047e1af460d48525340ac1bca1eb5eaa62185597fcdabbe97e8ccb200dcf30d2c0cc33468887c2519d9e23b5c56baed395082ea13ea1122ec93322
6
+ metadata.gz: 0b03e807e2f97c91d4d9d14a8031297db0d9763af5944ce68b0dcd788574d2c00bb85c10f06a5364912b6c197c915384986c23fb71da80a93a9674d58435c33b
7
+ data.tar.gz: 99405d9523cc59f0cee8e83f6bd6f4f25c5f6bfd30bcd4ed3cf8b797357e7e6ea39331ab415adbab21b515c239b50d78df6922de5e007b3f2014a001d6599f71
@@ -2,7 +2,7 @@ module Mongo
2
2
  module Voteable
3
3
  module Tasks
4
4
 
5
- # Set counters and point to 0 for uninitialized voteable objects
5
+ # Set counters and point to 0 for uninitialized voteable objects
6
6
  # in order sort and query
7
7
  def self.init_stats(log = false)
8
8
  VOTEABLE.each do |class_name, voteable|
@@ -12,7 +12,7 @@ module Mongo
12
12
  klass.where(votes: nil).set(votes: DEFAULT_VOTES)
13
13
  end
14
14
  end
15
-
15
+
16
16
  # Re-generate vote counters and vote points
17
17
  def self.remake_stats(log = false)
18
18
  remake_stats_for_all_voteable_classes(log)
@@ -31,7 +31,7 @@ module Mongo
31
31
 
32
32
  def self.migrate_old_votes_for(klass, voteable)
33
33
  klass.all.each do |doc|
34
- # Version 0.6.x use very short field names (u, d, uc, dc, c, p) to minimize
34
+ # Version 0.6.x use very short field names (u, d, uc, dc, c, p) to minimize
35
35
  # votes storage but it's not human friendly
36
36
  # Version >= 0.7.0 use readable field names (up, down, up_count, down_count,
37
37
  # count, point)
@@ -67,8 +67,8 @@ module Mongo
67
67
  )
68
68
  end
69
69
  end
70
-
71
-
70
+
71
+
72
72
  def self.remake_stats_for_all_voteable_classes(log)
73
73
  VOTEABLE.each do |class_name, voteable|
74
74
  klass = class_name.constantize
@@ -80,7 +80,7 @@ module Mongo
80
80
  end
81
81
  end
82
82
 
83
-
83
+
84
84
  def self.remake_stats_for(doc, voteable)
85
85
  up_count = doc.up_voter_ids.length
86
86
  down_count = doc.down_voter_ids.length
@@ -113,20 +113,20 @@ module Mongo
113
113
  end
114
114
  end
115
115
  end
116
-
117
-
116
+
117
+
118
118
  def self.update_parent_stats_for(doc, parent_class, foreign_key, voteable)
119
119
  parent_id = doc.read_attribute(foreign_key.to_sym)
120
120
  if parent_id
121
121
  up_count = doc.up_voter_ids.length
122
122
  down_count = doc.down_voter_ids.length
123
-
123
+
124
124
  return if up_count == 0 && down_count == 0
125
125
 
126
126
  inc_options = {
127
127
  'votes.point' => voteable[:up].to_i*up_count + voteable[:down].to_i*down_count
128
128
  }
129
-
129
+
130
130
  unless voteable[:update_counters] == false
131
131
  inc_options.merge!(
132
132
  'votes.count' => up_count + down_count,
@@ -136,17 +136,17 @@ module Mongo
136
136
  end
137
137
 
138
138
  parent_ids = parent_id.is_a?(Array) ? parent_id : [ parent_id ]
139
-
139
+
140
140
  parent_class.collection.find({'_id' => {'$in' => parent_ids}}).update_many({ '$inc' => inc_options })
141
141
  end
142
142
  end
143
143
 
144
- private_class_method :migrate_old_votes_for,
144
+ private_class_method :migrate_old_votes_for,
145
145
  :remake_stats_for,
146
146
  :remake_stats_for_all_voteable_classes,
147
147
  :update_parent_stats,
148
- :update_parent_stats_for
149
-
148
+ :update_parent_stats_for
149
+
150
150
  end
151
151
  end
152
152
  end
@@ -1,3 +1,3 @@
1
1
  module VoteableMongo
2
- VERSION = '1.2.0'
2
+ VERSION = '1.3.0'
3
3
  end
@@ -17,7 +17,7 @@ module Mongo
17
17
  included do
18
18
  include Mongo::Voteable::Voting
19
19
  include Mongo::Voteable::Integrations::Mongoid
20
-
20
+
21
21
  scope :voted_by, lambda { |voter|
22
22
  voter_id = Helpers.get_mongo_id(voter)
23
23
  where('$or' => [{ 'votes.up' => voter_id }, { 'votes.down' => voter_id }])
@@ -40,9 +40,9 @@ module Mongo
40
40
 
41
41
  module ClassMethods
42
42
  # Set vote point for each up (down) vote on an object of this class
43
- #
43
+ #
44
44
  # @param [Hash] options a hash containings:
45
- #
45
+ #
46
46
  # voteable self, :up => +1, :down => -3
47
47
  # voteable Post, :up => +2, :down => -1, :update_counters => false # skip counter update
48
48
  def voteable(klass = self, options = nil)
@@ -56,37 +56,37 @@ module Mongo
56
56
  VOTEABLE[name][name][:update_parents] ||= true
57
57
  end
58
58
  end
59
-
59
+
60
60
  # Check if voter_id do a vote on votee_id
61
61
  #
62
62
  # @param [Hash] options a hash containings:
63
63
  # - :votee_id: the votee document id
64
64
  # - :voter_id: the voter document id
65
- #
65
+ #
66
66
  # @return [true, false]
67
67
  def voted?(options)
68
68
  validate_and_normalize_vote_options(options)
69
69
  up_voted?(options) || down_voted?(options)
70
70
  end
71
-
71
+
72
72
  # Check if voter_id do an up vote on votee_id
73
73
  #
74
74
  # @param [Hash] options a hash containings:
75
75
  # - :votee_id: the votee document id
76
76
  # - :voter_id: the voter document id
77
- #
77
+ #
78
78
  # @return [true, false]
79
79
  def up_voted?(options)
80
80
  validate_and_normalize_vote_options(options)
81
81
  up_voted_by(options[:voter_id]).where(:_id => options[:votee_id]).count == 1
82
82
  end
83
-
83
+
84
84
  # Check if voter_id do a down vote on votee_id
85
85
  #
86
86
  # @param [Hash] options a hash containings:
87
87
  # - :votee_id: the votee document id
88
88
  # - :voter_id: the voter document id
89
- #
89
+ #
90
90
  # @return [true, false]
91
91
  def down_voted?(options)
92
92
  validate_and_normalize_vote_options(options)
@@ -110,7 +110,7 @@ module Mongo
110
110
  create_indexes
111
111
  end
112
112
  end
113
-
113
+
114
114
  # Make a vote on this votee
115
115
  #
116
116
  # @param [Hash] options a hash containings:
@@ -131,7 +131,7 @@ module Mongo
131
131
 
132
132
  self.class.vote(options)
133
133
  end
134
-
134
+
135
135
  # Get a voted value on this votee
136
136
  #
137
137
  # @param voter is object or the id of the voter who made the vote
@@ -140,7 +140,7 @@ module Mongo
140
140
  return :up if up_voter_ids.include?(voter_id)
141
141
  return :down if down_voter_ids.include?(voter_id)
142
142
  end
143
-
143
+
144
144
  def voted_by?(voter)
145
145
  !!vote_value(voter)
146
146
  end
@@ -26,7 +26,7 @@ module Mongo
26
26
  votee_id = options[:votee_id]
27
27
  end
28
28
  end
29
-
29
+
30
30
  votee_class.voted?(:voter_id => id, :votee_id => votee_id)
31
31
  end
32
32
 
@@ -42,7 +42,7 @@ module Mongo
42
42
  end
43
43
  votee.vote_value(_id)
44
44
  end
45
-
45
+
46
46
  # Cancel the vote on a votee
47
47
  #
48
48
  # @param [Object] votee the votee to be unvoted
@@ -73,19 +73,19 @@ module Mongo
73
73
  else
74
74
  votee_class = options[:votee_class]
75
75
  end
76
-
76
+
77
77
  if options[:value].nil?
78
78
  options[:unvote] = true
79
79
  options[:value] = vote_value(options)
80
80
  else
81
81
  options[:revote] = options.has_key?(:revote) ? !options[:revote].blank? : voted?(options)
82
82
  end
83
-
83
+
84
84
  options[:voter] = self
85
85
  options[:voter_id] = id
86
86
 
87
87
  (votee || votee_class).vote(options)
88
88
  end
89
-
89
+
90
90
  end
91
91
  end
@@ -2,7 +2,7 @@ module Mongo
2
2
  module Voteable
3
3
  module Voting
4
4
  extend ActiveSupport::Concern
5
-
5
+
6
6
  module ClassMethods
7
7
  # Make a vote on an object of this class
8
8
  #
@@ -12,12 +12,12 @@ module Mongo
12
12
  # - :value: :up or :down
13
13
  # - :revote: if true change vote vote from :up to :down and vise versa
14
14
  # - :unvote: if true undo the voting
15
- #
15
+ #
16
16
  # @return [votee, false]
17
17
  def vote(options)
18
18
  validate_and_normalize_vote_options(options)
19
19
  options[:voteable] = VOTEABLE[name][name]
20
-
20
+
21
21
  if options[:voteable]
22
22
  query, update = if options[:revote]
23
23
  revote_query_and_update(options)
@@ -32,7 +32,7 @@ module Mongo
32
32
  doc = where(query).find_one_and_update(update, {return_document: :after})
33
33
  rescue Moped::Errors::OperationFailure
34
34
  doc = nil
35
- end
35
+ end
36
36
 
37
37
  if doc
38
38
  update_parent_votes(doc, options) if options[:voteable][:update_parents]
@@ -45,7 +45,7 @@ module Mongo
45
45
  end
46
46
  end
47
47
 
48
-
48
+
49
49
  private
50
50
  def validate_and_normalize_vote_options(options)
51
51
  options.symbolize_keys!
@@ -53,7 +53,7 @@ module Mongo
53
53
  options[:voter_id] = Helpers.try_to_convert_string_to_object_id(options[:voter_id])
54
54
  options[:value] &&= options[:value].to_sym
55
55
  end
56
-
56
+
57
57
  def new_vote_query_and_update(options)
58
58
  if options[:value] == :up
59
59
  positive_voter_ids = 'votes.up'
@@ -79,7 +79,7 @@ module Mongo
79
79
  }
80
80
  end
81
81
 
82
-
82
+
83
83
  def revote_query_and_update(options)
84
84
  if options[:value] == :up
85
85
  positive_voter_ids = 'votes.up'
@@ -113,7 +113,7 @@ module Mongo
113
113
  }
114
114
  }
115
115
  end
116
-
116
+
117
117
 
118
118
  def unvote_query_and_update(options)
119
119
  if options[:value] == :up
@@ -129,7 +129,7 @@ module Mongo
129
129
  return {
130
130
  :_id => options[:votee_id],
131
131
  # Validate if voter_id did a vote with value for votee_id
132
- # Can skip $ne validation since creating a new vote
132
+ # Can skip $ne validation since creating a new vote
133
133
  # already warranty that a voter can vote one only
134
134
  # negative_voter_ids => { '$ne' => options[:voter_id] },
135
135
  positive_voter_ids => options[:voter_id]
@@ -143,13 +143,13 @@ module Mongo
143
143
  }
144
144
  }
145
145
  end
146
-
146
+
147
147
 
148
148
  def update_parent_votes(doc, options)
149
149
  VOTEABLE[name].each do |class_name, voteable|
150
-
150
+
151
151
  if metadata = voteable_relation(class_name)
152
-
152
+
153
153
  if (parent_id = doc[voteable_foreign_key(metadata)]).present?
154
154
  parent_ids = parent_id.is_a?(Array) ? parent_id : [ parent_id ]
155
155
  class_name.constantize.collection.find({'_id' => {'$in' => parent_ids}}).update_many(
@@ -160,7 +160,7 @@ module Mongo
160
160
  end
161
161
  end
162
162
 
163
-
163
+
164
164
  def parent_inc_options(voteable, options)
165
165
  inc_options = {}
166
166
 
@@ -205,7 +205,7 @@ module Mongo
205
205
  inc_options
206
206
  end
207
207
  end
208
-
208
+
209
209
  end
210
210
  end
211
211
  end
@@ -18,7 +18,7 @@ Gem::Specification.new do |s|
18
18
  s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
19
19
  s.require_paths = ['lib']
20
20
 
21
- s.add_dependency "mongoid", '~> 6.0'
21
+ s.add_dependency "mongoid", '~> 7.0'
22
22
  s.add_development_dependency 'rspec', '~> 2.14.1'
23
23
  s.add_development_dependency "bundler"
24
24
  s.add_development_dependency "rake", '< 11.0'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rs_voteable_mongo
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.0
4
+ version: 1.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - RocketScience
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2017-03-21 00:00:00.000000000 Z
12
+ date: 2018-11-20 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: mongoid
@@ -17,14 +17,14 @@ dependencies:
17
17
  requirements:
18
18
  - - "~>"
19
19
  - !ruby/object:Gem::Version
20
- version: '6.0'
20
+ version: '7.0'
21
21
  type: :runtime
22
22
  prerelease: false
23
23
  version_requirements: !ruby/object:Gem::Requirement
24
24
  requirements:
25
25
  - - "~>"
26
26
  - !ruby/object:Gem::Version
27
- version: '6.0'
27
+ version: '7.0'
28
28
  - !ruby/object:Gem::Dependency
29
29
  name: rspec
30
30
  requirement: !ruby/object:Gem::Requirement
@@ -126,7 +126,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
126
126
  version: '0'
127
127
  requirements: []
128
128
  rubyforge_project:
129
- rubygems_version: 2.6.10
129
+ rubygems_version: 2.7.7
130
130
  signing_key:
131
131
  specification_version: 4
132
132
  summary: Add up / down voting ability to Mongoid documents