diff --git a/Gemfile b/Gemfile index 7a27d0c9..71dc2ee4 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" diff --git a/demo/app/models/user.rb b/demo/app/models/user.rb index fea3172b..34293855 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 diff --git a/lib/bootstrap_form/inputs/collection_check_boxes.rb b/lib/bootstrap_form/inputs/collection_check_boxes.rb index b3b8fcca..65991186 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 diff --git a/lib/bootstrap_form/inputs/file_field.rb b/lib/bootstrap_form/inputs/file_field.rb index 92b19517..6bfb71de 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 diff --git a/test/bootstrap_form_group_test.rb b/test/bootstrap_form_group_test.rb index 47abc7b7..f09b3102 100644 --- a/test/bootstrap_form_group_test.rb +++ b/test/bootstrap_form_group_test.rb @@ -195,6 +195,51 @@ 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 "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