23ac76555b
* Validate and normalize auto-postpone period to days - Add Entropy::AUTO_POSTPONE_PERIODS and validate auto_postpone_period against the allowed set - Introduce auto_postpone_period_in_days for forms and entropy update endpoints - Fall back to index 0 in knob partial when current value isn't in options - Remove entropy_auto_close_options helper in favor of model constant - Update tests to use allowed period values * Use auto_postpone_period_in_days for JSON entropy updates The JSON API was accepting auto_postpone_period (seconds) which bypassed the days normalization and validation. Switch to auto_postpone_period_in_days consistently and add explicit wrap_parameters so flat JSON params are wrapped correctly for the virtual attribute. * Default to account or 30-day fallback when knob value is invalid * Address PR review feedback for entropy validation - Fall back to first knob option (index 0) when persisted value isn't in the allowed set, preventing nil index errors for legacy values - Use integer division (1.day.to_i) for consistent day calculations * Default to account entropy period instead of first option for knob fallback * Test that default auto-postpone period is in the allowed periods * Return 422 instead of 500 for invalid entropy auto-postpone values Rescue ActiveRecord::RecordInvalid in entropy controllers so invalid auto_postpone_period_in_days values return 422 Unprocessable Entity instead of raising a 500. * Fix NoMethodError when board entropy falls back to account default Use container.account.entropy.auto_postpone_period_in_days instead of container.account.auto_postpone_period_in_days since Account doesn't delegate that method. * Test board entropy fallback to account default for invalid periods
35 lines
1.3 KiB
Plaintext
35 lines
1.3 KiB
Plaintext
<%
|
|
current_index = knob_options.index(current_value) || knob_options.index(Entropy::DEFAULT_AUTO_POSTPONE_PERIOD_IN_DAYS)
|
|
%>
|
|
|
|
<fieldset class="knob" data-controller="knob" data-knob-target="field" style="--knob-options: <%= knob_options.length %>; --knob-index: <%= current_index %>">
|
|
<div class="position-relative" role="radiogroup" aria-labelledby="<%= dom_id(form.object, name) %>">
|
|
<% knob_options.each_with_index do |value, index| %>
|
|
<label class="knob__option" style="--i: <%= index %>">
|
|
<%= form.radio_button name,
|
|
value,
|
|
data: {
|
|
action: "change->knob#optionChanged change->form#submit",
|
|
index: index,
|
|
knob_target: "option"
|
|
},
|
|
disabled: disabled %>
|
|
<span><%= value %></span>
|
|
</label>
|
|
<% end %>
|
|
|
|
<%= form.range_field :slider,
|
|
class: "knob__slider",
|
|
data: { action: "input->knob#sliderChanged change->form#submit", knob_target: "slider" },
|
|
"aria-hidden": true,
|
|
max: knob_options.length - 1,
|
|
min: 0,
|
|
disabled: disabled
|
|
%>
|
|
|
|
<div class="knob__knob" aria-hidden></div>
|
|
</div>
|
|
|
|
<div id="<%= dom_id(form.object, name) %>" class="knob__label">Days</div>
|
|
</fieldset>
|