Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 3 additions & 2 deletions lib/bootstrap_form/helpers/bootstrap.rb
Original file line number Diff line number Diff line change
Expand Up @@ -75,9 +75,10 @@ def prepend_and_append_input(name, options, &)
input = capture(&) || ActiveSupport::SafeBuffer.new

input = attach_input(options, :prepend) + input + attach_input(options, :append)
input << generate_error(name, id)
error = generate_error(name, id)
input << error
options.present? &&
input = tag.div(input, class: ["input-group", options[:input_group_class]].compact)
input = tag.div(input, class: ["input-group", ("has-validation" if error), options[:input_group_class]].compact)
input
end

Expand Down
20 changes: 19 additions & 1 deletion test/bootstrap_form_group_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -195,7 +195,7 @@ class BootstrapFormGroupTest < ActionView::TestCase
<form accept-charset="UTF-8" action="/users" class="new_user" id="new_user" method="post">
<div class="mb-3">
<label class="form-label required" for="user_email">Email</label>
<div class="input-group">
<div class="input-group has-validation">
<span class="input-group-text">$</span>
<input required="required" class="form-control is-invalid" id="user_email" aria-describedby="user_email_feedback" name="user[email]" type="text" />
<span class="input-group-text">.00</span>
Expand All @@ -207,6 +207,24 @@ class BootstrapFormGroupTest < ActionView::TestCase
assert_equivalent_html expected, bootstrap_form_for(@user) { |f| f.text_field :email, prepend: "$", append: ".00" }
end

test "adding prepend text with validation error and inline errors turned off" do
@user.email = nil
assert @user.invalid?

expected = <<~HTML
<form accept-charset="UTF-8" action="/users" class="new_user" id="new_user" method="post">
<div class="mb-3">
<label class="form-label required" for="user_email">Email</label>
<div class="input-group">
<span class="input-group-text">$</span>
<input required="required" class="form-control is-invalid" id="user_email" aria-describedby="user_email_feedback" name="user[email]" type="text" />
</div>
</div>
</form>
HTML
assert_equivalent_html expected, bootstrap_form_for(@user, inline_errors: false) { |f| f.text_field :email, prepend: "$" }
end

test "file field with prepend text" do
expected = <<~HTML
<div class="mb-3">
Expand Down