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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 28c3afe72d6c4a263ee868ba436cada6885bd632
4
- data.tar.gz: 89c5171dbe32f9f0712a44dd97323993ed18c805
3
+ metadata.gz: e8b3b0d8ad86074906b6e302f41759b08d66ad10
4
+ data.tar.gz: 29d4f95a527563efe6706f14203e3bc07357c466
5
5
  SHA512:
6
- metadata.gz: f7e3bc6cd4a7f8c643643c41a6bcbd2cb49d0766dd60e03dc6fe5bfa549d4a1c6c01427f8481b13f9879f159f3a4fe5f4f76c6ccbf375d6592ee511bf77706cf
7
- data.tar.gz: a30595a886138169e90433ef347c59cf6ebd7e9dee87326384c8e47f7ed6b9bedc9d59874984a196e4374ac834c031e98c80775ad6d78195ddc80d15234bcec8
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 Fruit", ["Orange", "Banana"])
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
@@ -4,7 +4,7 @@ module Tadpoll
4
4
  module Controller
5
5
 
6
6
  def voter_params(params_object = params[:vote])
7
- params_object.permit(:voter_id, :vote)
7
+ params_object.permit(:voter_id, :voter_type)
8
8
  end
9
9
 
10
10
  end
@@ -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
- voter: voter,
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(poll, 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(poll, options = [])
25
+ def create_options(options = [])
26
26
  if options.any?
27
27
  options.each do |option|
28
- Tadpoll::Option.new_option(option, poll.id)
28
+ Tadpoll::Option.new_option(option, self)
29
29
  end
30
30
  end
31
31
  end
@@ -1,3 +1,3 @@
1
1
  module Tadpoll
2
- VERSION = "1.1.0"
2
+ VERSION = "2.0.0"
3
3
  end
data/lib/tadpoll/vote.rb CHANGED
@@ -2,7 +2,7 @@ module Tadpoll
2
2
  class Vote < ::ActiveRecord::Base
3
3
 
4
4
  if defined?(ProtectedAttributes) || ::ActiveRecord::VERSION::MAJOR < 4
5
- attr_accessible :voter_id, :voter
5
+ attr_accessible :voter_id, :voter_type
6
6
  end
7
7
 
8
8
  belongs_to :voter
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
- found_votes = votes.where(args)
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 "bundler", "~> 1.12"
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: 1.1.0
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-05-31 00:00:00.000000000 Z
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: '3.2'
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: '3.2'
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: []