redmine_crm 0.0.26 → 0.0.27
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/doc/CHANGELOG +10 -2
- data/lib/redmine_crm/acts_as_votable/rcrm_acts_as_votable.rb +7 -3
- data/lib/redmine_crm/acts_as_votable/votable.rb +21 -14
- data/lib/redmine_crm/acts_as_votable/vote.rb +4 -3
- data/lib/redmine_crm/version.rb +1 -1
- data/redmine_crm.gemspec +3 -3
- data/test/acts_as_votable/votable_test.rb +30 -1
- data/test/schema.rb +1 -0
- metadata +6 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6525848b0cfe3df65dcbf1ea5903e2ec780ba6e2
|
4
|
+
data.tar.gz: 9ef776d6118e3998256da878882d7635c798306d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: dda3c0995a07c820d329891e3346a713ce561a2810b95cec21faee00457aaba9a068fa4f53df6008ed07ba03d39c929c972bf63f615dd57dacb4cb6eaee74c1f
|
7
|
+
data.tar.gz: 122d384d961f9724a3c696caa9178e977138180e4179d802e44bbd9ca685e9c113277deadf400c882421c5e99fd9d2a7a77e6c12c36a0ff60e4ce217e33feb6f
|
data/doc/CHANGELOG
CHANGED
@@ -1,8 +1,16 @@
|
|
1
1
|
== Redmine CRM gem changelog
|
2
2
|
|
3
3
|
Redmine crm gem - general functions for plugins (tags, vote, viewing, currency)
|
4
|
-
Copyright (C) 2011-
|
5
|
-
|
4
|
+
Copyright (C) 2011-2017 RedmineUP
|
5
|
+
https://www.redmineup.com/
|
6
|
+
|
7
|
+
== 2017-03-13 v0.0.27
|
8
|
+
|
9
|
+
* Added IP to Votes
|
10
|
+
|
11
|
+
== 2017-03-10 v0.0.26
|
12
|
+
|
13
|
+
* Liquid gem with base filters and drops for Redmine objects
|
6
14
|
|
7
15
|
== 2016-11-12 v0.0.24
|
8
16
|
|
@@ -35,6 +35,7 @@ module RedmineCrm
|
|
35
35
|
t.column :vote_flag, :boolean
|
36
36
|
t.column :vote_scope, :string
|
37
37
|
t.column :vote_weight, :integer
|
38
|
+
t.column :vote_ip, :string
|
38
39
|
|
39
40
|
t.timestamps
|
40
41
|
end
|
@@ -46,7 +47,8 @@ module RedmineCrm
|
|
46
47
|
:voter_type => :string,
|
47
48
|
:vote_flag => :boolean,
|
48
49
|
:vote_scope => :string,
|
49
|
-
:vote_weight => :integer
|
50
|
+
:vote_weight => :integer,
|
51
|
+
:vote_ip => :string
|
50
52
|
}
|
51
53
|
fields.each do |name, type|
|
52
54
|
if !self.connection.column_exists?(votes_name_table, name)
|
@@ -57,12 +59,14 @@ module RedmineCrm
|
|
57
59
|
end
|
58
60
|
|
59
61
|
if self.parent::VERSION::MAJOR < 4
|
60
|
-
create_index votes_name_table, [:votable_id, :votable_type]
|
61
|
-
create_index votes_name_table, [:voter_id, :voter_type]
|
62
|
+
create_index votes_name_table, [:votable_id, :votable_type, :vote_ip]
|
63
|
+
create_index votes_name_table, [:voter_id, :voter_type, :vote_ip]
|
62
64
|
end
|
63
65
|
|
64
66
|
create_index votes_name_table, [:voter_id, :voter_type, :vote_scope]
|
65
67
|
create_index votes_name_table, [:votable_id, :votable_type, :vote_scope]
|
68
|
+
create_index votes_name_table, [:voter_type, :vote_scope, :vote_ip]
|
69
|
+
create_index votes_name_table, [:votable_type, :vote_scope, :vote_ip]
|
66
70
|
end
|
67
71
|
|
68
72
|
def drop_votable_table(options = {})
|
@@ -71,16 +71,17 @@ module RedmineCrm
|
|
71
71
|
return false if options[:voter].nil?
|
72
72
|
|
73
73
|
# find the vote
|
74
|
-
|
75
|
-
|
76
|
-
|
74
|
+
vote_conditions = { :vote_scope => options[:vote_scope], :voter_type => options[:voter].class.base_class.name }
|
75
|
+
vote_conditions.merge!(options[:vote_by_ip] ? { :vote_ip => options[:vote_ip] } : { :voter_id => options[:voter].id} )
|
76
|
+
votes_for = find_votes_for(vote_conditions)
|
77
77
|
|
78
78
|
if votes_for.count == 0 || options[:duplicate]
|
79
79
|
# this voter has never voted
|
80
80
|
vote = RedmineCrm::ActsAsVotable::Vote.new(
|
81
81
|
:votable => self,
|
82
82
|
:voter => options[:voter],
|
83
|
-
:vote_scope => options[:vote_scope]
|
83
|
+
:vote_scope => options[:vote_scope],
|
84
|
+
:vote_ip => options[:vote_ip]
|
84
85
|
)
|
85
86
|
else
|
86
87
|
# this voter is potentially changing his vote
|
@@ -97,7 +98,7 @@ module RedmineCrm
|
|
97
98
|
if vote.save
|
98
99
|
self.vote_registered = true if last_update != vote.updated_at
|
99
100
|
update_cached_votes options[:vote_scope]
|
100
|
-
return
|
101
|
+
return vote
|
101
102
|
else
|
102
103
|
self.vote_registered = false
|
103
104
|
return false
|
@@ -105,10 +106,10 @@ module RedmineCrm
|
|
105
106
|
end
|
106
107
|
|
107
108
|
def unvote(args = {})
|
108
|
-
return false if args[:voter].nil?
|
109
|
-
|
110
|
-
|
111
|
-
|
109
|
+
return false if (!args[:vote_by_ip] && args[:voter].nil?) || (args[:vote_by_ip] && args[:vote_ip].nil?)
|
110
|
+
vote_conditions = { :vote_scope => args[:vote_scope], :voter_type => args[:voter].class.base_class.name }
|
111
|
+
vote_conditions.merge!(args[:vote_by_ip] ? { :vote_ip => args[:vote_ip] } : { :voter_id => args[:voter].id})
|
112
|
+
votes_for = find_votes_for(vote_conditions)
|
112
113
|
|
113
114
|
return true if votes_for.empty?
|
114
115
|
votes_for.each(&:destroy)
|
@@ -117,16 +118,22 @@ module RedmineCrm
|
|
117
118
|
true
|
118
119
|
end
|
119
120
|
|
120
|
-
def vote_up(voter, options
|
121
|
-
self.vote_by :voter => voter, :vote => true,
|
121
|
+
def vote_up(voter, options={})
|
122
|
+
self.vote_by :voter => voter, :vote => true,
|
123
|
+
:vote_scope => options[:vote_scope], :vote_weight => options[:vote_weight], :vote_ip => options[:vote_ip],
|
124
|
+
:vote_by_ip => options[:vote_by_ip]
|
122
125
|
end
|
123
126
|
|
124
|
-
def vote_down(voter, options
|
125
|
-
self.vote_by :voter => voter, :vote => false,
|
127
|
+
def vote_down(voter, options={})
|
128
|
+
self.vote_by :voter => voter, :vote => false,
|
129
|
+
:vote_scope => options[:vote_scope], :vote_weight => options[:vote_weight], :vote_ip => options[:vote_ip],
|
130
|
+
:vote_by_ip => options[:vote_by_ip]
|
126
131
|
end
|
127
132
|
|
128
133
|
def unvote_by(voter, options = {})
|
129
|
-
|
134
|
+
# Does not need vote_weight since the votes_for are anyway getting destroyed
|
135
|
+
self.unvote :voter => voter, :vote_scope => options[:vote_scope], :vote_ip => options[:vote_ip],
|
136
|
+
:vote_by_ip => options[:vote_by_ip]
|
130
137
|
end
|
131
138
|
|
132
139
|
def scope_cache_field(field, vote_scope)
|
@@ -7,9 +7,10 @@ module RedmineCrm
|
|
7
7
|
|
8
8
|
if defined?(ProtectedAttributes) || ::ActiveRecord::VERSION::MAJOR < 4
|
9
9
|
attr_accessible :votable_id, :votable_type,
|
10
|
-
|
11
|
-
|
12
|
-
|
10
|
+
:voter_id, :voter_type,
|
11
|
+
:votable, :voter,
|
12
|
+
:vote_flag, :vote_scope,
|
13
|
+
:vote_ip
|
13
14
|
end
|
14
15
|
|
15
16
|
belongs_to :votable, :polymorphic => true
|
data/lib/redmine_crm/version.rb
CHANGED
data/redmine_crm.gemspec
CHANGED
@@ -6,10 +6,10 @@ require 'redmine_crm/version'
|
|
6
6
|
Gem::Specification.new do |spec|
|
7
7
|
spec.name = "redmine_crm"
|
8
8
|
spec.version = RedmineCrm::VERSION
|
9
|
-
spec.authors = ["
|
9
|
+
spec.authors = ["RedmineUP"]
|
10
10
|
spec.email = ["support@redminecrm.com"]
|
11
|
-
spec.summary = %q{Common libraries for
|
12
|
-
spec.description = %q{Common libraries for
|
11
|
+
spec.summary = %q{Common libraries for RedmineUP plugins for Redmine}
|
12
|
+
spec.description = %q{Common libraries for RedmineUP plugins (www.redmineup.com) for Redmine. Requered Redmine from http://redmine.org}
|
13
13
|
spec.homepage = ""
|
14
14
|
spec.license = "GPL2"
|
15
15
|
|
@@ -1,7 +1,6 @@
|
|
1
1
|
require File.dirname(__FILE__) + '/../test_helper'
|
2
2
|
|
3
3
|
class VotableTest < ActiveSupport::TestCase
|
4
|
-
|
5
4
|
def votable
|
6
5
|
votables(:votable)
|
7
6
|
end
|
@@ -15,6 +14,36 @@ class VotableTest < ActiveSupport::TestCase
|
|
15
14
|
assert_equal votable.votes_for.size, 1
|
16
15
|
end
|
17
16
|
|
17
|
+
def test_have_vote_when_saved_by_id
|
18
|
+
votable.vote_by(:voter => voters(:voter), :vote => "yes", :vote_ip => '127.0.0.1')
|
19
|
+
assert_equal votable.votes_for.size, 1
|
20
|
+
assert_equal votable.votes_for.last.vote_ip, '127.0.0.1'
|
21
|
+
end
|
22
|
+
|
23
|
+
def test_voted_twice_by_one_ip
|
24
|
+
votable.vote_by(:voter => voters(:voter), :vote => "yes", :vote_ip => '127.0.0.1', :vote_by_ip => true)
|
25
|
+
votable.vote_by(:voter => voters(:voter), :vote => "no", :vote_ip => '127.0.0.1', :vote_by_ip => true)
|
26
|
+
assert_equal votable.votes_for.size, 1
|
27
|
+
end
|
28
|
+
|
29
|
+
def test_voted_twice_by_one_ip_with_duplicate_params
|
30
|
+
votable.vote_by(:voter => voters(:voter), :vote => "yes", :vote_ip => '127.0.0.1', :vote_by_ip => true)
|
31
|
+
votable.vote_by(:voter => voters(:voter), :vote => "no", :vote_ip => '127.0.0.1', :vote_by_ip => true, :duplicate => true)
|
32
|
+
assert_equal votable.votes_for.size, 2
|
33
|
+
end
|
34
|
+
|
35
|
+
def test_one_scoped_vote_by_ip_when_using_scope_by_same_person
|
36
|
+
votable.vote_by(:voter => voters(:voter), :vote => 'yes', :vote_scope => 'rank', :vote_ip => '127.0.0.1', :vote_by_ip => true)
|
37
|
+
votable.vote_by(:voter => voters(:voter), :vote => 'yes', :vote_scope => 'rank', :vote_ip => '127.0.0.1', :vote_by_ip => true)
|
38
|
+
assert_equal votable.find_votes_for(:vote_scope => 'rank').size, 1
|
39
|
+
end
|
40
|
+
|
41
|
+
def test_two_votes_for_when_voting_on_two_diff_scopes
|
42
|
+
votable.vote_by(:voter => voters(:voter), :vote => 'yes', :vote_scope => 'weekly_rank', :vote_ip => '127.0.0.1', :vote_by_ip => true)
|
43
|
+
votable.vote_by(:voter => voters(:voter), :vote => 'yes', :vote_scope => 'monthly_rank', :vote_ip => '127.0.0.1', :vote_by_ip => true)
|
44
|
+
assert_equal votable.votes_for.size, 2
|
45
|
+
end
|
46
|
+
|
18
47
|
def test_voted_twice_by_same_person
|
19
48
|
votable.vote_by(:voter => voters(:voter), :vote => "yes")
|
20
49
|
votable.vote_by(:voter => voters(:voter), :vote => "no")
|
data/test/schema.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: redmine_crm
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.27
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
|
-
-
|
7
|
+
- RedmineUP
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-03-
|
11
|
+
date: 2017-03-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: liquid
|
@@ -24,8 +24,8 @@ dependencies:
|
|
24
24
|
- - "<"
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: 2.6.4
|
27
|
-
description: Common libraries for
|
28
|
-
from http://redmine.org
|
27
|
+
description: Common libraries for RedmineUP plugins (www.redmineup.com) for Redmine.
|
28
|
+
Requered Redmine from http://redmine.org
|
29
29
|
email:
|
30
30
|
- support@redminecrm.com
|
31
31
|
executables: []
|
@@ -126,7 +126,7 @@ rubyforge_project:
|
|
126
126
|
rubygems_version: 2.4.5.2
|
127
127
|
signing_key:
|
128
128
|
specification_version: 4
|
129
|
-
summary: Common libraries for
|
129
|
+
summary: Common libraries for RedmineUP plugins for Redmine
|
130
130
|
test_files:
|
131
131
|
- test/acts_as_taggable/rcrm_acts_as_taggable_test.rb
|
132
132
|
- test/acts_as_taggable/tag_list_test.rb
|