redmine_crm 0.0.23 → 0.0.25
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.
- checksums.yaml +4 -4
- data/Gemfile +1 -1
- data/doc/CHANGELOG +4 -0
- data/lib/redmine_crm.rb +28 -20
- data/lib/redmine_crm/{rcrm_acts_as_taggable.rb → acts_as_taggable/rcrm_acts_as_taggable.rb} +93 -87
- data/lib/redmine_crm/acts_as_taggable/tag.rb +81 -0
- data/lib/redmine_crm/acts_as_taggable/tag_list.rb +111 -0
- data/lib/redmine_crm/acts_as_taggable/tagging.rb +16 -0
- data/lib/redmine_crm/acts_as_viewed/rcrm_acts_as_viewed.rb +274 -0
- data/lib/redmine_crm/{rcrm_acts_as_votable.rb → acts_as_votable/rcrm_acts_as_votable.rb} +8 -11
- data/lib/redmine_crm/acts_as_votable/rcrm_acts_as_voter.rb +20 -0
- data/lib/redmine_crm/{votable.rb → acts_as_votable/votable.rb} +36 -47
- data/lib/redmine_crm/{vote.rb → acts_as_votable/vote.rb} +7 -10
- data/lib/redmine_crm/{voter.rb → acts_as_votable/voter.rb} +29 -34
- data/lib/redmine_crm/currency/formatting.rb +0 -3
- data/lib/redmine_crm/currency/heuristics.rb +1 -1
- data/lib/redmine_crm/currency/loader.rb +1 -1
- data/lib/redmine_crm/helpers/tags_helper.rb +1 -3
- data/lib/redmine_crm/helpers/vote_helper.rb +29 -32
- data/lib/redmine_crm/liquid/drops/issues_drop.rb +66 -0
- data/lib/redmine_crm/liquid/drops/news_drop.rb +54 -0
- data/lib/redmine_crm/liquid/drops/projects_drop.rb +86 -0
- data/lib/redmine_crm/liquid/drops/users_drop.rb +72 -0
- data/lib/redmine_crm/liquid/filters/arrays.rb +178 -0
- data/lib/redmine_crm/liquid/filters/base.rb +208 -0
- data/lib/redmine_crm/version.rb +1 -1
- data/redmine_crm.gemspec +1 -1
- data/test/{acts_as_taggable_test.rb → acts_as_taggable/rcrm_acts_as_taggable_test.rb} +114 -151
- data/test/acts_as_taggable/tag_list_test.rb +38 -0
- data/test/acts_as_taggable/tag_test.rb +74 -0
- data/test/acts_as_taggable/tagging_test.rb +15 -0
- data/test/{viewed_test.rb → acts_as_viewed/rcrm_acts_as_viewed_test.rb} +17 -15
- data/test/{votable_test.rb → acts_as_votable/rcrm_acts_as_votable_test.rb} +3 -3
- data/test/acts_as_votable/rcrm_acts_as_voter_test.rb +12 -0
- data/test/{votable_model_test.rb → acts_as_votable/votable_test.rb} +4 -4
- data/test/{voter_model_test.rb → acts_as_votable/voter_test.rb} +7 -7
- data/test/currency_test.rb +10 -10
- data/test/fixtures/issue.rb +6 -2
- data/test/fixtures/issues.yml +13 -1
- data/test/fixtures/news.rb +3 -0
- data/test/fixtures/news.yml +8 -0
- data/test/fixtures/project.rb +8 -0
- data/test/fixtures/projects.yml +10 -0
- data/test/fixtures/user.rb +5 -1
- data/test/fixtures/users.yml +3 -2
- data/test/fixtures/vote_classes.rb +2 -3
- data/test/liquid/drops/issues_drop_test.rb +34 -0
- data/test/liquid/drops/liquid_test.rb +52 -0
- data/test/liquid/drops/news_drop_test.rb +38 -0
- data/test/liquid/drops/projects_drop_test.rb +44 -0
- data/test/liquid/drops/uses_drop_test.rb +36 -0
- data/test/liquid/filters/arrays_filter_test.rb +24 -0
- data/test/liquid/filters/base_filter_test.rb +63 -0
- data/test/liquid/liquid_helper.rb +32 -0
- data/test/money_helper_test.rb +5 -5
- data/test/schema.rb +21 -9
- data/test/test_helper.rb +26 -25
- metadata +76 -28
- data/lib/redmine_crm/rcrm_acts_as_viewed.rb +0 -287
- data/lib/redmine_crm/rcrm_acts_as_voter.rb +0 -27
- data/lib/redmine_crm/tag.rb +0 -81
- data/lib/redmine_crm/tag_list.rb +0 -112
- data/lib/redmine_crm/tagging.rb +0 -20
- data/test/tag_test.rb +0 -64
- data/test/tagging_test.rb +0 -14
@@ -3,32 +3,30 @@ require 'active_record'
|
|
3
3
|
module RedmineCrm
|
4
4
|
module ActsAsVotable #:nodoc:
|
5
5
|
module Votable #:nodoc:
|
6
|
-
|
7
6
|
def votable?
|
8
7
|
false
|
9
8
|
end
|
10
9
|
|
11
10
|
def rcrm_acts_as_votable
|
12
|
-
require 'redmine_crm/votable'
|
13
|
-
include ActsAsVotable::Votable
|
11
|
+
require 'redmine_crm/acts_as_votable/votable'
|
12
|
+
include RedmineCrm::ActsAsVotable::Votable
|
14
13
|
|
15
14
|
class_eval do
|
16
15
|
def self.votable?
|
17
16
|
true
|
18
17
|
end
|
19
18
|
end
|
20
|
-
|
21
19
|
end
|
22
20
|
|
23
21
|
def create_index(table_name, column_name)
|
24
22
|
return if self.connection.index_exists?(table_name, column_name)
|
25
|
-
|
23
|
+
|
26
24
|
self.connection.add_index table_name, column_name
|
27
25
|
end
|
28
26
|
|
29
|
-
def create_votable_table
|
27
|
+
def create_votable_table(options = {})
|
30
28
|
votes_name_table = options[:votes] || :votes
|
31
|
-
|
29
|
+
|
32
30
|
if !self.connection.table_exists?(votes_name_table)
|
33
31
|
self.connection.create_table(votes_name_table) do |t|
|
34
32
|
t.references :votable, :polymorphic => true
|
@@ -67,13 +65,12 @@ module RedmineCrm
|
|
67
65
|
create_index votes_name_table, [:votable_id, :votable_type, :vote_scope]
|
68
66
|
end
|
69
67
|
|
70
|
-
def drop_votable_table
|
71
|
-
votes_name_table
|
68
|
+
def drop_votable_table(options = {})
|
69
|
+
votes_name_table = options[:votes] || :votes
|
72
70
|
if self.connection.table_exists?(votes_name_table)
|
73
71
|
self.connection.drop_table votes_name_table
|
74
72
|
end
|
75
73
|
end
|
76
|
-
|
77
74
|
end
|
78
75
|
end
|
79
|
-
end
|
76
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module RedmineCrm
|
2
|
+
module ActsAsVotable
|
3
|
+
module Voter
|
4
|
+
def voter?
|
5
|
+
false
|
6
|
+
end
|
7
|
+
|
8
|
+
def rcrm_acts_as_voter(*args)
|
9
|
+
require 'redmine_crm/acts_as_votable/voter'
|
10
|
+
include RedmineCrm::ActsAsVotable::Voter
|
11
|
+
|
12
|
+
class_eval do
|
13
|
+
def self.voter?
|
14
|
+
true
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -3,11 +3,9 @@ require 'redmine_crm/helpers/vote_helper'
|
|
3
3
|
module RedmineCrm
|
4
4
|
module ActsAsVotable
|
5
5
|
module Votable
|
6
|
-
|
7
6
|
include ActsAsVotable::Helpers::Words
|
8
7
|
|
9
|
-
def self.included
|
10
|
-
|
8
|
+
def self.included(base)
|
11
9
|
# allow the user to define these himself
|
12
10
|
aliases = {
|
13
11
|
|
@@ -45,14 +43,13 @@ module RedmineCrm
|
|
45
43
|
alias_method(new_method, method)
|
46
44
|
end
|
47
45
|
end
|
48
|
-
|
49
46
|
end
|
50
47
|
end
|
51
48
|
|
52
49
|
attr_accessor :vote_registered
|
53
50
|
|
54
51
|
def vote_registered?
|
55
|
-
|
52
|
+
self.vote_registered
|
56
53
|
end
|
57
54
|
|
58
55
|
def default_conditions
|
@@ -63,8 +60,7 @@ module RedmineCrm
|
|
63
60
|
end
|
64
61
|
|
65
62
|
# voting
|
66
|
-
def vote_by
|
67
|
-
|
63
|
+
def vote_by(args = {})
|
68
64
|
options = {
|
69
65
|
:vote => true,
|
70
66
|
:vote_scope => nil
|
@@ -72,18 +68,14 @@ module RedmineCrm
|
|
72
68
|
|
73
69
|
self.vote_registered = false
|
74
70
|
|
75
|
-
if options[:voter].nil?
|
76
|
-
return false
|
77
|
-
end
|
71
|
+
return false if options[:voter].nil?
|
78
72
|
|
79
73
|
# find the vote
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
:voter_type => options[:voter].class.base_class.name
|
84
|
-
})
|
74
|
+
votes_for = find_votes_for(:voter_id => options[:voter].id,
|
75
|
+
:vote_scope => options[:vote_scope],
|
76
|
+
:voter_type => options[:voter].class.base_class.name)
|
85
77
|
|
86
|
-
if
|
78
|
+
if votes_for.count == 0 || options[:duplicate]
|
87
79
|
# this voter has never voted
|
88
80
|
vote = RedmineCrm::ActsAsVotable::Vote.new(
|
89
81
|
:votable => self,
|
@@ -92,14 +84,14 @@ module RedmineCrm
|
|
92
84
|
)
|
93
85
|
else
|
94
86
|
# this voter is potentially changing his vote
|
95
|
-
vote =
|
87
|
+
vote = votes_for.last
|
96
88
|
end
|
97
89
|
|
98
90
|
last_update = vote.updated_at
|
99
91
|
|
100
92
|
vote.vote_flag = votable_words.meaning_of(options[:vote])
|
101
93
|
|
102
|
-
#Allowing for a vote_weight to be associated with every vote. Could change with every voter object
|
94
|
+
# Allowing for a vote_weight to be associated with every vote. Could change with every voter object
|
103
95
|
vote.vote_weight = (options[:vote_weight].to_i if options[:vote_weight].present?) || 1
|
104
96
|
|
105
97
|
if vote.save
|
@@ -110,33 +102,34 @@ module RedmineCrm
|
|
110
102
|
self.vote_registered = false
|
111
103
|
return false
|
112
104
|
end
|
113
|
-
|
114
105
|
end
|
115
106
|
|
116
|
-
def unvote
|
107
|
+
def unvote(args = {})
|
117
108
|
return false if args[:voter].nil?
|
118
|
-
|
109
|
+
votes_for = find_votes_for(:voter_id => args[:voter].id,
|
110
|
+
:vote_scope => args[:vote_scope],
|
111
|
+
:voter_type => args[:voter].class.base_class.name)
|
119
112
|
|
120
|
-
return true if
|
121
|
-
|
113
|
+
return true if votes_for.empty?
|
114
|
+
votes_for.each(&:destroy)
|
122
115
|
update_cached_votes args[:vote_scope]
|
123
116
|
self.vote_registered = false if votes_for.count == 0
|
124
|
-
|
117
|
+
true
|
125
118
|
end
|
126
119
|
|
127
|
-
def vote_up
|
120
|
+
def vote_up(voter, options = {})
|
128
121
|
self.vote_by :voter => voter, :vote => true, :vote_scope => options[:vote_scope], :vote_weight => options[:vote_weight]
|
129
122
|
end
|
130
123
|
|
131
|
-
def vote_down
|
124
|
+
def vote_down(voter, options = {})
|
132
125
|
self.vote_by :voter => voter, :vote => false, :vote_scope => options[:vote_scope], :vote_weight => options[:vote_weight]
|
133
126
|
end
|
134
127
|
|
135
|
-
def unvote_by
|
136
|
-
self.unvote :voter => voter, :vote_scope => options[:vote_scope] #Does not need vote_weight since the votes_for are anyway getting destroyed
|
128
|
+
def unvote_by(voter, options = {})
|
129
|
+
self.unvote :voter => voter, :vote_scope => options[:vote_scope] # Does not need vote_weight since the votes_for are anyway getting destroyed
|
137
130
|
end
|
138
131
|
|
139
|
-
def scope_cache_field
|
132
|
+
def scope_cache_field(field, vote_scope)
|
140
133
|
return field if vote_scope.nil?
|
141
134
|
|
142
135
|
case field
|
@@ -172,8 +165,7 @@ module RedmineCrm
|
|
172
165
|
end
|
173
166
|
|
174
167
|
# caching
|
175
|
-
def update_cached_votes
|
176
|
-
|
168
|
+
def update_cached_votes(vote_scope = nil)
|
177
169
|
updates = {}
|
178
170
|
|
179
171
|
if self.respond_to?(:cached_votes_total=)
|
@@ -241,53 +233,50 @@ module RedmineCrm
|
|
241
233
|
end
|
242
234
|
|
243
235
|
if (::ActiveRecord::VERSION::MAJOR == 3) && (::ActiveRecord::VERSION::MINOR != 0)
|
244
|
-
self.update_attributes(updates, :without_protection => true) if updates.
|
236
|
+
self.update_attributes(updates, :without_protection => true) if !updates.empty?
|
245
237
|
else
|
246
|
-
self.update_attributes(updates) if updates.
|
238
|
+
self.update_attributes(updates) if !updates.empty?
|
247
239
|
end
|
248
|
-
|
249
240
|
end
|
250
241
|
|
251
|
-
|
252
242
|
# results
|
253
|
-
def find_votes_for
|
243
|
+
def find_votes_for(extra_conditions = {})
|
254
244
|
votes_for.where(extra_conditions)
|
255
245
|
end
|
256
246
|
|
257
|
-
def get_up_votes
|
247
|
+
def get_up_votes(options = {})
|
258
248
|
vote_scope_hash = scope_or_empty_hash(options[:vote_scope])
|
259
249
|
find_votes_for({:vote_flag => true}.merge(vote_scope_hash))
|
260
250
|
end
|
261
251
|
|
262
|
-
def get_down_votes
|
252
|
+
def get_down_votes(options = {})
|
263
253
|
vote_scope_hash = scope_or_empty_hash(options[:vote_scope])
|
264
|
-
find_votes_for({:vote_flag => false}.merge(vote_scope_hash))
|
254
|
+
find_votes_for({ :vote_flag => false }.merge(vote_scope_hash))
|
265
255
|
end
|
266
256
|
|
267
|
-
|
268
257
|
# counting
|
269
|
-
def count_votes_total
|
258
|
+
def count_votes_total(skip_cache = false, vote_scope = nil)
|
270
259
|
if !skip_cache && self.respond_to?(scope_cache_field :cached_votes_total, vote_scope)
|
271
260
|
return self.send(scope_cache_field :cached_votes_total, vote_scope)
|
272
261
|
end
|
273
262
|
find_votes_for(scope_or_empty_hash(vote_scope)).count
|
274
263
|
end
|
275
264
|
|
276
|
-
def count_votes_up
|
265
|
+
def count_votes_up(skip_cache = false, vote_scope = nil)
|
277
266
|
if !skip_cache && self.respond_to?(scope_cache_field :cached_votes_up, vote_scope)
|
278
267
|
return self.send(scope_cache_field :cached_votes_up, vote_scope)
|
279
268
|
end
|
280
269
|
get_up_votes(:vote_scope => vote_scope).count
|
281
270
|
end
|
282
271
|
|
283
|
-
def count_votes_down
|
272
|
+
def count_votes_down(skip_cache = false, vote_scope = nil)
|
284
273
|
if !skip_cache && self.respond_to?(scope_cache_field :cached_votes_down, vote_scope)
|
285
274
|
return self.send(scope_cache_field :cached_votes_down, vote_scope)
|
286
275
|
end
|
287
276
|
get_down_votes(:vote_scope => vote_scope).count
|
288
277
|
end
|
289
278
|
|
290
|
-
def weighted_total
|
279
|
+
def weighted_total(skip_cache = false, vote_scope = nil)
|
291
280
|
if !skip_cache && self.respond_to?(scope_cache_field :cached_weighted_total, vote_scope)
|
292
281
|
return self.send(scope_cache_field :cached_weighted_total, vote_scope)
|
293
282
|
end
|
@@ -296,7 +285,7 @@ module RedmineCrm
|
|
296
285
|
ups + downs
|
297
286
|
end
|
298
287
|
|
299
|
-
def weighted_score
|
288
|
+
def weighted_score(skip_cache = false, vote_scope = nil)
|
300
289
|
if !skip_cache && self.respond_to?(scope_cache_field :cached_weighted_score, vote_scope)
|
301
290
|
return self.send(scope_cache_field :cached_weighted_score, vote_scope)
|
302
291
|
end
|
@@ -305,7 +294,7 @@ module RedmineCrm
|
|
305
294
|
ups - downs
|
306
295
|
end
|
307
296
|
|
308
|
-
def weighted_average
|
297
|
+
def weighted_average(skip_cache = false, vote_scope = nil)
|
309
298
|
if !skip_cache && self.respond_to?(scope_cache_field :cached_weighted_average, vote_scope)
|
310
299
|
return self.send(scope_cache_field :cached_weighted_average, vote_scope)
|
311
300
|
end
|
@@ -319,7 +308,7 @@ module RedmineCrm
|
|
319
308
|
end
|
320
309
|
|
321
310
|
# voters
|
322
|
-
def voted_on_by?
|
311
|
+
def voted_on_by?(voter)
|
323
312
|
votes = find_votes_for :voter_id => voter.id, :voter_type => voter.class.base_class.name
|
324
313
|
votes.count > 0
|
325
314
|
end
|
@@ -3,28 +3,25 @@ require 'redmine_crm/helpers/vote_helper'
|
|
3
3
|
module RedmineCrm
|
4
4
|
module ActsAsVotable
|
5
5
|
class Vote < ActiveRecord::Base
|
6
|
-
|
7
6
|
include Helpers::Words
|
8
7
|
|
9
8
|
if defined?(ProtectedAttributes) || ::ActiveRecord::VERSION::MAJOR < 4
|
10
9
|
attr_accessible :votable_id, :votable_type,
|
11
|
-
|
12
|
-
|
13
|
-
|
10
|
+
:voter_id, :voter_type,
|
11
|
+
:votable, :voter,
|
12
|
+
:vote_flag, :vote_scope
|
14
13
|
end
|
15
14
|
|
16
15
|
belongs_to :votable, :polymorphic => true
|
17
16
|
belongs_to :voter, :polymorphic => true
|
18
17
|
|
19
|
-
scope :up, lambda{ where(:vote_flag => true) }
|
20
|
-
scope :down, lambda{ where(:vote_flag => false) }
|
21
|
-
scope :for_type, lambda{ |klass| where(:votable_type => klass) }
|
22
|
-
scope :by_type, lambda{ |klass| where(:voter_type => klass) }
|
18
|
+
scope :up, lambda { where(:vote_flag => true) }
|
19
|
+
scope :down, lambda { where(:vote_flag => false) }
|
20
|
+
scope :for_type, lambda { |klass| where(:votable_type => klass) }
|
21
|
+
scope :by_type, lambda { |klass| where(:voter_type => klass) }
|
23
22
|
|
24
23
|
validates_presence_of :votable_id
|
25
24
|
validates_presence_of :voter_id
|
26
|
-
|
27
25
|
end
|
28
|
-
|
29
26
|
end
|
30
27
|
end
|
@@ -1,9 +1,7 @@
|
|
1
1
|
module RedmineCrm
|
2
2
|
module ActsAsVotable
|
3
3
|
module Voter
|
4
|
-
|
5
4
|
def self.included(base)
|
6
|
-
|
7
5
|
# allow user to define these
|
8
6
|
aliases = {
|
9
7
|
:vote_up_for => [:likes, :upvotes, :up_votes],
|
@@ -18,7 +16,6 @@ module RedmineCrm
|
|
18
16
|
}
|
19
17
|
|
20
18
|
base.class_eval do
|
21
|
-
|
22
19
|
has_many :votes, :class_name => 'RedmineCrm::ActsAsVotable::Vote', :as => :voter, :dependent => :destroy do
|
23
20
|
def votables
|
24
21
|
includes(:votable).map(&:votable)
|
@@ -30,107 +27,105 @@ module RedmineCrm
|
|
30
27
|
alias_method(new_method, method)
|
31
28
|
end
|
32
29
|
end
|
33
|
-
|
34
30
|
end
|
35
|
-
|
36
31
|
end
|
37
32
|
|
38
33
|
# voting
|
39
|
-
def vote
|
40
|
-
args[:votable].vote_by args.merge(
|
34
|
+
def vote(args)
|
35
|
+
args[:votable].vote_by args.merge(:voter => self)
|
41
36
|
end
|
42
37
|
|
43
|
-
def vote_up_for
|
38
|
+
def vote_up_for(model = nil, args = {})
|
44
39
|
vote :votable => model, :vote_scope => args[:vote_scope], :vote => true
|
45
40
|
end
|
46
41
|
|
47
|
-
def vote_down_for
|
42
|
+
def vote_down_for(model = nil, args = {})
|
48
43
|
vote :votable => model, :vote_scope => args[:vote_scope], :vote => false
|
49
44
|
end
|
50
45
|
|
51
|
-
def unvote_for
|
46
|
+
def unvote_for(model, args = {})
|
52
47
|
model.unvote :voter => self, :vote_scope => args[:vote_scope]
|
53
48
|
end
|
54
49
|
|
55
50
|
# results
|
56
|
-
def voted_on?
|
51
|
+
def voted_on?(votable, args = {})
|
57
52
|
votes = find_votes(:votable_id => votable.id, :votable_type => votable.class.base_class.name,
|
58
53
|
:vote_scope => args[:vote_scope])
|
59
|
-
votes.
|
54
|
+
!votes.empty?
|
60
55
|
end
|
61
56
|
|
62
|
-
def voted_up_on?
|
57
|
+
def voted_up_on?(votable, args = {})
|
63
58
|
votes = find_votes(:votable_id => votable.id, :votable_type => votable.class.base_class.name,
|
64
59
|
:vote_scope => args[:vote_scope], :vote_flag => true)
|
65
|
-
votes.
|
60
|
+
!votes.empty?
|
66
61
|
end
|
67
62
|
|
68
|
-
def voted_down_on?
|
63
|
+
def voted_down_on?(votable, args = {})
|
69
64
|
votes = find_votes(:votable_id => votable.id, :votable_type => votable.class.base_class.name,
|
70
65
|
:vote_scope => args[:vote_scope], :vote_flag => false)
|
71
|
-
votes.
|
66
|
+
!votes.empty?
|
72
67
|
end
|
73
68
|
|
74
|
-
def voted_as_when_voting_on
|
69
|
+
def voted_as_when_voting_on(votable, args = {})
|
75
70
|
vote = find_votes(:votable_id => votable.id, :votable_type => votable.class.base_class.name,
|
76
|
-
|
71
|
+
:vote_scope => args[:vote_scope]).select(:vote_flag).last
|
77
72
|
return nil unless vote
|
78
|
-
|
73
|
+
vote.vote_flag
|
79
74
|
end
|
80
75
|
|
81
|
-
def find_votes
|
76
|
+
def find_votes(extra_conditions = {})
|
82
77
|
votes.where(extra_conditions)
|
83
78
|
end
|
84
79
|
|
85
|
-
def find_up_votes
|
80
|
+
def find_up_votes(args = {})
|
86
81
|
find_votes :vote_flag => true, :vote_scope => args[:vote_scope]
|
87
82
|
end
|
88
83
|
|
89
|
-
def find_down_votes
|
84
|
+
def find_down_votes(args = {})
|
90
85
|
find_votes :vote_flag => false, :vote_scope => args[:vote_scope]
|
91
86
|
end
|
92
87
|
|
93
|
-
def find_votes_for_class
|
94
|
-
find_votes extra_conditions.merge(
|
88
|
+
def find_votes_for_class(klass, extra_conditions = {})
|
89
|
+
find_votes extra_conditions.merge(:votable_type => klass.name)
|
95
90
|
end
|
96
91
|
|
97
|
-
def find_up_votes_for_class
|
92
|
+
def find_up_votes_for_class(klass, args = {})
|
98
93
|
find_votes_for_class klass, :vote_flag => true, :vote_scope => args[:vote_scope]
|
99
94
|
end
|
100
95
|
|
101
|
-
def find_down_votes_for_class
|
96
|
+
def find_down_votes_for_class(klass, args = {})
|
102
97
|
find_votes_for_class klass, :vote_flag => false, :vote_scope => args[:vote_scope]
|
103
98
|
end
|
104
99
|
|
105
100
|
# Including polymporphic relations for eager loading
|
106
101
|
def include_objects
|
107
|
-
ActsAsVotable::Vote.includes(:votable)
|
102
|
+
RedmineCrm::ActsAsVotable::Vote.includes(:votable)
|
108
103
|
end
|
109
104
|
|
110
|
-
def find_voted_items
|
105
|
+
def find_voted_items(extra_conditions = {})
|
111
106
|
options = extra_conditions.merge :voter_id => id, :voter_type => self.class.base_class.name
|
112
107
|
include_objects.where(options).collect(&:votable)
|
113
108
|
end
|
114
109
|
|
115
|
-
def find_up_voted_items
|
110
|
+
def find_up_voted_items(extra_conditions = {})
|
116
111
|
find_voted_items extra_conditions.merge(:vote_flag => true)
|
117
112
|
end
|
118
113
|
|
119
|
-
def find_down_voted_items
|
114
|
+
def find_down_voted_items(extra_conditions = {})
|
120
115
|
find_voted_items extra_conditions.merge(:vote_flag => false)
|
121
116
|
end
|
122
117
|
|
123
|
-
def get_voted
|
118
|
+
def get_voted(klass, extra_conditions = {})
|
124
119
|
klass.joins(:votes_for).merge find_votes(extra_conditions)
|
125
120
|
end
|
126
121
|
|
127
|
-
def get_up_voted
|
122
|
+
def get_up_voted(klass)
|
128
123
|
klass.joins(:votes_for).merge find_up_votes
|
129
124
|
end
|
130
125
|
|
131
|
-
def get_down_voted
|
126
|
+
def get_down_voted(klass)
|
132
127
|
klass.joins(:votes_for).merge find_down_votes
|
133
128
|
end
|
134
129
|
end
|
135
130
|
end
|
136
|
-
end
|
131
|
+
end
|