make_voteable 0.0.2 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
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