tadpoll 1.1.0 → 2.0.0
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 +4 -4
- data/README.md +54 -1
- data/lib/generators/tadpoll/migration/templates/active_record/migration.rb +2 -2
- data/lib/tadpoll/extenders/controller.rb +1 -1
- data/lib/tadpoll/option.rb +3 -2
- data/lib/tadpoll/poll.rb +3 -3
- data/lib/tadpoll/version.rb +1 -1
- data/lib/tadpoll/vote.rb +1 -1
- data/lib/tadpoll/voter.rb +2 -3
- data/tadpoll.gemspec +1 -3
- metadata +14 -42
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: e8b3b0d8ad86074906b6e302f41759b08d66ad10
|
|
4
|
+
data.tar.gz: 29d4f95a527563efe6706f14203e3bc07357c466
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: f99dc06882613e2a0a736c1b094dea6c97e5170c26bfbf48b3d285adf344711f0ad01fc34810d0f70a78555beec0eb56355766a57a90e595b6261e1c7c8479fd
|
|
7
|
+
data.tar.gz: cc11fc8b923a702c9900cd507ed1883a162c696bc4500ac8f3f75061f70841253f1a0c485c0d43a6bbedd5e7fe7830b26cab6bcae43185a82b9f7140d50fd1df
|
data/README.md
CHANGED
|
@@ -29,14 +29,67 @@ class User < ActiveRecord::Base
|
|
|
29
29
|
is_voter
|
|
30
30
|
end
|
|
31
31
|
|
|
32
|
-
poll = Tadpoll::Poll.create_poll_with_options("Best
|
|
32
|
+
poll = Tadpoll::Poll.create_poll_with_options("Best P&R Character", ["Leslie Knope", "Ron Swanson"])
|
|
33
33
|
option = poll.options.first
|
|
34
34
|
@user.vote_for(option)
|
|
35
35
|
|
|
36
36
|
@user.voted_on_option?(option) # => true
|
|
37
37
|
@user.voted_on_poll?(poll) # => true
|
|
38
|
+
|
|
39
|
+
@user.unvote_for_poll(poll)
|
|
40
|
+
@user.voted_on_option?(option) # => false
|
|
41
|
+
@user.voted_on_poll?(poll) # => false
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
### Polls
|
|
45
|
+
|
|
46
|
+
Polls have a name, and mutually exclusive options for voter models to vote on.
|
|
47
|
+
|
|
48
|
+
```ruby
|
|
49
|
+
# create a poll with options
|
|
50
|
+
poll = Tadpoll::Poll.create_poll_with_options("Best Star Wars Character", ["Han Solo", "Leia Organa"])
|
|
51
|
+
poll.create_options(["Luke Skywalker"])
|
|
52
|
+
poll.options.map{|o| o.name} # => ["Han Solo", "Leia Organa", "Luke Skywalker"]
|
|
53
|
+
|
|
54
|
+
# voter models can vote for options on a poll
|
|
55
|
+
option = poll.options.first
|
|
56
|
+
@user.vote_for(option)
|
|
57
|
+
|
|
58
|
+
poll.voted_on? # => true
|
|
59
|
+
poll.voted_on_by?(@user) # => true
|
|
60
|
+
|
|
61
|
+
# remove votes for a user
|
|
62
|
+
poll.unvote(@user)
|
|
63
|
+
poll.voted_on_by?(@user) # => false
|
|
38
64
|
```
|
|
39
65
|
|
|
66
|
+
### Options
|
|
67
|
+
|
|
68
|
+
Options belong to individual polls, and have many votes.
|
|
69
|
+
|
|
70
|
+
```ruby
|
|
71
|
+
# create a poll and add new options
|
|
72
|
+
poll = Tadpoll::Poll.create_poll_with_options("Best GoT Character", ["Jon Snow", "Brienne of Tarth"])
|
|
73
|
+
Tadpoll::Option.new_option("Arya Stark", poll.id)
|
|
74
|
+
poll.options.map{|o| o.name} # => ["Jon Snow", "Brienne of Tarth", "Arya Stark"]
|
|
75
|
+
|
|
76
|
+
# vote on options
|
|
77
|
+
option = poll.options.first
|
|
78
|
+
option.vote(@user)
|
|
79
|
+
|
|
80
|
+
option.vote_count # => 1
|
|
81
|
+
option.voted_on? # => true
|
|
82
|
+
option.voted_on_by?(@user) # => true
|
|
83
|
+
|
|
84
|
+
# remove user votes
|
|
85
|
+
option.unvote(@user)
|
|
86
|
+
option.voted_on_by?(@user) # => false
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
## Testing
|
|
90
|
+
|
|
91
|
+
All tests are located in the spec directory and follow the RSpec format.
|
|
92
|
+
|
|
40
93
|
## License
|
|
41
94
|
|
|
42
95
|
The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
class TadpollMigration < ActiveRecord::Migration
|
|
2
2
|
def self.up
|
|
3
3
|
create_table :votes do |t|
|
|
4
|
-
t.references :voter
|
|
4
|
+
t.references :voter, :polymorphic => true
|
|
5
5
|
t.belongs_to :poll, index: true
|
|
6
6
|
t.belongs_to :option, index: true
|
|
7
7
|
|
|
@@ -21,7 +21,7 @@ class TadpollMigration < ActiveRecord::Migration
|
|
|
21
21
|
t.timestamps
|
|
22
22
|
end
|
|
23
23
|
|
|
24
|
-
add_index :votes, [:voter_id]
|
|
24
|
+
add_index :votes, [:voter_id, :voter_type]
|
|
25
25
|
end
|
|
26
26
|
|
|
27
27
|
def self.down
|
data/lib/tadpoll/option.rb
CHANGED
|
@@ -22,12 +22,13 @@ module Tadpoll
|
|
|
22
22
|
def vote(voter)
|
|
23
23
|
return false if voter.nil?
|
|
24
24
|
|
|
25
|
-
if self.voted_on_by?(voter)
|
|
25
|
+
if self.poll.voted_on_by?(voter)
|
|
26
26
|
return false
|
|
27
27
|
else
|
|
28
28
|
vote = Tadpoll::Vote.new(
|
|
29
29
|
option: self,
|
|
30
|
-
|
|
30
|
+
voter_id: voter.id,
|
|
31
|
+
voter_type: voter.class.base_class.name,
|
|
31
32
|
poll_id: self.poll_id
|
|
32
33
|
)
|
|
33
34
|
end
|
data/lib/tadpoll/poll.rb
CHANGED
|
@@ -14,7 +14,7 @@ module Tadpoll
|
|
|
14
14
|
poll = Tadpoll::Poll.new(name: name)
|
|
15
15
|
|
|
16
16
|
if poll.save
|
|
17
|
-
poll.create_options(
|
|
17
|
+
poll.create_options(options)
|
|
18
18
|
return poll
|
|
19
19
|
else
|
|
20
20
|
return false
|
|
@@ -22,10 +22,10 @@ module Tadpoll
|
|
|
22
22
|
end
|
|
23
23
|
|
|
24
24
|
# Create new option for a poll
|
|
25
|
-
def create_options(
|
|
25
|
+
def create_options(options = [])
|
|
26
26
|
if options.any?
|
|
27
27
|
options.each do |option|
|
|
28
|
-
Tadpoll::Option.new_option(option,
|
|
28
|
+
Tadpoll::Option.new_option(option, self)
|
|
29
29
|
end
|
|
30
30
|
end
|
|
31
31
|
end
|
data/lib/tadpoll/version.rb
CHANGED
data/lib/tadpoll/vote.rb
CHANGED
data/lib/tadpoll/voter.rb
CHANGED
|
@@ -3,7 +3,7 @@ module Tadpoll
|
|
|
3
3
|
|
|
4
4
|
def self.included(base)
|
|
5
5
|
base.class_eval do
|
|
6
|
-
has_many :votes, :class_name => 'Tadpoll::Vote', :dependent => :destroy
|
|
6
|
+
has_many :votes, :class_name => 'Tadpoll::Vote', :as => :voter, :dependent => :destroy
|
|
7
7
|
end
|
|
8
8
|
end
|
|
9
9
|
|
|
@@ -24,8 +24,7 @@ module Tadpoll
|
|
|
24
24
|
|
|
25
25
|
# T / F votes for given params
|
|
26
26
|
def voted_on?(args = {})
|
|
27
|
-
|
|
28
|
-
found_votes.count > 0
|
|
27
|
+
votes.where(args).count > 0
|
|
29
28
|
end
|
|
30
29
|
|
|
31
30
|
# T / F Voter voted on given poll
|
data/tadpoll.gemspec
CHANGED
|
@@ -19,9 +19,7 @@ Gem::Specification.new do |spec|
|
|
|
19
19
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
|
20
20
|
spec.require_paths = ["lib"]
|
|
21
21
|
|
|
22
|
-
spec.add_development_dependency "
|
|
23
|
-
spec.add_development_dependency "rake", "~> 10.0"
|
|
24
|
-
spec.add_development_dependency "rspec", "~> 3.2"
|
|
22
|
+
spec.add_development_dependency "rspec"
|
|
25
23
|
spec.add_development_dependency "sqlite3", '~> 1.3.9'
|
|
26
24
|
spec.add_development_dependency "activerecord"
|
|
27
25
|
end
|
metadata
CHANGED
|
@@ -1,83 +1,55 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: tadpoll
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version:
|
|
4
|
+
version: 2.0.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Kayla
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2016-
|
|
11
|
+
date: 2016-06-01 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
|
-
- !ruby/object:Gem::Dependency
|
|
14
|
-
name: bundler
|
|
15
|
-
requirement: !ruby/object:Gem::Requirement
|
|
16
|
-
requirements:
|
|
17
|
-
- - ~>
|
|
18
|
-
- !ruby/object:Gem::Version
|
|
19
|
-
version: '1.12'
|
|
20
|
-
type: :development
|
|
21
|
-
prerelease: false
|
|
22
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
23
|
-
requirements:
|
|
24
|
-
- - ~>
|
|
25
|
-
- !ruby/object:Gem::Version
|
|
26
|
-
version: '1.12'
|
|
27
|
-
- !ruby/object:Gem::Dependency
|
|
28
|
-
name: rake
|
|
29
|
-
requirement: !ruby/object:Gem::Requirement
|
|
30
|
-
requirements:
|
|
31
|
-
- - ~>
|
|
32
|
-
- !ruby/object:Gem::Version
|
|
33
|
-
version: '10.0'
|
|
34
|
-
type: :development
|
|
35
|
-
prerelease: false
|
|
36
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
37
|
-
requirements:
|
|
38
|
-
- - ~>
|
|
39
|
-
- !ruby/object:Gem::Version
|
|
40
|
-
version: '10.0'
|
|
41
13
|
- !ruby/object:Gem::Dependency
|
|
42
14
|
name: rspec
|
|
43
15
|
requirement: !ruby/object:Gem::Requirement
|
|
44
16
|
requirements:
|
|
45
|
-
- -
|
|
17
|
+
- - ">="
|
|
46
18
|
- !ruby/object:Gem::Version
|
|
47
|
-
version: '
|
|
19
|
+
version: '0'
|
|
48
20
|
type: :development
|
|
49
21
|
prerelease: false
|
|
50
22
|
version_requirements: !ruby/object:Gem::Requirement
|
|
51
23
|
requirements:
|
|
52
|
-
- -
|
|
24
|
+
- - ">="
|
|
53
25
|
- !ruby/object:Gem::Version
|
|
54
|
-
version: '
|
|
26
|
+
version: '0'
|
|
55
27
|
- !ruby/object:Gem::Dependency
|
|
56
28
|
name: sqlite3
|
|
57
29
|
requirement: !ruby/object:Gem::Requirement
|
|
58
30
|
requirements:
|
|
59
|
-
- - ~>
|
|
31
|
+
- - "~>"
|
|
60
32
|
- !ruby/object:Gem::Version
|
|
61
33
|
version: 1.3.9
|
|
62
34
|
type: :development
|
|
63
35
|
prerelease: false
|
|
64
36
|
version_requirements: !ruby/object:Gem::Requirement
|
|
65
37
|
requirements:
|
|
66
|
-
- - ~>
|
|
38
|
+
- - "~>"
|
|
67
39
|
- !ruby/object:Gem::Version
|
|
68
40
|
version: 1.3.9
|
|
69
41
|
- !ruby/object:Gem::Dependency
|
|
70
42
|
name: activerecord
|
|
71
43
|
requirement: !ruby/object:Gem::Requirement
|
|
72
44
|
requirements:
|
|
73
|
-
- -
|
|
45
|
+
- - ">="
|
|
74
46
|
- !ruby/object:Gem::Version
|
|
75
47
|
version: '0'
|
|
76
48
|
type: :development
|
|
77
49
|
prerelease: false
|
|
78
50
|
version_requirements: !ruby/object:Gem::Requirement
|
|
79
51
|
requirements:
|
|
80
|
-
- -
|
|
52
|
+
- - ">="
|
|
81
53
|
- !ruby/object:Gem::Version
|
|
82
54
|
version: '0'
|
|
83
55
|
description: Ruby Gem designed to easily create polls with mutually exclusive options
|
|
@@ -88,8 +60,8 @@ executables: []
|
|
|
88
60
|
extensions: []
|
|
89
61
|
extra_rdoc_files: []
|
|
90
62
|
files:
|
|
91
|
-
- .DS_Store
|
|
92
|
-
- .gitignore
|
|
63
|
+
- ".DS_Store"
|
|
64
|
+
- ".gitignore"
|
|
93
65
|
- Gemfile
|
|
94
66
|
- LICENSE.txt
|
|
95
67
|
- README.md
|
|
@@ -117,12 +89,12 @@ require_paths:
|
|
|
117
89
|
- lib
|
|
118
90
|
required_ruby_version: !ruby/object:Gem::Requirement
|
|
119
91
|
requirements:
|
|
120
|
-
- -
|
|
92
|
+
- - ">="
|
|
121
93
|
- !ruby/object:Gem::Version
|
|
122
94
|
version: '0'
|
|
123
95
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
124
96
|
requirements:
|
|
125
|
-
- -
|
|
97
|
+
- - ">="
|
|
126
98
|
- !ruby/object:Gem::Version
|
|
127
99
|
version: '0'
|
|
128
100
|
requirements: []
|