bootstrap_form 5.2.0 → 5.2.2
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 +4 -4
- data/CHANGELOG.md +6 -3
- data/README.md +41 -22
- data/RELEASING.md +24 -9
- data/Rakefile +4 -12
- data/lib/bootstrap_form/components/validation.rb +9 -7
- data/lib/bootstrap_form/form_builder.rb +1 -1
- data/lib/bootstrap_form/inputs/base.rb +2 -2
- data/lib/bootstrap_form/inputs/range_field.rb +1 -1
- data/lib/bootstrap_form/inputs.rb +1 -1
- data/lib/bootstrap_form/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4f254a69bb17aa95e9b912696e17d960c76a8b276946e3e33a0c4ade55cc3a38
|
4
|
+
data.tar.gz: 5d7d83dd48e78fc1dfbb9be6cea0cf12a4bdc9dbe646e3720152e4f78953adb3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2e9d0227f8d07cd40fd0986cb67f0b86de8c759fd7e7b60d42e3ea8dd0d825555a62b5f60de26e30a8b08985cc9b38e42e765338d1ca628e50c5a8841ca64756
|
7
|
+
data.tar.gz: 74034f6ad801fea16c3002242b80647eed61732c9a15c8d6b4197f59cd232c7d361974ef42697fa4b81f03100d73e7699794a0a5454da03661bde1677045ee42
|
data/CHANGELOG.md
CHANGED
@@ -6,11 +6,14 @@ https://github.com/bootstrap-ruby/bootstrap_form/releases
|
|
6
6
|
|
7
7
|
## Diffs
|
8
8
|
|
9
|
-
- [
|
9
|
+
- [5.2.2](https://github.com/bootstrap-ruby/bootstrap_form/compare/v5.2.1...v5.2.2)
|
10
|
+
[Closed issues](https://github.com/bootstrap-ruby/bootstrap_form/issues?q=closed%3A2023-05-23T10%3A00..2023-05-28T16%3A00)
|
11
|
+
- [5.2.1](https://github.com/bootstrap-ruby/bootstrap_form/compare/v5.2.0...v5.2.1)
|
12
|
+
[Closed issues](https://github.com/bootstrap-ruby/bootstrap_form/issues?q=closed%3A2023-05-20T23%3A59..2023-05-23T10%3A00)
|
10
13
|
- [5.2.0](https://github.com/bootstrap-ruby/bootstrap_form/compare/v5.1.0...v5.2.0)
|
11
|
-
[
|
14
|
+
[Closed issues](https://github.com/bootstrap-ruby/bootstrap_form/issues?q=closed%3A2022-06-25T17%3A22..2023-05-20T23%3A59)
|
12
15
|
- [5.1.0](https://github.com/bootstrap-ruby/bootstrap_form/compare/v5.0.0...v5.1.0)
|
13
|
-
[
|
16
|
+
[Closed issues](https://github.com/bootstrap-ruby/bootstrap_form/issues?q=closed%3A2021-11-12T05%3A58..2022-06-25T17%3A22)
|
14
17
|
- [5.0.0](https://github.com/bootstrap-ruby/bootstrap_form/compare/v4.5.0...v5.0.0)
|
15
18
|
- [4.5.0](https://github.com/bootstrap-ruby/bootstrap_form/compare/v4.4.0...v4.5.0)
|
16
19
|
- [4.4.0](https://github.com/bootstrap-ruby/bootstrap_form/compare/v4.3.0...v4.4.0)
|
data/README.md
CHANGED
@@ -125,8 +125,6 @@ This generates:
|
|
125
125
|
|
126
126
|
### bootstrap_form_with
|
127
127
|
|
128
|
-
Note that `form_with` in Rails 5.1 does not add IDs to form elements and labels by default, which are both important to Bootstrap markup. This behaviour is corrected in Rails 5.2.
|
129
|
-
|
130
128
|
To get started, just use the `bootstrap_form_with` helper in place of `form_with`. Here's an example:
|
131
129
|
|
132
130
|

|
@@ -200,7 +198,7 @@ date_field password_field time_field
|
|
200
198
|
date_select phone_field time_select
|
201
199
|
datetime_field radio_button time_zone_select
|
202
200
|
datetime_local_field range_field url_field
|
203
|
-
datetime_select rich_text_area
|
201
|
+
datetime_select rich_text_area week_field
|
204
202
|
```
|
205
203
|
|
206
204
|
By default, the helpers generate a `label` tag, and an `input`, `select`, or `textarea` tag, by calling the Rails `label` helper, and then the Rails helper with the same name as the `bootstrap_form` helper.
|
@@ -753,7 +751,7 @@ This generates:
|
|
753
751
|
```html
|
754
752
|
<div class="mb-3">
|
755
753
|
<label class="form-label" for="user_excellence">Excellence</label>
|
756
|
-
<input class="form-
|
754
|
+
<input class="form-range" id="user_excellence" name="user[excellence]" type="range">
|
757
755
|
</div>
|
758
756
|
```
|
759
757
|
|
@@ -946,8 +944,6 @@ will be rendered as
|
|
946
944
|
|
947
945
|
## Rich Text Areas AKA Trix Editor
|
948
946
|
|
949
|
-
If you're using Rails 6, `bootstrap_form` supports the `rich_text_area` helper.
|
950
|
-
|
951
947
|

|
952
948
|
```erb
|
953
949
|
<%= f.rich_text_area(:life_story) %>
|
@@ -1369,18 +1365,29 @@ Rails normally wraps fields with validation errors in a `div.field_with_errors`,
|
|
1369
1365
|
By default, fields that have validation errors will be outlined in red and the
|
1370
1366
|
error will be displayed below the field. Here's an example:
|
1371
1367
|
|
1368
|
+

|
1369
|
+
```erb
|
1370
|
+
<%= bootstrap_form_for(@user_with_error) do |f| %>
|
1371
|
+
<%= f.email_field :email %>
|
1372
|
+
<% end %>
|
1373
|
+
```
|
1374
|
+
|
1375
|
+
Generated HTML:
|
1376
|
+
|
1372
1377
|
```html
|
1373
|
-
<
|
1374
|
-
<
|
1375
|
-
|
1376
|
-
|
1377
|
-
</div>
|
1378
|
+
<form accept-charset="UTF-8" action="/users" class="new_user" id="new_user" method="post">
|
1379
|
+
<div class="mb-3">
|
1380
|
+
<label class="form-label required" for="user_email">Email</label>
|
1381
|
+
<input aria-required="true" class="form-control is-invalid" id="user_email" name="user[email]" required="required" type="email" value="steve.example.com">
|
1382
|
+
<div class="invalid-feedback">is invalid</div>
|
1383
|
+
</div>
|
1384
|
+
</form>
|
1378
1385
|
```
|
1379
1386
|
|
1380
1387
|
You can turn off inline errors for the entire form like this:
|
1381
1388
|
|
1382
1389
|
```erb
|
1383
|
-
<%= bootstrap_form_for(@
|
1390
|
+
<%= bootstrap_form_for(@user_with_error, inline_errors: false) do |f| %>
|
1384
1391
|
...
|
1385
1392
|
<% end %>
|
1386
1393
|
```
|
@@ -1390,12 +1397,24 @@ You can turn off inline errors for the entire form like this:
|
|
1390
1397
|
You can also display validation errors in the field's label; just turn
|
1391
1398
|
on the `:label_errors` option. Here's an example:
|
1392
1399
|
|
1400
|
+

|
1393
1401
|
```erb
|
1394
|
-
<%= bootstrap_form_for(@
|
1395
|
-
|
1402
|
+
<%= bootstrap_form_for(@user_with_error, label_errors: true) do |f| %>
|
1403
|
+
<%= f.email_field :email %>
|
1396
1404
|
<% end %>
|
1397
1405
|
```
|
1398
1406
|
|
1407
|
+
Generated HTML:
|
1408
|
+
|
1409
|
+
```html
|
1410
|
+
<form accept-charset="UTF-8" action="/users" class="new_user" id="new_user" method="post">
|
1411
|
+
<div class="mb-3">
|
1412
|
+
<label class="form-label required text-danger" for="user_email">Email is invalid</label>
|
1413
|
+
<input aria-required="true" class="form-control is-invalid" id="user_email" name="user[email]" required="required" type="email" value="steve.example.com">
|
1414
|
+
</div>
|
1415
|
+
</form>
|
1416
|
+
```
|
1417
|
+
|
1399
1418
|
By default, turning on `:label_errors` will also turn off
|
1400
1419
|
`:inline_errors`. If you want both turned on, you can do that too:
|
1401
1420
|
|
@@ -1411,7 +1430,7 @@ To display an error message with an error summary, you can use the
|
|
1411
1430
|
`alert_message` helper. This won't output anything unless a model validation
|
1412
1431
|
has failed.
|
1413
1432
|
|
1414
|
-

|
1415
1434
|
```erb
|
1416
1435
|
<%= bootstrap_form_for @user_with_error do |f| %>
|
1417
1436
|
<%= f.alert_message "Please fix the errors below." %>
|
@@ -1434,7 +1453,7 @@ Which outputs:
|
|
1434
1453
|
|
1435
1454
|
You can turn off the error summary like this:
|
1436
1455
|
|
1437
|
-

|
1438
1457
|
```erb
|
1439
1458
|
<%= bootstrap_form_for @user_with_error do |f| %>
|
1440
1459
|
<%= f.alert_message "Please fix the errors below.", error_summary: false %>
|
@@ -1451,7 +1470,7 @@ This generates:
|
|
1451
1470
|
|
1452
1471
|
To output a simple unordered list of errors, use the `error_summary` helper.
|
1453
1472
|
|
1454
|
-

|
1455
1474
|
```erb
|
1456
1475
|
<%= bootstrap_form_for @user_with_error do |f| %>
|
1457
1476
|
<%= f.error_summary %>
|
@@ -1473,7 +1492,7 @@ Which outputs:
|
|
1473
1492
|
|
1474
1493
|
If you want to display a custom inline error for a specific attribute not represented by a form field, use the `errors_on` helper.
|
1475
1494
|
|
1476
|
-

|
1477
1496
|
```erb
|
1478
1497
|
<%= bootstrap_form_for @user_with_error do |f| %>
|
1479
1498
|
<%= f.errors_on :email %>
|
@@ -1490,7 +1509,7 @@ Which outputs:
|
|
1490
1509
|
|
1491
1510
|
You can hide the attribute name like this:
|
1492
1511
|
|
1493
|
-

|
1494
1513
|
```erb
|
1495
1514
|
<%= bootstrap_form_for @user_with_error do |f| %>
|
1496
1515
|
<%= f.errors_on :email, hide_attribute_name: true %>
|
@@ -1507,7 +1526,7 @@ Which outputs:
|
|
1507
1526
|
|
1508
1527
|
You can also use a custom class for the wrapping div, like this:
|
1509
1528
|
|
1510
|
-

|
1511
1530
|
```erb
|
1512
1531
|
<%= bootstrap_form_for @user_with_error do |f| %>
|
1513
1532
|
<%= f.errors_on :email, custom_class: 'custom-error' %>
|
@@ -1542,7 +1561,7 @@ ActiveModel::Validations::PresenceValidator.
|
|
1542
1561
|
|
1543
1562
|
In cases where this behaviour is undesirable, use the `required` option to force the class to be present or absent:
|
1544
1563
|
|
1545
|
-

|
1546
1565
|
```erb
|
1547
1566
|
<%= f.password_field :login, label: "New Username", required: true %>
|
1548
1567
|
<%= f.password_field :password, label: "New Password", required: false %>
|
@@ -1565,7 +1584,7 @@ This generates:
|
|
1565
1584
|
|
1566
1585
|
Adding a form control for a `belongs_to` field will automatically pick up the associated presence validator.
|
1567
1586
|
|
1568
|
-

|
1569
1588
|
```erb
|
1570
1589
|
<%= bootstrap_form_for(@address, url: '/address') do |f| %>
|
1571
1590
|
<%= f.collection_select :user_id, @users, :id, :email, include_blank: "Select a value" %>
|
data/RELEASING.md
CHANGED
@@ -10,22 +10,37 @@ Follow these steps to release a new version of bootstrap_form to rubygems.org.
|
|
10
10
|
|
11
11
|
## How to release
|
12
12
|
|
13
|
-
1.
|
13
|
+
1. Make sure that you have all the gems necessary for testing and releasing.
|
14
|
+
|
15
|
+
BUNDLE_GEMFILE=gemfiles/7.0.gemfile bundle update
|
16
|
+
|
14
17
|
2. **Ensure the tests are passing by running the tests**
|
15
18
|
|
16
19
|
(There should be no errors or warnings.)
|
17
20
|
|
18
21
|
BUNDLE_GEMFILE=gemfiles/7.0.gemfile bundle exec rake test
|
19
22
|
|
20
|
-
|
23
|
+
3. **Ensure the demo tests are passing by running**
|
21
24
|
|
22
25
|
cd demo
|
23
26
|
bundle update
|
24
27
|
bundle exec rake test:all
|
25
|
-
|
26
|
-
|
27
|
-
4.
|
28
|
-
5. Update the
|
29
|
-
6. Update the
|
30
|
-
7.
|
31
|
-
8.
|
28
|
+
cd -
|
29
|
+
|
30
|
+
4. Determine which would be the correct next version number according to [semver](http://semver.org/).
|
31
|
+
5. Update the version in `./lib/bootstrap_form/version.rb`.
|
32
|
+
6. Update the GitHub diff links at the beginning of `CHANGELOG.md` (The pattern should be obvious when you look at them).
|
33
|
+
7. Update the installation instructions in `README.md` to use the new version.
|
34
|
+
8. Commit the CHANGELOG and version changes in a single commit; the message should be "Preparing vX.Y.Z" where `X.Y.Z` is the version being released.
|
35
|
+
9. Tag, push to GitHub, and publish to rubygems.org:
|
36
|
+
|
37
|
+
bundle exec rake release
|
38
|
+
|
39
|
+
10. Go to https://github.com/bootstrap-ruby/bootstrap_form/releases and create the new release and add release notes by clicking the "Generate release notes" button.
|
40
|
+
Add the link of closed issues from CHANGELOG.
|
41
|
+
Group the commits in sections:
|
42
|
+
* ### New features
|
43
|
+
* ### Bugfixes
|
44
|
+
* ### Performance
|
45
|
+
* ### Documentation
|
46
|
+
* ### Development
|
data/Rakefile
CHANGED
@@ -1,12 +1,14 @@
|
|
1
1
|
begin
|
2
2
|
require 'bundler/setup'
|
3
|
+
|
4
|
+
require 'bundler/gem_tasks'
|
5
|
+
require "minitest/test_task"
|
6
|
+
require 'rdoc/task'
|
3
7
|
require 'rubocop/rake_task'
|
4
8
|
rescue LoadError
|
5
9
|
puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
|
6
10
|
end
|
7
11
|
|
8
|
-
require 'rdoc/task'
|
9
|
-
|
10
12
|
RDoc::Task.new(:rdoc) do |rdoc|
|
11
13
|
rdoc.rdoc_dir = 'rdoc'
|
12
14
|
rdoc.title = 'BootstrapForm'
|
@@ -15,10 +17,6 @@ RDoc::Task.new(:rdoc) do |rdoc|
|
|
15
17
|
rdoc.rdoc_files.include('lib/**/*.rb')
|
16
18
|
end
|
17
19
|
|
18
|
-
require 'bundler/gem_tasks'
|
19
|
-
|
20
|
-
require "minitest/test_task"
|
21
|
-
|
22
20
|
Minitest::TestTask.create(:test) do |t|
|
23
21
|
t.libs << "test"
|
24
22
|
t.libs << "lib"
|
@@ -26,12 +24,6 @@ Minitest::TestTask.create(:test) do |t|
|
|
26
24
|
t.test_globs = ["test/**/*_test.rb"]
|
27
25
|
end
|
28
26
|
|
29
|
-
# This automatically updates GitHub Releases whenever we `rake release` the gem
|
30
|
-
task "release:rubygem_push" do
|
31
|
-
require "chandler/tasks"
|
32
|
-
Rake.application.invoke_task("chandler:push")
|
33
|
-
end
|
34
|
-
|
35
27
|
desc 'Run RuboCop checks'
|
36
28
|
RuboCop::RakeTask.new(:rubocop)
|
37
29
|
|
@@ -12,7 +12,7 @@ module BootstrapForm
|
|
12
12
|
end
|
13
13
|
|
14
14
|
def association_error?(name)
|
15
|
-
object.class.reflections
|
15
|
+
object.class.try(:reflections)&.any? do |association_name, a|
|
16
16
|
next unless a.is_a?(ActiveRecord::Reflection::BelongsToReflection)
|
17
17
|
next unless a.foreign_key == name.to_s
|
18
18
|
|
@@ -26,21 +26,23 @@ module BootstrapForm
|
|
26
26
|
target = obj.instance_of?(Class) ? obj : obj.class
|
27
27
|
return false unless target.respond_to? :validators_on
|
28
28
|
|
29
|
-
presence_validator?(
|
29
|
+
presence_validator?(target_unconditional_validators(target, attribute)) ||
|
30
30
|
required_association?(target, attribute)
|
31
31
|
end
|
32
32
|
|
33
33
|
def required_association?(target, attribute)
|
34
|
-
target.reflections
|
34
|
+
target.try(:reflections)&.find do |name, a|
|
35
35
|
next unless a.is_a?(ActiveRecord::Reflection::BelongsToReflection)
|
36
36
|
next unless a.foreign_key == attribute.to_s
|
37
37
|
|
38
|
-
presence_validator?(
|
38
|
+
presence_validator?(target_unconditional_validators(target, name))
|
39
39
|
end
|
40
40
|
end
|
41
41
|
|
42
|
-
def
|
43
|
-
target.validators_on(attribute)
|
42
|
+
def target_unconditional_validators(target, attribute)
|
43
|
+
target.validators_on(attribute)
|
44
|
+
.reject { |validator| validator.options[:if].present? || validator.options[:unless].present? }
|
45
|
+
.map(&:class)
|
44
46
|
end
|
45
47
|
|
46
48
|
def presence_validator?(target_validators)
|
@@ -65,7 +67,7 @@ module BootstrapForm
|
|
65
67
|
|
66
68
|
def get_error_messages(name)
|
67
69
|
messages = object.errors[name]
|
68
|
-
object.class.reflections
|
70
|
+
object.class.try(:reflections)&.each do |association_name, a|
|
69
71
|
next unless a.is_a?(ActiveRecord::Reflection::BelongsToReflection)
|
70
72
|
next unless a.foreign_key == name.to_s
|
71
73
|
|
@@ -33,7 +33,7 @@ module BootstrapForm
|
|
33
33
|
include BootstrapForm::Inputs::PhoneField
|
34
34
|
include BootstrapForm::Inputs::RadioButton
|
35
35
|
include BootstrapForm::Inputs::RangeField
|
36
|
-
include BootstrapForm::Inputs::RichTextArea
|
36
|
+
include BootstrapForm::Inputs::RichTextArea
|
37
37
|
include BootstrapForm::Inputs::SearchField
|
38
38
|
include BootstrapForm::Inputs::Select
|
39
39
|
include BootstrapForm::Inputs::TelephoneField
|
@@ -6,8 +6,8 @@ module BootstrapForm
|
|
6
6
|
extend ActiveSupport::Concern
|
7
7
|
|
8
8
|
class_methods do
|
9
|
-
def bootstrap_field(field_name)
|
10
|
-
define_method "#{field_name}_with_bootstrap" do |name, options={}|
|
9
|
+
def bootstrap_field(field_name, control_class: nil)
|
10
|
+
define_method "#{field_name}_with_bootstrap" do |name, options={ control_class: control_class }.compact|
|
11
11
|
form_group_builder(name, options) do
|
12
12
|
prepend_and_append_input(name, options) do
|
13
13
|
options[:placeholder] ||= name if options[:floating]
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bootstrap_form
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 5.2.
|
4
|
+
version: 5.2.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Stephen Potenza
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: exe
|
11
11
|
cert_chain: []
|
12
|
-
date: 2023-05-
|
12
|
+
date: 2023-05-28 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: actionpack
|