thumbs_up 0.4.4 → 0.4.5

Sign up to get free protection for your applications and to get access to all the features.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.4.3
1
+ 0.4.5
@@ -51,8 +51,9 @@ module ThumbsUp
51
51
  AS joined_#{Vote.table_name} ON #{self.table_name}.#{self.primary_key} =
52
52
  joined_#{Vote.table_name}.voteable_id")
53
53
 
54
- t = t.where("joined_#{Vote.table_name}.voteable_type = '#{self.name}'")
55
54
  t = t.group("joined_#{Vote.table_name}.voteable_id, joined_#{Vote.table_name}.vote_total, #{column_names_for_tally}")
55
+ t = t.limit(options[:limit]) if options[:limit]
56
+ t = t.where("joined_#{Vote.table_name}.voteable_type = '#{self.name}'")
56
57
  t = t.where("joined_#{Vote.table_name}.created_at >= ?", options[:start_at]) if options[:start_at]
57
58
  t = t.where("joined_#{Vote.table_name}.created_at <= ?", options[:end_at]) if options[:end_at]
58
59
  t = options[:ascending] ? t.order("joined_#{Vote.table_name}.vote_total") : t.order("joined_#{Vote.table_name}.vote_total DESC")
data/test/test_helper.rb CHANGED
@@ -34,8 +34,9 @@ ActiveRecord::Schema.define do
34
34
  end
35
35
 
36
36
  create_table :items, :force => true do |t|
37
- t.string :name
38
- t.string :description
37
+ t.integer :user_id
38
+ t.string :name
39
+ t.string :description
39
40
  end
40
41
  end
41
42
 
@@ -57,12 +58,15 @@ class Vote < ActiveRecord::Base
57
58
  validates_uniqueness_of :voteable_id, :scope => [:voteable_type, :voter_type, :voter_id]
58
59
  end
59
60
 
60
- class User < ActiveRecord::Base
61
- acts_as_voter
62
- end
63
-
64
61
  class Item < ActiveRecord::Base
65
62
  acts_as_voteable
63
+ belongs_to :user
64
+ end
65
+
66
+ class User < ActiveRecord::Base
67
+ acts_as_voter
68
+ has_many :items
69
+ has_karma(:items)
66
70
  end
67
71
 
68
72
  class Test::Unit::TestCase
@@ -145,13 +145,13 @@ class TestThumbsUp < Test::Unit::TestCase
145
145
  assert_equal 2, Item.tally(:start_at => 3.days.ago, :end_at => 4.days.from_now).length
146
146
  end
147
147
 
148
- def test_rank_tally_empty
148
+ def test_plusminus_tally_empty
149
149
  item = Item.create(:name => 'XBOX', :description => 'XBOX console')
150
150
 
151
- assert_equal 0, Item.rank_tally.length
151
+ assert_equal 0, Item.plusminus_tally.length
152
152
  end
153
153
 
154
- def test_rank_tally_starts_at
154
+ def test_plusminus_tally_starts_at
155
155
  item = Item.create(:name => 'XBOX', :description => 'XBOX console')
156
156
  user = User.create(:name => 'david')
157
157
 
@@ -159,11 +159,11 @@ class TestThumbsUp < Test::Unit::TestCase
159
159
  vote.created_at = 3.days.ago
160
160
  vote.save
161
161
 
162
- assert_equal 0, Item.rank_tally(:start_at => 2.days.ago).length
163
- assert_equal 1, Item.rank_tally(:start_at => 4.days.ago).length
162
+ assert_equal 0, Item.plusminus_tally(:start_at => 2.days.ago).length
163
+ assert_equal 1, Item.plusminus_tally(:start_at => 4.days.ago).length
164
164
  end
165
165
 
166
- def test_rank_tally_end_at
166
+ def test_plusminus_tally_end_at
167
167
  item = Item.create(:name => 'XBOX', :description => 'XBOX console')
168
168
  user = User.create(:name => 'david')
169
169
 
@@ -171,11 +171,11 @@ class TestThumbsUp < Test::Unit::TestCase
171
171
  vote.created_at = 3.days.from_now
172
172
  vote.save
173
173
 
174
- assert_equal 0, Item.rank_tally(:end_at => 2.days.from_now).length
175
- assert_equal 1, Item.rank_tally(:end_at => 4.days.from_now).length
174
+ assert_equal 0, Item.plusminus_tally(:end_at => 2.days.from_now).length
175
+ assert_equal 1, Item.plusminus_tally(:end_at => 4.days.from_now).length
176
176
  end
177
177
 
178
- def test_rank_tally_between_start_at_end_at
178
+ def test_plusminus_tally_between_start_at_end_at
179
179
  item = Item.create(:name => 'XBOX', :description => 'XBOX console')
180
180
  another_item = Item.create(:name => 'XBOX', :description => 'XBOX console')
181
181
  user = User.create(:name => 'david')
@@ -188,22 +188,22 @@ class TestThumbsUp < Test::Unit::TestCase
188
188
  vote.created_at = 3.days.from_now
189
189
  vote.save
190
190
 
191
- assert_equal 1, Item.rank_tally(:start_at => 3.days.ago, :end_at => 2.days.from_now).length
192
- assert_equal 2, Item.rank_tally(:start_at => 3.days.ago, :end_at => 4.days.from_now).length
191
+ assert_equal 1, Item.plusminus_tally(:start_at => 3.days.ago, :end_at => 2.days.from_now).length
192
+ assert_equal 2, Item.plusminus_tally(:start_at => 3.days.ago, :end_at => 4.days.from_now).length
193
193
  end
194
194
 
195
- def test_rank_tally_inclusion
195
+ def test_plusminus_tally_inclusion
196
196
  user = User.create(:name => 'david')
197
197
  item = Item.create(:name => 'XBOX', :description => 'XBOX console')
198
198
  item_not_included = Item.create(:name => 'Playstation', :description => 'Playstation console')
199
199
 
200
200
  assert_not_nil user.vote_for(item)
201
201
 
202
- assert (Item.rank_tally.include? item)
203
- assert (not Item.rank_tally.include? item_not_included)
202
+ assert (Item.plusminus_tally.include? item)
203
+ assert (not Item.plusminus_tally.include? item_not_included)
204
204
  end
205
205
 
206
- def test_rank_tally_default_ordering
206
+ def test_plusminus_tally_default_ordering
207
207
  user = User.create(:name => 'david')
208
208
  item_for = Item.create(:name => 'XBOX', :description => 'XBOX console')
209
209
  item_against = Item.create(:name => 'Playstation', :description => 'Playstation console')
@@ -211,11 +211,19 @@ class TestThumbsUp < Test::Unit::TestCase
211
211
  assert_not_nil user.vote_for(item_for)
212
212
  assert_not_nil user.vote_against(item_against)
213
213
 
214
- assert_equal item_for, Item.rank_tally[0]
215
- assert_equal item_against, Item.rank_tally[1]
214
+ assert_equal item_for, Item.plusminus_tally[0]
215
+ assert_equal item_against, Item.plusminus_tally[1]
216
+ end
217
+
218
+ def test_plusminus_tally_limit
219
+ users = (0..9).map{ |u| User.create(:name => "User #{u}") }
220
+ items = (0..9).map{ |u| Item.create(:name => "Item #{u}", :description => "Item #{u}") }
221
+ users.each{ |u| items.each { |i| u.vote_for(i) } }
222
+ assert_equal 10, Item.plusminus_tally.length
223
+ assert_equal 2, Item.plusminus_tally(:limit => 2).length
216
224
  end
217
225
 
218
- def test_rank_tally_ascending_ordering
226
+ def test_plusminus_tally_ascending_ordering
219
227
  user = User.create(:name => 'david')
220
228
  item_for = Item.create(:name => 'XBOX', :description => 'XBOX console')
221
229
  item_against = Item.create(:name => 'Playstation', :description => 'Playstation console')
@@ -223,7 +231,16 @@ class TestThumbsUp < Test::Unit::TestCase
223
231
  assert_not_nil user.vote_for(item_for)
224
232
  assert_not_nil user.vote_against(item_against)
225
233
 
226
- assert_equal item_for, Item.rank_tally(:ascending => true)[1]
227
- assert_equal item_against, Item.rank_tally(:ascending => true)[0]
234
+ assert_equal item_for, Item.plusminus_tally(:ascending => true)[1]
235
+ assert_equal item_against, Item.plusminus_tally(:ascending => true)[0]
236
+ end
237
+
238
+ def test_karma
239
+ users = (0..1).map{ |u| User.create(:name => "User #{u}") }
240
+ items = (0..1).map{ |u| users[0].items.create(:name => "Item #{u}", :description => "Item #{u}") }
241
+ users.each{ |u| items.each { |i| u.vote_for(i) } }
242
+
243
+ assert_equal 4, users[0].karma
244
+ assert_equal 0, users[1].karma
228
245
  end
229
246
  end
data/thumbs_up.gemspec CHANGED
@@ -5,7 +5,7 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "thumbs_up"
8
- s.version = "0.4.4"
8
+ s.version = File.read('./VERSION').strip
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Brady Bouchard", "Peter Jackson", "Cosmin Radoi", "Bence Nagy", "Rob Maddox", "Wojciech Wnetrzak"]
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: thumbs_up
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.4
4
+ version: 0.4.5
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -18,7 +18,7 @@ date: 2011-09-15 00:00:00.000000000 Z
18
18
  dependencies:
19
19
  - !ruby/object:Gem::Dependency
20
20
  name: activerecord
21
- requirement: &70296099839180 !ruby/object:Gem::Requirement
21
+ requirement: &70139853634340 !ruby/object:Gem::Requirement
22
22
  none: false
23
23
  requirements:
24
24
  - - ! '>='
@@ -26,10 +26,10 @@ dependencies:
26
26
  version: '0'
27
27
  type: :runtime
28
28
  prerelease: false
29
- version_requirements: *70296099839180
29
+ version_requirements: *70139853634340
30
30
  - !ruby/object:Gem::Dependency
31
31
  name: bundler
32
- requirement: &70296099838660 !ruby/object:Gem::Requirement
32
+ requirement: &70139854498400 !ruby/object:Gem::Requirement
33
33
  none: false
34
34
  requirements:
35
35
  - - ! '>='
@@ -37,10 +37,10 @@ dependencies:
37
37
  version: '0'
38
38
  type: :development
39
39
  prerelease: false
40
- version_requirements: *70296099838660
40
+ version_requirements: *70139854498400
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: jeweler
43
- requirement: &70296099835080 !ruby/object:Gem::Requirement
43
+ requirement: &70139854495760 !ruby/object:Gem::Requirement
44
44
  none: false
45
45
  requirements:
46
46
  - - ! '>='
@@ -48,10 +48,10 @@ dependencies:
48
48
  version: '0'
49
49
  type: :development
50
50
  prerelease: false
51
- version_requirements: *70296099835080
51
+ version_requirements: *70139854495760
52
52
  - !ruby/object:Gem::Dependency
53
53
  name: simplecov
54
- requirement: &70296099834460 !ruby/object:Gem::Requirement
54
+ requirement: &70139854493840 !ruby/object:Gem::Requirement
55
55
  none: false
56
56
  requirements:
57
57
  - - ! '>='
@@ -59,7 +59,7 @@ dependencies:
59
59
  version: '0'
60
60
  type: :development
61
61
  prerelease: false
62
- version_requirements: *70296099834460
62
+ version_requirements: *70139854493840
63
63
  description: ThumbsUp provides dead-simple voting capabilities to ActiveRecord models
64
64
  with karma calculation, a la stackoverflow.com.
65
65
  email: brady@ldawn.com