diff --git a/app/controllers/account/entropies_controller.rb b/app/controllers/account/entropies_controller.rb index 7290c1e4e..327098ee2 100644 --- a/app/controllers/account/entropies_controller.rb +++ b/app/controllers/account/entropies_controller.rb @@ -1,4 +1,6 @@ class Account::EntropiesController < ApplicationController + wrap_parameters :entropy, include: [ :auto_postpone_period_in_days ] + before_action :ensure_admin def update @@ -8,10 +10,12 @@ class Account::EntropiesController < ApplicationController format.html { redirect_to account_settings_path, notice: "Account updated" } format.json { head :no_content } end + rescue ActiveRecord::RecordInvalid + head :unprocessable_entity end private def entropy_params - params.expect(entropy: [ :auto_postpone_period ]) + params.expect(entropy: [ :auto_postpone_period_in_days ]) end end diff --git a/app/controllers/boards/entropies_controller.rb b/app/controllers/boards/entropies_controller.rb index 557adb2d9..132733aac 100644 --- a/app/controllers/boards/entropies_controller.rb +++ b/app/controllers/boards/entropies_controller.rb @@ -1,5 +1,5 @@ class Boards::EntropiesController < ApplicationController - wrap_parameters :board + wrap_parameters :board, include: [ :auto_postpone_period_in_days ] include BoardScoped @@ -12,10 +12,12 @@ class Boards::EntropiesController < ApplicationController format.turbo_stream format.json { head :no_content } end + rescue ActiveRecord::RecordInvalid + head :unprocessable_entity end private def entropy_params - params.expect(board: [ :auto_postpone_period ]) + params.expect(board: [ :auto_postpone_period_in_days ]) end end diff --git a/app/controllers/boards_controller.rb b/app/controllers/boards_controller.rb index 1e93a5758..8e63455f9 100644 --- a/app/controllers/boards_controller.rb +++ b/app/controllers/boards_controller.rb @@ -88,7 +88,7 @@ class BoardsController < ApplicationController end def board_params - params.expect(board: [ :name, :all_access, :auto_postpone_period, :public_description ]) + params.expect(board: [ :name, :all_access, :auto_postpone_period_in_days, :public_description ]) end def grantees diff --git a/app/helpers/entropy_helper.rb b/app/helpers/entropy_helper.rb index 4329dab88..7257ba481 100644 --- a/app/helpers/entropy_helper.rb +++ b/app/helpers/entropy_helper.rb @@ -1,8 +1,4 @@ module EntropyHelper - def entropy_auto_close_options - [ 3, 7, 30, 90, 365, 11 ] - end - def entropy_bubble_options_for(card) { daysBeforeReminder: card.entropy.days_before_reminder, diff --git a/app/models/board/auto_postponing.rb b/app/models/board/auto_postponing.rb index 4911c5e33..da53692b3 100644 --- a/app/models/board/auto_postponing.rb +++ b/app/models/board/auto_postponing.rb @@ -6,9 +6,7 @@ module Board::AutoPostponing end private - DEFAULT_AUTO_POSTPONE_PERIOD = 30.days - def set_default_auto_postpone_period - self.auto_postpone_period ||= DEFAULT_AUTO_POSTPONE_PERIOD unless attribute_present?(:auto_postpone_period) + self.auto_postpone_period ||= Entropy::DEFAULT_AUTO_POSTPONE_PERIOD_IN_DAYS.days unless attribute_present?(:auto_postpone_period) end end diff --git a/app/models/board/entropic.rb b/app/models/board/entropic.rb index beee4883b..d3e48d6ea 100644 --- a/app/models/board/entropic.rb +++ b/app/models/board/entropic.rb @@ -2,7 +2,7 @@ module Board::Entropic extend ActiveSupport::Concern included do - delegate :auto_postpone_period, to: :entropy + delegate :auto_postpone_period, :auto_postpone_period_in_days, to: :entropy has_one :entropy, as: :container, dependent: :destroy end @@ -12,6 +12,10 @@ module Board::Entropic def auto_postpone_period=(new_value) entropy ||= association(:entropy).reader || self.build_entropy - entropy.update auto_postpone_period: new_value + entropy.update! auto_postpone_period: new_value + end + + def auto_postpone_period_in_days=(value) + self.auto_postpone_period = value.to_i.days.to_i end end diff --git a/app/models/entropy.rb b/app/models/entropy.rb index 9a93ba4e8..c896fc494 100644 --- a/app/models/entropy.rb +++ b/app/models/entropy.rb @@ -1,6 +1,35 @@ class Entropy < ApplicationRecord + DEFAULT_AUTO_POSTPONE_PERIOD_IN_DAYS = 30 + AUTO_POSTPONE_PERIODS_IN_DAYS = [ 3, 7, 30, 90, 365, 11 ].freeze + AUTO_POSTPONE_PERIODS_IN_SECONDS = AUTO_POSTPONE_PERIODS_IN_DAYS.map { |n| n.day.in_seconds }.freeze + belongs_to :account, default: -> { container.account } belongs_to :container, polymorphic: true + validates :auto_postpone_period, inclusion: { in: AUTO_POSTPONE_PERIODS_IN_SECONDS } + after_commit -> { container.cards.touch_all if container } + + def auto_postpone_period_in_days + days = auto_postpone_period / 1.day.to_i + + if days.in?(AUTO_POSTPONE_PERIODS_IN_DAYS) + days + else + default_auto_postpone_period_in_days + end + end + + def auto_postpone_period_in_days=(new_value) + self.auto_postpone_period = new_value.to_i.days.to_i + end + + private + def default_auto_postpone_period_in_days + if container.is_a?(Board) + container.account.entropy.auto_postpone_period_in_days + else + DEFAULT_AUTO_POSTPONE_PERIOD_IN_DAYS + end + end end diff --git a/app/views/entropy/_auto_close.html.erb b/app/views/entropy/_auto_close.html.erb index 6ccb5d205..a2e3fe0ab 100644 --- a/app/views/entropy/_auto_close.html.erb +++ b/app/views/entropy/_auto_close.html.erb @@ -6,8 +6,9 @@ <%= form_with model: model, url: url, data: { controller: "form" } do |form| %> <%= render "entropy/knob", form: form, - name: :auto_postpone_period, - knob_options: entropy_auto_close_options, + name: :auto_postpone_period_in_days, + current_value: model.auto_postpone_period_in_days, + knob_options: Entropy::AUTO_POSTPONE_PERIODS_IN_DAYS, label: "Days until auto-close", disabled: disabled %> <% end %> diff --git a/app/views/entropy/_knob.html.erb b/app/views/entropy/_knob.html.erb index 69bbb5fb0..ba17c6728 100644 --- a/app/views/entropy/_knob.html.erb +++ b/app/views/entropy/_knob.html.erb @@ -1,6 +1,5 @@ <% - period = form.object.send(name) - current_index = knob_options.index(period.to_i / 1.day) + current_index = knob_options.index(current_value) || knob_options.index(Entropy::DEFAULT_AUTO_POSTPONE_PERIOD_IN_DAYS) %>
@@ -8,7 +7,7 @@ <% knob_options.each_with_index do |value, index| %>