thumbs_up 0.3.1 → 0.3.2
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/.gitignore +1 -0
- data/VERSION +1 -1
- data/lib/acts_as_voteable.rb +25 -6
- data/lib/acts_as_voter.rb +1 -1
- data/lib/generators/thumbs_up/templates/migration.rb +8 -6
- data/lib/has_karma.rb +1 -1
- data/thumbs_up.gemspec +2 -2
- metadata +3 -3
data/.gitignore
CHANGED
data/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
0.3.
|
|
1
|
+
0.3.2
|
data/lib/acts_as_voteable.rb
CHANGED
|
@@ -30,21 +30,40 @@ module ThumbsUp
|
|
|
30
30
|
# :at_most - Item may not have more than X votes
|
|
31
31
|
def tally(*args)
|
|
32
32
|
options = args.extract_options!
|
|
33
|
+
|
|
34
|
+
# Use the explicit SQL statement throughout for Postgresql compatibility.
|
|
35
|
+
vote_count = "COUNT(#{Vote.table_name}.voteable_id)"
|
|
36
|
+
|
|
33
37
|
t = self.where("#{Vote.table_name}.voteable_type = '#{self.name}'")
|
|
38
|
+
|
|
34
39
|
# We join so that you can order by columns on the voteable model.
|
|
35
40
|
t = t.joins("LEFT OUTER JOIN #{Vote.table_name} ON #{self.table_name}.#{self.primary_key} = #{Vote.table_name}.voteable_id")
|
|
36
|
-
|
|
37
|
-
t = t.group("#{Vote.table_name}.voteable_id")
|
|
41
|
+
|
|
42
|
+
t = t.group("#{Vote.table_name}.voteable_id, #{column_names_for_tally}")
|
|
38
43
|
t = t.limit(options[:limit]) if options[:limit]
|
|
39
44
|
t = t.where("#{Vote.table_name}.created_at >= ?", options[:start_at]) if options[:start_at]
|
|
40
45
|
t = t.where("#{Vote.table_name}.created_at <= ?", options[:end_at]) if options[:end_at]
|
|
41
46
|
t = t.where(options[:conditions]) if options[:conditions]
|
|
42
|
-
t = options[:order] ? t.order(options[:order]) : t.order("vote_count DESC")
|
|
43
|
-
|
|
44
|
-
|
|
47
|
+
t = options[:order] ? t.order(options[:order]) : t.order("#{vote_count} DESC")
|
|
48
|
+
|
|
49
|
+
# I haven't been able to confirm this bug yet, but Arel (2.0.7) currently blows up
|
|
50
|
+
# with multiple 'having' clauses. So we hack them all into one for now.
|
|
51
|
+
# If you have a more elegant solution, a pull request on Github would be greatly appreciated.
|
|
52
|
+
t = t.having([
|
|
53
|
+
"#{vote_count} > 0",
|
|
54
|
+
(options[:at_least] ? "#{vote_count} >= #{sanitize(options[:at_least])}" : nil),
|
|
55
|
+
(options[:at_most] ? "#{vote_count} <= #{sanitize(options[:at_most])}" : nil)
|
|
56
|
+
].compact.join(' AND '))
|
|
57
|
+
# t = t.having("#{vote_count} > 0")
|
|
58
|
+
# t = t.having(["#{vote_count} >= ?", options[:at_least]]) if options[:at_least]
|
|
59
|
+
# t = t.having(["#{vote_count} <= ?", options[:at_most]]) if options[:at_most]
|
|
45
60
|
t.select("#{self.table_name}.*, COUNT(#{Vote.table_name}.voteable_id) AS vote_count")
|
|
46
61
|
end
|
|
47
62
|
|
|
63
|
+
def column_names_for_tally
|
|
64
|
+
column_names.map { |column| "#{self.table_name}.#{column}" }.join(', ')
|
|
65
|
+
end
|
|
66
|
+
|
|
48
67
|
end
|
|
49
68
|
|
|
50
69
|
module InstanceMethods
|
|
@@ -82,4 +101,4 @@ module ThumbsUp
|
|
|
82
101
|
|
|
83
102
|
end
|
|
84
103
|
end
|
|
85
|
-
end
|
|
104
|
+
end
|
data/lib/acts_as_voter.rb
CHANGED
|
@@ -79,7 +79,7 @@ module ThumbsUp #:nodoc:
|
|
|
79
79
|
if options[:exclusive]
|
|
80
80
|
self.clear_votes(voteable)
|
|
81
81
|
end
|
|
82
|
-
direction = (options[:direction].to_sym == :up
|
|
82
|
+
direction = (options[:direction].to_sym == :up)
|
|
83
83
|
Vote.create!(:vote => direction, :voteable => voteable, :voter => self)
|
|
84
84
|
end
|
|
85
85
|
|
|
@@ -1,21 +1,23 @@
|
|
|
1
1
|
class ThumbsUpMigration < ActiveRecord::Migration
|
|
2
2
|
def self.up
|
|
3
3
|
create_table :votes, :force => true do |t|
|
|
4
|
-
|
|
4
|
+
|
|
5
|
+
t.boolean :vote, :default => false
|
|
5
6
|
t.references :voteable, :polymorphic => true, :null => false
|
|
6
7
|
t.references :voter, :polymorphic => true
|
|
7
8
|
t.timestamps
|
|
9
|
+
|
|
8
10
|
end
|
|
9
11
|
|
|
10
|
-
add_index :votes, [
|
|
11
|
-
add_index :votes, [
|
|
12
|
+
add_index :votes, [:voter_id, :voter_type]
|
|
13
|
+
add_index :votes, [:voteable_id, :voteable_type]
|
|
12
14
|
|
|
13
|
-
#
|
|
14
|
-
add_index :votes, [
|
|
15
|
+
# Comment out the line below to allow multiple votes per voter on a single entity.
|
|
16
|
+
add_index :votes, [:voter_id, :voter_type, :voteable_id, :voteable_type], :unique => true, :name => 'fk_one_vote_per_user_per_entity'
|
|
15
17
|
end
|
|
16
18
|
|
|
17
19
|
def self.down
|
|
18
20
|
drop_table :votes
|
|
19
21
|
end
|
|
20
22
|
|
|
21
|
-
end
|
|
23
|
+
end
|
data/lib/has_karma.rb
CHANGED
|
@@ -13,7 +13,7 @@ module ThumbsUp #:nodoc:
|
|
|
13
13
|
include ThumbsUp::Karma::InstanceMethods
|
|
14
14
|
extend ThumbsUp::Karma::SingletonMethods
|
|
15
15
|
self.karmic_objects ||= {}
|
|
16
|
-
self.karmic_objects[voteable_type.to_s.classify.constantize] = [ (options[:as] ? options[:as].to_s.foreign_key : self.name.foreign_key), (options[:weight]
|
|
16
|
+
self.karmic_objects[voteable_type.to_s.classify.constantize] = [ (options[:as] ? options[:as].to_s.foreign_key : self.name.foreign_key), (options[:weight] || 1).to_f ]
|
|
17
17
|
end
|
|
18
18
|
end
|
|
19
19
|
|
data/thumbs_up.gemspec
CHANGED
|
@@ -5,11 +5,11 @@
|
|
|
5
5
|
|
|
6
6
|
Gem::Specification.new do |s|
|
|
7
7
|
s.name = %q{thumbs_up}
|
|
8
|
-
s.version =
|
|
8
|
+
s.version = IO.read('./VERSION')
|
|
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 Wnętrzak"]
|
|
12
|
-
s.date =
|
|
12
|
+
s.date = Date.today.to_s
|
|
13
13
|
s.description = %q{ThumbsUp provides dead-simple voting capabilities to ActiveRecord models with karma calculation, a la stackoverflow.com.}
|
|
14
14
|
s.email = %q{brady@ldawn.com}
|
|
15
15
|
s.extra_rdoc_files = [
|
metadata
CHANGED
|
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
|
5
5
|
segments:
|
|
6
6
|
- 0
|
|
7
7
|
- 3
|
|
8
|
-
-
|
|
9
|
-
version: 0.3.
|
|
8
|
+
- 2
|
|
9
|
+
version: 0.3.2
|
|
10
10
|
platform: ruby
|
|
11
11
|
authors:
|
|
12
12
|
- Brady Bouchard
|
|
@@ -19,7 +19,7 @@ autorequire:
|
|
|
19
19
|
bindir: bin
|
|
20
20
|
cert_chain: []
|
|
21
21
|
|
|
22
|
-
date: 2010-
|
|
22
|
+
date: 2010-12-16 00:00:00 -07:00
|
|
23
23
|
default_executable:
|
|
24
24
|
dependencies: []
|
|
25
25
|
|