rs_voteable_mongo 1.2.0 → 1.3.0

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 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