voterable 0.0.4 → 0.0.5

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,3 +1,3 @@
1
1
  module Voterable # :nodoc:
2
- VERSION = "0.0.4"
2
+ VERSION = "0.0.5"
3
3
  end
@@ -3,10 +3,8 @@ module Voterable
3
3
  # A vote object represents a vote made on a voteable object by a voter
4
4
  #
5
5
  # Example:
6
- # == Vote.vote = :up
7
- # => :up
8
- # == Vote.vote
9
- # => :up
6
+ # Vote.vote = :up # => :up
7
+ # Vote.vote # => :up
10
8
  #
11
9
  # A vote belongs_to both a Voterable::Voter and a Voterable::Voteable
12
10
  #
@@ -82,10 +82,12 @@ module Voterable
82
82
  page = ( hsh[:page].to_i >= 1 ? hsh[:page].to_i : 1 )
83
83
  skip_count = (page-1)*hsh[:limit]
84
84
 
85
+ sorted = nil
86
+
85
87
  case hsh[:period]
86
88
  when :latest
87
89
  # return self.order_by(:created_at, :desc).page(hsh[:page]).per(hsh[:limit])
88
- return self.order_by(:created_at, :desc).skip(skip_count).limit(hsh[:limit])
90
+ sorted = self.order_by(:created_at, :desc).skip(skip_count).limit(hsh[:limit])
89
91
  when :all_time
90
92
  index = '0.'
91
93
  when :year
@@ -98,10 +100,10 @@ module Voterable
98
100
  index = '4.'
99
101
  end
100
102
 
101
- string = "tallys." + index + hsh[:tally_type].to_s
102
-
103
- #self.order_by(string,:desc).page(hsh[:page]).per(hsh[:limit]) #.where(:tallys.exists => true)
104
- sorted = self.order_by(string,:desc).skip(skip_count).limit(hsh[:limit]) #.where(:tallys.exists => true)
103
+ unless sorted
104
+ string = "tallys." + index + hsh[:tally_type].to_s
105
+ sorted = self.order_by(string,:desc).skip(skip_count).limit(hsh[:limit]) #.where(:tallys.exists => true)
106
+ end
105
107
 
106
108
  # Array into the class and add necessary methods for pagination
107
109
  sorted.instance_variable_set("@current_page", page)
@@ -131,7 +133,9 @@ module Voterable
131
133
 
132
134
  # Vote the voteable thing up or down
133
135
  #
134
- # @parma [ vtr ] voter object that will be doing the voting
136
+ # @parma [ Voterable::Voter ] voter Voter that will be doing the voting
137
+ # @param [ Symbol ] value Value of the vote, either :up or :down
138
+ #
135
139
  # @return [ vote ] vote that was cast
136
140
  def vote(vtr, value)
137
141
 
@@ -15,15 +15,22 @@ module Voterable
15
15
 
16
16
  field :reputation, :type => Integer, default: 0
17
17
 
18
+ # Vote on voteable thing
19
+ #
20
+ # @example Current user voting on an emoticon
21
+ # current_user.vote(emoticon, :up)
22
+ #
23
+ # @param [ Voterable::Voteable ] voteable The thing that is being voted on
24
+ # @param [ Symbol ] value The vote value either :up or :down
18
25
  def vote(voteable, value)
19
26
  voteable.vote(self, value)
20
27
  end
21
28
 
22
29
  ##
23
30
  # Retuns the number of votes cast by user
24
- # Example:
25
- # >> a_voter.vote_count([1.days_in_seconds, 5.days_in_seconds])
26
- # => 10
31
+ # @example:
32
+ # a_voter.vote_count([1.days_in_seconds, 5.days_in_seconds])
33
+ # 10
27
34
  # Arguments:
28
35
  # period: (array) time between which votes are counted, going backwards from now
29
36
  #
@@ -34,6 +41,11 @@ module Voterable
34
41
  self.votes.where(:updated_at.lte => time_2).and(:updated_at.gte => time_1).count
35
42
  end
36
43
 
44
+ # Recalculates user's reputation
45
+ #
46
+ # @example recalculating a current_user's reputation
47
+ # current_user.calculate_reputation
48
+ #
37
49
  def calculate_reputation
38
50
  #Contributed things
39
51
  # sum = self.things.count + self.things.count
@@ -8,9 +8,9 @@ describe Voterable::Voteable do #:nodoc: all
8
8
 
9
9
  before(:each) do
10
10
  @voter = Factory(:voter)
11
- @third = Factory.create(:voteable, :point => -1)
12
- @first = Factory.create(:voteable, :point => 99)
13
- @second = Factory.create(:voteable) #Should Assume 0 points
11
+ @third = Factory.create(:voteable, :point => -1, :created_at => 2)
12
+ @first = Factory.create(:voteable, :point => 99, :created_at => 1)
13
+ @second = Factory.create(:voteable, :created_at => 0) #Should Assume 0 points
14
14
  end
15
15
 
16
16
  it{@third.point.should == -1}
@@ -34,6 +34,14 @@ describe Voterable::Voteable do #:nodoc: all
34
34
  it{@all[2].should == @third}
35
35
  end
36
36
 
37
+ context "when sorting by latest" do
38
+ before{@all = Voteable.sort_by(:period => :latest)}
39
+
40
+ it{@all[0].should == @third}
41
+ it{@all[1].should == @first}
42
+ it{@all[2].should == @second}
43
+ end
44
+
37
45
  describe "checking for correct pagination" do
38
46
 
39
47
  before(:each) do
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: voterable
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
4
+ version: 0.0.5
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2011-12-09 00:00:00.000000000Z
12
+ date: 2011-12-27 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: mongoid
16
- requirement: &70274674400260 !ruby/object:Gem::Requirement
16
+ requirement: &70137966354900 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - =
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: 2.3.0
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70274674400260
24
+ version_requirements: *70137966354900
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: bson
27
- requirement: &70274674399620 !ruby/object:Gem::Requirement
27
+ requirement: &70137966354280 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - =
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: 1.4.0
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *70274674399620
35
+ version_requirements: *70137966354280
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: bson_ext
38
- requirement: &70274674399020 !ruby/object:Gem::Requirement
38
+ requirement: &70137966353740 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - =
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: 1.4.0
44
44
  type: :runtime
45
45
  prerelease: false
46
- version_requirements: *70274674399020
46
+ version_requirements: *70137966353740
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: rspec
49
- requirement: &70274674398520 !ruby/object:Gem::Requirement
49
+ requirement: &70137966353360 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ! '>='
@@ -54,10 +54,10 @@ dependencies:
54
54
  version: '0'
55
55
  type: :development
56
56
  prerelease: false
57
- version_requirements: *70274674398520
57
+ version_requirements: *70137966353360
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: factory_girl
60
- requirement: &70274674397840 !ruby/object:Gem::Requirement
60
+ requirement: &70137966352800 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - ~>
@@ -65,10 +65,10 @@ dependencies:
65
65
  version: 2.1.0
66
66
  type: :development
67
67
  prerelease: false
68
- version_requirements: *70274674397840
68
+ version_requirements: *70137966352800
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: guard
71
- requirement: &70274674397300 !ruby/object:Gem::Requirement
71
+ requirement: &70137966352320 !ruby/object:Gem::Requirement
72
72
  none: false
73
73
  requirements:
74
74
  - - ! '>='
@@ -76,10 +76,10 @@ dependencies:
76
76
  version: '0'
77
77
  type: :development
78
78
  prerelease: false
79
- version_requirements: *70274674397300
79
+ version_requirements: *70137966352320
80
80
  - !ruby/object:Gem::Dependency
81
81
  name: guard-rspec
82
- requirement: &70274674396640 !ruby/object:Gem::Requirement
82
+ requirement: &70137966351580 !ruby/object:Gem::Requirement
83
83
  none: false
84
84
  requirements:
85
85
  - - ! '>='
@@ -87,10 +87,10 @@ dependencies:
87
87
  version: '0'
88
88
  type: :development
89
89
  prerelease: false
90
- version_requirements: *70274674396640
90
+ version_requirements: *70137966351580
91
91
  - !ruby/object:Gem::Dependency
92
92
  name: guard-spork
93
- requirement: &70274674396020 !ruby/object:Gem::Requirement
93
+ requirement: &70137966349520 !ruby/object:Gem::Requirement
94
94
  none: false
95
95
  requirements:
96
96
  - - ! '>='
@@ -98,10 +98,10 @@ dependencies:
98
98
  version: '0'
99
99
  type: :development
100
100
  prerelease: false
101
- version_requirements: *70274674396020
101
+ version_requirements: *70137966349520
102
102
  - !ruby/object:Gem::Dependency
103
103
  name: database_cleaner
104
- requirement: &70274674395420 !ruby/object:Gem::Requirement
104
+ requirement: &70137966347960 !ruby/object:Gem::Requirement
105
105
  none: false
106
106
  requirements:
107
107
  - - ! '>='
@@ -109,10 +109,10 @@ dependencies:
109
109
  version: '0'
110
110
  type: :development
111
111
  prerelease: false
112
- version_requirements: *70274674395420
112
+ version_requirements: *70137966347960
113
113
  - !ruby/object:Gem::Dependency
114
114
  name: rb-fsevent
115
- requirement: &70274674389380 !ruby/object:Gem::Requirement
115
+ requirement: &70137966345920 !ruby/object:Gem::Requirement
116
116
  none: false
117
117
  requirements:
118
118
  - - ! '>='
@@ -120,10 +120,10 @@ dependencies:
120
120
  version: '0'
121
121
  type: :development
122
122
  prerelease: false
123
- version_requirements: *70274674389380
123
+ version_requirements: *70137966345920
124
124
  - !ruby/object:Gem::Dependency
125
125
  name: growl
126
- requirement: &70274674388880 !ruby/object:Gem::Requirement
126
+ requirement: &70137966344500 !ruby/object:Gem::Requirement
127
127
  none: false
128
128
  requirements:
129
129
  - - ! '>='
@@ -131,10 +131,10 @@ dependencies:
131
131
  version: '0'
132
132
  type: :development
133
133
  prerelease: false
134
- version_requirements: *70274674388880
134
+ version_requirements: *70137966344500
135
135
  - !ruby/object:Gem::Dependency
136
136
  name: rdoc
137
- requirement: &70274674387240 !ruby/object:Gem::Requirement
137
+ requirement: &70137966343960 !ruby/object:Gem::Requirement
138
138
  none: false
139
139
  requirements:
140
140
  - - ! '>='
@@ -142,7 +142,7 @@ dependencies:
142
142
  version: '0'
143
143
  type: :development
144
144
  prerelease: false
145
- version_requirements: *70274674387240
145
+ version_requirements: *70137966343960
146
146
  description: Hackish implementaiton of voting on of voteable objects by a voter
147
147
  email:
148
148
  - benguest@gmail.com