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