make_voteable 0.0.2 → 0.1.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.
data/.gitignore CHANGED
@@ -1,5 +1,4 @@
1
1
  Gemfile.lock
2
- nbproject/*
3
2
  pkg/*
4
3
  doc/*
5
4
  *.gem
data/README.rdoc CHANGED
@@ -26,7 +26,7 @@ also add +up_votes+ and +down_votes+ columns to the voter (e.g. User) and voteab
26
26
 
27
27
  migrate the database
28
28
 
29
- rails db:migrate
29
+ rake db:migrate
30
30
 
31
31
  == Usage
32
32
 
@@ -90,6 +90,14 @@ migrate the database
90
90
  # Returns true if the question was down voted by the user, false otherwise
91
91
  user.down_voted?(question)
92
92
 
93
+ # Access votings through voter
94
+ voting = user.votings.first
95
+ voting.up_vote? # true if up vote, false if down vote
96
+
97
+ # Access votings through voteable
98
+ voting = question.votings.first
99
+ voting.up_vote? # true if up vote, false if down vote
100
+
93
101
  == Testing
94
102
 
95
103
  MakeVoteable uses RSpec for testing and has a rake task for executing the provided specs
data/Rakefile CHANGED
@@ -3,3 +3,5 @@ Bundler::GemHelper.install_tasks
3
3
 
4
4
  require 'rspec/core/rake_task'
5
5
  RSpec::Core::RakeTask.new(:spec)
6
+
7
+ task :default => :spec
@@ -4,29 +4,25 @@ module MakeVoteable
4
4
  attr_reader :up_vote
5
5
 
6
6
  def initialize(up_vote)
7
- @up_vote = up_vote
8
- end
9
-
10
- def message
11
- if @up_vote
12
- vote = "up voted"
7
+ vote = if up_vote
8
+ "up voted"
13
9
  else
14
- vote = "down voted"
10
+ "down voted"
15
11
  end
16
12
 
17
- "The voteable was already #{vote} by the voter."
13
+ super "The voteable was already #{vote} by the voter."
18
14
  end
19
15
  end
20
16
 
21
17
  class NotVotedError < StandardError
22
- def message
23
- "The voteable was not voted by the voter."
18
+ def initialize
19
+ super "The voteable was not voted by the voter."
24
20
  end
25
21
  end
26
22
 
27
23
  class InvalidVoteableError < StandardError
28
- def message
29
- "Invalid voteable."
24
+ def initialize
25
+ super "Invalid voteable."
30
26
  end
31
27
  end
32
28
  end
@@ -1,3 +1,3 @@
1
1
  module MakeVoteable
2
- VERSION = "0.0.2"
2
+ VERSION = "0.1.0"
3
3
  end
@@ -2,6 +2,10 @@ module MakeVoteable
2
2
  module Voteable
3
3
  extend ActiveSupport::Concern
4
4
 
5
+ included do
6
+ has_many :votings, :class_name => "MakeVoteable::Voting", :as => :voteable
7
+ end
8
+
5
9
  module ClassMethods
6
10
  def voteable?
7
11
  true
@@ -2,6 +2,10 @@ module MakeVoteable
2
2
  module Voter
3
3
  extend ActiveSupport::Concern
4
4
 
5
+ included do
6
+ has_many :votings, :class_name => "MakeVoteable::Voting", :as => :voter
7
+ end
8
+
5
9
  module ClassMethods
6
10
  def voter?
7
11
  true
@@ -18,21 +22,21 @@ module MakeVoteable
18
22
 
19
23
  if voting
20
24
  if voting.up_vote
21
- raise MakeVoteable::Exceptions::AlreadyVotedError.new(true)
25
+ raise Exceptions::AlreadyVotedError.new(true)
22
26
  else
23
27
  voting.up_vote = true
24
28
  voteable.down_votes -= 1
25
- self.down_votes -= 1 if self.has_attribute?(:down_votes)
29
+ self.down_votes -= 1 if has_attribute?(:down_votes)
26
30
  end
27
31
  else
28
32
  voting = Voting.create(:voteable => voteable, :voter => self, :up_vote => true)
29
33
  end
30
34
 
31
35
  voteable.up_votes += 1
32
- self.up_votes += 1 if self.has_attribute?(:up_votes)
36
+ self.up_votes += 1 if has_attribute?(:up_votes)
33
37
 
34
- MakeVoteable::Voting.transaction do
35
- self.save
38
+ Voting.transaction do
39
+ save
36
40
  voteable.save
37
41
  voting.save
38
42
  end
@@ -43,7 +47,7 @@ module MakeVoteable
43
47
  def up_vote!(voteable)
44
48
  begin
45
49
  up_vote(voteable)
46
- rescue MakeVoteable::Exceptions::AlreadyVotedError
50
+ rescue Exceptions::AlreadyVotedError
47
51
  end
48
52
  end
49
53
 
@@ -57,21 +61,21 @@ module MakeVoteable
57
61
 
58
62
  if voting
59
63
  unless voting.up_vote
60
- raise MakeVoteable::Exceptions::AlreadyVotedError.new(false)
64
+ raise Exceptions::AlreadyVotedError.new(false)
61
65
  else
62
66
  voting.up_vote = false
63
67
  voteable.up_votes -= 1
64
- self.up_votes -= 1 if self.has_attribute?(:up_votes)
68
+ self.up_votes -= 1 if has_attribute?(:up_votes)
65
69
  end
66
70
  else
67
71
  voting = Voting.create(:voteable => voteable, :voter => self, :up_vote => false)
68
72
  end
69
73
 
70
74
  voteable.down_votes += 1
71
- self.down_votes += 1 if self.has_attribute?(:down_votes)
75
+ self.down_votes += 1 if has_attribute?(:down_votes)
72
76
 
73
- MakeVoteable::Voting.transaction do
74
- self.save
77
+ Voting.transaction do
78
+ save
75
79
  voteable.save
76
80
  voting.save
77
81
  end
@@ -82,7 +86,7 @@ module MakeVoteable
82
86
  def down_vote!(voteable)
83
87
  begin
84
88
  down_vote(voteable)
85
- rescue MakeVoteable::Exceptions::AlreadyVotedError
89
+ rescue Exceptions::AlreadyVotedError
86
90
  end
87
91
  end
88
92
 
@@ -93,18 +97,18 @@ module MakeVoteable
93
97
 
94
98
  voting = fetch_voting(voteable)
95
99
 
96
- raise MakeVoteable::Exceptions::NotVotedError unless voting
100
+ raise Exceptions::NotVotedError unless voting
97
101
 
98
102
  if voting.up_vote
99
103
  voteable.up_votes -= 1
100
- self.up_votes -= 1 if self.has_attribute?(:up_votes)
104
+ self.up_votes -= 1 if has_attribute?(:up_votes)
101
105
  else
102
106
  voteable.down_votes -= 1
103
- self.down_votes -= 1 if self.has_attribute?(:down_votes)
107
+ self.down_votes -= 1 if has_attribute?(:down_votes)
104
108
  end
105
109
 
106
- MakeVoteable::Voting.transaction do
107
- self.save
110
+ Voting.transaction do
111
+ save
108
112
  voteable.save
109
113
  voting.destroy
110
114
  end
@@ -115,7 +119,7 @@ module MakeVoteable
115
119
  def unvote!(voteable)
116
120
  begin
117
121
  unvote(voteable)
118
- rescue MakeVoteable::Exceptions::NotVotedError
122
+ rescue Exceptions::NotVotedError
119
123
  end
120
124
  end
121
125
 
@@ -153,7 +157,7 @@ module MakeVoteable
153
157
  end
154
158
 
155
159
  def check_voteable(voteable)
156
- raise MakeVoteable::Exceptions::InvalidVoteableError unless voteable.class.voteable?
160
+ raise Exceptions::InvalidVoteableError unless voteable.class.voteable?
157
161
  end
158
162
  end
159
163
  end
@@ -14,11 +14,12 @@ Gem::Specification.new do |s|
14
14
  s.required_rubygems_version = ">= 1.3.6"
15
15
  s.rubyforge_project = "make_voteable"
16
16
 
17
- s.add_dependency "activerecord", ">= 3.0.0"
18
- s.add_development_dependency "bundler", ">= 1.0.0"
19
- s.add_development_dependency "rspec", ">= 2.0.0"
20
- s.add_development_dependency "database_cleaner", "0.5.2"
21
- s.add_development_dependency "sqlite3-ruby", ">= 1.3.0"
17
+ s.add_dependency "activerecord", "~> 3.0.0"
18
+ s.add_development_dependency "bundler", "~> 1.0.0"
19
+ s.add_development_dependency "rspec", "~> 2.5.0"
20
+ s.add_development_dependency "database_cleaner", "0.6.7.RC"
21
+ s.add_development_dependency "sqlite3-ruby", "~> 1.3.0"
22
+ s.add_development_dependency "generator_spec", "~> 0.8.2"
22
23
 
23
24
  s.files = `git ls-files`.split("\n")
24
25
  s.executables = `git ls-files`.split("\n").map{|f| f =~ /^bin\/(.*)/ ? $1 : nil}.compact
@@ -0,0 +1,28 @@
1
+ require 'spec_helper'
2
+ require 'action_controller'
3
+ require 'generator_spec/test_case'
4
+ require 'generators/make_voteable/make_voteable_generator'
5
+
6
+ describe MakeVoteableGenerator do
7
+ include GeneratorSpec::TestCase
8
+ destination File.expand_path("/tmp", __FILE__)
9
+ tests MakeVoteableGenerator
10
+
11
+ before do
12
+ prepare_destination
13
+ run_generator
14
+ end
15
+
16
+ specify do
17
+ destination_root.should have_structure {
18
+ directory "db" do
19
+ directory "migrate" do
20
+ migration "create_make_voteable_tables" do
21
+ contains "class CreateMakeVoteableTables"
22
+ contains "create_table :votings"
23
+ end
24
+ end
25
+ end
26
+ }
27
+ end
28
+ end
@@ -25,6 +25,34 @@ describe "Make Voteable" do
25
25
  @voteable.votes.should == 0
26
26
  end
27
27
 
28
+ it "voteable should have up vote votings" do
29
+ @voteable.votings.length.should == 0
30
+ @voter.up_vote(@voteable)
31
+ @voteable.votings.reload.length.should == 1
32
+ @voteable.votings[0].up_vote?.should be_true
33
+ end
34
+
35
+ it "voter should have up vote votings" do
36
+ @voter.votings.length.should == 0
37
+ @voter.up_vote(@voteable)
38
+ @voter.votings.reload.length.should == 1
39
+ @voter.votings[0].up_vote?.should be_true
40
+ end
41
+
42
+ it "voteable should have down vote votings" do
43
+ @voteable.votings.length.should == 0
44
+ @voter.down_vote(@voteable)
45
+ @voteable.votings.reload.length.should == 1
46
+ @voteable.votings[0].up_vote?.should be_false
47
+ end
48
+
49
+ it "voter should have down vote votings" do
50
+ @voter.votings.length.should == 0
51
+ @voter.down_vote(@voteable)
52
+ @voter.votings.reload.length.should == 1
53
+ @voter.votings[0].up_vote?.should be_false
54
+ end
55
+
28
56
  describe "up vote" do
29
57
  it "should increase up votes of voteable by one" do
30
58
  @voteable.up_votes.should == 0
data/spec/spec_helper.rb CHANGED
@@ -27,12 +27,8 @@ RSpec.configure do |config|
27
27
  config.mock_with :rspec
28
28
 
29
29
  config.before(:suite) do
30
- DatabaseCleaner.strategy = :transaction
31
- DatabaseCleaner.clean_with(:truncation)
32
- end
33
-
34
- config.before(:each) do
35
- DatabaseCleaner.start
30
+ DatabaseCleaner.strategy = :truncation
31
+ DatabaseCleaner.clean
36
32
  end
37
33
 
38
34
  config.after(:each) do
metadata CHANGED
@@ -1,13 +1,8 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: make_voteable
3
3
  version: !ruby/object:Gem::Version
4
- hash: 27
5
4
  prerelease:
6
- segments:
7
- - 0
8
- - 0
9
- - 2
10
- version: 0.0.2
5
+ version: 0.1.0
11
6
  platform: ruby
12
7
  authors:
13
8
  - Kai Schlamp
@@ -15,7 +10,7 @@ autorequire:
15
10
  bindir: bin
16
11
  cert_chain: []
17
12
 
18
- date: 2011-03-10 00:00:00 +01:00
13
+ date: 2011-06-16 00:00:00 +02:00
19
14
  default_executable:
20
15
  dependencies:
21
16
  - !ruby/object:Gem::Dependency
@@ -24,13 +19,8 @@ dependencies:
24
19
  requirement: &id001 !ruby/object:Gem::Requirement
25
20
  none: false
26
21
  requirements:
27
- - - ">="
22
+ - - ~>
28
23
  - !ruby/object:Gem::Version
29
- hash: 7
30
- segments:
31
- - 3
32
- - 0
33
- - 0
34
24
  version: 3.0.0
35
25
  type: :runtime
36
26
  version_requirements: *id001
@@ -40,13 +30,8 @@ dependencies:
40
30
  requirement: &id002 !ruby/object:Gem::Requirement
41
31
  none: false
42
32
  requirements:
43
- - - ">="
33
+ - - ~>
44
34
  - !ruby/object:Gem::Version
45
- hash: 23
46
- segments:
47
- - 1
48
- - 0
49
- - 0
50
35
  version: 1.0.0
51
36
  type: :development
52
37
  version_requirements: *id002
@@ -56,14 +41,9 @@ dependencies:
56
41
  requirement: &id003 !ruby/object:Gem::Requirement
57
42
  none: false
58
43
  requirements:
59
- - - ">="
44
+ - - ~>
60
45
  - !ruby/object:Gem::Version
61
- hash: 15
62
- segments:
63
- - 2
64
- - 0
65
- - 0
66
- version: 2.0.0
46
+ version: 2.5.0
67
47
  type: :development
68
48
  version_requirements: *id003
69
49
  - !ruby/object:Gem::Dependency
@@ -74,12 +54,7 @@ dependencies:
74
54
  requirements:
75
55
  - - "="
76
56
  - !ruby/object:Gem::Version
77
- hash: 15
78
- segments:
79
- - 0
80
- - 5
81
- - 2
82
- version: 0.5.2
57
+ version: 0.6.7.RC
83
58
  type: :development
84
59
  version_requirements: *id004
85
60
  - !ruby/object:Gem::Dependency
@@ -88,16 +63,22 @@ dependencies:
88
63
  requirement: &id005 !ruby/object:Gem::Requirement
89
64
  none: false
90
65
  requirements:
91
- - - ">="
66
+ - - ~>
92
67
  - !ruby/object:Gem::Version
93
- hash: 27
94
- segments:
95
- - 1
96
- - 3
97
- - 0
98
68
  version: 1.3.0
99
69
  type: :development
100
70
  version_requirements: *id005
71
+ - !ruby/object:Gem::Dependency
72
+ name: generator_spec
73
+ prerelease: false
74
+ requirement: &id006 !ruby/object:Gem::Requirement
75
+ none: false
76
+ requirements:
77
+ - - ~>
78
+ - !ruby/object:Gem::Version
79
+ version: 0.8.2
80
+ type: :development
81
+ version_requirements: *id006
101
82
  description: A user-centric voting extension for Rails 3 applications.
102
83
  email:
103
84
  - schlamp@gmx.de
@@ -124,6 +105,7 @@ files:
124
105
  - make_voteable.gemspec
125
106
  - spec/database.yml
126
107
  - spec/database.yml.sample
108
+ - spec/generators/make_voteable_generator_spec.rb
127
109
  - spec/lib/make_voteable_spec.rb
128
110
  - spec/models.rb
129
111
  - spec/schema.rb
@@ -142,25 +124,17 @@ required_ruby_version: !ruby/object:Gem::Requirement
142
124
  requirements:
143
125
  - - ">="
144
126
  - !ruby/object:Gem::Version
145
- hash: 3
146
- segments:
147
- - 0
148
127
  version: "0"
149
128
  required_rubygems_version: !ruby/object:Gem::Requirement
150
129
  none: false
151
130
  requirements:
152
131
  - - ">="
153
132
  - !ruby/object:Gem::Version
154
- hash: 23
155
- segments:
156
- - 1
157
- - 3
158
- - 6
159
133
  version: 1.3.6
160
134
  requirements: []
161
135
 
162
136
  rubyforge_project: make_voteable
163
- rubygems_version: 1.4.2
137
+ rubygems_version: 1.6.2
164
138
  signing_key:
165
139
  specification_version: 3
166
140
  summary: Rails 3 voting extension