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