redmine_crm 0.0.23 → 0.0.53
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +4 -1
- data/README.md +166 -33
- data/Rakefile +3 -12
- data/app/controllers/redmine_crm_controller.rb +26 -0
- data/app/views/redmine_crm/_money.html.erb +44 -0
- data/app/views/redmine_crm/settings.html.erb +10 -0
- data/bitbucket-pipelines.yml +54 -0
- data/config/currency_iso.json +12 -0
- data/config/locales/en.yml +13 -0
- data/config/locales/ru.yml +13 -0
- data/config/routes.rb +5 -0
- data/doc/CHANGELOG +123 -2
- data/lib/redmine_crm/acts_as_draftable/draft.rb +40 -0
- data/lib/redmine_crm/acts_as_draftable/rcrm_acts_as_draftable.rb +172 -0
- data/lib/redmine_crm/acts_as_list/list.rb +282 -0
- data/lib/redmine_crm/{rcrm_acts_as_taggable.rb → acts_as_taggable/rcrm_acts_as_taggable.rb} +112 -93
- 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} +15 -14
- 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} +54 -65
- data/lib/redmine_crm/{vote.rb → acts_as_votable/vote.rb} +6 -8
- data/lib/redmine_crm/{voter.rb → acts_as_votable/voter.rb} +29 -34
- data/lib/redmine_crm/assets_manager.rb +43 -0
- data/lib/redmine_crm/colors_helper.rb +192 -0
- data/lib/redmine_crm/compatibility/application_controller_patch.rb +33 -0
- data/lib/redmine_crm/currency/formatting.rb +5 -8
- data/lib/redmine_crm/currency/heuristics.rb +1 -1
- data/lib/redmine_crm/currency/loader.rb +5 -6
- data/lib/redmine_crm/currency.rb +28 -17
- data/lib/redmine_crm/engine.rb +4 -0
- data/lib/redmine_crm/helpers/external_assets_helper.rb +19 -0
- data/lib/redmine_crm/helpers/form_tag_helper.rb +76 -0
- data/lib/redmine_crm/helpers/tags_helper.rb +1 -3
- data/lib/redmine_crm/helpers/vote_helper.rb +29 -32
- data/lib/redmine_crm/hooks/views_layouts_hook.rb +11 -0
- data/lib/redmine_crm/liquid/drops/issues_drop.rb +191 -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/time_entries_drop.rb +65 -0
- data/lib/redmine_crm/liquid/drops/users_drop.rb +68 -0
- data/lib/redmine_crm/liquid/filters/arrays.rb +187 -0
- data/lib/redmine_crm/liquid/filters/base.rb +217 -0
- data/lib/redmine_crm/liquid/filters/colors.rb +31 -0
- data/lib/redmine_crm/money_helper.rb +17 -18
- data/lib/redmine_crm/settings/money.rb +46 -0
- data/lib/redmine_crm/settings.rb +53 -0
- data/lib/redmine_crm/version.rb +1 -1
- data/lib/redmine_crm.rb +60 -21
- data/redmine_crm.gemspec +12 -6
- data/test/acts_as_draftable/draft_test.rb +29 -0
- data/test/acts_as_draftable/rcrm_acts_as_draftable_test.rb +178 -0
- data/test/{acts_as_taggable_test.rb → acts_as_taggable/rcrm_acts_as_taggable_test.rb} +117 -156
- data/test/acts_as_taggable/tag_list_test.rb +34 -0
- data/test/acts_as_taggable/tag_test.rb +72 -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/acts_as_votable/rcrm_acts_as_votable_test.rb +19 -0
- data/test/acts_as_votable/rcrm_acts_as_voter_test.rb +14 -0
- data/test/{votable_model_test.rb → acts_as_votable/votable_test.rb} +34 -5
- data/test/{voter_model_test.rb → acts_as_votable/voter_test.rb} +8 -8
- data/test/currency_test.rb +10 -10
- data/test/database.yml +14 -14
- data/test/fixtures/issues.yml +13 -1
- data/test/fixtures/news.yml +8 -0
- data/test/fixtures/projects.yml +10 -0
- data/test/fixtures/users.yml +6 -2
- data/test/liquid/drops/issues_drop_test.rb +34 -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 +31 -0
- data/test/liquid/filters/base_filter_test.rb +63 -0
- data/test/liquid/filters/colors_filter_test.rb +33 -0
- data/test/liquid/liquid_helper.rb +34 -0
- data/test/models/issue.rb +14 -0
- data/test/models/news.rb +3 -0
- data/test/models/project.rb +8 -0
- data/test/{fixtures → models}/user.rb +5 -1
- data/test/{fixtures → models}/vote_classes.rb +0 -21
- data/test/money_helper_test.rb +5 -5
- data/test/schema.rb +33 -10
- data/test/test_helper.rb +20 -72
- data/vendor/assets/images/money.png +0 -0
- data/vendor/assets/images/vcard.png +0 -0
- data/vendor/assets/javascripts/Chart.bundle.min.js +16 -0
- data/vendor/assets/javascripts/select2.js +2 -0
- data/vendor/assets/javascripts/select2_helpers.js +192 -0
- data/vendor/assets/stylesheets/money.css +3 -0
- data/vendor/assets/stylesheets/select2.css +424 -0
- metadata +190 -40
- 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/fixtures/issue.rb +0 -14
- data/test/tag_test.rb +0 -64
- data/test/tagging_test.rb +0 -14
- data/test/votable_test.rb +0 -17
@@ -0,0 +1,34 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../test_helper'
|
2
|
+
|
3
|
+
class LiquidRender
|
4
|
+
|
5
|
+
def initialize(drops = {})
|
6
|
+
@objects_hash = [
|
7
|
+
{'name' => 'one', "value" => 10},
|
8
|
+
{'name' => 'two', "value" => 5},
|
9
|
+
{'name' => 'blank', "value" => nil},
|
10
|
+
{'name' => 'three', "value" => 6}
|
11
|
+
]
|
12
|
+
@registers = {}
|
13
|
+
@assigns = {}
|
14
|
+
@assigns['objects_arr'] = @objects_hash
|
15
|
+
@assigns['issues'] = RedmineCrm::Liquid::IssuesDrop.new(Issue.all)
|
16
|
+
@assigns['now'] = Time.now
|
17
|
+
@assigns['today'] = Date.today.strftime(date_format)
|
18
|
+
drops.each do |key, drop|
|
19
|
+
@assigns[key] = drop
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def render(content)
|
24
|
+
::Liquid::Template.parse(content).render(::Liquid::Context.new({}, @assigns, @registers)).html_safe
|
25
|
+
rescue => e
|
26
|
+
e.message
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
module LiquidHelperMethods
|
31
|
+
def date_format
|
32
|
+
'%d.%m.%Y'
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
require_relative 'project'
|
2
|
+
require_relative 'user'
|
3
|
+
|
4
|
+
class Issue < ActiveRecord::Base
|
5
|
+
belongs_to :project
|
6
|
+
belongs_to :user
|
7
|
+
belongs_to :author, class_name: 'User'
|
8
|
+
|
9
|
+
rcrm_acts_as_draftable
|
10
|
+
rcrm_acts_as_taggable
|
11
|
+
rcrm_acts_as_viewed
|
12
|
+
|
13
|
+
scope :visible, lambda { where('1=1') }
|
14
|
+
end
|
data/test/models/news.rb
ADDED
@@ -2,10 +2,6 @@ class Voter < ActiveRecord::Base
|
|
2
2
|
rcrm_acts_as_voter
|
3
3
|
end
|
4
4
|
|
5
|
-
class NotVoter < ActiveRecord::Base
|
6
|
-
|
7
|
-
end
|
8
|
-
|
9
5
|
class Votable < ActiveRecord::Base
|
10
6
|
rcrm_acts_as_votable
|
11
7
|
validates_presence_of :name
|
@@ -31,24 +27,7 @@ class VotableChildOfStiNotVotable < StiNotVotable
|
|
31
27
|
rcrm_acts_as_votable
|
32
28
|
end
|
33
29
|
|
34
|
-
class NotVotable < ActiveRecord::Base
|
35
|
-
end
|
36
|
-
|
37
30
|
class VotableCache < ActiveRecord::Base
|
38
31
|
rcrm_acts_as_votable
|
39
32
|
validates_presence_of :name
|
40
33
|
end
|
41
|
-
|
42
|
-
class ABoringClass
|
43
|
-
def self.hw
|
44
|
-
'hello world'
|
45
|
-
end
|
46
|
-
end
|
47
|
-
|
48
|
-
|
49
|
-
# def clean_database
|
50
|
-
# models = [ActsAsVotable::Vote, Voter, NotVoter, Votable, NotVotable, VotableCache]
|
51
|
-
# models.each do |model|
|
52
|
-
# ActiveRecord::Base.connection.execute "DELETE FROM #{model.table_name}"
|
53
|
-
# end
|
54
|
-
# end
|
data/test/money_helper_test.rb
CHANGED
@@ -4,9 +4,9 @@ class MoneyHelperTest < ActiveSupport::TestCase
|
|
4
4
|
include RedmineCrm::MoneyHelper
|
5
5
|
|
6
6
|
def test_price_to_currency
|
7
|
-
assert_equal '$3,265.65', price_to_currency(3265.65,
|
8
|
-
assert_equal
|
9
|
-
assert_equal
|
10
|
-
assert_equal
|
7
|
+
assert_equal '$3,265.65', price_to_currency(3265.65, 'USD')
|
8
|
+
assert_equal '3.265,65 RUB', price_to_currency(3265.65, 'RUB')
|
9
|
+
assert_equal '3,200.0', price_to_currency(3200, '')
|
10
|
+
assert_equal '3,200.0', price_to_currency(3200, 'Foo')
|
11
11
|
end
|
12
|
-
end
|
12
|
+
end
|
data/test/schema.rb
CHANGED
@@ -1,26 +1,40 @@
|
|
1
|
-
ActiveRecord::Schema.define :
|
2
|
-
|
1
|
+
ActiveRecord::Schema.define version: 0 do
|
2
|
+
|
3
|
+
create_table :drafts, force: true do |t|
|
4
|
+
t.string :target_type
|
5
|
+
t.integer :target_id
|
6
|
+
t.references :project
|
7
|
+
t.references :user
|
8
|
+
t.references :parent, polymorphic: true
|
9
|
+
t.binary :data
|
10
|
+
t.datetime :updated_at
|
11
|
+
end
|
12
|
+
|
3
13
|
create_table "tags", :force => true do |t|
|
4
14
|
t.column "name", :string
|
5
15
|
end
|
6
|
-
|
16
|
+
|
7
17
|
create_table "taggings", :force => true do |t|
|
8
18
|
t.column "tag_id", :integer
|
9
19
|
t.column "taggable_id", :integer
|
10
20
|
t.column "taggable_type", :string
|
11
21
|
t.column "created_at", :datetime
|
12
22
|
end
|
13
|
-
|
23
|
+
|
14
24
|
|
15
25
|
create_table "users", :force => true do |t|
|
16
26
|
t.column "name", :string
|
27
|
+
t.column "language", :string
|
17
28
|
end
|
18
|
-
|
29
|
+
|
19
30
|
create_table "issues", :force => true do |t|
|
31
|
+
t.integer "project_id"
|
32
|
+
t.column "subject", :string
|
20
33
|
t.column "description", :string
|
21
34
|
t.column "closed", :boolean
|
22
35
|
t.column "cached_tag_list", :string
|
23
36
|
t.column "user_id", :integer
|
37
|
+
t.column "author_id", :integer
|
24
38
|
t.column "views", :integer, :default => 0
|
25
39
|
t.column "total_views", :integer, :default => 0
|
26
40
|
end
|
@@ -32,14 +46,23 @@ ActiveRecord::Schema.define :version => 0 do
|
|
32
46
|
t.boolean "vote_flag"
|
33
47
|
t.string "vote_scope"
|
34
48
|
t.integer "vote_weight"
|
49
|
+
t.string "vote_ip"
|
35
50
|
|
36
51
|
t.timestamps
|
37
52
|
end
|
38
53
|
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
54
|
+
create_table "news", :force => true do |t|
|
55
|
+
t.string "title"
|
56
|
+
t.text "description"
|
57
|
+
t.integer "author_id"
|
58
|
+
end
|
59
|
+
|
60
|
+
create_table "projects", :force => true do |t|
|
61
|
+
t.string "name"
|
62
|
+
t.text "description"
|
63
|
+
t.string "identifier"
|
64
|
+
t.integer "status"
|
65
|
+
end
|
43
66
|
|
44
67
|
create_table :voters, :force => true do |t|
|
45
68
|
t.string :name
|
@@ -97,4 +120,4 @@ ActiveRecord::Schema.define :version => 0 do
|
|
97
120
|
t.column :ip, :string, :limit => '24'
|
98
121
|
t.column :created_at, :datetime
|
99
122
|
end
|
100
|
-
end
|
123
|
+
end
|
data/test/test_helper.rb
CHANGED
@@ -1,50 +1,24 @@
|
|
1
|
+
require 'rails/all'
|
2
|
+
require 'redmine_crm'
|
1
3
|
require 'minitest/autorun'
|
2
|
-
# require 'test/unit'
|
3
|
-
|
4
|
-
begin
|
5
|
-
require File.dirname(__FILE__) + '/../../../../config/environment'
|
6
|
-
rescue LoadError
|
7
|
-
require 'rubygems'
|
8
|
-
gem 'activerecord'
|
9
|
-
gem 'actionpack'
|
10
|
-
require 'active_record'
|
11
|
-
# require 'action_controller'
|
12
|
-
end
|
13
|
-
require 'byebug'
|
14
|
-
require "redmine_crm"
|
15
|
-
require "active_record/fixtures"
|
16
|
-
|
17
|
-
require File.dirname(__FILE__) + '/../lib/redmine_crm/rcrm_acts_as_taggable'
|
18
|
-
require File.dirname(__FILE__) + '/../lib/redmine_crm/tag_list'
|
19
|
-
require File.dirname(__FILE__) + '/../lib/redmine_crm/tag'
|
20
|
-
require File.dirname(__FILE__) + '/../lib/redmine_crm/tagging'
|
21
|
-
require File.dirname(__FILE__) + '/../lib/redmine_crm/helpers/tags_helper'
|
22
|
-
require File.dirname(__FILE__) + '/../lib/redmine_crm/rcrm_acts_as_votable'
|
23
|
-
require File.dirname(__FILE__) + '/../lib/redmine_crm/rcrm_acts_as_voter'
|
24
|
-
|
25
|
-
# require_dependency File.dirname(__FILE__) + '/../lib/redmine_crm/tags_helper'
|
26
4
|
|
27
5
|
ActiveRecord::Base.logger = Logger.new(File.dirname(__FILE__) + '/debug.log')
|
28
|
-
ActiveRecord::Base.configurations = YAML
|
29
|
-
ActiveRecord::Base.establish_connection(ENV['DB'] ||
|
6
|
+
ActiveRecord::Base.configurations = YAML.load_file(File.dirname(__FILE__) + '/database.yml')
|
7
|
+
ActiveRecord::Base.establish_connection(ENV['DB'].try(:to_sym) || :sqlite)
|
30
8
|
|
31
9
|
load(File.dirname(__FILE__) + '/schema.rb')
|
32
|
-
|
33
|
-
load(File.dirname(__FILE__) + '/fixtures/issue.rb')
|
34
|
-
load(File.dirname(__FILE__) + "/fixtures/vote_classes.rb")
|
35
|
-
|
36
|
-
# Dir["/fixtures/*.rb"].each{|file| load file}
|
10
|
+
Dir.glob(File.expand_path('../models/*.rb', __FILE__)).each { |f| require f }
|
37
11
|
|
38
12
|
class ActiveSupport::TestCase #:nodoc:
|
39
13
|
include ActiveRecord::TestFixtures
|
40
|
-
|
41
|
-
self.fixture_path = File.dirname(__FILE__) +
|
42
|
-
|
43
|
-
self.
|
44
|
-
self.use_instantiated_fixtures
|
45
|
-
set_fixture_class :tags => RedmineCrm::Tag
|
46
|
-
set_fixture_class :taggings => RedmineCrm::Tagging
|
47
|
-
|
14
|
+
|
15
|
+
self.fixture_path = File.dirname(__FILE__) + '/fixtures/'
|
16
|
+
|
17
|
+
self.use_transactional_tests = true if RUBY_VERSION > '1.9.3'
|
18
|
+
self.use_instantiated_fixtures = false
|
19
|
+
set_fixture_class :tags => RedmineCrm::ActsAsTaggable::Tag
|
20
|
+
set_fixture_class :taggings => RedmineCrm::ActsAsTaggable::Tagging
|
21
|
+
|
48
22
|
set_fixture_class :votable_caches => VotableCache
|
49
23
|
fixtures :all
|
50
24
|
|
@@ -62,57 +36,31 @@ class ActiveSupport::TestCase #:nodoc:
|
|
62
36
|
hash[tags(tag).name] = count
|
63
37
|
hash
|
64
38
|
end
|
65
|
-
|
39
|
+
|
66
40
|
tags.each do |tag|
|
67
41
|
value = expected_values.delete(tag.name)
|
68
|
-
|
42
|
+
|
69
43
|
assert_not_nil value, "Expected count for #{tag.name} was not provided"
|
70
44
|
assert_equal value, tag.count, "Expected value of #{value} for #{tag.name}, but was #{tag.count}"
|
71
45
|
end
|
72
|
-
|
46
|
+
|
73
47
|
unless expected_values.empty?
|
74
48
|
assert false, "The following tag counts were not present: #{expected_values.inspect}"
|
75
49
|
end
|
76
50
|
end
|
77
51
|
|
78
|
-
# def assert_queries(num = 1)
|
79
|
-
# $query_count = 0
|
80
|
-
# yield
|
81
|
-
# ensure
|
82
|
-
# assert_equal num, $query_count, "#{$query_count} instead of #{num} queries were executed."
|
83
|
-
# end
|
84
|
-
|
85
|
-
# def assert_queries(num = 1, options = {})
|
86
|
-
# ignore_none = options.fetch(:ignore_none) { num == :any }
|
87
|
-
# SQLCounter.clear_log
|
88
|
-
# yield
|
89
|
-
# ensure
|
90
|
-
# the_log = ignore_none ? SQLCounter.log_all : SQLCounter.log
|
91
|
-
# if num == :any
|
92
|
-
# assert_operator the_log.size, :>=, 1, "1 or more queries expected, but none were executed."
|
93
|
-
# else
|
94
|
-
# mesg = "#{the_log.size} instead of #{num} queries were executed.#{the_log.size == 0 ? '' : "\nQueries:\n#{the_log.join("\n")}"}"
|
95
|
-
# assert_equal num, the_log.size, mesg
|
96
|
-
# end
|
97
|
-
# end
|
98
|
-
|
99
|
-
def assert_no_queries(&block)
|
100
|
-
assert_queries(0, &block)
|
101
|
-
end
|
102
|
-
|
103
52
|
# From Rails trunk
|
104
53
|
def assert_difference(expressions, difference = 1, message = nil, &block)
|
105
|
-
expression_evaluations = [expressions].flatten.collect{|expression| lambda { eval(expression, block.binding) } }
|
106
|
-
|
54
|
+
expression_evaluations = [expressions].flatten.collect{ |expression| lambda { eval(expression, block.binding) } }
|
55
|
+
|
107
56
|
original_values = expression_evaluations.inject([]) { |memo, expression| memo << expression.call }
|
108
57
|
yield
|
109
58
|
expression_evaluations.each_with_index do |expression, i|
|
110
59
|
assert_equal original_values[i] + difference, expression.call, message
|
111
60
|
end
|
112
61
|
end
|
113
|
-
|
62
|
+
|
114
63
|
def assert_no_difference(expressions, message = nil, &block)
|
115
64
|
assert_difference expressions, 0, message, &block
|
116
65
|
end
|
117
|
-
|
118
|
-
end
|
66
|
+
end
|
Binary file
|
Binary file
|