mm-voteable 1.0.0 → 1.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/Gemfile +1 -5
- data/Gemfile.lock +9 -14
- data/README.rdoc +16 -6
- data/Rakefile +2 -2
- data/VERSION +1 -1
- data/lib/mongo_mapper/plugins/voteable/vote.rb +1 -3
- data/mm-voteable.gemspec +7 -16
- data/spec/mm-voteable_spec.rb +10 -4
- data/spec/spec_helper.rb +1 -21
- metadata +24 -70
data/Gemfile
CHANGED
@@ -1,14 +1,10 @@
|
|
1
1
|
source "http://rubygems.org"
|
2
2
|
|
3
3
|
group :development do
|
4
|
-
gem '
|
5
|
-
gem 'bson_ext', '1.1.2'
|
6
|
-
gem 'mongo_ext'
|
4
|
+
gem 'bson_ext'
|
7
5
|
gem 'mongo_mapper'
|
8
6
|
gem 'i18n'
|
9
7
|
|
10
|
-
gem 'log_buddy'
|
11
|
-
|
12
8
|
gem 'ruby-debug'
|
13
9
|
gem "rspec", "~> 2.1.0"
|
14
10
|
gem "yard", "~> 0.6.0"
|
data/Gemfile.lock
CHANGED
@@ -1,24 +1,22 @@
|
|
1
1
|
GEM
|
2
2
|
remote: http://rubygems.org/
|
3
3
|
specs:
|
4
|
-
activesupport (3.0.
|
5
|
-
bson (1.
|
6
|
-
bson_ext (1.
|
4
|
+
activesupport (3.0.4)
|
5
|
+
bson (1.2.4)
|
6
|
+
bson_ext (1.2.4)
|
7
7
|
columnize (0.3.2)
|
8
8
|
diff-lcs (1.1.2)
|
9
9
|
git (1.2.5)
|
10
|
-
i18n (0.
|
11
|
-
jeweler (1.5.
|
10
|
+
i18n (0.5.0)
|
11
|
+
jeweler (1.5.2)
|
12
12
|
bundler (~> 1.0.0)
|
13
13
|
git (>= 1.2.5)
|
14
14
|
rake
|
15
15
|
jnunemaker-validatable (1.8.4)
|
16
16
|
activesupport (>= 2.3.4)
|
17
17
|
linecache (0.43)
|
18
|
-
|
19
|
-
|
20
|
-
bson (>= 1.1.1)
|
21
|
-
mongo_ext (0.19.3)
|
18
|
+
mongo (1.2.4)
|
19
|
+
bson (>= 1.2.4)
|
22
20
|
mongo_mapper (0.8.6)
|
23
21
|
activesupport (>= 2.3.4)
|
24
22
|
jnunemaker-validatable (~> 1.8.4)
|
@@ -40,19 +38,16 @@ GEM
|
|
40
38
|
ruby-debug-base (~> 0.10.4.0)
|
41
39
|
ruby-debug-base (0.10.4)
|
42
40
|
linecache (>= 0.3)
|
43
|
-
yard (0.6.
|
41
|
+
yard (0.6.4)
|
44
42
|
|
45
43
|
PLATFORMS
|
46
44
|
ruby
|
47
45
|
|
48
46
|
DEPENDENCIES
|
49
|
-
bson_ext
|
47
|
+
bson_ext
|
50
48
|
bundler (~> 1.0.0)
|
51
49
|
i18n
|
52
50
|
jeweler (~> 1.5.1)
|
53
|
-
log_buddy
|
54
|
-
mongo (= 1.1.2)
|
55
|
-
mongo_ext
|
56
51
|
mongo_mapper
|
57
52
|
rcov
|
58
53
|
rspec (~> 2.1.0)
|
data/README.rdoc
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
= mm-voteable
|
2
2
|
|
3
|
-
A very simple mongomapper plugin to add vote up/down
|
3
|
+
A very simple mongomapper plugin to add vote up/down superpowers to your models.
|
4
4
|
|
5
5
|
|
6
6
|
== Usage
|
@@ -20,12 +20,13 @@ Then add the voteable plugin to you MongoMapper::Document
|
|
20
20
|
include MongoMapper::Document
|
21
21
|
plugin MongoMapper::Plugins::Voteable
|
22
22
|
|
23
|
-
def on_add_vote(
|
24
|
-
do something when a
|
23
|
+
def on_add_vote(vote)
|
24
|
+
do something when a vote is added...
|
25
25
|
end
|
26
26
|
end
|
27
27
|
|
28
|
-
You must implement the
|
28
|
+
You must implement the on_add_vote callback! -
|
29
|
+
It can be an empty implementation, but I use it to create ActivityStream Items after someone votes on a NewsArticle
|
29
30
|
|
30
31
|
@post = Post.create
|
31
32
|
@voter = User.create
|
@@ -37,9 +38,18 @@ You must implement the on_add_comment callback! - however it can be an empty imp
|
|
37
38
|
@posts.votes #=> [<Vote>]
|
38
39
|
@posts.voters #=> [<User>]
|
39
40
|
@posts.voters.include?(@voter) #=> true
|
41
|
+
|
42
|
+
|
43
|
+
== Limitations
|
44
|
+
|
45
|
+
I made this plugin for voting up and down on articles (kind of like stack overflow) so there are currently some limitations
|
46
|
+
|
47
|
+
* the vote value can only be one of 1 or -1
|
48
|
+
* the voteable model has a 'user' belongs_to association
|
49
|
+
* a user can only vote once on a voteable item
|
50
|
+
* the owner of a voteable item, cannot vote
|
40
51
|
|
41
|
-
|
42
|
-
* your voteable model has a 'user' association
|
52
|
+
Feel free to code any of these limitations out and send me a patch, this is just how I have used it so far
|
43
53
|
|
44
54
|
|
45
55
|
== Contributing to mm-voteable
|
data/Rakefile
CHANGED
@@ -15,8 +15,8 @@ Jeweler::Tasks.new do |gem|
|
|
15
15
|
gem.name = "mm-voteable"
|
16
16
|
gem.homepage = "http://github.com/icaruswings/mm-voteable"
|
17
17
|
gem.license = "MIT"
|
18
|
-
gem.summary = %Q{A very simple mongomapper plugin to add vote up/down
|
19
|
-
gem.description = %Q{A very simple mongomapper plugin to add vote up/down
|
18
|
+
gem.summary = %Q{A very simple mongomapper plugin to add vote up/down superpowers to your models}
|
19
|
+
gem.description = %Q{A very simple mongomapper plugin to add vote up/down superpowers to your models}
|
20
20
|
gem.email = "luke@icaruswings.com"
|
21
21
|
gem.authors = ["Luke Cunningham"]
|
22
22
|
# Include your dependencies below. Runtime dependencies are required when using your gem,
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.
|
1
|
+
1.1.0
|
@@ -4,14 +4,12 @@ class Vote
|
|
4
4
|
key :voter_id, ObjectId, :required => true
|
5
5
|
belongs_to :voter, :class_name => 'User'
|
6
6
|
|
7
|
-
key :value, Integer, :required => true
|
7
|
+
key :value, Integer, :required => true, :in => [1,-1]
|
8
8
|
|
9
9
|
key :voteable_id, ObjectId, :required => true
|
10
10
|
key :voteable_type, String, :required => true
|
11
11
|
belongs_to :voteable, :polymorphic => true
|
12
12
|
|
13
|
-
validates_inclusion_of :value, :within => [1,-1]
|
14
|
-
|
15
13
|
validate :should_be_unique
|
16
14
|
validate :should_not_be_owner
|
17
15
|
|
data/mm-voteable.gemspec
CHANGED
@@ -5,12 +5,12 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{mm-voteable}
|
8
|
-
s.version = "1.
|
8
|
+
s.version = "1.1.0"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Luke Cunningham"]
|
12
|
-
s.date = %q{
|
13
|
-
s.description = %q{A very simple mongomapper plugin to add vote up/down
|
12
|
+
s.date = %q{2011-02-26}
|
13
|
+
s.description = %q{A very simple mongomapper plugin to add vote up/down superpowers to your models}
|
14
14
|
s.email = %q{luke@icaruswings.com}
|
15
15
|
s.extra_rdoc_files = [
|
16
16
|
"LICENSE.txt",
|
@@ -37,7 +37,7 @@ Gem::Specification.new do |s|
|
|
37
37
|
s.licenses = ["MIT"]
|
38
38
|
s.require_paths = ["lib"]
|
39
39
|
s.rubygems_version = %q{1.3.7}
|
40
|
-
s.summary = %q{A very simple mongomapper plugin to add vote up/down
|
40
|
+
s.summary = %q{A very simple mongomapper plugin to add vote up/down superpowers to your models}
|
41
41
|
s.test_files = [
|
42
42
|
"spec/mm-voteable_spec.rb",
|
43
43
|
"spec/spec_helper.rb",
|
@@ -49,12 +49,9 @@ Gem::Specification.new do |s|
|
|
49
49
|
s.specification_version = 3
|
50
50
|
|
51
51
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
52
|
-
s.add_development_dependency(%q<
|
53
|
-
s.add_development_dependency(%q<bson_ext>, ["= 1.1.2"])
|
54
|
-
s.add_development_dependency(%q<mongo_ext>, [">= 0"])
|
52
|
+
s.add_development_dependency(%q<bson_ext>, [">= 0"])
|
55
53
|
s.add_development_dependency(%q<mongo_mapper>, [">= 0"])
|
56
54
|
s.add_development_dependency(%q<i18n>, [">= 0"])
|
57
|
-
s.add_development_dependency(%q<log_buddy>, [">= 0"])
|
58
55
|
s.add_development_dependency(%q<ruby-debug>, [">= 0"])
|
59
56
|
s.add_development_dependency(%q<rspec>, ["~> 2.1.0"])
|
60
57
|
s.add_development_dependency(%q<yard>, ["~> 0.6.0"])
|
@@ -62,12 +59,9 @@ Gem::Specification.new do |s|
|
|
62
59
|
s.add_development_dependency(%q<jeweler>, ["~> 1.5.1"])
|
63
60
|
s.add_development_dependency(%q<rcov>, [">= 0"])
|
64
61
|
else
|
65
|
-
s.add_dependency(%q<
|
66
|
-
s.add_dependency(%q<bson_ext>, ["= 1.1.2"])
|
67
|
-
s.add_dependency(%q<mongo_ext>, [">= 0"])
|
62
|
+
s.add_dependency(%q<bson_ext>, [">= 0"])
|
68
63
|
s.add_dependency(%q<mongo_mapper>, [">= 0"])
|
69
64
|
s.add_dependency(%q<i18n>, [">= 0"])
|
70
|
-
s.add_dependency(%q<log_buddy>, [">= 0"])
|
71
65
|
s.add_dependency(%q<ruby-debug>, [">= 0"])
|
72
66
|
s.add_dependency(%q<rspec>, ["~> 2.1.0"])
|
73
67
|
s.add_dependency(%q<yard>, ["~> 0.6.0"])
|
@@ -76,12 +70,9 @@ Gem::Specification.new do |s|
|
|
76
70
|
s.add_dependency(%q<rcov>, [">= 0"])
|
77
71
|
end
|
78
72
|
else
|
79
|
-
s.add_dependency(%q<
|
80
|
-
s.add_dependency(%q<bson_ext>, ["= 1.1.2"])
|
81
|
-
s.add_dependency(%q<mongo_ext>, [">= 0"])
|
73
|
+
s.add_dependency(%q<bson_ext>, [">= 0"])
|
82
74
|
s.add_dependency(%q<mongo_mapper>, [">= 0"])
|
83
75
|
s.add_dependency(%q<i18n>, [">= 0"])
|
84
|
-
s.add_dependency(%q<log_buddy>, [">= 0"])
|
85
76
|
s.add_dependency(%q<ruby-debug>, [">= 0"])
|
86
77
|
s.add_dependency(%q<rspec>, ["~> 2.1.0"])
|
87
78
|
s.add_dependency(%q<yard>, ["~> 0.6.0"])
|
data/spec/mm-voteable_spec.rb
CHANGED
@@ -17,14 +17,20 @@ describe "Vote" do
|
|
17
17
|
@vote.should be_valid
|
18
18
|
end
|
19
19
|
|
20
|
-
it "should be valid if already voted" do
|
21
|
-
|
22
|
-
vote = voteable.votes.build(:value => 1, :voter => @user)
|
20
|
+
it "should not be valid if already voted" do
|
21
|
+
@vote.save
|
22
|
+
vote = @voteable.votes.build(:value => 1, :voter => @user)
|
23
23
|
|
24
24
|
vote.should_not be_valid
|
25
25
|
end
|
26
26
|
|
27
|
-
it "should be valid
|
27
|
+
it "should not be valid value is not one of 1 or -1" do
|
28
|
+
@vote.value = 3
|
29
|
+
|
30
|
+
@vote.should_not be_valid
|
31
|
+
end
|
32
|
+
|
33
|
+
it "should not be valid if voteable owner" do
|
28
34
|
voteable = VoteableWithCallback.create(:user_id => @user.id)
|
29
35
|
vote = voteable.votes.build(:value => 1, :voter => @user)
|
30
36
|
|
data/spec/spec_helper.rb
CHANGED
@@ -4,10 +4,6 @@ require 'bundler/setup'
|
|
4
4
|
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
5
5
|
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
6
6
|
|
7
|
-
require 'fileutils'
|
8
|
-
require 'ostruct'
|
9
|
-
require 'log_buddy'
|
10
|
-
|
11
7
|
require 'rspec'
|
12
8
|
|
13
9
|
require 'mm-voteable'
|
@@ -16,25 +12,9 @@ require 'mm-voteable'
|
|
16
12
|
# in ./support/ and its subdirectories.
|
17
13
|
Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each {|f| require f}
|
18
14
|
|
19
|
-
|
20
|
-
FileUtils.mkdir_p(log_dir) unless File.exist?(log_dir)
|
21
|
-
|
22
|
-
logger = Logger.new(log_dir + '/test.log')
|
23
|
-
LogBuddy.init(:logger => logger)
|
24
|
-
|
25
|
-
MongoMapper.connection = Mongo::Connection.new('127.0.0.1', 27017, :logger => logger)
|
15
|
+
MongoMapper.connection = Mongo::Connection.new('127.0.0.1', 27017)
|
26
16
|
MongoMapper.database = "mm-test-#{RUBY_VERSION.gsub('.', '-')}"
|
27
17
|
MongoMapper.database.collections.each { |c| c.drop_indexes }
|
28
18
|
|
29
|
-
|
30
19
|
RSpec.configure do |config|
|
31
|
-
|
32
|
-
config.after(:each) do
|
33
|
-
MongoMapper.database.collections.collect do |collection|
|
34
|
-
unless %w(system.js system.indexes system.users).any? { |name| name == collection.name }
|
35
|
-
MongoMapper.database.drop_collection(collection.name)
|
36
|
-
end
|
37
|
-
end
|
38
|
-
end
|
39
|
-
|
40
20
|
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mm-voteable
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 19
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 1
|
8
|
+
- 1
|
8
9
|
- 0
|
9
|
-
|
10
|
-
version: 1.0.0
|
10
|
+
version: 1.1.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Luke Cunningham
|
@@ -15,44 +15,12 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date:
|
18
|
+
date: 2011-02-26 00:00:00 +11:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
22
22
|
prerelease: false
|
23
23
|
version_requirements: &id001 !ruby/object:Gem::Requirement
|
24
|
-
none: false
|
25
|
-
requirements:
|
26
|
-
- - "="
|
27
|
-
- !ruby/object:Gem::Version
|
28
|
-
hash: 23
|
29
|
-
segments:
|
30
|
-
- 1
|
31
|
-
- 1
|
32
|
-
- 2
|
33
|
-
version: 1.1.2
|
34
|
-
name: mongo
|
35
|
-
requirement: *id001
|
36
|
-
type: :development
|
37
|
-
- !ruby/object:Gem::Dependency
|
38
|
-
prerelease: false
|
39
|
-
version_requirements: &id002 !ruby/object:Gem::Requirement
|
40
|
-
none: false
|
41
|
-
requirements:
|
42
|
-
- - "="
|
43
|
-
- !ruby/object:Gem::Version
|
44
|
-
hash: 23
|
45
|
-
segments:
|
46
|
-
- 1
|
47
|
-
- 1
|
48
|
-
- 2
|
49
|
-
version: 1.1.2
|
50
|
-
name: bson_ext
|
51
|
-
requirement: *id002
|
52
|
-
type: :development
|
53
|
-
- !ruby/object:Gem::Dependency
|
54
|
-
prerelease: false
|
55
|
-
version_requirements: &id003 !ruby/object:Gem::Requirement
|
56
24
|
none: false
|
57
25
|
requirements:
|
58
26
|
- - ">="
|
@@ -61,12 +29,12 @@ dependencies:
|
|
61
29
|
segments:
|
62
30
|
- 0
|
63
31
|
version: "0"
|
64
|
-
name:
|
65
|
-
requirement: *
|
32
|
+
name: bson_ext
|
33
|
+
requirement: *id001
|
66
34
|
type: :development
|
67
35
|
- !ruby/object:Gem::Dependency
|
68
36
|
prerelease: false
|
69
|
-
version_requirements: &
|
37
|
+
version_requirements: &id002 !ruby/object:Gem::Requirement
|
70
38
|
none: false
|
71
39
|
requirements:
|
72
40
|
- - ">="
|
@@ -76,11 +44,11 @@ dependencies:
|
|
76
44
|
- 0
|
77
45
|
version: "0"
|
78
46
|
name: mongo_mapper
|
79
|
-
requirement: *
|
47
|
+
requirement: *id002
|
80
48
|
type: :development
|
81
49
|
- !ruby/object:Gem::Dependency
|
82
50
|
prerelease: false
|
83
|
-
version_requirements: &
|
51
|
+
version_requirements: &id003 !ruby/object:Gem::Requirement
|
84
52
|
none: false
|
85
53
|
requirements:
|
86
54
|
- - ">="
|
@@ -90,25 +58,11 @@ dependencies:
|
|
90
58
|
- 0
|
91
59
|
version: "0"
|
92
60
|
name: i18n
|
93
|
-
requirement: *
|
94
|
-
type: :development
|
95
|
-
- !ruby/object:Gem::Dependency
|
96
|
-
prerelease: false
|
97
|
-
version_requirements: &id006 !ruby/object:Gem::Requirement
|
98
|
-
none: false
|
99
|
-
requirements:
|
100
|
-
- - ">="
|
101
|
-
- !ruby/object:Gem::Version
|
102
|
-
hash: 3
|
103
|
-
segments:
|
104
|
-
- 0
|
105
|
-
version: "0"
|
106
|
-
name: log_buddy
|
107
|
-
requirement: *id006
|
61
|
+
requirement: *id003
|
108
62
|
type: :development
|
109
63
|
- !ruby/object:Gem::Dependency
|
110
64
|
prerelease: false
|
111
|
-
version_requirements: &
|
65
|
+
version_requirements: &id004 !ruby/object:Gem::Requirement
|
112
66
|
none: false
|
113
67
|
requirements:
|
114
68
|
- - ">="
|
@@ -118,11 +72,11 @@ dependencies:
|
|
118
72
|
- 0
|
119
73
|
version: "0"
|
120
74
|
name: ruby-debug
|
121
|
-
requirement: *
|
75
|
+
requirement: *id004
|
122
76
|
type: :development
|
123
77
|
- !ruby/object:Gem::Dependency
|
124
78
|
prerelease: false
|
125
|
-
version_requirements: &
|
79
|
+
version_requirements: &id005 !ruby/object:Gem::Requirement
|
126
80
|
none: false
|
127
81
|
requirements:
|
128
82
|
- - ~>
|
@@ -134,11 +88,11 @@ dependencies:
|
|
134
88
|
- 0
|
135
89
|
version: 2.1.0
|
136
90
|
name: rspec
|
137
|
-
requirement: *
|
91
|
+
requirement: *id005
|
138
92
|
type: :development
|
139
93
|
- !ruby/object:Gem::Dependency
|
140
94
|
prerelease: false
|
141
|
-
version_requirements: &
|
95
|
+
version_requirements: &id006 !ruby/object:Gem::Requirement
|
142
96
|
none: false
|
143
97
|
requirements:
|
144
98
|
- - ~>
|
@@ -150,11 +104,11 @@ dependencies:
|
|
150
104
|
- 0
|
151
105
|
version: 0.6.0
|
152
106
|
name: yard
|
153
|
-
requirement: *
|
107
|
+
requirement: *id006
|
154
108
|
type: :development
|
155
109
|
- !ruby/object:Gem::Dependency
|
156
110
|
prerelease: false
|
157
|
-
version_requirements: &
|
111
|
+
version_requirements: &id007 !ruby/object:Gem::Requirement
|
158
112
|
none: false
|
159
113
|
requirements:
|
160
114
|
- - ~>
|
@@ -166,11 +120,11 @@ dependencies:
|
|
166
120
|
- 0
|
167
121
|
version: 1.0.0
|
168
122
|
name: bundler
|
169
|
-
requirement: *
|
123
|
+
requirement: *id007
|
170
124
|
type: :development
|
171
125
|
- !ruby/object:Gem::Dependency
|
172
126
|
prerelease: false
|
173
|
-
version_requirements: &
|
127
|
+
version_requirements: &id008 !ruby/object:Gem::Requirement
|
174
128
|
none: false
|
175
129
|
requirements:
|
176
130
|
- - ~>
|
@@ -182,11 +136,11 @@ dependencies:
|
|
182
136
|
- 1
|
183
137
|
version: 1.5.1
|
184
138
|
name: jeweler
|
185
|
-
requirement: *
|
139
|
+
requirement: *id008
|
186
140
|
type: :development
|
187
141
|
- !ruby/object:Gem::Dependency
|
188
142
|
prerelease: false
|
189
|
-
version_requirements: &
|
143
|
+
version_requirements: &id009 !ruby/object:Gem::Requirement
|
190
144
|
none: false
|
191
145
|
requirements:
|
192
146
|
- - ">="
|
@@ -196,9 +150,9 @@ dependencies:
|
|
196
150
|
- 0
|
197
151
|
version: "0"
|
198
152
|
name: rcov
|
199
|
-
requirement: *
|
153
|
+
requirement: *id009
|
200
154
|
type: :development
|
201
|
-
description: A very simple mongomapper plugin to add vote up/down
|
155
|
+
description: A very simple mongomapper plugin to add vote up/down superpowers to your models
|
202
156
|
email: luke@icaruswings.com
|
203
157
|
executables: []
|
204
158
|
|
@@ -256,7 +210,7 @@ rubyforge_project:
|
|
256
210
|
rubygems_version: 1.3.7
|
257
211
|
signing_key:
|
258
212
|
specification_version: 3
|
259
|
-
summary: A very simple mongomapper plugin to add vote up/down
|
213
|
+
summary: A very simple mongomapper plugin to add vote up/down superpowers to your models
|
260
214
|
test_files:
|
261
215
|
- spec/mm-voteable_spec.rb
|
262
216
|
- spec/spec_helper.rb
|