redmineup 1.1.3 → 1.1.11
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/.gitignore +1 -0
- data/.gitlab-ci.yml +7 -17
- data/README.md +74 -153
- data/app/assets/javascripts/consumer.js +37 -60
- data/app/assets/javascripts/consumer_worker.js +199 -0
- data/app/assets/javascripts/jquery.colorPicker.min.js +26 -0
- data/app/assets/javascripts/select2_helpers.js +10 -0
- data/app/assets/stylesheets/redmineup.css +509 -0
- data/app/views/redmineup/_additional_assets.html.erb +1 -0
- data/config/locales/en.yml +1 -0
- data/config/locales/ru.yml +1 -0
- data/config/routes.rb +4 -0
- data/doc/CHANGELOG +72 -25
- data/doc/active-record-mixins.md +156 -0
- data/doc/assets-money-and-utilities.md +71 -0
- data/doc/tagging-and-select2.md +108 -0
- data/lib/action_cable/connection/rup_connection.rb +17 -0
- data/lib/action_cable/server/rup_server.rb +4 -0
- data/lib/redmineup/acts_as_taggable/tag.rb +13 -3
- data/lib/redmineup/acts_as_taggable/up_acts_as_taggable.rb +9 -6
- data/lib/redmineup/acts_as_viewed/up_acts_as_viewed.rb +1 -1
- data/lib/redmineup/engine.rb +12 -2
- data/lib/redmineup/helpers/datetime_helper.rb +23 -0
- data/lib/redmineup/helpers/external_assets_helper.rb +14 -6
- data/lib/redmineup/helpers/form_tag_helper.rb +43 -0
- data/lib/redmineup/helpers/tags_helper.rb +41 -0
- data/lib/redmineup/hooks/views_layouts_hook.rb +1 -5
- data/lib/redmineup/money_helper.rb +10 -2
- data/lib/redmineup/patches/action_cable_base_patch.rb +9 -2
- data/lib/redmineup/patches/action_cable_patch.rb +2 -4
- data/lib/redmineup/patches/auto_completes_controller_patch.rb +19 -0
- data/lib/redmineup/patches/compatibility/sprite_patch.rb +1 -1
- data/lib/redmineup/patches/compatibility/user_patch.rb +3 -3
- data/lib/redmineup/version.rb +1 -1
- data/lib/redmineup.rb +16 -35
- data/test/acts_as_taggable/tag_test.rb +12 -9
- data/test/schema.rb +1 -1
- data/test/tags_helper_view_test.rb +41 -0
- data/test/test_helper.rb +2 -1
- metadata +14 -2
|
@@ -18,6 +18,7 @@ module Redmineup
|
|
|
18
18
|
# * <tt>:allow_clear</tt> Provides support for clearable selections. Default value false.
|
|
19
19
|
# * <tt>:min_input_length</tt> Minimum number of characters required to start a search. Default value 0.
|
|
20
20
|
# * <tt>:format_state</tt> Defines template of search results in the drop-down.
|
|
21
|
+
# * <tt>:on_select</tt> Global JS callback name bound to `select2:select` event.
|
|
21
22
|
# * <tt>:tags</tt> Used to enable tagging feature.
|
|
22
23
|
#
|
|
23
24
|
# <b>Note:</b> The HTML specification says when +multiple+ parameter passed to select and all options got deselected
|
|
@@ -49,6 +50,31 @@ module Redmineup
|
|
|
49
50
|
|
|
50
51
|
alias select2 select2_tag
|
|
51
52
|
|
|
53
|
+
# Renders a select2 tag field for a tag list (standalone, no form object).
|
|
54
|
+
# Analogous to text_field_tag.
|
|
55
|
+
#
|
|
56
|
+
# ==== Example
|
|
57
|
+
# tag_list_field_tag 'entry[tag_list]', entry.tag_list,
|
|
58
|
+
# url: auto_complete_taggable_tags_path(taggable_type: 'DriveEntry')
|
|
59
|
+
def tag_list_field_tag(name, value = [], options = {})
|
|
60
|
+
url = options.delete(:url)
|
|
61
|
+
taggable_type = options.delete(:taggable_type)
|
|
62
|
+
width = options.delete(:width)
|
|
63
|
+
project_id = options.delete(:project_id)
|
|
64
|
+
placeholder = options.delete(:placeholder)
|
|
65
|
+
select2_tag(
|
|
66
|
+
name,
|
|
67
|
+
options_for_select(value, value),
|
|
68
|
+
{
|
|
69
|
+
multiple: true,
|
|
70
|
+
width: width || '95%',
|
|
71
|
+
url: url || auto_complete_taggable_tags_path(taggable_type: taggable_type, project_id: project_id),
|
|
72
|
+
placeholder: placeholder || l(:lable_redmineup_add_tag),
|
|
73
|
+
tags: true
|
|
74
|
+
}.merge(options)
|
|
75
|
+
)
|
|
76
|
+
end
|
|
77
|
+
|
|
52
78
|
# Transforms select filters of +type+ fields into select2
|
|
53
79
|
#
|
|
54
80
|
# ==== Examples
|
|
@@ -86,3 +112,20 @@ module Redmineup
|
|
|
86
112
|
|
|
87
113
|
end
|
|
88
114
|
end
|
|
115
|
+
|
|
116
|
+
# Extends Rails FormBuilder with tag_list_field, analogous to f.text_field.
|
|
117
|
+
#
|
|
118
|
+
# ==== Example
|
|
119
|
+
# <%= f.tag_list_field :tag_list %>
|
|
120
|
+
ActionView::Helpers::FormBuilder.class_eval do
|
|
121
|
+
def tag_list_field(method, **options)
|
|
122
|
+
url = options.fetch(:url) {
|
|
123
|
+
@template.auto_complete_taggable_tags_path(taggable_type: @object.class.name)
|
|
124
|
+
}
|
|
125
|
+
@template.tag_list_field_tag(
|
|
126
|
+
"#{@object_name}[#{method}]",
|
|
127
|
+
@object.public_send(method),
|
|
128
|
+
{url: url}.merge(options.except(:url))
|
|
129
|
+
)
|
|
130
|
+
end
|
|
131
|
+
end
|
|
@@ -9,5 +9,46 @@ module Redmineup
|
|
|
9
9
|
yield tag, classes[index]
|
|
10
10
|
end
|
|
11
11
|
end
|
|
12
|
+
|
|
13
|
+
def tag_link(url, tag_name, options = {})
|
|
14
|
+
count = options.delete(:count)
|
|
15
|
+
inner = link_to(tag_name, url, options)
|
|
16
|
+
inner << content_tag('span', "(#{count})", class: 'tag-count') if count
|
|
17
|
+
css = monochrome? ? 'tag-label' : 'tag-label-color'
|
|
18
|
+
style = monochrome? ? {} : { style: "background-color: #{Redmineup::ActsAsTaggable::Tag.color_from_name(tag_name)}" }
|
|
19
|
+
content_tag(:span, inner, { class: css }.merge(style))
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def tag_separator
|
|
23
|
+
monochrome? ? ', ' : ' '
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def monochrome?
|
|
27
|
+
@monochrome ||= defined?(RedmineupTags) && !RedmineupTags.use_colors?
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def tag_links(tag_list, options = {}, &url_block)
|
|
31
|
+
return if tag_list.blank?
|
|
32
|
+
content_tag(:span, class: 'tag_list') do
|
|
33
|
+
safe_join(tag_list.map { |tag| tag_link(url_block.call(tag), tag, options.dup) }, tag_separator)
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
# Renders span.tag_list from an array of tag objects (respond to .name and .count).
|
|
38
|
+
# Resolves URL via `{key}_tag_url(name)` in the current view context.
|
|
39
|
+
#
|
|
40
|
+
# tag_cloud_links(contact.available_tags, :contact) # → contact_tag_url(name)
|
|
41
|
+
# tag_cloud_links(tags_cloud, :people) # → people_tag_url(name)
|
|
42
|
+
def tag_cloud_links(tags, key, options = {})
|
|
43
|
+
return if tags.blank?
|
|
44
|
+
url_method = :"#{key}_tag_url"
|
|
45
|
+
raise NoMethodError, "#{url_method} is not defined in view context" unless respond_to?(url_method, true)
|
|
46
|
+
content_tag(:span, class: 'tag_list') do
|
|
47
|
+
safe_join(tags.map { |tag|
|
|
48
|
+
tag_link(send(url_method, tag.name), tag.name, options.merge(count: tag.count).dup)
|
|
49
|
+
}, tag_separator)
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
|
|
12
53
|
end
|
|
13
54
|
end
|
|
@@ -3,11 +3,7 @@
|
|
|
3
3
|
module Redmineup
|
|
4
4
|
module Hooks
|
|
5
5
|
class ViewsLayoutsHook < Redmine::Hook::ViewListener
|
|
6
|
-
|
|
7
|
-
stylesheet_link_tag(:calendars, plugin: 'redmineup') +
|
|
8
|
-
stylesheet_link_tag(:money, plugin: 'redmineup') +
|
|
9
|
-
javascript_include_tag(:consumer, plugin: 'redmineup')
|
|
10
|
-
end
|
|
6
|
+
render_on :view_layouts_base_html_head, partial: 'redmineup/additional_assets'
|
|
11
7
|
end
|
|
12
8
|
end
|
|
13
9
|
end
|
|
@@ -8,11 +8,19 @@ module Redmineup
|
|
|
8
8
|
price_to_currency(obj.try(price_field), obj.currency, options).to_s if obj.respond_to?(:currency)
|
|
9
9
|
end
|
|
10
10
|
|
|
11
|
-
def
|
|
11
|
+
def prices_formatted_collection(prices_collection, options = {})
|
|
12
12
|
return [] if prices_collection.blank? || prices_collection == 0
|
|
13
13
|
prices = prices_collection
|
|
14
14
|
prices.reject!{|k, v| v.to_i == 0} if options[:hide_zeros]
|
|
15
|
-
prices.
|
|
15
|
+
prices.map { |k, v| price_to_currency(v, k, symbol: true) }.compact
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def prices_collection_by_currency(prices_collection, options = {})
|
|
19
|
+
formatted_prices = prices_formatted_collection(prices_collection, options)
|
|
20
|
+
|
|
21
|
+
formatted_prices.map do |formatted_price|
|
|
22
|
+
content_tag(:span, formatted_price, :style => "white-space: nowrap;")
|
|
23
|
+
end
|
|
16
24
|
end
|
|
17
25
|
|
|
18
26
|
def deal_currency_icon(currency)
|
|
@@ -7,8 +7,15 @@ module Redmineup
|
|
|
7
7
|
end
|
|
8
8
|
|
|
9
9
|
module ClassMethods
|
|
10
|
-
def rup_broadcast_to(
|
|
11
|
-
|
|
10
|
+
def rup_broadcast_to(*args)
|
|
11
|
+
# TODO: Remove to 2 args after plugins update
|
|
12
|
+
if args.length == 3
|
|
13
|
+
klass, model, message = args
|
|
14
|
+
ActionCable.rup_server(klass).broadcast(broadcasting_for(model), message)
|
|
15
|
+
else
|
|
16
|
+
model, message = args
|
|
17
|
+
ActionCable.rup_server.broadcast(broadcasting_for(model), message)
|
|
18
|
+
end
|
|
12
19
|
end
|
|
13
20
|
end
|
|
14
21
|
end
|
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
module Redmineup
|
|
2
2
|
module Patches
|
|
3
3
|
module ActionCablePatch
|
|
4
|
-
|
|
5
4
|
def self.included(base)
|
|
6
5
|
base.class_eval do
|
|
7
|
-
module_function def rup_server(klass =
|
|
6
|
+
module_function def rup_server(klass = 'ActionCable::Connection::RupConnection')
|
|
8
7
|
@rup_servers ||= {}
|
|
9
8
|
return @rup_servers[klass] if @rup_servers[klass]
|
|
10
9
|
|
|
@@ -14,10 +13,9 @@ module Redmineup
|
|
|
14
13
|
end
|
|
15
14
|
end
|
|
16
15
|
end
|
|
17
|
-
|
|
18
16
|
end
|
|
19
17
|
end
|
|
20
18
|
|
|
21
19
|
unless ActionCable.included_modules.include?(Redmineup::Patches::ActionCablePatch)
|
|
22
|
-
ActionCable.
|
|
20
|
+
ActionCable.include Redmineup::Patches::ActionCablePatch
|
|
23
21
|
end
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
module Redmineup
|
|
2
|
+
module Patches
|
|
3
|
+
module AutoCompletesControllerPatch
|
|
4
|
+
DEFAULT_TAGS_LIMIT = 10
|
|
5
|
+
|
|
6
|
+
def taggable_tags
|
|
7
|
+
limit = params.delete(:limit) || DEFAULT_TAGS_LIMIT
|
|
8
|
+
klass = Object.const_get(params[:taggable_type].camelcase) if params[:taggable_type].present?
|
|
9
|
+
|
|
10
|
+
tags = klass && klass.available_tags(params.merge(limit: limit, name_like: params[:q])) || Redmineup::ActsAsTaggable::Tag.limit(limit)
|
|
11
|
+
render json: tags.map { |tag| { id: tag.name, text: tag.name } }
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
unless AutoCompletesController.included_modules.include?(Redmineup::Patches::AutoCompletesControllerPatch)
|
|
18
|
+
AutoCompletesController.include(Redmineup::Patches::AutoCompletesControllerPatch)
|
|
19
|
+
end
|
|
@@ -4,7 +4,7 @@ module Redmineup
|
|
|
4
4
|
module SpritePatch
|
|
5
5
|
def self.included(base)
|
|
6
6
|
base.class_eval do
|
|
7
|
-
def sprite_icon(icon_name, label =
|
|
7
|
+
def sprite_icon(icon_name, label = '', icon_only: false, size: '18', css_class: nil, sprite: "icons", plugin: nil, rtl: false)
|
|
8
8
|
label
|
|
9
9
|
end
|
|
10
10
|
end
|
|
@@ -16,6 +16,6 @@ module Redmineup
|
|
|
16
16
|
end
|
|
17
17
|
end
|
|
18
18
|
|
|
19
|
-
unless
|
|
20
|
-
|
|
21
|
-
end
|
|
19
|
+
unless User.included_modules.include?(Redmineup::Patches::Compatibility::UserPatch)
|
|
20
|
+
User.send(:include, Redmineup::Patches::Compatibility::UserPatch)
|
|
21
|
+
end
|
data/lib/redmineup/version.rb
CHANGED
data/lib/redmineup.rb
CHANGED
|
@@ -44,6 +44,7 @@ require 'redmineup/liquid/drops/custom_field_enumeration_drop'
|
|
|
44
44
|
require 'redmineup/helpers/external_assets_helper'
|
|
45
45
|
require 'redmineup/helpers/form_tag_helper'
|
|
46
46
|
require 'redmineup/helpers/calendars_helper'
|
|
47
|
+
require 'redmineup/helpers/datetime_helper'
|
|
47
48
|
require 'redmineup/assets_manager'
|
|
48
49
|
|
|
49
50
|
require 'redmineup/patches/liquid_patch'
|
|
@@ -65,6 +66,7 @@ require 'application_record' if !defined?(ApplicationRecord) && Rails.version <
|
|
|
65
66
|
if Redmineup.cable_available?
|
|
66
67
|
require 'action_cable/server/rup_configuration'
|
|
67
68
|
require 'action_cable/server/rup_server'
|
|
69
|
+
require 'action_cable/connection/rup_connection'
|
|
68
70
|
require 'redmineup/patches/action_cable_base_patch'
|
|
69
71
|
require 'redmineup/patches/action_cable_patch'
|
|
70
72
|
end
|
|
@@ -106,47 +108,26 @@ if defined?(ActionView::Base)
|
|
|
106
108
|
ActionView::Base.send :include, Redmineup::CalendarsHelper
|
|
107
109
|
ActionView::Base.send :include, Redmineup::ExternalAssetsHelper
|
|
108
110
|
ActionView::Base.send :include, Redmineup::FormTagHelper
|
|
111
|
+
ActionView::Base.send :include, Redmineup::TagsHelper
|
|
109
112
|
end
|
|
110
113
|
|
|
111
114
|
def requires_redmineup(arg)
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
requirement = requirement.split('.').collect(&:to_i)
|
|
116
|
-
requirement <=> current.slice(0, requirement.size)
|
|
117
|
-
end
|
|
115
|
+
arg = { version_or_higher: arg } unless arg.is_a?(Hash)
|
|
116
|
+
arg.assert_valid_keys(:version_or_higher)
|
|
118
117
|
|
|
119
|
-
|
|
120
|
-
|
|
118
|
+
requirement = arg[:version_or_higher]
|
|
119
|
+
unless requirement.is_a?(String)
|
|
120
|
+
raise ArgumentError, ':version_or_higher accepts a version string only'
|
|
121
121
|
end
|
|
122
122
|
|
|
123
|
-
|
|
124
|
-
|
|
123
|
+
current = Gem::Version.new(Redmineup::VERSION)
|
|
124
|
+
required = Gem::Version.new(requirement)
|
|
125
125
|
|
|
126
|
-
|
|
127
|
-
arg.each do |k, req|
|
|
128
|
-
case k
|
|
129
|
-
when :version_or_higher
|
|
130
|
-
raise ArgumentError.new(':version_or_higher accepts a version string only') unless req.is_a?(String)
|
|
126
|
+
return true if required <= current
|
|
131
127
|
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
req = [req] if req.is_a?(String)
|
|
138
|
-
if req.is_a?(Array)
|
|
139
|
-
unless req.detect { |ver| compare_versions(ver, current) == 0 }
|
|
140
|
-
abort "\033[31mRedmine requires redmineup gem version #{req} (you're using #{Redmineup::VERSION}).\nPlease update with 'bundle update redmineup'.\033[0m"
|
|
141
|
-
end
|
|
142
|
-
elsif req.is_a?(Range)
|
|
143
|
-
unless compare_versions(req.first, current) <= 0 && compare_versions(req.last, current) >= 0
|
|
144
|
-
abort "\033[31mRedmine requires redmineup gem version between #{req.first} and #{req.last} (you're using #{Redmineup::VERSION}).\nPlease update with 'bundle update redmineup'.\033[0m"
|
|
145
|
-
end
|
|
146
|
-
else
|
|
147
|
-
raise ArgumentError.new(':version option accepts a version string, an array or a range of versions')
|
|
148
|
-
end
|
|
149
|
-
end
|
|
150
|
-
end
|
|
151
|
-
true
|
|
128
|
+
message = "Redmine requires redmineup gem version #{requirement} or higher " \
|
|
129
|
+
"(you're using #{Redmineup::VERSION}).\n" \
|
|
130
|
+
"Please update with 'bundle update redmineup --conservative'."
|
|
131
|
+
Rails.logger&.error("\033[31m[ERROR]\033[0m #{message}")
|
|
132
|
+
abort "\033[31m#{message}\033[0m"
|
|
152
133
|
end
|
|
@@ -34,16 +34,19 @@ class TagTest < ActiveSupport::TestCase
|
|
|
34
34
|
end
|
|
35
35
|
|
|
36
36
|
def test_color
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
37
|
+
assert_equal '#aaaaaa', tags(:feature).color # 11184810 = 0xaaaaaa
|
|
38
|
+
assert_equal '#bbbbbb', tags(:bug).color # 12303291 = 0xbbbbbb
|
|
39
|
+
# no DB color — falls back to color_from_name, not nil
|
|
40
|
+
assert_equal Redmineup::ActsAsTaggable::Tag.color_from_name('error'), tags(:error).color
|
|
41
|
+
assert_equal Redmineup::ActsAsTaggable::Tag.color_from_name('question'), tags(:question).color
|
|
42
|
+
end
|
|
42
43
|
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
44
|
+
def test_color_from_name
|
|
45
|
+
color = Redmineup::ActsAsTaggable::Tag.color_from_name('error')
|
|
46
|
+
assert_match(/\A#[0-9a-f]{6}\z/, color)
|
|
47
|
+
assert_equal color, Redmineup::ActsAsTaggable::Tag.color_from_name('error') # deterministic
|
|
48
|
+
assert_not_equal color, Redmineup::ActsAsTaggable::Tag.color_from_name('other')
|
|
49
|
+
assert_match(/\A#[0-9a-f]{6}\z/, Redmineup::ActsAsTaggable::Tag.color_from_name(nil))
|
|
47
50
|
end
|
|
48
51
|
|
|
49
52
|
def test_tag_is_equal_to_itself
|
data/test/schema.rb
CHANGED
|
@@ -150,7 +150,7 @@ ActiveRecord::Schema.define version: 0 do
|
|
|
150
150
|
t.column :viewer_id, :integer
|
|
151
151
|
t.column :viewed_id, :integer
|
|
152
152
|
t.column :viewed_type, :string
|
|
153
|
-
t.column :ip, :string, limit: '
|
|
153
|
+
t.column :ip, :string, limit: '45'
|
|
154
154
|
t.column :created_at, :datetime
|
|
155
155
|
end
|
|
156
156
|
end
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
require File.dirname(__FILE__) + '/test_helper'
|
|
2
|
+
|
|
3
|
+
class TagsHelperViewTest < ActionView::TestCase
|
|
4
|
+
include Redmineup::TagsHelper
|
|
5
|
+
include Redmineup::FormTagHelper
|
|
6
|
+
|
|
7
|
+
def stub_tag_url(name)
|
|
8
|
+
"/stub_tags/#{name}" # URL stub for tag_cloud_links(tags, :stub)
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def test_tag_link
|
|
12
|
+
result = tag_link('/tags/error', 'error', count: 3)
|
|
13
|
+
assert_includes result, 'tag-label-color'
|
|
14
|
+
assert_includes result, 'background-color: #'
|
|
15
|
+
assert_includes result, '(3)'
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def test_tag_links
|
|
19
|
+
result = tag_links(['error', 'bug']) { |t| "/tags/#{t}" }
|
|
20
|
+
assert_includes result, 'class="tag_list"'
|
|
21
|
+
assert_nil tag_links([]) { |t| "/tags/#{t}" }
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def test_tag_cloud_links
|
|
25
|
+
result = tag_cloud_links(Issue.tag_counts, :stub)
|
|
26
|
+
assert_includes result, 'class="tag_list"'
|
|
27
|
+
assert_includes result, '/stub_tags/'
|
|
28
|
+
assert_nil tag_cloud_links([], :stub)
|
|
29
|
+
assert_raises(NoMethodError) { tag_cloud_links(Issue.tag_counts, :unknown_xyz) }
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def test_tag_list_field_tag
|
|
33
|
+
result = tag_list_field_tag('issue[tag_list]', ['bug'],
|
|
34
|
+
url: '/auto_completes/taggable_tags',
|
|
35
|
+
width: '60%', tags: false,
|
|
36
|
+
placeholder: '+ add tag')
|
|
37
|
+
assert_includes result, 'name="issue[tag_list][]"'
|
|
38
|
+
assert_includes result, '"width":"60%"'
|
|
39
|
+
assert_includes result, '"tags":false'
|
|
40
|
+
end
|
|
41
|
+
end
|
data/test/test_helper.rb
CHANGED
|
@@ -13,7 +13,8 @@ Dir.glob(File.expand_path('models/*.rb', __dir__)).each { |f| require f }
|
|
|
13
13
|
class ActiveSupport::TestCase # :nodoc:
|
|
14
14
|
include ActiveRecord::TestFixtures
|
|
15
15
|
|
|
16
|
-
|
|
16
|
+
gem_fixtures_path = File.dirname(__FILE__) + '/fixtures/'
|
|
17
|
+
respond_to?(:fixture_paths=) ? self.fixture_paths = [gem_fixtures_path] : self.fixture_path = gem_fixtures_path
|
|
17
18
|
|
|
18
19
|
self.use_transactional_tests = true if RUBY_VERSION > '1.9.3'
|
|
19
20
|
self.use_instantiated_fixtures = false
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: redmineup
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.1.
|
|
4
|
+
version: 1.1.11
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- RedmineUP
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2026-
|
|
11
|
+
date: 2026-06-29 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: rails
|
|
@@ -119,12 +119,16 @@ files:
|
|
|
119
119
|
- app/assets/javascripts/Chart.bundle.min.js.bak
|
|
120
120
|
- app/assets/javascripts/chart.min.js
|
|
121
121
|
- app/assets/javascripts/consumer.js
|
|
122
|
+
- app/assets/javascripts/consumer_worker.js
|
|
123
|
+
- app/assets/javascripts/jquery.colorPicker.min.js
|
|
122
124
|
- app/assets/javascripts/select2.js
|
|
123
125
|
- app/assets/javascripts/select2_helpers.js
|
|
124
126
|
- app/assets/stylesheets/calendars.css
|
|
125
127
|
- app/assets/stylesheets/money.css
|
|
128
|
+
- app/assets/stylesheets/redmineup.css
|
|
126
129
|
- app/assets/stylesheets/select2.css
|
|
127
130
|
- app/controllers/redmineup_controller.rb
|
|
131
|
+
- app/views/redmineup/_additional_assets.html.erb
|
|
128
132
|
- app/views/redmineup/_money.html.erb
|
|
129
133
|
- app/views/redmineup/settings.html.erb
|
|
130
134
|
- config/currency_iso.json
|
|
@@ -136,6 +140,10 @@ files:
|
|
|
136
140
|
- config/routes.rb
|
|
137
141
|
- doc/CHANGELOG
|
|
138
142
|
- doc/LICENSE.txt
|
|
143
|
+
- doc/active-record-mixins.md
|
|
144
|
+
- doc/assets-money-and-utilities.md
|
|
145
|
+
- doc/tagging-and-select2.md
|
|
146
|
+
- lib/action_cable/connection/rup_connection.rb
|
|
139
147
|
- lib/action_cable/server/rup_configuration.rb
|
|
140
148
|
- lib/action_cable/server/rup_server.rb
|
|
141
149
|
- lib/application_record.rb
|
|
@@ -162,6 +170,7 @@ files:
|
|
|
162
170
|
- lib/redmineup/currency/loader.rb
|
|
163
171
|
- lib/redmineup/engine.rb
|
|
164
172
|
- lib/redmineup/helpers/calendars_helper.rb
|
|
173
|
+
- lib/redmineup/helpers/datetime_helper.rb
|
|
165
174
|
- lib/redmineup/helpers/external_assets_helper.rb
|
|
166
175
|
- lib/redmineup/helpers/form_tag_helper.rb
|
|
167
176
|
- lib/redmineup/helpers/tags_helper.rb
|
|
@@ -183,6 +192,7 @@ files:
|
|
|
183
192
|
- lib/redmineup/money_helper.rb
|
|
184
193
|
- lib/redmineup/patches/action_cable_base_patch.rb
|
|
185
194
|
- lib/redmineup/patches/action_cable_patch.rb
|
|
195
|
+
- lib/redmineup/patches/auto_completes_controller_patch.rb
|
|
186
196
|
- lib/redmineup/patches/compatibility/application_controller_patch.rb
|
|
187
197
|
- lib/redmineup/patches/compatibility/routing_mapper_patch.rb
|
|
188
198
|
- lib/redmineup/patches/compatibility/sprite_patch.rb
|
|
@@ -238,6 +248,7 @@ files:
|
|
|
238
248
|
- test/money_helper_test.rb
|
|
239
249
|
- test/schema.rb
|
|
240
250
|
- test/tags_helper_test.rb
|
|
251
|
+
- test/tags_helper_view_test.rb
|
|
241
252
|
- test/test_helper.rb
|
|
242
253
|
- test/vote_helper_test.rb
|
|
243
254
|
homepage: https://www.redmineup.com
|
|
@@ -309,5 +320,6 @@ test_files:
|
|
|
309
320
|
- test/money_helper_test.rb
|
|
310
321
|
- test/schema.rb
|
|
311
322
|
- test/tags_helper_test.rb
|
|
323
|
+
- test/tags_helper_view_test.rb
|
|
312
324
|
- test/test_helper.rb
|
|
313
325
|
- test/vote_helper_test.rb
|