From 599e9a3b4007927f2276b7193ee09b6a5ab3ac7a Mon Sep 17 00:00:00 2001 From: Walter Davis Date: Tue, 15 Apr 2025 14:17:39 -0400 Subject: [PATCH 1/6] naive application of the append and prepend wrapper method --- lib/bootstrap_form/inputs/file_field.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/bootstrap_form/inputs/file_field.rb b/lib/bootstrap_form/inputs/file_field.rb index 92b195179..6bfb71de7 100644 --- a/lib/bootstrap_form/inputs/file_field.rb +++ b/lib/bootstrap_form/inputs/file_field.rb @@ -10,7 +10,7 @@ module FileField def file_field_with_bootstrap(name, options={}) options = options.reverse_merge(control_class: "form-control") form_group_builder(name, options) do - input_with_error(name) do + prepend_and_append_input(name, options) do file_field_without_bootstrap(name, options) end end From f54ab63bb7d344a5b9c5b8890746b606b346dff2 Mon Sep 17 00:00:00 2001 From: Walter Lee Davis Date: Fri, 6 Jun 2025 16:55:37 -0400 Subject: [PATCH 2/6] get the tests to run at all --- Gemfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile b/Gemfile index 7a27d0c92..71dc2ee4a 100644 --- a/Gemfile +++ b/Gemfile @@ -8,4 +8,4 @@ gem "drb" if Gem::Version.new(RUBY_VERSION) >= Gem::Version.new("3.4.0") gem "mutex_m" if Gem::Version.new(RUBY_VERSION) >= Gem::Version.new("3.4.0") gem "rails", BootstrapForm::REQUIRED_RAILS_VERSION gem "sprockets-rails", require: "sprockets/railtie" -gem "sqlite3", "~> 1.4" +gem "sqlite3", ">= 1.4" From 92676b1d340a682ea5e3b8c55846e8ed0fbf1e5f Mon Sep 17 00:00:00 2001 From: Walter Lee Davis Date: Fri, 6 Jun 2025 16:59:46 -0400 Subject: [PATCH 3/6] two Rubocop suggestions, one accepted --- demo/app/models/user.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/demo/app/models/user.rb b/demo/app/models/user.rb index fea3172bf..342938557 100644 --- a/demo/app/models/user.rb +++ b/demo/app/models/user.rb @@ -10,12 +10,12 @@ class User < ApplicationRecord validates :status, presence: true, if: -> { age > 42 } validates :misc, presence: true, unless: -> { feet == 5 } - has_one :address + has_one :address, dependent: nil accepts_nested_attributes_for :address has_rich_text(:life_story) - def always + def always # rubocop:disable Naming/PredicateMethod true end From 9a59f8fe3e197ad76f7467d89f55b3d4eb533bdb Mon Sep 17 00:00:00 2001 From: Walter Lee Davis Date: Fri, 6 Jun 2025 17:03:05 -0400 Subject: [PATCH 4/6] added two tests for wrapped file input --- test/bootstrap_form_group_test.rb | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/test/bootstrap_form_group_test.rb b/test/bootstrap_form_group_test.rb index 47abc7b75..8a1418ef1 100644 --- a/test/bootstrap_form_group_test.rb +++ b/test/bootstrap_form_group_test.rb @@ -195,6 +195,32 @@ class BootstrapFormGroupTest < ActionView::TestCase assert_equivalent_html expected, bootstrap_form_for(@user) { |f| f.text_field :email, prepend: "$", append: ".00" } end + test "file field with prepend text" do + expected = <<~HTML +
+ +
+ before + +
+
+ HTML + assert_equivalent_html expected, @builder.file_field(:avatar, prepend: "before") + end + + test "file field with append text" do + expected = <<~HTML +
+ +
+ + after +
+
+ HTML + assert_equivalent_html expected, @builder.file_field(:avatar, append: "after") + end + test "help messages for default forms" do expected = <<~HTML
From b4dcd48edc78b0b0144f114bf5d698eaf933835e Mon Sep 17 00:00:00 2001 From: Walter Lee Davis Date: Fri, 6 Jun 2025 17:07:09 -0400 Subject: [PATCH 5/6] rubocop corrections in collection checkbox --- lib/bootstrap_form/inputs/collection_check_boxes.rb | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/bootstrap_form/inputs/collection_check_boxes.rb b/lib/bootstrap_form/inputs/collection_check_boxes.rb index b3b8fcca9..659911862 100644 --- a/lib/bootstrap_form/inputs/collection_check_boxes.rb +++ b/lib/bootstrap_form/inputs/collection_check_boxes.rb @@ -34,11 +34,11 @@ def field_name(method, *methods, multiple: false, index: @options[:index]) def field_name_shim(object_name, method_name, *method_names, multiple: false, index: nil) names = method_names.map! { |name| "[#{name}]" }.join if object_name.blank? - "#{method_name}#{names}#{multiple ? '[]' : ''}" + "#{method_name}#{names}#{'[]' if multiple}" elsif index - "#{object_name}[#{index}][#{method_name}]#{names}#{multiple ? '[]' : ''}" + "#{object_name}[#{index}][#{method_name}]#{names}#{'[]' if multiple}" else - "#{object_name}[#{method_name}]#{names}#{multiple ? '[]' : ''}" + "#{object_name}[#{method_name}]#{names}#{'[]' if multiple}" end end end From 9f3078b119728b7c08d152cafb2b2aedb299d95e Mon Sep 17 00:00:00 2001 From: Walter Lee Davis Date: Fri, 6 Jun 2025 17:19:50 -0400 Subject: [PATCH 6/6] add tests with buttons --- test/bootstrap_form_group_test.rb | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/test/bootstrap_form_group_test.rb b/test/bootstrap_form_group_test.rb index 8a1418ef1..f09b31026 100644 --- a/test/bootstrap_form_group_test.rb +++ b/test/bootstrap_form_group_test.rb @@ -221,6 +221,25 @@ class BootstrapFormGroupTest < ActionView::TestCase assert_equivalent_html expected, @builder.file_field(:avatar, append: "after") end + test "file field with append and prepend button" do + prefix = '
' + field = <<~HTML + + HTML + button_src = link_to("Click", "#", class: "btn btn-secondary") + button_prepend = button_src + button_append = button_src + suffix = "
" + after_button = prefix + field + button_append + suffix + before_button = prefix + button_prepend + field + suffix + both_button = prefix + button_prepend + field + button_append + suffix + multiple_button = prefix + button_prepend + button_prepend + field + button_append + button_append + suffix + assert_equivalent_html after_button, @builder.file_field(:avatar, append: button_src) + assert_equivalent_html before_button, @builder.file_field(:avatar, prepend: button_src) + assert_equivalent_html both_button, @builder.file_field(:avatar, append: button_src, prepend: button_src) + assert_equivalent_html multiple_button, @builder.file_field(:avatar, append: [button_src] * 2, prepend: [button_src] * 2) + end + test "help messages for default forms" do expected = <<~HTML