redmineup 1.0.2

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.
Files changed (118) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +21 -0
  3. data/Gemfile +4 -0
  4. data/README.md +204 -0
  5. data/Rakefile +11 -0
  6. data/app/controllers/redmineup_controller.rb +26 -0
  7. data/app/views/redmine_crm/redmineup_calendar/_calendar.html.erb +34 -0
  8. data/app/views/redmineup/_money.html.erb +44 -0
  9. data/app/views/redmineup/settings.html.erb +10 -0
  10. data/bitbucket-pipelines.yml +50 -0
  11. data/config/currency_iso.json +2544 -0
  12. data/config/locales/cs.yml +13 -0
  13. data/config/locales/de.yml +13 -0
  14. data/config/locales/en.yml +13 -0
  15. data/config/locales/es.yml +13 -0
  16. data/config/locales/ru.yml +13 -0
  17. data/config/routes.rb +5 -0
  18. data/doc/CHANGELOG +14 -0
  19. data/doc/LICENSE.txt +339 -0
  20. data/lib/redmineup/acts_as_draftable/draft.rb +40 -0
  21. data/lib/redmineup/acts_as_draftable/up_acts_as_draftable.rb +172 -0
  22. data/lib/redmineup/acts_as_list/list.rb +282 -0
  23. data/lib/redmineup/acts_as_priceable/up_acts_as_priceable.rb +33 -0
  24. data/lib/redmineup/acts_as_taggable/tag.rb +81 -0
  25. data/lib/redmineup/acts_as_taggable/tag_list.rb +111 -0
  26. data/lib/redmineup/acts_as_taggable/tagging.rb +16 -0
  27. data/lib/redmineup/acts_as_taggable/up_acts_as_taggable.rb +357 -0
  28. data/lib/redmineup/acts_as_viewed/up_acts_as_viewed.rb +274 -0
  29. data/lib/redmineup/acts_as_votable/up_acts_as_votable.rb +80 -0
  30. data/lib/redmineup/acts_as_votable/up_acts_as_voter.rb +20 -0
  31. data/lib/redmineup/acts_as_votable/votable.rb +323 -0
  32. data/lib/redmineup/acts_as_votable/vote.rb +28 -0
  33. data/lib/redmineup/acts_as_votable/voter.rb +131 -0
  34. data/lib/redmineup/assets_manager.rb +43 -0
  35. data/lib/redmineup/colors_helper.rb +192 -0
  36. data/lib/redmineup/compatibility/application_controller_patch.rb +33 -0
  37. data/lib/redmineup/compatibility/routing_mapper_patch.rb +25 -0
  38. data/lib/redmineup/currency/formatting.rb +224 -0
  39. data/lib/redmineup/currency/heuristics.rb +151 -0
  40. data/lib/redmineup/currency/loader.rb +23 -0
  41. data/lib/redmineup/currency.rb +450 -0
  42. data/lib/redmineup/engine.rb +4 -0
  43. data/lib/redmineup/helpers/external_assets_helper.rb +20 -0
  44. data/lib/redmineup/helpers/form_tag_helper.rb +88 -0
  45. data/lib/redmineup/helpers/rup_calendar_helper.rb +146 -0
  46. data/lib/redmineup/helpers/tags_helper.rb +13 -0
  47. data/lib/redmineup/helpers/vote_helper.rb +35 -0
  48. data/lib/redmineup/hooks/views_layouts_hook.rb +11 -0
  49. data/lib/redmineup/liquid/drops/attachment_drop.rb +47 -0
  50. data/lib/redmineup/liquid/drops/issue_relations_drop.rb +41 -0
  51. data/lib/redmineup/liquid/drops/issues_drop.rb +217 -0
  52. data/lib/redmineup/liquid/drops/news_drop.rb +54 -0
  53. data/lib/redmineup/liquid/drops/projects_drop.rb +86 -0
  54. data/lib/redmineup/liquid/drops/time_entries_drop.rb +65 -0
  55. data/lib/redmineup/liquid/drops/users_drop.rb +68 -0
  56. data/lib/redmineup/liquid/filters/arrays.rb +254 -0
  57. data/lib/redmineup/liquid/filters/base.rb +249 -0
  58. data/lib/redmineup/liquid/filters/colors.rb +31 -0
  59. data/lib/redmineup/money_helper.rb +66 -0
  60. data/lib/redmineup/patches/liquid_patch.rb +33 -0
  61. data/lib/redmineup/settings/money.rb +46 -0
  62. data/lib/redmineup/settings.rb +53 -0
  63. data/lib/redmineup/version.rb +3 -0
  64. data/lib/redmineup.rb +108 -0
  65. data/redmineup.gemspec +29 -0
  66. data/test/acts_as_draftable/draft_test.rb +29 -0
  67. data/test/acts_as_draftable/rup_acts_as_draftable_test.rb +178 -0
  68. data/test/acts_as_taggable/rup_acts_as_taggable_test.rb +350 -0
  69. data/test/acts_as_taggable/tag_list_test.rb +34 -0
  70. data/test/acts_as_taggable/tag_test.rb +72 -0
  71. data/test/acts_as_taggable/tagging_test.rb +15 -0
  72. data/test/acts_as_viewed/rup_acts_as_viewed_test.rb +47 -0
  73. data/test/acts_as_votable/rup_acts_as_votable_test.rb +19 -0
  74. data/test/acts_as_votable/rup_acts_as_voter_test.rb +14 -0
  75. data/test/acts_as_votable/votable_test.rb +507 -0
  76. data/test/acts_as_votable/voter_test.rb +296 -0
  77. data/test/currency_test.rb +292 -0
  78. data/test/database.yml +17 -0
  79. data/test/fixtures/attachments.yml +14 -0
  80. data/test/fixtures/issues.yml +24 -0
  81. data/test/fixtures/news.yml +8 -0
  82. data/test/fixtures/projects.yml +10 -0
  83. data/test/fixtures/taggings.yml +32 -0
  84. data/test/fixtures/tags.yml +11 -0
  85. data/test/fixtures/users.yml +9 -0
  86. data/test/fixtures/votable_caches.yml +2 -0
  87. data/test/fixtures/votables.yml +4 -0
  88. data/test/fixtures/voters.yml +6 -0
  89. data/test/liquid/drops/attachment_drop_test.rb +15 -0
  90. data/test/liquid/drops/issue_relations_drop_test.rb +24 -0
  91. data/test/liquid/drops/issues_drop_test.rb +38 -0
  92. data/test/liquid/drops/news_drop_test.rb +38 -0
  93. data/test/liquid/drops/projects_drop_test.rb +44 -0
  94. data/test/liquid/drops/uses_drop_test.rb +36 -0
  95. data/test/liquid/filters/arrays_filter_test.rb +31 -0
  96. data/test/liquid/filters/base_filter_test.rb +67 -0
  97. data/test/liquid/filters/colors_filter_test.rb +33 -0
  98. data/test/liquid/liquid_helper.rb +34 -0
  99. data/test/models/attachment.rb +3 -0
  100. data/test/models/issue.rb +21 -0
  101. data/test/models/issue_relation.rb +10 -0
  102. data/test/models/news.rb +3 -0
  103. data/test/models/project.rb +8 -0
  104. data/test/models/user.rb +11 -0
  105. data/test/models/vote_classes.rb +33 -0
  106. data/test/money_helper_test.rb +12 -0
  107. data/test/schema.rb +144 -0
  108. data/test/tags_helper_test.rb +29 -0
  109. data/test/test_helper.rb +66 -0
  110. data/test/vote_helper_test.rb +28 -0
  111. data/vendor/assets/images/money.png +0 -0
  112. data/vendor/assets/images/vcard.png +0 -0
  113. data/vendor/assets/javascripts/Chart.bundle.min.js +16 -0
  114. data/vendor/assets/javascripts/select2.js +2 -0
  115. data/vendor/assets/javascripts/select2_helpers.js +192 -0
  116. data/vendor/assets/stylesheets/money.css +96 -0
  117. data/vendor/assets/stylesheets/select2.css +424 -0
  118. metadata +295 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: f8906ecd18c32f3d77f7ecb9ce342051cf620884442332900bd18b3678847264
4
+ data.tar.gz: ac7a23b98f0a4e612fe255c981d563069c53d4d29448fd1e60fefc8d45244cca
5
+ SHA512:
6
+ metadata.gz: 9367020f0bb91903c3c64c2e631f4ccf7559331b59373f11b4b6afa0ed98f6496e1441af347ef287720cee9a6461aab3b3138f4e902dad6e5d6e54ac2d9ad29c
7
+ data.tar.gz: 6dc7397b41cd7141de6167777edfc2306dd9d7010aa8813e868df272e648f8f6ed49a129104ff54d469fad074d0762d38468f86b2ac8ebdea38e90f0774f25ae
data/.gitignore ADDED
@@ -0,0 +1,21 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /Gemfile.lock
4
+ /_yardoc/
5
+ /coverage/
6
+ /pkg/
7
+ /public/
8
+ /test/public/
9
+ /spec/reports/
10
+ /tmp/
11
+ *.bundle
12
+ *.so
13
+ *.o
14
+ *.a
15
+ mkmf.log
16
+ /test/debug.log
17
+ /Guardfile
18
+ /Gemfile.local
19
+ /Gemfile.local.lock
20
+ *.gem
21
+ /.idea/*
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in redmineup.gemspec
4
+ gemspec
data/README.md ADDED
@@ -0,0 +1,204 @@
1
+ # Redmineup
2
+
3
+ This gem is used at RedmineUP as a general place for shared functionality and
4
+ assets. It contains **Chart.js** and **select2** JS libraries, various mixins
5
+ for ActiveRecord models and other things you might find useful.
6
+
7
+ Among mixins there are:
8
+
9
+ * up_acts_as_draftable
10
+ * up_acts_as_taggable
11
+ * up_acts_as_viewable
12
+ * up_acts_as_votable
13
+
14
+
15
+ ## Installation
16
+
17
+ Add it to your plugin's Gemfile:
18
+ ```ruby
19
+ gem 'redmineup'
20
+ ```
21
+
22
+ Then invoke the following command in your plugin's or Redmine directory:
23
+ ```
24
+ $ bundle install
25
+ ```
26
+
27
+ And now you can start using it.
28
+
29
+
30
+ ## Usage
31
+ ### Drafts
32
+ This module allows saving and restoring drafts for different models. To be
33
+ saved as a draft, an instance does not need to pass the validations. Drafts
34
+ store not only model attributes, but also associations and virtual attributes.
35
+ A draft could be linked to a given user, so every user can manage his/her own
36
+ drafts independent of others. A draft might have a parent instance.
37
+
38
+ First of all, drafts need to be saved somewhere, so let's create a migration:
39
+ ```ruby
40
+ class CreateDrafts < Rails.version > '5' ? ActiveRecord::Migration[5.0] : ActiveRecord::Migration
41
+ def change
42
+ ActiveRecord::Base.create_drafts_table
43
+ end
44
+ end
45
+ ```
46
+
47
+ Then in the Redmine directory run:
48
+ ```
49
+ $ rake redmine:plugins:migrate
50
+ ```
51
+
52
+ Next, add `up_acts_as_draftable` to a model for which you want to save drafts:
53
+ ```ruby
54
+ class Message < ActiveRecord::Base
55
+ up_acts_as_draftable
56
+ end
57
+ ```
58
+
59
+ And that's it for the preparation, now you're ready to make use of drafts:
60
+ ```ruby
61
+ # You can save message as a draft.
62
+ Message.new(subject: 'foo').save_draft
63
+
64
+ # And later restore message from the draft.
65
+ draft = Message.drafts(nil).last
66
+ message = draft.restore
67
+ puts message.subject
68
+ # => foo
69
+
70
+ # Draft can be overwritten.
71
+ message.content = 'bar'
72
+ puts message.save_draft
73
+ # => true
74
+
75
+ # You can also save draft linked to a particular user.
76
+ Message.new(subject: 'baz').save_draft(user: current_user)
77
+
78
+ # And restore message from some user's draft.
79
+ user_draft = Message.drafts(current_user).last
80
+ user_message = user_draft.restore
81
+ puts user_message.subject
82
+ # => baz
83
+
84
+ # It's also possible to restore a bunch of messages at once.
85
+ messages = Message.drafts(current_user).restore_all
86
+ p messages.map(&:subject)
87
+ # => ["baz"]
88
+
89
+ # When a model instance is saved, corresponding draft is removed.
90
+ puts Message.drafts(current_user).count
91
+ # => 1
92
+ user_message.board_id = Board.first.id
93
+ user_message.save!
94
+ puts Message.drafts(current_user).count
95
+ # => 0
96
+
97
+ # Drafts will be saved only for new (not persisted) or changed instances.
98
+ puts Message.new.save_draft
99
+ # => true
100
+ persisted = Message.last
101
+ puts persisted.save_draft
102
+ # => false
103
+ persisted.subject = 'other subject'
104
+ puts persisted.save_draft
105
+ # => true
106
+ ```
107
+
108
+ ### Tags
109
+ This module makes it possible to tag objects.
110
+
111
+ First, create a migration:
112
+ ```ruby
113
+ class CreateTags < Rails.version > '5' ? ActiveRecord::Migration[5.0] : ActiveRecord::Migration
114
+ def change
115
+ ActiveRecord::Base.create_taggable_table
116
+ end
117
+ end
118
+ ```
119
+
120
+ Then in the Redmine directory run:
121
+ ```
122
+ $ rake redmine:plugins:migrate
123
+ ```
124
+
125
+ Next, add `up_acts_as_taggable` to a model for which you want to provide tags:
126
+ ```ruby
127
+ class Contact < ActiveRecord::Base
128
+ up_acts_as_taggable
129
+ end
130
+ ```
131
+
132
+ TODO: Add examples of usage.
133
+
134
+ ### Viewings
135
+ This module allows you to count views for some ActiveRecord model instances.
136
+
137
+ To count views you'll need to create a migration:
138
+ ```ruby
139
+ class CreateViewings < Rails.version > '5' ? ActiveRecord::Migration[5.0] : ActiveRecord::Migration
140
+ def change
141
+ ActiveRecord::Base.create_viewings_table
142
+ end
143
+ end
144
+ ```
145
+
146
+ To apply it, run the following in the Redmine directory:
147
+ ```
148
+ $ rake redmine:plugins:migrate
149
+ ```
150
+
151
+ Then add `up_acts_as_viewed` to a model for which you want to count views.
152
+ ```ruby
153
+ class Question < ActiveRecord::Base
154
+ up_acts_as_viewed
155
+ end
156
+ ```
157
+
158
+ TODO: Provide some usage examples.
159
+
160
+ ### Votes
161
+ With this module you can make your models votable and allow users to vote.
162
+
163
+ As always, create a migration first:
164
+ ```ruby
165
+ class CreateVotes < Rails.version > '5' ? ActiveRecord::Migration[5.0] : ActiveRecord::Migration
166
+ def change
167
+ ActiveRecord::Base.create_votable_table
168
+ end
169
+ end
170
+ ```
171
+
172
+ Then apply it by running the following command in the Redmine directory:
173
+ ```
174
+ $ rake redmine:plugins:migrate
175
+ ```
176
+
177
+ To make a model votable, add `up_acts_as_votable` to it:
178
+ ```ruby
179
+ class Question < ActiveRecord::Base
180
+ up_acts_as_votable
181
+ end
182
+ ```
183
+
184
+ TODO: Write about `up_acts_as_voter` and add usage examples.
185
+
186
+
187
+ ## Development
188
+
189
+ If you're planning to extend this gem, you will need to install development
190
+ dependencies. To do this, execute the following command in the project's
191
+ directory:
192
+ ```
193
+ $ bundle install
194
+ ```
195
+
196
+ After that you'll be able to run tests:
197
+ ```
198
+ $ bundle exec rake test
199
+ ```
200
+
201
+ SQLite in-memory database will be used by default, which is the fastest way to run tests. To run them using different database adapters, set `DB` environment variable to one of the available values — `mysql`, `postgresql`, `sqlite`. For example, to use PostgreSQL, invoke tests like so:
202
+ ```
203
+ $ bundle exec rake test DB=postgresql
204
+ ```
data/Rakefile ADDED
@@ -0,0 +1,11 @@
1
+ require 'bundler/gem_tasks'
2
+ require 'rake/testtask'
3
+
4
+ task default: :test
5
+
6
+ desc 'Run tests'
7
+ Rake::TestTask.new(:test) do |t|
8
+ t.libs << 'test'
9
+ t.pattern = 'test/**/*_test.rb'
10
+ t.verbose = true
11
+ end
@@ -0,0 +1,26 @@
1
+ class RedmineupController < ApplicationController
2
+ layout 'admin'
3
+
4
+ before_action :require_admin
5
+ require_sudo_mode :settings if respond_to?(:require_sudo_mode)
6
+
7
+ def settings
8
+ @section = Redmineup::Settings::SECTIONS[params[:id]]
9
+ return render_404 unless @section
10
+
11
+ if request.post?
12
+ setting =
13
+ if params[:settings].present?
14
+ params[:settings].respond_to?(:to_unsafe_hash) ? params[:settings].to_unsafe_hash : params[:settings]
15
+ else
16
+ {}
17
+ end
18
+ Redmineup::Settings.apply = setting
19
+ flash[:notice] = l(:notice_successful_update)
20
+ redirect_to redmineup_settings_path(@section[:id])
21
+ else
22
+ @settings = Redmineup::Settings.values
23
+ end
24
+ @section_tabs = Redmineup::Settings::SECTIONS.map { |_n, s| { name: s[:id], partial: s[:partial], label: s[:label] } }
25
+ end
26
+ end
@@ -0,0 +1,34 @@
1
+ <ul class="cal">
2
+ <li scope="col" title="<%= l(:label_week) %>" class="calhead week-number"></li>
3
+ <% 7.times do |i| %>
4
+ <li scope="col" class="calhead"><%= day_name((calendar.first_wday + i) % 7) %></li>
5
+ <% end %>
6
+ <% calendar.format_month.each_slice(7) do |week| %>
7
+ <li class='week-number'>
8
+ <span class="label-week"><%= l(:label_week) %></span> <%= calendar.week_number week.first %>
9
+ </li>
10
+ <% week.each do |day| %>
11
+ <li class="<%= calendar.day_css_classes day %> calbody">
12
+ <p class="day-num"><%= day.day %>
13
+ <span class="abbr-day">(<%= abbr_day_name(day.cwday) %>)</span>
14
+ </p>
15
+ <% calendar.events_on(day).each do |i| %>
16
+ <% if i.is_a? Issue %>
17
+ <%= tag.div class: [ i.css_classes, 'tooltip hascontextmenu', starting: day == i.start_date, ending: day == i.due_date] do %>
18
+ <%= "#{i.project} -" unless @project && @project == i.project %>
19
+ <%= link_to_issue i, :truncate => 30 %>
20
+ <span class="tip"><%= render_issue_tooltip i %></span>
21
+ <%= check_box_tag 'ids[]', i.id, false, :style => 'display:none;', :id => nil %>
22
+ <% end %>
23
+ <% else %>
24
+ <span class="icon icon-package">
25
+ <%= "#{i.project} -" unless @project && @project == i.project %>
26
+ <%= link_to_version i %>
27
+ </span>
28
+ <% end %>
29
+ <% end %>
30
+ </li>
31
+ <% end %>
32
+ <% end %>
33
+ </ul>
34
+ <%= context_menu %>
@@ -0,0 +1,44 @@
1
+ <p>
2
+ <label for="cb_settings_disable_taxes"><%= l(:label_redmineup_disable_taxes) %></label>
3
+ <%= hidden_field_tag 'settings[disable_taxes]', '0' %>
4
+ <%= check_box_tag 'settings[disable_taxes]', 1, Redmineup::Settings::Money.disable_taxes?, id: 'cb_settings_disable_taxes' %>
5
+ </p>
6
+
7
+ <span id="tax_data">
8
+ <p>
9
+ <label><%= l(:label_redmineup_default_tax) %></label>
10
+ <%= text_field_tag 'settings[default_tax]', Redmineup::Settings::Money.default_tax, size: 6, maxlength: 5 %> %
11
+ </p>
12
+
13
+ <p>
14
+ <label><%= l(:label_redmineup_tax_type) %></label>
15
+ <%= select_tag 'settings[tax_type]', options_for_select([[l(:label_redmineup_tax_type_exclusive), Redmineup::Settings::Money::TAX_TYPE_EXCLUSIVE],
16
+ [l(:label_redmineup_tax_type_inclusive), Redmineup::Settings::Money::TAX_TYPE_INCLUSIVE]],
17
+ @settings['tax_type']) %>
18
+ </p>
19
+ </span>
20
+
21
+ <p>
22
+ <label><%= l(:label_redmineup_default_currency) %></label>
23
+ <%= select_tag 'settings[default_currency]', options_for_select(all_currencies.insert(0, ['', '']), Redmineup::Settings::Money.default_currency) %>
24
+ </p>
25
+
26
+ <p>
27
+ <label><%= l(:label_redmineup_major_currencies) %></label>
28
+ <%= text_field_tag 'settings[major_currencies]', Redmineup::Settings::Money.major_currencies.join(', '), size: 40 %>
29
+ <br>
30
+ <em class="info"><%= l(:text_comma_separated) %></em>
31
+ </p>
32
+
33
+ <p>
34
+ <label><%= l(:label_redmineup_thousands_delimiter) %></label>
35
+ <%= select_tag 'settings[thousands_delimiter]', options_for_select([["9 999", " "],
36
+ ["9,999", ","],
37
+ ["9.999", "."]], Redmineup::Settings::Money.thousands_delimiter) %>
38
+ </p>
39
+
40
+ <p>
41
+ <label><%= l(:label_redmineup_decimal_separator) %></label>
42
+ <%= select_tag 'settings[decimal_separator]', options_for_select([["0.00", "."],
43
+ ["0,00", ","]], Redmineup::Settings::Money.decimal_separator) %>
44
+ </p>
@@ -0,0 +1,10 @@
1
+ <%= title l(:label_redmineup_settings) %>
2
+
3
+ <div id="settings">
4
+ <%= form_tag({ action: 'settings', id: @section[:id] }) do %>
5
+ <div class="box tabular settings">
6
+ <%= render partial: 'money' %>
7
+ </div>
8
+ <%= submit_tag l(:button_apply) %>
9
+ <% end %>
10
+ </div>
@@ -0,0 +1,50 @@
1
+ # This is a sample build configuration for Ruby.
2
+ # Check our guides at https://confluence.atlassian.com/x/8r-5Mw for more examples.
3
+ # Only use spaces to indent your .yml configuration.
4
+ # -----
5
+ # You can specify a custom docker image from Docker Hub as your build environment.
6
+
7
+ pipelines:
8
+ default:
9
+ - parallel:
10
+ - step:
11
+ name: 2.4.1 ruby
12
+ image: ruby:2.4.1
13
+ script:
14
+ - sed -i "s/'sqlite3'/'sqlite3', '~> 1.3.6'/g" redmineup.gemspec
15
+ - sed -i "s/'mysql2'/'mysql2', '~> 0.4.0'/g" redmineup.gemspec
16
+ - sed -i "s/'rubyzip'/'rubyzip'\n spec.add_runtime_dependency 'loofah', '~>2.19.1'/g" redmineup.gemspec
17
+ - bundle install
18
+ - bundle exec rake test DB=sqlite
19
+ - bundle exec rake test DB=postgresql
20
+ - bundle exec rake test DB=mysql
21
+ services:
22
+ - mysql
23
+ - postgres
24
+ - step:
25
+ name: 3.2.2 ruby
26
+ image: ruby:3.2.2
27
+ script:
28
+ - sed -i "s/'sqlite3'/'sqlite3', '~> 1.4.4'/g" redmineup.gemspec
29
+ - sed -i "s/'mysql2'/'mysql2', '~> 0.5.0'/g" redmineup.gemspec
30
+ - sed -i "s/'rubyzip'/'rubyzip'\n spec.add_runtime_dependency 'loofah', '~>2.19.1'/g" redmineup.gemspec
31
+ - bundle install
32
+ - bundle exec rake test DB=sqlite
33
+ - bundle exec rake test DB=postgresql
34
+ - bundle exec rake test DB=mysql
35
+ services:
36
+ - mysql
37
+ - postgres
38
+
39
+ definitions:
40
+ services:
41
+ mysql:
42
+ image: mysql:5.7
43
+ environment:
44
+ MYSQL_DATABASE: redmineup_test
45
+ MYSQL_ROOT_PASSWORD: password
46
+ postgres:
47
+ image: postgres
48
+ environment:
49
+ POSTGRES_DB: redmineup_test
50
+ POSTGRES_PASSWORD: password