mongoid_atomic_votes 0.1.1 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: c011039cca7f56e8f6da3de59f97510592784434
4
- data.tar.gz: 6724540bc0728cc2da34b6b450f0ee3fa8e91653
3
+ metadata.gz: 1471df3a89ef9456b35bc2e078fb8b73d0fc89a9
4
+ data.tar.gz: 561f2eac6abec232a1966ee23181bbb09b290325
5
5
  SHA512:
6
- metadata.gz: 27e37c374f7b11244dae7a7e77bcc1700204db22ac6257d6831f5a296c9ceb82381b3605af14f689effa3b19e90f8e14d29627b5f7a9fc882d3ecac5e2499027
7
- data.tar.gz: 11d7461bfec82ae8d1b19a76dff29cc5c54660f24ca793999b0d0ee955a87e9c092aa22824cdb6409b8afeef2aefe277907adc44547fe046b165e42eb2975879
6
+ metadata.gz: 3583b0c8a866dab57c14cfeef6e98555d7ceab20779e83d89e7722be0e076607ae13d8d0b2ba0a787866e33131892d608792366504bc12fffce836e1ac8da472
7
+ data.tar.gz: 0151bda82246b40cb8bc37e62fda203d66b2c95a9dcd1fee9f4bd34688e6d2495ba30c30efe3347d9cc4870316745cfd699c92469bf3a5a63b18cb49f7670c25
data/Gemfile CHANGED
@@ -8,4 +8,5 @@ group :test do
8
8
  gem 'factory_girl'
9
9
  gem 'simplecov'
10
10
  gem 'database_cleaner'
11
+ gem 'pry'
11
12
  end
@@ -15,8 +15,8 @@ module Mongoid
15
15
  end
16
16
 
17
17
  def define_scopes(base)
18
- base.scope :not_voted, base.where(:vote_value.exists => false)
19
- base.scope :voted, base.where(:vote_value.exists => true)
18
+ base.scope :not_voted, -> { base.where(:vote_value.exists => false) }
19
+ base.scope :voted, -> { base.where(:vote_value.exists => true) }
20
20
  base.scope :voted_by, ->(resource) do
21
21
  base.where('votes.voted_by_id' => resource.id, 'votes.voter_type' => resource.class.name)
22
22
  end
@@ -69,7 +69,7 @@ module Mongoid
69
69
  opts['$push'] = {votes: mark.as_json}
70
70
  end
71
71
 
72
- self.collection.find(_id: self.id).update(opts).nil?
72
+ self.collection.find(_id: self.id).update(opts)['ok'] > 0
73
73
  end
74
74
 
75
75
  def update_vote_value(mark, retract=false)
@@ -1,5 +1,5 @@
1
1
  module Mongoid
2
2
  module AtomicVotes
3
- VERSION = "0.1.1"
3
+ VERSION = "0.2.0"
4
4
  end
5
5
  end
@@ -5,7 +5,7 @@ class Mongoid::AtomicVotes::Vote
5
5
  embedded_in :atomic_voteable, polymorphic: true
6
6
 
7
7
  field :value, type: Integer
8
- field :voted_by_id, type: Moped::BSON::ObjectId
8
+ field :voted_by_id, type: BSON::ObjectId
9
9
  field :voter_type, type: String
10
10
 
11
11
  validates_presence_of :value, :voted_by_id, :voter_type
@@ -14,5 +14,5 @@ Gem::Specification.new do |gem|
14
14
  gem.require_paths = ["lib"]
15
15
  gem.version = Mongoid::AtomicVotes::VERSION
16
16
 
17
- gem.add_runtime_dependency 'mongoid', ['>= 3.0']
17
+ gem.add_runtime_dependency 'mongoid', ['>= 4.0']
18
18
  end
@@ -1,3 +1,4 @@
1
+ require 'pry'
1
2
  require 'spec_helper'
2
3
 
3
4
  describe Post do
@@ -7,73 +8,79 @@ describe Post do
7
8
  end
8
9
 
9
10
  it "has Mongoid::AtomicVotes module" do
10
- subject.class.ancestors.include?(Mongoid::AtomicVotes).should be_true
11
+ expect(subject.class.ancestors).to include(Mongoid::AtomicVotes)
11
12
  end
12
13
 
13
- it { should respond_to :vote }
14
- it { should respond_to :retract }
15
- it { should respond_to :has_votes? }
16
- it { should respond_to :vote_count }
17
- it { should respond_to :vote_value }
18
- it { should respond_to :votes }
14
+ it { expect(subject).to respond_to(:vote) }
15
+ it { expect(subject).to respond_to(:retract) }
16
+ it { expect(subject).to respond_to(:has_votes?) }
17
+ it { expect(subject).to respond_to(:vote_count) }
18
+ it { expect(subject).to respond_to(:vote_value) }
19
+ it { expect(subject).to respond_to(:votes) }
19
20
 
20
- it { subject.class.respond_to?(:set_vote_range).should be_true }
21
- it { ->{subject.class.set_vote_range(1)}.should raise_exception }
21
+ it { expect(subject.class).to respond_to(:set_vote_range) }
22
+ it { expect { subject.class.set_vote_range(1) }.to raise_exception }
22
23
 
23
24
  describe '#votes' do
24
25
  it 'is array of votes' do
25
- @post.votes.should be_an_instance_of Array
26
+ expect(@post.votes).to be_an_instance_of(Array)
26
27
  end
27
28
  end
28
29
 
29
30
  describe 'when does not have votes' do
30
31
  it 'is in not_voted scope' do
31
- subject.class.not_voted.include?(@post).should be_true
32
+ expect(subject.class.not_voted).to include(@post)
32
33
  end
33
34
 
34
35
  it 'is not in voted scope' do
35
- subject.class.voted.include?(@post).should be_false
36
+ expect(subject.class.voted).not_to include(@post)
36
37
  end
37
38
 
38
39
  it 'is not in voted_by scope' do
39
40
  @users.each do |u|
40
- subject.class.voted_by(u).include?(@post).should be_false
41
+ expect(subject.class.voted_by(u)).not_to include(@post)
41
42
  end
42
43
  end
43
44
 
44
45
  it '#vote_count returns 0' do
45
- @post.vote_count.should == 0
46
+ expect(@post.vote_count).to eq(0)
46
47
  end
47
48
 
48
49
  it '#vote_value returns nil' do
49
- @post.vote_value.should be_nil
50
+ expect(@post.vote_value).to be_nil
50
51
  end
51
52
 
52
53
  it '#votes returns empty array' do
53
- @post.votes.should == []
54
+ expect(@post.votes).to eq([])
54
55
  end
55
56
 
56
57
  it '#has_votes? returns false' do
57
- @post.vote_count.should == 0
58
- @post.has_votes?.should be_false
58
+ expect(@post.vote_count).to eq(0)
59
+ expect(@post.has_votes?).to be_falsey
59
60
  end
60
61
 
61
62
  it '#voted_by? returns false with any resource' do
62
- @users.each{|u| @post.voted_by?(u).should be_false}
63
+ @users.each do |u|
64
+ expect(@post.voted_by?(u)).to be_falsey
65
+ end
63
66
  end
64
67
 
65
68
  it '#vote returns true on successful vote' do
66
- @users.each{|u| @post.vote(rand(1..10), u).should be_true}
69
+ @users.each do |u|
70
+ expect(@post.vote(rand(1..10), u)).to be_truthy
71
+ end
67
72
 
68
73
  vote_value = @post.votes.map(&:value).sum.to_f/@post.votes.size
69
74
 
70
- @post.vote_value.should == vote_value
71
- @post.vote_count.should == @users.size
72
- @post.votes.size.should == @users.size
73
-
74
- Post.find(@post.id).vote_value.should == vote_value
75
- Post.find(@post.id).vote_count.should == @users.size
76
- Post.find(@post.id).votes.size.should == @users.size
75
+ expect(@post.vote_value).to eq(vote_value)
76
+ expect(@post.vote_count).to eq(@users.size)
77
+ expect(@post.votes.size).to eq(@users.size)
78
+
79
+ Post.find(@post.id).tap do |post|
80
+ expect(post.vote_value).to eq(vote_value)
81
+ expect(post.vote_count).to eq(@users.size)
82
+ expect(post.votes.size).to eq(@users.size)
83
+ end
77
84
  end
78
85
  end
79
86
 
@@ -83,59 +90,63 @@ describe Post do
83
90
  end
84
91
 
85
92
  it 'is not in the not_voted scope' do
86
- subject.class.not_voted.include?(@post).should be_false
93
+ expect(subject.class.not_voted).not_to include(@post)
87
94
  end
88
95
 
89
96
  it 'is in voted scope' do
90
- subject.class.voted.include?(@post).should be_true
97
+ expect(subject.class.voted).to include(@post)
91
98
  end
92
99
 
93
100
  it 'is in voted_by scope for each voted user' do
94
- @users.each{|u| subject.class.voted_by(u).include?(@post).should be_true}
101
+ @users.each do |u|
102
+ expect(subject.class.voted_by(u)).to include(@post)
103
+ end
95
104
  end
96
105
 
97
106
  it '#vote_count returns count of votes' do
98
- @post.vote_count.should eq(@post.votes.size)
107
+ expect(@post.vote_count).to eq(@post.votes.size)
99
108
  end
100
109
 
101
110
  it '#vote_value returns actual vote value' do
102
111
  vote_value = @post.votes.map(&:value).sum.to_f/@post.votes.size
103
- @post.vote_value.should eq(vote_value)
112
+ expect(@post.vote_value).to eq(vote_value)
104
113
  end
105
114
 
106
115
  it '#votes returns array of vote marks' do
107
116
  @post.votes.tap do |votes|
108
- votes.class.should == Array
109
- votes.empty?.should be_false
110
- votes.size.should == @users.size
111
- votes.map(&:voted_by_id).sort.should == @users.map(&:id).sort
117
+ expect(votes.class).to eq(Array)
118
+ expect(votes).not_to be_empty
119
+ expect(votes.size).to eq(@users.size)
120
+ expect(votes.map(&:voted_by_id).sort).to eq(@users.map(&:id).sort)
112
121
  end
113
122
  end
114
123
 
115
124
  it '#has_votes? returns true' do
116
- @post.vote_count.should == @post.votes.size
117
- @post.has_votes?.should be_true
125
+ expect(@post.vote_count).to eq(@post.votes.size)
126
+ expect(@post.has_votes?).to be_truthy
118
127
  end
119
128
 
120
129
  it '#voted_by? returns true for all voted resource' do
121
- @users.each{|u| @post.voted_by?(u).should be_true}
130
+ @users.each do |u|
131
+ expect(@post.voted_by?(u)).to be_truthy
132
+ end
122
133
  end
123
134
 
124
135
  it '#retract returns true on successful vote retract' do
125
136
  cnt = @users.size
126
137
 
127
138
  @users.each do |u|
128
- @post.retract(u).should be_true
139
+ expect(@post.retract(u)).to be_truthy
129
140
  cnt -= 1
130
141
 
131
142
  vote_value = @post.votes.size == 0 ? nil : @post.votes.map(&:value).sum.to_f/@post.votes.size
132
143
 
133
- @post.vote_value.should == vote_value
134
- @post.vote_count.should == @post.votes.size
135
- @post.vote_count.should == cnt
144
+ expect(@post.vote_value).to eq(vote_value)
145
+ expect(@post.vote_count).to eq(@post.votes.size)
146
+ expect(@post.vote_count).to eq(cnt)
136
147
 
137
- Post.find(@post.id).vote_value.should == vote_value
138
- Post.find(@post.id).vote_count.should == cnt
148
+ expect(Post.find(@post.id).vote_value).to eq(vote_value)
149
+ expect(Post.find(@post.id).vote_count).to eq(cnt)
139
150
  Post.find(@post.id).votes.size == cnt
140
151
  end
141
152
  end
@@ -148,13 +159,13 @@ describe Post do
148
159
  end
149
160
 
150
161
  it 'Vote has vote_range set up' do
151
- Mongoid::AtomicVotes::Vote.vote_range.should == (1..5)
162
+ expect(Mongoid::AtomicVotes::Vote.vote_range).to eq((1..5))
152
163
  end
153
164
 
154
165
  it 'Vote is not valid if its value is not in specified vote_range' do
155
166
  @vote = Mongoid::AtomicVotes::Vote.new(value: rand(6..10), voted_by_id: @users.first.id, voter_type: @users.first.class.name)
156
- @vote.should_not be_valid
157
- @vote.errors.messages[:value].first.should =~ /included in the list/
167
+ expect(@vote).not_to be_valid
168
+ expect(@vote.errors.messages[:value].first).to match(/included in the list/)
158
169
  end
159
170
  end
160
171
  end
metadata CHANGED
@@ -1,38 +1,38 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mongoid_atomic_votes
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Hck
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-10-23 00:00:00.000000000 Z
11
+ date: 2014-07-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: mongoid
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - '>='
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '3.0'
19
+ version: '4.0'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - '>='
24
+ - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: '3.0'
26
+ version: '4.0'
27
27
  description: Atomic votes for mongoid models
28
28
  email:
29
29
  executables: []
30
30
  extensions: []
31
31
  extra_rdoc_files: []
32
32
  files:
33
- - .gitignore
34
- - .rspec
35
- - .travis.yml
33
+ - ".gitignore"
34
+ - ".rspec"
35
+ - ".travis.yml"
36
36
  - Gemfile
37
37
  - LICENSE
38
38
  - README.md
@@ -56,17 +56,17 @@ require_paths:
56
56
  - lib
57
57
  required_ruby_version: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - '>='
59
+ - - ">="
60
60
  - !ruby/object:Gem::Version
61
61
  version: '0'
62
62
  required_rubygems_version: !ruby/object:Gem::Requirement
63
63
  requirements:
64
- - - '>='
64
+ - - ">="
65
65
  - !ruby/object:Gem::Version
66
66
  version: '0'
67
67
  requirements: []
68
68
  rubyforge_project:
69
- rubygems_version: 2.1.5
69
+ rubygems_version: 2.2.2
70
70
  signing_key:
71
71
  specification_version: 4
72
72
  summary: Atomic votes implementation for mongoid