rails_bootstrap_form 0.5.1 → 0.5.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 75f1c7df21987622c3341031991186ceff26dc21f48c301ee2017fb47dd1074a
4
- data.tar.gz: e84fbf45f5bcff4bfad1904253c5e549fa616ebc9d646b762facb78cca121ce7
3
+ metadata.gz: 1031de2aa81bb74657e9a45f334c4dc4d67ee673e89874358881d8021388d8b9
4
+ data.tar.gz: 4a5d3c85afb71bd06005eb95c0b8abb76a429a46ea49f22b470943bba2a6f7ae
5
5
  SHA512:
6
- metadata.gz: ee6cf0a877cff1e96ccc3e95495c331f41c5af536a23332b58669a10f6c6db6c3f1dc9f5fd3cd2fc2e51c0040380e18a7477231f4b108d306593dfc1f6844fa7
7
- data.tar.gz: 39f8e46ae208727fd81127cb3c8de3f32878c16b957ff21fc882f6a250e7972bd00f573dd4dd6a958140d7564e57a4e70e1a86eb30c484e73b3ab42ece3a2bb5
6
+ metadata.gz: 188081d3651b5f6977df21c3bfb4436e44b3d96685ef8b6fc36b7805056b205ab77ced5f3ad4d3094217116e47f04e8a07a914db1f073c60be664bd4acf33694
7
+ data.tar.gz: 180295d5dbc0159f5181183be148203565d877d874d978074af43dd31ba0cfb7e7d8d2be3bcf3d3c72e1abe6d4ff58636da8c4386be3b09d64380edc4ef06b2d
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- rails_bootstrap_form (0.5.1)
4
+ rails_bootstrap_form (0.5.3)
5
5
 
6
6
  GEM
7
7
  remote: http://rubygems.org/
@@ -83,6 +83,7 @@ GEM
83
83
  crass (1.0.6)
84
84
  date (3.3.3)
85
85
  diff-lcs (1.5.0)
86
+ docile (1.4.0)
86
87
  erubi (1.12.0)
87
88
  execjs (2.8.1)
88
89
  ffi (1.15.5)
@@ -176,6 +177,12 @@ GEM
176
177
  sprockets (> 3.0)
177
178
  sprockets-rails
178
179
  tilt
180
+ simplecov (0.22.0)
181
+ docile (~> 1.1)
182
+ simplecov-html (~> 0.11)
183
+ simplecov_json_formatter (~> 0.1)
184
+ simplecov-html (0.12.3)
185
+ simplecov_json_formatter (0.1.4)
179
186
  sprockets (4.2.0)
180
187
  concurrent-ruby (~> 1.0)
181
188
  rack (>= 2.2.4, < 4)
@@ -207,6 +214,7 @@ DEPENDENCIES
207
214
  rake (~> 13.0)
208
215
  rspec-rails
209
216
  sassc-rails
217
+ simplecov
210
218
  sprockets-rails
211
219
  sqlite3 (~> 1.4)
212
220
 
@@ -4,7 +4,7 @@
4
4
  </div>
5
5
  <div class="card-body">
6
6
  <%= bootstrap_form_for @user, bootstrap_form: {} do |form| %>
7
- <%= form.text_field :name, autocomplete: "new-name", bootstrap_form: {} %>
7
+ <%= form.text_field :name, autocomplete: "new-name", class: "dsds", bootstrap_form: {} %>
8
8
  <%= form.text_field :email, autocomplete: "new-email", bootstrap_form: {} %>
9
9
  <%= form.text_field :password, autocomplete: "new-password" %>
10
10
  <%= form.phone_field :mobile_number %>
@@ -12,13 +12,13 @@
12
12
  <%= form.check_box :terms, bootstrap_form: {switch: false}, required: true %>
13
13
  <%= form.range_field :excellence %>
14
14
  <%= form.url_field :blog_url %>
15
- <%= form.collection_radio_buttons :fruit_id, ::Fruit.all, :id, :name, {bootstrap_form: {layout: :inline}, checked: form.object.fruit_id} %>
15
+ <%= form.collection_radio_buttons :fruit_id, ::Fruit.all, :id, :name, {bootstrap_form: {inline: true}, checked: form.object.fruit_id} %>
16
16
  <%= form.color_field :favorite_color %>
17
- <%= form.collection_check_boxes :skill_ids, ::Skill.all, :id, :name, {bootstrap_form: {layout: :inline}} %>
17
+ <%= form.collection_check_boxes :skill_ids, ::Skill.all, :id, :name, {bootstrap_form: {inline: true}} %>
18
18
  <%= form.fields_for :address, include_id: false do |address_form| %>
19
19
  <%= address_form.text_area :street %>
20
20
  <%= address_form.text_field :state %>
21
- <%= address_form.grouped_collection_select :city, ::Country.all, :cities, :name, :id, :name, {include_blank: "Select city"} %>
21
+ <%= address_form.grouped_collection_select :city, ::Country.includes(:cities), :cities, :name, :id, :name, {include_blank: "Select city"} %>
22
22
  <%= address_form.text_field :postal_code %>
23
23
  <%= address_form.select :country_id, options_for_select(::Country.pluck(:name, :id), address_form.object.country_id),
24
24
  {include_blank: "Select Country", bootstrap_form: {}} %>
@@ -18,6 +18,9 @@ gem "bootstrap", "~> 5.3.0.alpha3"
18
18
  # Use sqlite3 as the database for Active Record
19
19
  gem "sqlite3", "~> 1.4"
20
20
 
21
+ # Library to show coverage of the code.
22
+ gem "simplecov"
23
+
21
24
  group :development do
22
25
  gem "puma"
23
26
  end
@@ -90,25 +90,40 @@ module RailsBootstrapForm
90
90
  # Default is `false`.
91
91
  attr_accessor :switch
92
92
 
93
+ # Controls the HTML attributes and options that will be added to the field wrapper.
94
+ # Default is `{}`.
95
+ attr_accessor :wrapper_options
96
+
97
+ # Option to specify the size of input groups and fields.
98
+ # The valid values are `sm` and `lg`. The default value is `nil`.
99
+ attr_accessor :size
100
+
101
+ # Option to render checkboxes and radio buttons inline.
102
+ # The default value if `false`.
103
+ #
104
+ # Example:
105
+ # form.collection_radio_buttons :choices, ["yes", "no"], :to_s, :to_s, bootstrap_form: {inline: true}
106
+ attr_accessor :inline
107
+
93
108
  def initialize(options = {})
94
109
  set_defaults
95
110
  set_bootstrap_form_options(options)
96
111
  end
97
112
 
98
- def horizontal?
113
+ def layout_horizontal?
99
114
  @layout.to_s == "horizontal"
100
115
  end
101
116
 
102
- def inline?
117
+ def layout_inline?
103
118
  @layout.to_s == "inline"
104
119
  end
105
120
 
106
- def vertical?
121
+ def layout_vertical?
107
122
  @layout.to_s == "vertical"
108
123
  end
109
124
 
110
- def floating?
111
- @layout.to_s == "floating"
125
+ def inline?
126
+ self.inline
112
127
  end
113
128
 
114
129
  # This will return a copy of `BootstrapFormOptions` object with new options set
@@ -152,6 +167,12 @@ module RailsBootstrapForm
152
167
  @static_field_class = "form-control-plaintext"
153
168
 
154
169
  @switch = false
170
+
171
+ @wrapper_options = {}
172
+
173
+ @size = nil
174
+
175
+ @inline = false
155
176
  end
156
177
 
157
178
  private :set_defaults
@@ -27,6 +27,12 @@ module RailsBootstrapForm
27
27
  end
28
28
  end
29
29
 
30
+ def check_box_wrapper_options(bootstrap_options)
31
+ {}.tap do |option|
32
+ option[:class] = check_box_wrapper_class(bootstrap_options)
33
+ end.merge(bootstrap_options.wrapper_options)
34
+ end
35
+
30
36
  def check_box_label_text(attribute, options, bootstrap_options, &block)
31
37
  block ? capture(&block) : label_text(attribute, bootstrap_options)
32
38
  end
@@ -56,6 +62,7 @@ module RailsBootstrapForm
56
62
  classes = Array("form-check")
57
63
  classes << "form-switch" if bootstrap_options.switch
58
64
  classes << "form-check-inline" if bootstrap_options.inline?
65
+ classes << "mb-3"
59
66
  classes.flatten.compact
60
67
  end
61
68
 
@@ -8,12 +8,15 @@ module RailsBootstrapForm
8
8
  extend ActiveSupport::Concern
9
9
 
10
10
  def self.included(base_class)
11
- def draw_label(attribute, bootstrap_options)
11
+ def draw_label(attribute, options, bootstrap_options)
12
12
  unless bootstrap_options.skip_label
13
- label_class = label_classes(attribute, bootstrap_options)
13
+ label_options = {
14
+ class: label_classes(attribute, bootstrap_options)
15
+ }
16
+ label_options[:for] = options[:id] if options[:id].present?
14
17
  label_text = label_text(attribute, bootstrap_options)
15
18
 
16
- label(attribute, label_text, class: label_class)
19
+ label(attribute, label_text, label_options)
17
20
  end
18
21
  end
19
22
 
@@ -28,6 +28,12 @@ module RailsBootstrapForm
28
28
  end
29
29
  end
30
30
 
31
+ def radio_button_wrapper_options(bootstrap_options)
32
+ {}.tap do |option|
33
+ option[:class] = radio_button_wrapper_class(bootstrap_options)
34
+ end.merge(bootstrap_options.wrapper_options)
35
+ end
36
+
31
37
  def radio_button_value(attribute, value)
32
38
  # label's `for` attribute needs to match checkbox tag's id,
33
39
  # IE sanitized value, IE
@@ -52,6 +58,7 @@ module RailsBootstrapForm
52
58
  def radio_button_wrapper_class(bootstrap_options)
53
59
  classes = Array("form-check")
54
60
  classes << "form-check-inline" if bootstrap_options.inline?
61
+ classes << "mb-3"
55
62
  classes.flatten.compact
56
63
  end
57
64
 
@@ -13,11 +13,11 @@ module RailsBootstrapForm
13
13
  end
14
14
 
15
15
  def field_wrapper(attribute, bootstrap_options, options, &block)
16
- label = draw_label(attribute, bootstrap_options)
16
+ label = draw_label(attribute, options, bootstrap_options)
17
17
  help_text = help_text(attribute, bootstrap_options)
18
18
 
19
19
  if bootstrap_options.floating
20
- tag.div(class: field_wrapper_classes) do
20
+ tag.div(**field_wrapper_options(bootstrap_options)) do
21
21
  concat(input_group_wrapper(attribute, bootstrap_options) do
22
22
  tag.div(class: floating_label_classes(attribute)) do
23
23
  concat(capture(&block))
@@ -27,7 +27,7 @@ module RailsBootstrapForm
27
27
  concat(help_text)
28
28
  end
29
29
  else
30
- tag.div(class: field_wrapper_classes) do
30
+ tag.div(**field_wrapper_options(bootstrap_options)) do
31
31
  concat(label)
32
32
  concat(input_group_wrapper(attribute, bootstrap_options) do
33
33
  capture(&block)
@@ -37,14 +37,17 @@ module RailsBootstrapForm
37
37
  end
38
38
  end
39
39
 
40
+ def field_wrapper_options(bootstrap_options)
41
+ {}.tap do |option|
42
+ option[:class] = field_wrapper_classes
43
+ end.merge(bootstrap_options.wrapper_options)
44
+ end
45
+
40
46
  def field_wrapper_classes
41
47
  classes = [form_wrapper_default_class]
42
48
  classes.flatten.compact
43
49
  end
44
50
 
45
- def field_wrapper_options
46
- end
47
-
48
51
  def form_wrapper_default_class
49
52
  "mb-3"
50
53
  end
@@ -52,14 +55,17 @@ module RailsBootstrapForm
52
55
  def field_css_options(attribute, bootstrap_options, options, html_options)
53
56
  css_options = (html_options || options)
54
57
 
55
- field_classes = [
58
+ field_classes = Array(options[:class])
59
+ field_classes << [
56
60
  bootstrap_options.field_class,
57
61
  bootstrap_options.additional_field_class
58
62
  ]
59
63
  field_classes << "is-invalid" if is_invalid?(attribute)
64
+ if is_size_valid?(bootstrap_options)
65
+ field_classes << "#{bootstrap_options.field_class}-#{bootstrap_options.size}"
66
+ end
60
67
 
61
68
  css_options[:class] = field_classes.flatten.compact
62
-
63
69
  css_options.merge!(required_field_options(attribute, options))
64
70
 
65
71
  if bootstrap_options.floating
@@ -26,7 +26,10 @@ module RailsBootstrapForm
26
26
  end
27
27
 
28
28
  def input_group_classes(attribute, bootstrap_options)
29
- classes = ["input-group", bootstrap_options.additional_input_group_class]
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}"
32
+ end
30
33
  # Require `has-validation` class if field has errors.
31
34
  classes << "has-validation" if is_invalid?(attribute)
32
35
  classes.flatten.compact
@@ -17,7 +17,11 @@ module RailsBootstrapForm
17
17
  "rails-bootstrap-forms-#{field_tag_name.to_s.tr("_", "-")}"
18
18
  end
19
19
 
20
- private :collection_input_checked?, :control_specific_class
20
+ def is_size_valid?(bootstrap_options)
21
+ bootstrap_options.size && %i(sm lg).include?(bootstrap_options.size)
22
+ end
23
+
24
+ private :collection_input_checked?, :control_specific_class, :is_size_valid?
21
25
  end
22
26
  end
23
27
  end
@@ -45,7 +45,7 @@ module RailsBootstrapForm
45
45
  end
46
46
 
47
47
  DATE_SELECT_HELPERS.each do |field_tag_name|
48
- define_method(field_tag_name) do |attribute, options = {}, html_options = {}, &block|
48
+ define_method(field_tag_name) do |attribute, options = {}, html_options = {}|
49
49
  options = {bootstrap_form: {field_class: "form-select"}}.deep_merge!(options)
50
50
 
51
51
  field_wrapper_builder(attribute, options, html_options) do
@@ -137,7 +137,7 @@ module RailsBootstrapForm
137
137
 
138
138
  check_box_label = check_box_label(attribute, checked_value, options, bootstrap_options, &block)
139
139
 
140
- check_box_html = tag.div(class: check_box_wrapper_class(bootstrap_options)) do
140
+ check_box_html = tag.div(**check_box_wrapper_options(bootstrap_options)) do
141
141
  concat(check_box_field)
142
142
  concat(check_box_label)
143
143
  concat(check_box_help_text) unless bootstrap_options.inline?
@@ -157,7 +157,7 @@ module RailsBootstrapForm
157
157
 
158
158
  radio_button_label = radio_button_label(attribute, value, options, bootstrap_options)
159
159
 
160
- radio_button_html = tag.div(class: radio_button_wrapper_class(bootstrap_options)) do
160
+ radio_button_html = tag.div(**radio_button_wrapper_options(bootstrap_options)) do
161
161
  concat(radio_button_field)
162
162
  concat(radio_button_label)
163
163
  concat(radio_button_help_text) unless bootstrap_options.inline?
@@ -3,6 +3,6 @@
3
3
  # -*- warn_indent: true -*-
4
4
 
5
5
  module RailsBootstrapForm
6
- VERSION = "0.5.1".freeze
6
+ VERSION = "0.5.3".freeze
7
7
  REQUIRED_RAILS_VERSION = "~> 7.0".freeze
8
8
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rails_bootstrap_form
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.1
4
+ version: 0.5.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Harshal LADHE (shivam091)
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-05-20 00:00:00.000000000 Z
11
+ date: 2023-05-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: generator_spec