thumbs_up 0.6.3 → 0.6.4
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.
- checksums.yaml +7 -0
- data/README.md +26 -8
- data/Rakefile +1 -1
- data/lib/acts_as_voteable.rb +14 -6
- data/lib/acts_as_voter.rb +10 -2
- data/lib/thumbs_up/base.rb +11 -0
- data/lib/thumbs_up/configuration.rb +51 -0
- data/lib/thumbs_up/version.rb +1 -1
- data/lib/thumbs_up.rb +24 -5
- metadata +25 -47
checksums.yaml
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
---
|
|
2
|
+
SHA1:
|
|
3
|
+
metadata.gz: 2eb255a6f08815057ab4a1896ed3e9d854c1c9c1
|
|
4
|
+
data.tar.gz: 8dc62bc7e179b16b6e2e307493f2a84b35445738
|
|
5
|
+
SHA512:
|
|
6
|
+
metadata.gz: 708c9cf6c4b659a8d56d5cd56dafd785d6e05bfd0c9d85e177abe94b832f9e85cf7278482ae6149e52234f3ff085be80a27845975800a395e480e81839dbf7cb
|
|
7
|
+
data.tar.gz: 31d121f34fa8dd291fec0f33a7411842bb548f773f28d01434c5b07efd869a60b0d325acb848f743f0d0361eafd10df574ea3ea529e263c92152ebca7a7e3a6d
|
data/README.md
CHANGED
|
@@ -142,14 +142,32 @@ You can also use `--unique-voting false` when running the generator command:
|
|
|
142
142
|
|
|
143
143
|
Testing is a bit more than trivial now as our #tally and #plusminus_tally queries don't function properly under SQLite. To set up for testing:
|
|
144
144
|
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
145
|
+
* mysql
|
|
146
|
+
|
|
147
|
+
```
|
|
148
|
+
$ mysql -uroot # You may have set a password locally. Change as needed.
|
|
149
|
+
> CREATE USER 'test'@'localhost' IDENTIFIED BY 'test';
|
|
150
|
+
> CREATE DATABASE thumbs_up_test;
|
|
151
|
+
> USE thumbs_up_test;
|
|
152
|
+
> GRANT ALL PRIVILEGES ON thumbs_up_test TO 'test'@'localhost' IDENTIFIED BY 'test';
|
|
153
|
+
> exit;
|
|
154
|
+
```
|
|
155
|
+
* Postgres
|
|
156
|
+
|
|
157
|
+
```
|
|
158
|
+
$ psql # You may have set a password locally. Change as needed.
|
|
159
|
+
> CREATE ROLE test;
|
|
160
|
+
> ALTER ROLE test WITH SUPERUSER;
|
|
161
|
+
> ALTER ROLE test WITH LOGIN;
|
|
162
|
+
> CREATE DATABASE thumbs_up_test;
|
|
163
|
+
> GRANT ALL PRIVILEGES ON DATABASE thumbs_up_test to test;
|
|
164
|
+
> \q
|
|
165
|
+
```
|
|
166
|
+
* Run tests
|
|
167
|
+
|
|
168
|
+
```
|
|
169
|
+
$ rake # Runs the test suite against all adapters.
|
|
170
|
+
```
|
|
153
171
|
|
|
154
172
|
Credits
|
|
155
173
|
=======
|
data/Rakefile
CHANGED
data/lib/acts_as_voteable.rb
CHANGED
|
@@ -8,7 +8,10 @@ module ThumbsUp
|
|
|
8
8
|
|
|
9
9
|
module ClassMethods
|
|
10
10
|
def acts_as_voteable
|
|
11
|
-
has_many :
|
|
11
|
+
has_many ThumbsUp.configuration[:voteable_relationship_name],
|
|
12
|
+
:as => :voteable,
|
|
13
|
+
:dependent => :destroy,
|
|
14
|
+
:class_name => 'Vote'
|
|
12
15
|
|
|
13
16
|
include ThumbsUp::ActsAsVoteable::InstanceMethods
|
|
14
17
|
extend ThumbsUp::ActsAsVoteable::SingletonMethods
|
|
@@ -61,20 +64,25 @@ module ThumbsUp
|
|
|
61
64
|
|
|
62
65
|
module InstanceMethods
|
|
63
66
|
|
|
67
|
+
# wraps the dynamic, configured, relationship name
|
|
68
|
+
def _votes_by
|
|
69
|
+
self.send(ThumbsUp.configuration[:voteable_relationship_name])
|
|
70
|
+
end
|
|
71
|
+
|
|
64
72
|
def votes_for
|
|
65
|
-
self.
|
|
73
|
+
self._votes_by.where(:vote => true).count
|
|
66
74
|
end
|
|
67
75
|
|
|
68
76
|
def votes_against
|
|
69
|
-
self.
|
|
77
|
+
self._votes_by.where(:vote => false).count
|
|
70
78
|
end
|
|
71
79
|
|
|
72
80
|
def percent_for
|
|
73
|
-
(votes_for.to_f * 100 / (self.
|
|
81
|
+
(votes_for.to_f * 100 / (self._votes_by.size + 0.0001)).round
|
|
74
82
|
end
|
|
75
83
|
|
|
76
84
|
def percent_against
|
|
77
|
-
(votes_against.to_f * 100 / (self.
|
|
85
|
+
(votes_against.to_f * 100 / (self._votes_by.size + 0.0001)).round
|
|
78
86
|
end
|
|
79
87
|
|
|
80
88
|
# You'll probably want to use this method to display how 'good' a particular voteable
|
|
@@ -113,7 +121,7 @@ module ThumbsUp
|
|
|
113
121
|
def voters_who_voted_against
|
|
114
122
|
votes.where(:vote => false).map(&:voter).uniq
|
|
115
123
|
end
|
|
116
|
-
|
|
124
|
+
|
|
117
125
|
def voted_by?(voter)
|
|
118
126
|
0 < Vote.where(
|
|
119
127
|
:voteable_id => self.id,
|
data/lib/acts_as_voter.rb
CHANGED
|
@@ -12,8 +12,11 @@ module ThumbsUp #:nodoc:
|
|
|
12
12
|
# If you want to nullify (and keep the votes), you'll need to remove
|
|
13
13
|
# the unique constraint on the [ voter, voteable ] index in the database.
|
|
14
14
|
# has_many :votes, :as => :voter, :dependent => :nullify
|
|
15
|
-
# Destroy votes when
|
|
16
|
-
has_many :
|
|
15
|
+
# Destroy voter's votes when the voter is deleted.
|
|
16
|
+
has_many ThumbsUp.configuration[:voter_relationship_name],
|
|
17
|
+
:as => :voter,
|
|
18
|
+
:dependent => :destroy,
|
|
19
|
+
:class_name => 'Vote'
|
|
17
20
|
|
|
18
21
|
include ThumbsUp::ActsAsVoter::InstanceMethods
|
|
19
22
|
extend ThumbsUp::ActsAsVoter::SingletonMethods
|
|
@@ -27,6 +30,11 @@ module ThumbsUp #:nodoc:
|
|
|
27
30
|
# This module contains instance methods
|
|
28
31
|
module InstanceMethods
|
|
29
32
|
|
|
33
|
+
# wraps the dynamic, configured, relationship name
|
|
34
|
+
def _votes_on
|
|
35
|
+
self.send(ThumbsUp.configuration[:voteable_relationship_name])
|
|
36
|
+
end
|
|
37
|
+
|
|
30
38
|
# Usage user.vote_count(:up) # All +1 votes
|
|
31
39
|
# user.vote_count(:down) # All -1 votes
|
|
32
40
|
# user.vote_count() # All votes
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
module ThumbsUp
|
|
2
|
+
class Configuration
|
|
3
|
+
|
|
4
|
+
OPTIONS = [:voteable_relationship_name, :voter_relationship_name].freeze
|
|
5
|
+
|
|
6
|
+
# Specify the name of the relationship from voted on things to voters.
|
|
7
|
+
# Default is votes
|
|
8
|
+
# In order to have a model that votes on itself,
|
|
9
|
+
# e.g. Users vote on Users,
|
|
10
|
+
# must change :voteable_relationship_name or :voter_relationship_name
|
|
11
|
+
# to a non-default value
|
|
12
|
+
attr_accessor :voteable_relationship_name
|
|
13
|
+
|
|
14
|
+
# Specify the name of the relationship from voters to voted on things
|
|
15
|
+
# Default is votes
|
|
16
|
+
# In order to have a model that votes on itself,
|
|
17
|
+
# e.g. Users vote on Users,
|
|
18
|
+
# must change :voteable_relationship_name or :voter_relationship_name
|
|
19
|
+
# to a non-default value
|
|
20
|
+
attr_accessor :voter_relationship_name
|
|
21
|
+
|
|
22
|
+
def initialize
|
|
23
|
+
# these defaults can be overridden in the ThumbsUp.config block
|
|
24
|
+
@voteable_relationship_name = :votes
|
|
25
|
+
@voter_relationship_name = :votes
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
# Allows config options to be read like a hash
|
|
29
|
+
#
|
|
30
|
+
# @param [Symbol] option Key for a given attribute
|
|
31
|
+
def [](option)
|
|
32
|
+
send(option)
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
# Returns a hash of all configurable options
|
|
36
|
+
def to_hash
|
|
37
|
+
OPTIONS.inject({}) do |hash, option|
|
|
38
|
+
hash[option.to_sym] = self.send(option)
|
|
39
|
+
hash
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
# Returns a hash of all configurable options merged with +hash+
|
|
44
|
+
#
|
|
45
|
+
# @param [Hash] hash A set of configuration options that will take precedence over the defaults
|
|
46
|
+
def merge(hash)
|
|
47
|
+
to_hash.merge(hash)
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
end
|
|
51
|
+
end
|
data/lib/thumbs_up/version.rb
CHANGED
data/lib/thumbs_up.rb
CHANGED
|
@@ -1,17 +1,36 @@
|
|
|
1
1
|
require 'acts_as_voteable'
|
|
2
2
|
require 'acts_as_voter'
|
|
3
3
|
require 'has_karma'
|
|
4
|
+
require 'thumbs_up/configuration'
|
|
5
|
+
require 'thumbs_up/base'
|
|
6
|
+
require 'thumbs_up/version'
|
|
4
7
|
|
|
5
8
|
module ThumbsUp
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
+
|
|
10
|
+
class << self
|
|
11
|
+
|
|
12
|
+
# An ThumbsUp::Configuration object. Must act like a hash and return sensible
|
|
13
|
+
# values for all ThumbsUp::Configuration::OPTIONS. See ThumbsUp::Configuration.
|
|
14
|
+
attr_writer :configuration
|
|
15
|
+
|
|
16
|
+
# Call this method to modify defaults in your initializers.
|
|
17
|
+
#
|
|
18
|
+
# @example
|
|
19
|
+
# ThumbsUp.configure do |config|
|
|
20
|
+
# config.voteable_relationship_name = :votes_by
|
|
21
|
+
# config.voter_relationship_name = :votes_on
|
|
22
|
+
# end
|
|
23
|
+
def configure
|
|
24
|
+
yield(configuration)
|
|
9
25
|
end
|
|
10
26
|
|
|
11
|
-
|
|
12
|
-
|
|
27
|
+
# The configuration object.
|
|
28
|
+
# @see I18::Airbrake.configure
|
|
29
|
+
def configuration
|
|
30
|
+
@configuration ||= Configuration.new
|
|
13
31
|
end
|
|
14
32
|
end
|
|
33
|
+
|
|
15
34
|
end
|
|
16
35
|
|
|
17
36
|
ActiveRecord::Base.send(:include, ThumbsUp::ActsAsVoteable)
|
metadata
CHANGED
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: thumbs_up
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.6.
|
|
5
|
-
prerelease:
|
|
4
|
+
version: 0.6.4
|
|
6
5
|
platform: ruby
|
|
7
6
|
authors:
|
|
8
7
|
- Brady Bouchard
|
|
@@ -14,134 +13,118 @@ authors:
|
|
|
14
13
|
autorequire:
|
|
15
14
|
bindir: bin
|
|
16
15
|
cert_chain: []
|
|
17
|
-
date: 2013-
|
|
16
|
+
date: 2013-02-15 00:00:00.000000000 Z
|
|
18
17
|
dependencies:
|
|
19
18
|
- !ruby/object:Gem::Dependency
|
|
20
19
|
name: activerecord
|
|
21
20
|
requirement: !ruby/object:Gem::Requirement
|
|
22
|
-
none: false
|
|
23
21
|
requirements:
|
|
24
|
-
- -
|
|
22
|
+
- - '>='
|
|
25
23
|
- !ruby/object:Gem::Version
|
|
26
24
|
version: '0'
|
|
27
25
|
type: :runtime
|
|
28
26
|
prerelease: false
|
|
29
27
|
version_requirements: !ruby/object:Gem::Requirement
|
|
30
|
-
none: false
|
|
31
28
|
requirements:
|
|
32
|
-
- -
|
|
29
|
+
- - '>='
|
|
33
30
|
- !ruby/object:Gem::Version
|
|
34
31
|
version: '0'
|
|
35
32
|
- !ruby/object:Gem::Dependency
|
|
36
33
|
name: statistics2
|
|
37
34
|
requirement: !ruby/object:Gem::Requirement
|
|
38
|
-
none: false
|
|
39
35
|
requirements:
|
|
40
|
-
- -
|
|
36
|
+
- - '>='
|
|
41
37
|
- !ruby/object:Gem::Version
|
|
42
38
|
version: '0'
|
|
43
39
|
type: :runtime
|
|
44
40
|
prerelease: false
|
|
45
41
|
version_requirements: !ruby/object:Gem::Requirement
|
|
46
|
-
none: false
|
|
47
42
|
requirements:
|
|
48
|
-
- -
|
|
43
|
+
- - '>='
|
|
49
44
|
- !ruby/object:Gem::Version
|
|
50
45
|
version: '0'
|
|
51
46
|
- !ruby/object:Gem::Dependency
|
|
52
47
|
name: simplecov
|
|
53
48
|
requirement: !ruby/object:Gem::Requirement
|
|
54
|
-
none: false
|
|
55
49
|
requirements:
|
|
56
|
-
- -
|
|
50
|
+
- - '>='
|
|
57
51
|
- !ruby/object:Gem::Version
|
|
58
52
|
version: '0'
|
|
59
53
|
type: :development
|
|
60
54
|
prerelease: false
|
|
61
55
|
version_requirements: !ruby/object:Gem::Requirement
|
|
62
|
-
none: false
|
|
63
56
|
requirements:
|
|
64
|
-
- -
|
|
57
|
+
- - '>='
|
|
65
58
|
- !ruby/object:Gem::Version
|
|
66
59
|
version: '0'
|
|
67
60
|
- !ruby/object:Gem::Dependency
|
|
68
61
|
name: bundler
|
|
69
62
|
requirement: !ruby/object:Gem::Requirement
|
|
70
|
-
none: false
|
|
71
63
|
requirements:
|
|
72
|
-
- -
|
|
64
|
+
- - '>='
|
|
73
65
|
- !ruby/object:Gem::Version
|
|
74
66
|
version: '0'
|
|
75
67
|
type: :development
|
|
76
68
|
prerelease: false
|
|
77
69
|
version_requirements: !ruby/object:Gem::Requirement
|
|
78
|
-
none: false
|
|
79
70
|
requirements:
|
|
80
|
-
- -
|
|
71
|
+
- - '>='
|
|
81
72
|
- !ruby/object:Gem::Version
|
|
82
73
|
version: '0'
|
|
83
74
|
- !ruby/object:Gem::Dependency
|
|
84
75
|
name: mysql2
|
|
85
76
|
requirement: !ruby/object:Gem::Requirement
|
|
86
|
-
none: false
|
|
87
77
|
requirements:
|
|
88
|
-
- -
|
|
78
|
+
- - '>='
|
|
89
79
|
- !ruby/object:Gem::Version
|
|
90
80
|
version: '0'
|
|
91
81
|
type: :development
|
|
92
82
|
prerelease: false
|
|
93
83
|
version_requirements: !ruby/object:Gem::Requirement
|
|
94
|
-
none: false
|
|
95
84
|
requirements:
|
|
96
|
-
- -
|
|
85
|
+
- - '>='
|
|
97
86
|
- !ruby/object:Gem::Version
|
|
98
87
|
version: '0'
|
|
99
88
|
- !ruby/object:Gem::Dependency
|
|
100
89
|
name: pg
|
|
101
90
|
requirement: !ruby/object:Gem::Requirement
|
|
102
|
-
none: false
|
|
103
91
|
requirements:
|
|
104
|
-
- -
|
|
92
|
+
- - '>='
|
|
105
93
|
- !ruby/object:Gem::Version
|
|
106
94
|
version: '0'
|
|
107
95
|
type: :development
|
|
108
96
|
prerelease: false
|
|
109
97
|
version_requirements: !ruby/object:Gem::Requirement
|
|
110
|
-
none: false
|
|
111
98
|
requirements:
|
|
112
|
-
- -
|
|
99
|
+
- - '>='
|
|
113
100
|
- !ruby/object:Gem::Version
|
|
114
101
|
version: '0'
|
|
115
102
|
- !ruby/object:Gem::Dependency
|
|
116
103
|
name: sqlite3
|
|
117
104
|
requirement: !ruby/object:Gem::Requirement
|
|
118
|
-
none: false
|
|
119
105
|
requirements:
|
|
120
|
-
- -
|
|
106
|
+
- - '>='
|
|
121
107
|
- !ruby/object:Gem::Version
|
|
122
108
|
version: '0'
|
|
123
109
|
type: :development
|
|
124
110
|
prerelease: false
|
|
125
111
|
version_requirements: !ruby/object:Gem::Requirement
|
|
126
|
-
none: false
|
|
127
112
|
requirements:
|
|
128
|
-
- -
|
|
113
|
+
- - '>='
|
|
129
114
|
- !ruby/object:Gem::Version
|
|
130
115
|
version: '0'
|
|
131
116
|
- !ruby/object:Gem::Dependency
|
|
132
117
|
name: rake
|
|
133
118
|
requirement: !ruby/object:Gem::Requirement
|
|
134
|
-
none: false
|
|
135
119
|
requirements:
|
|
136
|
-
- -
|
|
120
|
+
- - '>='
|
|
137
121
|
- !ruby/object:Gem::Version
|
|
138
122
|
version: '0'
|
|
139
123
|
type: :development
|
|
140
124
|
prerelease: false
|
|
141
125
|
version_requirements: !ruby/object:Gem::Requirement
|
|
142
|
-
none: false
|
|
143
126
|
requirements:
|
|
144
|
-
- -
|
|
127
|
+
- - '>='
|
|
145
128
|
- !ruby/object:Gem::Version
|
|
146
129
|
version: '0'
|
|
147
130
|
description: ThumbsUp provides dead-simple voting capabilities to ActiveRecord models
|
|
@@ -158,6 +141,8 @@ files:
|
|
|
158
141
|
- lib/generators/thumbs_up/templates/vote.rb
|
|
159
142
|
- lib/generators/thumbs_up/thumbs_up_generator.rb
|
|
160
143
|
- lib/has_karma.rb
|
|
144
|
+
- lib/thumbs_up/base.rb
|
|
145
|
+
- lib/thumbs_up/configuration.rb
|
|
161
146
|
- lib/thumbs_up/version.rb
|
|
162
147
|
- lib/thumbs_up.rb
|
|
163
148
|
- rails/init.rb
|
|
@@ -170,32 +155,25 @@ files:
|
|
|
170
155
|
- Rakefile
|
|
171
156
|
homepage: http://github.com/bouchard/thumbs_up
|
|
172
157
|
licenses: []
|
|
158
|
+
metadata: {}
|
|
173
159
|
post_install_message:
|
|
174
160
|
rdoc_options: []
|
|
175
161
|
require_paths:
|
|
176
162
|
- lib
|
|
177
163
|
required_ruby_version: !ruby/object:Gem::Requirement
|
|
178
|
-
none: false
|
|
179
164
|
requirements:
|
|
180
|
-
- -
|
|
165
|
+
- - '>='
|
|
181
166
|
- !ruby/object:Gem::Version
|
|
182
167
|
version: '0'
|
|
183
|
-
segments:
|
|
184
|
-
- 0
|
|
185
|
-
hash: 2682672596544266431
|
|
186
168
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
187
|
-
none: false
|
|
188
169
|
requirements:
|
|
189
|
-
- -
|
|
170
|
+
- - '>='
|
|
190
171
|
- !ruby/object:Gem::Version
|
|
191
172
|
version: '0'
|
|
192
|
-
segments:
|
|
193
|
-
- 0
|
|
194
|
-
hash: 2682672596544266431
|
|
195
173
|
requirements: []
|
|
196
174
|
rubyforge_project:
|
|
197
|
-
rubygems_version:
|
|
175
|
+
rubygems_version: 2.0.0.rc.2
|
|
198
176
|
signing_key:
|
|
199
|
-
specification_version:
|
|
177
|
+
specification_version: 4
|
|
200
178
|
summary: Voting for ActiveRecord with multiple vote sources and karma calculation.
|
|
201
179
|
test_files: []
|