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 +1 -1
- data/lib/acts_as_voteable.rb +2 -1
- data/test/test_helper.rb +10 -6
- data/test/test_thumbs_up.rb +37 -20
- data/thumbs_up.gemspec +1 -1
- metadata +9 -9
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.4.
|
1
|
+
0.4.5
|
data/lib/acts_as_voteable.rb
CHANGED
@@ -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.
|
38
|
-
t.string
|
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
|
data/test/test_thumbs_up.rb
CHANGED
@@ -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
|
148
|
+
def test_plusminus_tally_empty
|
149
149
|
item = Item.create(:name => 'XBOX', :description => 'XBOX console')
|
150
150
|
|
151
|
-
assert_equal 0, Item.
|
151
|
+
assert_equal 0, Item.plusminus_tally.length
|
152
152
|
end
|
153
153
|
|
154
|
-
def
|
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.
|
163
|
-
assert_equal 1, Item.
|
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
|
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.
|
175
|
-
assert_equal 1, Item.
|
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
|
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.
|
192
|
-
assert_equal 2, Item.
|
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
|
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.
|
203
|
-
assert (not Item.
|
202
|
+
assert (Item.plusminus_tally.include? item)
|
203
|
+
assert (not Item.plusminus_tally.include? item_not_included)
|
204
204
|
end
|
205
205
|
|
206
|
-
def
|
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.
|
215
|
-
assert_equal item_against, Item.
|
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
|
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.
|
227
|
-
assert_equal item_against, Item.
|
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 =
|
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
|
+
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: &
|
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: *
|
29
|
+
version_requirements: *70139853634340
|
30
30
|
- !ruby/object:Gem::Dependency
|
31
31
|
name: bundler
|
32
|
-
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: *
|
40
|
+
version_requirements: *70139854498400
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: jeweler
|
43
|
-
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: *
|
51
|
+
version_requirements: *70139854495760
|
52
52
|
- !ruby/object:Gem::Dependency
|
53
53
|
name: simplecov
|
54
|
-
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: *
|
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
|