acts_as_votable 0.3.1 → 0.4.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.
@@ -1,76 +1,76 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- acts_as_votable (0.3.0)
4
+ acts_as_votable (0.4.0)
5
5
  rails (>= 3.0.0)
6
6
 
7
7
  GEM
8
8
  remote: http://rubygems.org/
9
9
  specs:
10
- actionmailer (3.2.3)
11
- actionpack (= 3.2.3)
10
+ actionmailer (3.2.8)
11
+ actionpack (= 3.2.8)
12
12
  mail (~> 2.4.4)
13
- actionpack (3.2.3)
14
- activemodel (= 3.2.3)
15
- activesupport (= 3.2.3)
13
+ actionpack (3.2.8)
14
+ activemodel (= 3.2.8)
15
+ activesupport (= 3.2.8)
16
16
  builder (~> 3.0.0)
17
17
  erubis (~> 2.7.0)
18
- journey (~> 1.0.1)
18
+ journey (~> 1.0.4)
19
19
  rack (~> 1.4.0)
20
20
  rack-cache (~> 1.2)
21
21
  rack-test (~> 0.6.1)
22
- sprockets (~> 2.1.2)
23
- activemodel (3.2.3)
24
- activesupport (= 3.2.3)
22
+ sprockets (~> 2.1.3)
23
+ activemodel (3.2.8)
24
+ activesupport (= 3.2.8)
25
25
  builder (~> 3.0.0)
26
- activerecord (3.2.3)
27
- activemodel (= 3.2.3)
28
- activesupport (= 3.2.3)
26
+ activerecord (3.2.8)
27
+ activemodel (= 3.2.8)
28
+ activesupport (= 3.2.8)
29
29
  arel (~> 3.0.2)
30
30
  tzinfo (~> 0.3.29)
31
- activeresource (3.2.3)
32
- activemodel (= 3.2.3)
33
- activesupport (= 3.2.3)
34
- activesupport (3.2.3)
31
+ activeresource (3.2.8)
32
+ activemodel (= 3.2.8)
33
+ activesupport (= 3.2.8)
34
+ activesupport (3.2.8)
35
35
  i18n (~> 0.6)
36
36
  multi_json (~> 1.0)
37
37
  arel (3.0.2)
38
- builder (3.0.0)
38
+ builder (3.0.4)
39
39
  diff-lcs (1.1.3)
40
40
  erubis (2.7.0)
41
41
  hike (1.2.1)
42
- i18n (0.6.0)
43
- journey (1.0.3)
44
- json (1.6.6)
42
+ i18n (0.6.1)
43
+ journey (1.0.4)
44
+ json (1.7.5)
45
45
  mail (2.4.4)
46
46
  i18n (>= 0.4.0)
47
47
  mime-types (~> 1.16)
48
48
  treetop (~> 1.4.8)
49
- mime-types (1.18)
50
- multi_json (1.2.0)
49
+ mime-types (1.19)
50
+ multi_json (1.3.7)
51
51
  polyglot (0.3.3)
52
52
  rack (1.4.1)
53
53
  rack-cache (1.2)
54
54
  rack (>= 0.4)
55
55
  rack-ssl (1.3.2)
56
56
  rack
57
- rack-test (0.6.1)
57
+ rack-test (0.6.2)
58
58
  rack (>= 1.0)
59
- rails (3.2.3)
60
- actionmailer (= 3.2.3)
61
- actionpack (= 3.2.3)
62
- activerecord (= 3.2.3)
63
- activeresource (= 3.2.3)
64
- activesupport (= 3.2.3)
59
+ rails (3.2.8)
60
+ actionmailer (= 3.2.8)
61
+ actionpack (= 3.2.8)
62
+ activerecord (= 3.2.8)
63
+ activeresource (= 3.2.8)
64
+ activesupport (= 3.2.8)
65
65
  bundler (~> 1.0)
66
- railties (= 3.2.3)
67
- railties (3.2.3)
68
- actionpack (= 3.2.3)
69
- activesupport (= 3.2.3)
66
+ railties (= 3.2.8)
67
+ railties (3.2.8)
68
+ actionpack (= 3.2.8)
69
+ activesupport (= 3.2.8)
70
70
  rack-ssl (~> 1.3.2)
71
71
  rake (>= 0.8.7)
72
72
  rdoc (~> 3.4)
73
- thor (~> 0.14.6)
73
+ thor (>= 0.14.6, < 2.0)
74
74
  rake (0.9.2.2)
75
75
  rdoc (3.12)
76
76
  json (~> 1.4)
@@ -82,17 +82,17 @@ GEM
82
82
  rspec-expectations (2.9.1)
83
83
  diff-lcs (~> 1.1.3)
84
84
  rspec-mocks (2.9.0)
85
- sprockets (2.1.2)
85
+ sprockets (2.1.3)
86
86
  hike (~> 1.2)
87
87
  rack (~> 1.0)
88
88
  tilt (~> 1.1, != 1.3.0)
89
89
  sqlite3 (1.3.5)
90
- thor (0.14.6)
90
+ thor (0.16.0)
91
91
  tilt (1.3.3)
92
- treetop (1.4.10)
92
+ treetop (1.4.12)
93
93
  polyglot
94
94
  polyglot (>= 0.3.1)
95
- tzinfo (0.3.33)
95
+ tzinfo (0.3.34)
96
96
 
97
97
  PLATFORMS
98
98
  ruby
@@ -14,7 +14,7 @@ The main goals of this gem are:
14
14
 
15
15
  Just add the following to your Gemfile.
16
16
 
17
- gem 'acts_as_votable'
17
+ gem 'acts_as_votable', '~> 0.4.0'
18
18
 
19
19
  And follow that up with a ``bundle install``.
20
20
 
@@ -156,6 +156,27 @@ You can also check whether the voter has voted up or down.
156
156
  @user.voted_up_on? @comment3 # => false
157
157
  @user.voted_down_on? @comment3 # => false
158
158
 
159
+ Also, you can obtain a list of all the objects a user has voted for.
160
+ This returns the actual objects instead of instances of the Vote model.
161
+ All objects are eager loaded
162
+
163
+ @user.find_voted_items
164
+
165
+ @user.find_up_voted_items
166
+ @user.find_liked_items
167
+
168
+ @user.find_down_voted_items
169
+ @user.find_disliked_items
170
+
171
+ Members of an individual model that a user has voted for can also be
172
+ displayed. The result is an ActiveRecord Relation.
173
+
174
+ @user.get_voted Comment
175
+
176
+ @user.get_up_voted Comment
177
+
178
+ @user.get_down_voted Comment
179
+
159
180
  ### Registered Votes
160
181
 
161
182
  Voters can only vote once per model. In this example the 2nd vote does not count
@@ -1,3 +1,3 @@
1
1
  module ActsAsVotable
2
- VERSION = "0.3.1"
2
+ VERSION = "0.4.0"
3
3
  end
@@ -96,5 +96,36 @@ module ActsAsVotable
96
96
  find_votes_for_class klass, :vote_flag => false
97
97
  end
98
98
 
99
+ # Including polymporphic relations for eager loading
100
+ def include_objects
101
+ ActsAsVotable::Vote.includes(:votable)
102
+ end
103
+
104
+ def find_voted_items extra_conditions = {}
105
+ options = extra_conditions.merge :voter_id => id, :voter_type => self.class.name
106
+ include_objects.where(options).collect(&:votable)
107
+ end
108
+
109
+ def find_up_voted_items extra_conditions = {}
110
+ find_voted_items extra_conditions.merge(:vote_flag => true)
111
+ end
112
+ alias_method :find_liked_items, :find_up_voted_items
113
+
114
+ def find_down_voted_items extra_conditions = {}
115
+ find_voted_items extra_conditions.merge(:vote_flag => false)
116
+ end
117
+ alias_method :find_disliked_items, :find_down_voted_items
118
+
119
+ def get_voted klass, extra_conditions = {}
120
+ klass.joins(:votes).merge find_votes(extra_conditions)
121
+ end
122
+
123
+ def get_up_voted klass
124
+ klass.joins(:votes).merge find_up_votes
125
+ end
126
+
127
+ def get_down_voted klass
128
+ klass.joins(:votes).merge find_down_votes
129
+ end
99
130
  end
100
131
  end
@@ -145,5 +145,96 @@ describe ActsAsVotable::Voter do
145
145
  @voter.voted_as_when_voting_on(@votable).should be false
146
146
  end
147
147
 
148
+ describe '#find_voted_items' do
149
+ it 'returns objects that a user has upvoted for' do
150
+ @votable.vote :voter => @voter
151
+ @votable2.vote :voter => @voter2
152
+ @voter.find_voted_items.should include @votable
153
+ @voter.find_voted_items.size.should == 1
154
+ end
155
+
156
+ it 'returns objects that a user has downvoted for' do
157
+ @votable.vote_down @voter
158
+ @votable2.vote_down @voter2
159
+ @voter.find_voted_items.should include @votable
160
+ @voter.find_voted_items.size.should == 1
161
+ end
162
+ end
163
+
164
+ describe '#find_up_voted_items' do
165
+ it 'returns objects that a user has upvoted for' do
166
+ @votable.vote :voter => @voter
167
+ @votable2.vote :voter => @voter2
168
+ @voter.find_up_voted_items.should include @votable
169
+ @voter.find_up_voted_items.size.should == 1
170
+ end
171
+
172
+ it 'does not return objects that a user has downvoted for' do
173
+ @votable.vote_down @voter
174
+ @voter.find_up_voted_items.size.should == 0
175
+ end
176
+ end
177
+
178
+ describe '#find_down_voted_items' do
179
+ it 'does not return objects that a user has upvoted for' do
180
+ @votable.vote :voter => @voter
181
+ @voter.find_down_voted_items.size.should == 0
182
+ end
183
+
184
+ it 'returns objects that a user has downvoted for' do
185
+ @votable.vote_down @voter
186
+ @votable2.vote_down @voter2
187
+ @voter.find_down_voted_items.should include @votable
188
+ @voter.find_down_voted_items.size.should == 1
189
+ end
190
+ end
191
+
192
+ describe '#get_voted' do
193
+ subject { @voter.get_voted(@votable.class) }
194
+
195
+ it 'returns objects of a class that a voter has voted for' do
196
+ @votable.vote :voter => @voter
197
+ @votable2.vote_down @voter
198
+ subject.should include @votable
199
+ subject.should include @votable2
200
+ subject.size.should == 2
201
+ end
202
+
203
+ it 'does not return objects of a class that a voter has voted for' do
204
+ @votable.vote :voter => @voter2
205
+ @votable2.vote :voter => @voter2
206
+ subject.size.should == 0
207
+ end
208
+ end
209
+
210
+ describe '#get_up_voted' do
211
+ subject { @voter.get_up_voted(@votable.class) }
212
+
213
+ it 'returns up voted items that a voter has voted for' do
214
+ @votable.vote :voter => @voter
215
+ subject.should include @votable
216
+ subject.size.should == 1
217
+ end
218
+
219
+ it 'does not return down voted items a voter has voted for' do
220
+ @votable.vote_down @voter
221
+ subject.size.should == 0
222
+ end
223
+ end
224
+
225
+ describe '#get_down_voted' do
226
+ subject { @voter.get_down_voted(@votable.class) }
227
+
228
+ it 'does not return up voted items that a voter has voted for' do
229
+ @votable.vote :voter => @voter
230
+ subject.size.should == 0
231
+ end
232
+
233
+ it 'returns down voted items a voter has voted for' do
234
+ @votable.vote_down @voter
235
+ subject.should include @votable
236
+ subject.size.should == 1
237
+ end
238
+ end
148
239
  end
149
240
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: acts_as_votable
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.1
4
+ version: 0.4.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-05-28 00:00:00.000000000Z
12
+ date: 2012-11-04 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rspec
16
- requirement: &915760 !ruby/object:Gem::Requirement
16
+ requirement: !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,15 @@ dependencies:
21
21
  version: '0'
22
22
  type: :development
23
23
  prerelease: false
24
- version_requirements: *915760
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
25
30
  - !ruby/object:Gem::Dependency
26
31
  name: sqlite3
27
- requirement: &915380 !ruby/object:Gem::Requirement
32
+ requirement: !ruby/object:Gem::Requirement
28
33
  none: false
29
34
  requirements:
30
35
  - - ! '>='
@@ -32,10 +37,15 @@ dependencies:
32
37
  version: '0'
33
38
  type: :development
34
39
  prerelease: false
35
- version_requirements: *915380
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
36
46
  - !ruby/object:Gem::Dependency
37
47
  name: rails
38
- requirement: &914860 !ruby/object:Gem::Requirement
48
+ requirement: !ruby/object:Gem::Requirement
39
49
  none: false
40
50
  requirements:
41
51
  - - ! '>='
@@ -43,7 +53,12 @@ dependencies:
43
53
  version: 3.0.0
44
54
  type: :runtime
45
55
  prerelease: false
46
- version_requirements: *914860
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: 3.0.0
47
62
  description: Rails gem to allowing records to be votable
48
63
  email:
49
64
  - ryanto
@@ -83,15 +98,21 @@ required_ruby_version: !ruby/object:Gem::Requirement
83
98
  - - ! '>='
84
99
  - !ruby/object:Gem::Version
85
100
  version: '0'
101
+ segments:
102
+ - 0
103
+ hash: -2774267182574358565
86
104
  required_rubygems_version: !ruby/object:Gem::Requirement
87
105
  none: false
88
106
  requirements:
89
107
  - - ! '>='
90
108
  - !ruby/object:Gem::Version
91
109
  version: '0'
110
+ segments:
111
+ - 0
112
+ hash: -2774267182574358565
92
113
  requirements: []
93
114
  rubyforge_project: acts_as_votable
94
- rubygems_version: 1.8.11
115
+ rubygems_version: 1.8.24
95
116
  signing_key:
96
117
  specification_version: 3
97
118
  summary: Rails gem to allowing records to be votable