rails_bootstrap_form 0.9.1 → 0.9.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (30) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +25 -1
  3. data/CONTRIBUTING.md +146 -0
  4. data/Gemfile.lock +1 -1
  5. data/README.md +76 -44
  6. data/lib/rails_bootstrap_form/bootstrap_form_builder.rb +5 -2
  7. data/lib/rails_bootstrap_form/field_wrapper_builder.rb +50 -49
  8. data/lib/rails_bootstrap_form/helpers/buttons.rb +3 -3
  9. data/lib/rails_bootstrap_form/helpers/choice.rb +81 -0
  10. data/lib/rails_bootstrap_form/helpers/help_text.rb +3 -3
  11. data/lib/rails_bootstrap_form/helpers/labels.rb +16 -16
  12. data/lib/rails_bootstrap_form/helpers.rb +10 -11
  13. data/lib/rails_bootstrap_form/input_group_builder.rb +14 -14
  14. data/lib/rails_bootstrap_form/inputs/base.rb +21 -18
  15. data/lib/rails_bootstrap_form/inputs/check_box.rb +12 -20
  16. data/lib/rails_bootstrap_form/inputs/collection_check_boxes.rb +10 -5
  17. data/lib/rails_bootstrap_form/inputs/collection_radio_buttons.rb +10 -5
  18. data/lib/rails_bootstrap_form/inputs/collection_select.rb +3 -3
  19. data/lib/rails_bootstrap_form/inputs/color_field.rb +9 -4
  20. data/lib/rails_bootstrap_form/inputs/grouped_collection_select.rb +3 -3
  21. data/lib/rails_bootstrap_form/inputs/radio_button.rb +11 -19
  22. data/lib/rails_bootstrap_form/inputs/range_field.rb +4 -4
  23. data/lib/rails_bootstrap_form/inputs/rich_text_area.rb +3 -3
  24. data/lib/rails_bootstrap_form/inputs/select.rb +3 -3
  25. data/lib/rails_bootstrap_form/inputs/time_zone_select.rb +3 -3
  26. data/lib/rails_bootstrap_form/inputs/weekday_select.rb +3 -3
  27. data/lib/rails_bootstrap_form/version.rb +1 -1
  28. metadata +4 -4
  29. data/lib/rails_bootstrap_form/helpers/check_box.rb +0 -86
  30. data/lib/rails_bootstrap_form/helpers/radio_button.rb +0 -82
@@ -0,0 +1,81 @@
1
+ # -*- encoding: utf-8 -*-
2
+ # -*- frozen_string_literal: true -*-
3
+ # -*- warn_indent: true -*-
4
+
5
+ module RailsBootstrapForm
6
+ module Helpers
7
+ module Choice
8
+ extend ActiveSupport::Concern
9
+
10
+ def self.included(base_class)
11
+ [:check_box, :radio_button].each do |tag_name|
12
+ define_method("#{tag_name}_label") do |attribute, value, options, bootstrap|
13
+ label_options = {
14
+ class: choice_label_classes(attribute, bootstrap, options)
15
+ }
16
+ label_options[:value] = value if tag_name.eql?(:radio_button)
17
+ label_options[:for] = options[:id] if options[:id].present?
18
+
19
+ label_text = label_text(attribute, bootstrap)
20
+
21
+ label(attribute, label_text, label_options)
22
+ end
23
+ end
24
+
25
+ [:check_box, :radio_button].each do |tag_name|
26
+ define_method("bootstrap_#{tag_name}") do |attribute, value, options, bootstrap|
27
+ options[:class] = choice_classes(attribute, options)
28
+
29
+ if tag_name.eql?(:check_box)
30
+ choice_field = check_box_without_bootstrap(attribute, options, value, nil)
31
+ choice_label = check_box_label(attribute, value, options, bootstrap)
32
+ else
33
+ choice_field = radio_button_without_bootstrap(attribute, value, options)
34
+ choice_label = radio_button_label(attribute, value, options, bootstrap)
35
+ end
36
+
37
+ choice_field + choice_label
38
+ end
39
+ end
40
+
41
+ def choice_classes(attribute, options)
42
+ classes = Array("form-check-input") << options[:class]
43
+ classes << "is-invalid" if is_invalid?(attribute)
44
+ classes.flatten.compact
45
+ end
46
+
47
+ def choice_label_classes(attribute, bootstrap, options)
48
+ classes = Array("form-check-label") << bootstrap.additional_label_class
49
+ classes << "required" if is_field_required?(attribute, options)
50
+ classes << "is-invalid" if is_invalid?(attribute)
51
+ classes << bootstrap.hide_class if bootstrap.hide_label?
52
+ classes.flatten.compact
53
+ end
54
+
55
+ def choice_container_classes(bootstrap)
56
+ classes = Array(bootstrap.field_col_wrapper_class)
57
+ classes << field_offset_class(bootstrap.label_col_wrapper_class)
58
+ classes.flatten.compact
59
+ end
60
+
61
+ def choice_wrapper_classes(bootstrap)
62
+ classes = Array("form-check")
63
+ classes << "form-check-inline" if bootstrap.inline?
64
+ classes << "form-switch" if bootstrap.switch?
65
+ classes.flatten.compact
66
+ end
67
+
68
+ def collection_input_checked?(checked, obj, input_value)
69
+ checked == input_value || Array(checked).try(:include?, input_value) ||
70
+ checked == obj || Array(checked).try(:include?, obj)
71
+ end
72
+
73
+ private :choice_classes, :choice_label_classes,
74
+ :choice_container_classes, :choice_wrapper_classes,
75
+ :check_box_label, :radio_button_label,
76
+ :bootstrap_check_box, :bootstrap_radio_button,
77
+ :collection_input_checked?
78
+ end
79
+ end
80
+ end
81
+ end
@@ -8,10 +8,10 @@ module RailsBootstrapForm
8
8
  extend ActiveSupport::Concern
9
9
 
10
10
  def self.included(base_class)
11
- def help_text(attribute, bootstrap_options)
12
- return if bootstrap_options.help_text == false
11
+ def help_text(attribute, bootstrap)
12
+ return if bootstrap.help_text == false
13
13
 
14
- help_text = (bootstrap_options.help_text || scoped_help_text(attribute))
14
+ help_text = (bootstrap.help_text || scoped_help_text(attribute))
15
15
 
16
16
  tag.div(help_text, class: "form-text text-muted") if help_text.present?
17
17
  end
@@ -8,42 +8,42 @@ module RailsBootstrapForm
8
8
  extend ActiveSupport::Concern
9
9
 
10
10
  def self.included(base_class)
11
- def draw_label(attribute, options, bootstrap_options)
12
- unless bootstrap_options.skip_label? && !bootstrap_options.floating?
11
+ def draw_label(attribute, options, bootstrap)
12
+ unless bootstrap.skip_label? && !bootstrap.floating?
13
13
  label_options = {
14
- class: label_classes(attribute, options, bootstrap_options)
14
+ class: label_classes(attribute, options, bootstrap)
15
15
  }
16
16
  label_options[:for] = options[:id] if options[:id].present?
17
- label_text = label_text(attribute, bootstrap_options)
17
+ label_text = label_text(attribute, bootstrap)
18
18
 
19
19
  label(attribute, label_text, label_options)
20
20
  end
21
21
  end
22
22
 
23
- def label_classes(attribute, options, bootstrap_options)
23
+ def label_classes(attribute, options, bootstrap)
24
24
  classes = []
25
- classes << label_layout_classes(bootstrap_options)
26
- classes << bootstrap_options.additional_label_class
27
- classes << bootstrap_options.hide_class if hide_class_required?(bootstrap_options)
25
+ classes << label_layout_classes(bootstrap)
26
+ classes << bootstrap.additional_label_class
27
+ classes << bootstrap.hide_class if hide_class_required?(bootstrap)
28
28
  classes << "required" if is_field_required?(attribute, options)
29
29
  classes << "is-invalid" if is_invalid?(attribute)
30
30
  classes.flatten.compact
31
31
  end
32
32
 
33
- def label_layout_classes(bootstrap_options)
34
- if bootstrap_options.layout_horizontal?
35
- [bootstrap_options.label_col_class, bootstrap_options.label_col_wrapper_class]
33
+ def label_layout_classes(bootstrap)
34
+ if bootstrap.layout_horizontal?
35
+ [bootstrap.label_col_class, bootstrap.label_col_wrapper_class]
36
36
  else
37
- bootstrap_options.label_class
37
+ bootstrap.label_class
38
38
  end
39
39
  end
40
40
 
41
- def label_text(attribute, bootstrap_options)
42
- bootstrap_options.label_text || object&.class.try(:human_attribute_name, attribute)
41
+ def label_text(attribute, bootstrap)
42
+ bootstrap.label_text || object&.class.try(:human_attribute_name, attribute)
43
43
  end
44
44
 
45
- def hide_class_required?(bootstrap_options)
46
- bootstrap_options.hide_label? || (bootstrap_options.layout_inline? && !bootstrap_options.floating?)
45
+ def hide_class_required?(bootstrap)
46
+ bootstrap.hide_label? || (bootstrap.layout_inline? && !bootstrap.floating?)
47
47
  end
48
48
 
49
49
  private :draw_label, :label_classes, :label_text, :label_layout_classes,
@@ -11,30 +11,29 @@ module RailsBootstrapForm
11
11
  autoload :Labels
12
12
  autoload :RequiredField
13
13
  autoload :Errors
14
- autoload :CheckBox
15
- autoload :RadioButton
16
14
  autoload :Buttons
15
+ autoload :Choice
17
16
 
18
17
  include HelpText
19
18
  include Labels
20
19
  include RequiredField
21
20
  include Errors
22
- include CheckBox
23
- include RadioButton
24
21
  include Buttons
22
+ include Choice
25
23
 
26
24
  def self.included(base_class)
27
- def collection_input_checked?(checked, obj, input_value)
28
- checked == input_value || Array(checked).try(:include?, input_value) ||
29
- checked == obj || Array(checked).try(:include?, obj)
25
+ def sanitized_tag_name(attribute, value)
26
+ # label's `for` attribute needs to match checkbox/radio button tag's id, IE sanitized value, IE
27
+ # https://github.com/rails/rails/blob/5-0-stable/actionview/lib/action_view/helpers/tags/base.rb#L123-L125
28
+ "#{@object_name}_#{attribute}_#{value.to_s.gsub(/\s/, "_").gsub(/[^-[[:word:]]]/, "").mb_chars.downcase}"
30
29
  end
31
30
 
32
31
  def control_specific_class(field_tag_name)
33
32
  "rails-bootstrap-forms-#{field_tag_name.to_s.tr("_", "-")}"
34
33
  end
35
34
 
36
- def is_size_valid?(bootstrap_options)
37
- bootstrap_options.size && %i(sm lg).include?(bootstrap_options.size)
35
+ def is_size_valid?(bootstrap)
36
+ bootstrap.size && %i(sm lg).include?(bootstrap.size)
38
37
  end
39
38
 
40
39
  def field_offset_class(label_col_wrapper_class)
@@ -52,8 +51,8 @@ module RailsBootstrapForm
52
51
  options.delete(:class) if options[:class].blank?
53
52
  end
54
53
 
55
- private :collection_input_checked?, :control_specific_class, :is_size_valid?,
56
- :add_css_class!, :remove_css_class!
54
+ private :control_specific_class, :is_size_valid?, :add_css_class!,
55
+ :remove_css_class!
57
56
  end
58
57
  end
59
58
  end
@@ -7,17 +7,17 @@ module RailsBootstrapForm
7
7
  extend ActiveSupport::Concern
8
8
 
9
9
  def self.included(base_class)
10
- def input_group_wrapper(attribute, bootstrap_options, &block)
10
+ def input_group_wrapper(attribute, bootstrap, &block)
11
11
  input = capture(&block) || ActiveSupport::SafeBuffer.new
12
12
 
13
- if input_group_required?(bootstrap_options)
14
- prepend = attach_input(bootstrap_options, :prepend)
15
- append = attach_input(bootstrap_options, :append)
13
+ if input_group_required?(bootstrap)
14
+ prepend = attach_input(bootstrap, :prepend)
15
+ append = attach_input(bootstrap, :append)
16
16
 
17
17
  input = prepend + input + append
18
18
  input += generate_error(attribute)
19
19
 
20
- input = tag.div(input, class: input_group_classes(attribute, bootstrap_options))
20
+ input = tag.div(input, class: input_group_classes(attribute, bootstrap))
21
21
  else
22
22
  input += generate_error(attribute)
23
23
  end
@@ -25,18 +25,18 @@ module RailsBootstrapForm
25
25
  input
26
26
  end
27
27
 
28
- def input_group_classes(attribute, bootstrap_options)
29
- classes = Array("input-group") << bootstrap_options.additional_input_group_class
30
- if is_size_valid?(bootstrap_options)
31
- classes << "input-group-#{bootstrap_options.size}"
28
+ def input_group_classes(attribute, bootstrap)
29
+ classes = Array("input-group") << bootstrap.additional_input_group_class
30
+ if is_size_valid?(bootstrap)
31
+ classes << "input-group-#{bootstrap.size}"
32
32
  end
33
33
  # Require `has-validation` class if field has errors.
34
34
  classes << "has-validation" if is_invalid?(attribute)
35
35
  classes.flatten.compact
36
36
  end
37
37
 
38
- def attach_input(bootstrap_options, key)
39
- tags = [*bootstrap_options.send(key)].map do |item|
38
+ def attach_input(bootstrap, key)
39
+ tags = [*bootstrap.send(key)].map do |item|
40
40
  input_group_content(item)
41
41
  end
42
42
 
@@ -49,10 +49,10 @@ module RailsBootstrapForm
49
49
  tag.span(content.html_safe, class: "input-group-text")
50
50
  end
51
51
 
52
- def input_group_required?(bootstrap_options)
52
+ def input_group_required?(bootstrap)
53
53
  [
54
- bootstrap_options.prepend,
55
- bootstrap_options.append
54
+ bootstrap.prepend,
55
+ bootstrap.append
56
56
  ].any?(&:present?)
57
57
  end
58
58
 
@@ -8,23 +8,26 @@ module RailsBootstrapForm
8
8
  extend ActiveSupport::Concern
9
9
 
10
10
  included do
11
- def inputs_collection(attribute, collection, value_method, text_method, bootstrap_options, options = {})
11
+ def inputs_collection(attribute, collection, value_method, text_method, bootstrap, options = {})
12
12
  inputs = ActiveSupport::SafeBuffer.new
13
13
 
14
14
  collection.each do |object|
15
+ value = object.send(value_method)
16
+
15
17
  input_options = {
16
18
  bootstrap: {
17
19
  label_text: text_method.respond_to?(:call) ? text_method.call(object) : object.send(text_method),
18
- help_text: false,
19
- inline: bootstrap_options.inline?
20
- }
20
+ inline: bootstrap.inline?
21
+ },
22
+ required: false,
23
+ id: sanitized_tag_name(attribute, value)
21
24
  }.deep_merge!(options)
22
25
 
23
26
  if (checked = input_options[:checked])
24
- input_options[:checked] = collection_input_checked?(checked, object, object.send(value_method))
27
+ input_options[:checked] = collection_input_checked?(checked, object, value)
25
28
  end
26
29
 
27
- input_value = value_method.respond_to?(:call) ? value_method.call(object) : object.send(value_method)
30
+ input_value = value_method.respond_to?(:call) ? value_method.call(object) : value
28
31
 
29
32
  inputs << yield(attribute, input_value, input_options)
30
33
  end
@@ -34,26 +37,26 @@ module RailsBootstrapForm
34
37
  end
35
38
 
36
39
  class_methods do
37
- def bootstrap_field(field_name)
38
- define_method(field_name) do |attribute, options = {}|
39
- bootstrap_options = bootstrap_form_options.scoped(options.delete(:bootstrap))
40
- return super(attribute, options) if bootstrap_options.disabled?
40
+ def bootstrap_field(tag_name)
41
+ define_method(tag_name) do |attribute, options = {}|
42
+ bootstrap = bootstrap_form_options.scoped(options.delete(:bootstrap))
43
+ return super(attribute, options) if bootstrap.disabled?
41
44
 
42
- field_wrapper_builder(attribute, bootstrap_options, options) do
45
+ field_wrapper_builder(attribute, bootstrap, options) do
43
46
  super(attribute, options)
44
47
  end
45
48
  end
46
49
  end
47
50
 
48
- def bootstrap_select_group(field_name)
49
- define_method(field_name) do |attribute, options = {}, html_options = {}|
50
- options = {bootstrap: {field_class: "form-select"}}.deep_merge!(options)
51
+ def bootstrap_select_group(tag_name)
52
+ define_method(tag_name) do |attribute, options = {}, html_options = {}|
53
+ options = {bootstrap: {field_class: "form-select", floating: false}}.deep_merge!(options)
51
54
 
52
- bootstrap_options = bootstrap_form_options.scoped(options.delete(:bootstrap))
53
- return super(attribute, options, html_options) if bootstrap_options.disabled?
55
+ bootstrap = bootstrap_form_options.scoped(options.delete(:bootstrap))
56
+ return super(attribute, options, html_options) if bootstrap.disabled?
54
57
 
55
- field_wrapper_builder(attribute, bootstrap_options, options, html_options) do
56
- tag.fieldset(class: control_specific_class(field_name)) do
58
+ field_wrapper_builder(attribute, bootstrap, options, html_options) do
59
+ tag.fieldset(class: control_specific_class(tag_name)) do
57
60
  super(attribute, options, html_options)
58
61
  end
59
62
  end
@@ -8,32 +8,24 @@ module RailsBootstrapForm
8
8
  extend ActiveSupport::Concern
9
9
 
10
10
  included do
11
- def check_box(attribute, options = {}, checked_value = "1", unchecked_value = "0", &block)
12
- bootstrap_options = bootstrap_form_options.scoped(options.delete(:bootstrap))
13
- return super if bootstrap_options.disabled?
11
+ def check_box(attribute, options = {}, checked_value = "1", unchecked_value = "0")
12
+ bootstrap = bootstrap_form_options.scoped(options.delete(:bootstrap))
13
+ return super if bootstrap.disabled?
14
14
 
15
- options[:class] = check_box_classes(attribute, options)
16
-
17
- check_box_field = super(attribute, options, checked_value, unchecked_value)
18
- check_box_help_text = help_text(attribute, bootstrap_options)
19
-
20
- check_box_label = check_box_label(attribute, checked_value, options, bootstrap_options, &block)
21
-
22
- check_box_html = tag.div(**check_box_wrapper_options(bootstrap_options)) do
23
- concat(check_box_field)
24
- concat(check_box_label)
25
- concat(check_box_help_text)
26
- concat(generate_error(attribute)) if (is_invalid?(attribute) && !bootstrap_options.inline?)
15
+ check_box_html = tag.div(class: choice_wrapper_classes(bootstrap)) do
16
+ concat(bootstrap_check_box(attribute, checked_value, options, bootstrap))
17
+ concat(help_text(attribute, bootstrap))
18
+ concat(generate_error(attribute)) if is_invalid?(attribute)
27
19
  end
28
20
 
29
- if (bootstrap_options.layout_horizontal? && !bootstrap_options.inline?)
30
- tag.div(class: field_wrapper_classes(bootstrap_options)) do
31
- tag.div(class: check_box_container_classes(bootstrap_options)) do
21
+ if bootstrap.wrapper
22
+ tag.div(**field_wrapper_options(bootstrap)) do
23
+ if bootstrap.layout_horizontal?
24
+ tag.div(class: choice_container_classes(bootstrap)) { check_box_html }
25
+ else
32
26
  check_box_html
33
27
  end
34
28
  end
35
- elsif bootstrap_options.layout_inline?
36
- tag.div(class: "col-12") { check_box_html }
37
29
  else
38
30
  check_box_html
39
31
  end
@@ -9,18 +9,23 @@ module RailsBootstrapForm
9
9
 
10
10
  included do
11
11
  def collection_check_boxes(attribute, collection, value_method, text_method, options = {}, html_options = {})
12
- bootstrap_options = bootstrap_form_options.scoped(options.delete(:bootstrap))
13
- return super if bootstrap_options.disabled?
12
+ bootstrap = bootstrap_form_options.scoped(options.delete(:bootstrap))
13
+ bootstrap.floating = false
14
+ return super if bootstrap.disabled?
14
15
 
15
- inputs = inputs_collection(attribute, collection, value_method, text_method, bootstrap_options, options) do |attribute, value, options|
16
- check_box(attribute, options, value, nil)
16
+ inputs = inputs_collection(attribute, collection, value_method, text_method, bootstrap, options) do |attribute, value, options|
17
+ bootstrap_opts = bootstrap_form_options.scoped(options.delete(:bootstrap))
18
+
19
+ tag.div(class: choice_wrapper_classes(bootstrap_opts)) do
20
+ bootstrap_check_box(attribute, value, options, bootstrap_opts)
21
+ end
17
22
  end
18
23
 
19
24
  if options.delete(:include_hidden) { true }
20
25
  inputs.prepend(hidden_field(attribute, value: "", multiple: options[:multiple]))
21
26
  end
22
27
 
23
- field_wrapper_builder(attribute, bootstrap_options, options, html_options) do
28
+ field_wrapper_builder(attribute, bootstrap, options, html_options) do
24
29
  concat(tag.div(class: control_specific_class(:collection_check_boxes)) do
25
30
  concat(inputs)
26
31
  end)
@@ -9,14 +9,19 @@ module RailsBootstrapForm
9
9
 
10
10
  included do
11
11
  def collection_radio_buttons(attribute, collection, value_method, text_method, options = {}, html_options = {})
12
- bootstrap_options = bootstrap_form_options.scoped(options.delete(:bootstrap))
13
- return super if bootstrap_options.disabled?
12
+ bootstrap = bootstrap_form_options.scoped(options.delete(:bootstrap))
13
+ bootstrap.floating = false
14
+ return super if bootstrap.disabled?
14
15
 
15
- inputs = inputs_collection(attribute, collection, value_method, text_method, bootstrap_options, options) do |attribute, value, options|
16
- radio_button(attribute, value, options)
16
+ inputs = inputs_collection(attribute, collection, value_method, text_method, bootstrap, options) do |attribute, value, options|
17
+ bootstrap_opts = bootstrap_form_options.scoped(options.delete(:bootstrap))
18
+
19
+ tag.div(class: choice_wrapper_classes(bootstrap_opts)) do
20
+ bootstrap_radio_button(attribute, value, options, bootstrap_opts)
21
+ end
17
22
  end
18
23
 
19
- field_wrapper_builder(attribute, bootstrap_options, options, html_options) do
24
+ field_wrapper_builder(attribute, bootstrap, options, html_options) do
20
25
  concat(tag.div(class: control_specific_class(:collection_radio_buttons)) do
21
26
  concat(inputs)
22
27
  end)
@@ -11,10 +11,10 @@ module RailsBootstrapForm
11
11
  def collection_select(attribute, collection, value_method, text_method, options = {}, html_options = {})
12
12
  options = {bootstrap: {field_class: "form-select"}}.deep_merge!(options)
13
13
 
14
- bootstrap_options = bootstrap_form_options.scoped(options.delete(:bootstrap))
15
- return super if bootstrap_options.disabled?
14
+ bootstrap = bootstrap_form_options.scoped(options.delete(:bootstrap))
15
+ return super if bootstrap.disabled?
16
16
 
17
- field_wrapper_builder(attribute, bootstrap_options, options, html_options) do
17
+ field_wrapper_builder(attribute, bootstrap, options, html_options) do
18
18
  super(attribute, collection, value_method, text_method, options, html_options)
19
19
  end
20
20
  end
@@ -9,12 +9,17 @@ module RailsBootstrapForm
9
9
 
10
10
  included do
11
11
  def color_field(attribute, options = {})
12
- options = {bootstrap: {field_class: "form-control form-control-color"}}.deep_merge!(options)
12
+ options = {
13
+ bootstrap: {
14
+ field_class: "form-control form-control-color",
15
+ floating: false
16
+ }
17
+ }.deep_merge!(options)
13
18
 
14
- bootstrap_options = bootstrap_form_options.scoped(options.delete(:bootstrap))
15
- return super if bootstrap_options.disabled?
19
+ bootstrap = bootstrap_form_options.scoped(options.delete(:bootstrap))
20
+ return super if bootstrap.disabled?
16
21
 
17
- field_wrapper_builder(attribute, bootstrap_options, options) do
22
+ field_wrapper_builder(attribute, bootstrap, options) do
18
23
  super(attribute, options)
19
24
  end
20
25
  end
@@ -11,10 +11,10 @@ module RailsBootstrapForm
11
11
  def grouped_collection_select(attribute, collection, group_method, group_label_method, option_key_method, option_value_method, options = {}, html_options = {})
12
12
  options = {bootstrap: {field_class: "form-select"}}.deep_merge!(options)
13
13
 
14
- bootstrap_options = bootstrap_form_options.scoped(options.delete(:bootstrap))
15
- return super if bootstrap_options.disabled?
14
+ bootstrap = bootstrap_form_options.scoped(options.delete(:bootstrap))
15
+ return super if bootstrap.disabled?
16
16
 
17
- field_wrapper_builder(attribute, bootstrap_options, options, html_options) do
17
+ field_wrapper_builder(attribute, bootstrap, options, html_options) do
18
18
  super(attribute, collection, group_method, group_label_method, option_key_method, option_value_method, options, html_options)
19
19
  end
20
20
  end
@@ -9,31 +9,23 @@ module RailsBootstrapForm
9
9
 
10
10
  included do
11
11
  def radio_button(attribute, value, options = {})
12
- bootstrap_options = bootstrap_form_options.scoped(options.delete(:bootstrap))
13
- return super if bootstrap_options.disabled?
12
+ bootstrap = bootstrap_form_options.scoped(options.delete(:bootstrap))
13
+ return super if bootstrap.disabled?
14
14
 
15
- options[:class] = radio_button_classes(attribute, options)
16
-
17
- radio_button_field = super(attribute, value, options)
18
- radio_button_help_text = help_text(attribute, bootstrap_options)
19
-
20
- radio_button_label = radio_button_label(attribute, value, options, bootstrap_options)
21
-
22
- radio_button_html = tag.div(**radio_button_wrapper_options(bootstrap_options)) do
23
- concat(radio_button_field)
24
- concat(radio_button_label)
25
- concat(radio_button_help_text)
26
- concat(generate_error(attribute)) if (is_invalid?(attribute) && !bootstrap_options.inline?)
15
+ radio_button_html = tag.div(class: choice_wrapper_classes(bootstrap)) do
16
+ concat(bootstrap_radio_button(attribute, value, options, bootstrap))
17
+ concat(help_text(attribute, bootstrap))
18
+ concat(generate_error(attribute)) if is_invalid?(attribute)
27
19
  end
28
20
 
29
- if (bootstrap_options.layout_horizontal? && !bootstrap_options.inline?)
30
- tag.div(class: field_wrapper_classes(bootstrap_options)) do
31
- tag.div(class: radio_button_container_classes(bootstrap_options)) do
21
+ if bootstrap.wrapper
22
+ tag.div(**field_wrapper_options(bootstrap)) do
23
+ if bootstrap.layout_horizontal?
24
+ tag.div(class: choice_container_classes(bootstrap)) { radio_button_html }
25
+ else
32
26
  radio_button_html
33
27
  end
34
28
  end
35
- elsif bootstrap_options.layout_inline?
36
- tag.div(class: "col-12") { radio_button_html }
37
29
  else
38
30
  radio_button_html
39
31
  end
@@ -9,12 +9,12 @@ module RailsBootstrapForm
9
9
 
10
10
  included do
11
11
  def range_field(attribute, options = {})
12
- options = {bootstrap: {field_class: "form-range"}}.deep_merge!(options)
12
+ options = {bootstrap: {field_class: "form-range", floating: false}}.deep_merge!(options)
13
13
 
14
- bootstrap_options = bootstrap_form_options.scoped(options.delete(:bootstrap))
15
- return super if bootstrap_options.disabled?
14
+ bootstrap = bootstrap_form_options.scoped(options.delete(:bootstrap))
15
+ return super if bootstrap.disabled?
16
16
 
17
- field_wrapper_builder(attribute, bootstrap_options, options) do
17
+ field_wrapper_builder(attribute, bootstrap, options) do
18
18
  super(attribute, options)
19
19
  end
20
20
  end
@@ -11,10 +11,10 @@ module RailsBootstrapForm
11
11
  def rich_text_area(attribute, options = {})
12
12
  options[:class] = ["trix-content", options[:class]].compact.join(" ")
13
13
 
14
- bootstrap_options = bootstrap_form_options.scoped(options.delete(:bootstrap))
15
- return super if bootstrap_options.disabled?
14
+ bootstrap = bootstrap_form_options.scoped(options.delete(:bootstrap))
15
+ return super if bootstrap.disabled?
16
16
 
17
- field_wrapper_builder(attribute, bootstrap_options, options) do
17
+ field_wrapper_builder(attribute, bootstrap, options) do
18
18
  super(attribute, options)
19
19
  end
20
20
  end
@@ -11,10 +11,10 @@ module RailsBootstrapForm
11
11
  def select(attribute, choices = nil, options = {}, html_options = {}, &block)
12
12
  options = {bootstrap: {field_class: "form-select"}}.deep_merge!(options)
13
13
 
14
- bootstrap_options = bootstrap_form_options.scoped(options.delete(:bootstrap))
15
- return super if bootstrap_options.disabled?
14
+ bootstrap = bootstrap_form_options.scoped(options.delete(:bootstrap))
15
+ return super if bootstrap.disabled?
16
16
 
17
- field_wrapper_builder(attribute, bootstrap_options, options, html_options) do
17
+ field_wrapper_builder(attribute, bootstrap, options, html_options) do
18
18
  super(attribute, choices, options, html_options, &block)
19
19
  end
20
20
  end
@@ -11,10 +11,10 @@ module RailsBootstrapForm
11
11
  def time_zone_select(attribute, priority_zones = nil, options = {}, html_options = {})
12
12
  options = {bootstrap: {field_class: "form-select"}}.deep_merge!(options)
13
13
 
14
- bootstrap_options = bootstrap_form_options.scoped(options.delete(:bootstrap))
15
- return super if bootstrap_options.disabled?
14
+ bootstrap = bootstrap_form_options.scoped(options.delete(:bootstrap))
15
+ return super if bootstrap.disabled?
16
16
 
17
- field_wrapper_builder(attribute, bootstrap_options, options, html_options) do
17
+ field_wrapper_builder(attribute, bootstrap, options, html_options) do
18
18
  super(attribute, priority_zones, options, html_options)
19
19
  end
20
20
  end
@@ -11,10 +11,10 @@ module RailsBootstrapForm
11
11
  def weekday_select(attribute, options = {}, html_options = {}, &block)
12
12
  options = {bootstrap: {field_class: "form-select"}}.deep_merge!(options)
13
13
 
14
- bootstrap_options = bootstrap_form_options.scoped(options.delete(:bootstrap))
15
- return super if bootstrap_options.disabled?
14
+ bootstrap = bootstrap_form_options.scoped(options.delete(:bootstrap))
15
+ return super if bootstrap.disabled?
16
16
 
17
- field_wrapper_builder(attribute, bootstrap_options, options, html_options) do
17
+ field_wrapper_builder(attribute, bootstrap, options, html_options) do
18
18
  super(attribute, options, html_options, &block)
19
19
  end
20
20
  end
@@ -3,6 +3,6 @@
3
3
  # -*- warn_indent: true -*-
4
4
 
5
5
  module RailsBootstrapForm
6
- VERSION = "0.9.1".freeze
6
+ VERSION = "0.9.3".freeze
7
7
  REQUIRED_RAILS_VERSION = "~> 7.0".freeze
8
8
  end