simple_form 3.3.1 → 3.4.0
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.
Potentially problematic release.
This version of simple_form might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/CHANGELOG.md +7 -0
- data/lib/generators/simple_form/templates/config/initializers/simple_form.rb +4 -0
- data/lib/generators/simple_form/templates/config/initializers/simple_form_bootstrap.rb +5 -0
- data/lib/generators/simple_form/templates/config/initializers/simple_form_foundation.rb +3 -0
- data/lib/simple_form.rb +1 -0
- data/lib/simple_form/components.rb +1 -0
- data/lib/simple_form/components/minlength.rb +47 -0
- data/lib/simple_form/form_builder.rb +1 -1
- data/lib/simple_form/inputs/base.rb +2 -1
- data/lib/simple_form/inputs/boolean_input.rb +6 -2
- data/lib/simple_form/inputs/collection_input.rb +4 -3
- data/lib/simple_form/inputs/password_input.rb +1 -1
- data/lib/simple_form/inputs/string_input.rb +1 -1
- data/lib/simple_form/inputs/text_input.rb +1 -1
- data/lib/simple_form/version.rb +1 -1
- data/test/form_builder/input_field_test.rb +15 -1
- data/test/inputs/boolean_input_test.rb +10 -0
- data/test/inputs/string_input_test.rb +15 -0
- data/test/inputs/text_input_test.rb +5 -0
- data/test/support/models.rb +2 -2
- data/test/test_helper.rb +2 -0
- metadata +4 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 534c9396c2be271ccbb32518e9e5026b5ff523e1
|
4
|
+
data.tar.gz: bb8085d4a664110a941f6cd7e732db16f9eef1ec
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d8e81c8af57b65150d3b9a53433c9d9adb3c5d64fa00ae70b1263a33ce05173d2dc65775ab66e91507d1db452e0f59cb254c0b5eb1ca905ec4b95bbc4eb98282
|
7
|
+
data.tar.gz: 249e0e56f352267ab529db921125ac214d6baeb17153278cba26c61951ce31867cf9d94b4188dab9e50457d2e23d6aebabacf29e475b31c8f7c85c382ab318f2
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,12 @@
|
|
1
1
|
## Unreleased
|
2
2
|
|
3
|
+
## 3.4.0
|
4
|
+
|
5
|
+
* Removed Ruby 2.4.0 `Integer` unification deprecation warning.
|
6
|
+
* Removed EOL Ruby 1.9.3 from the build matrix.
|
7
|
+
* Added `minlength` component.
|
8
|
+
* `boolean_label_class` can be set on a per-input basis.
|
9
|
+
|
3
10
|
## 3.3.1
|
4
11
|
|
5
12
|
### Bug fix
|
@@ -28,8 +28,12 @@ SimpleForm.setup do |config|
|
|
28
28
|
# extensions by default, you can change `b.optional` to `b.use`.
|
29
29
|
|
30
30
|
# Calculates maxlength from length validations for string inputs
|
31
|
+
# and/or database column lengths
|
31
32
|
b.optional :maxlength
|
32
33
|
|
34
|
+
# Calculate minlength from length validations for string inputs
|
35
|
+
b.optional :minlength
|
36
|
+
|
33
37
|
# Calculates pattern from format validations for string inputs
|
34
38
|
b.optional :pattern
|
35
39
|
|
@@ -8,6 +8,7 @@ SimpleForm.setup do |config|
|
|
8
8
|
b.use :html5
|
9
9
|
b.use :placeholder
|
10
10
|
b.optional :maxlength
|
11
|
+
b.optional :minlength
|
11
12
|
b.optional :pattern
|
12
13
|
b.optional :min_max
|
13
14
|
b.optional :readonly
|
@@ -22,6 +23,7 @@ SimpleForm.setup do |config|
|
|
22
23
|
b.use :html5
|
23
24
|
b.use :placeholder
|
24
25
|
b.optional :maxlength
|
26
|
+
b.optional :minlength
|
25
27
|
b.optional :readonly
|
26
28
|
b.use :label, class: 'control-label'
|
27
29
|
|
@@ -55,6 +57,7 @@ SimpleForm.setup do |config|
|
|
55
57
|
b.use :html5
|
56
58
|
b.use :placeholder
|
57
59
|
b.optional :maxlength
|
60
|
+
b.optional :minlength
|
58
61
|
b.optional :pattern
|
59
62
|
b.optional :min_max
|
60
63
|
b.optional :readonly
|
@@ -71,6 +74,7 @@ SimpleForm.setup do |config|
|
|
71
74
|
b.use :html5
|
72
75
|
b.use :placeholder
|
73
76
|
b.optional :maxlength
|
77
|
+
b.optional :minlength
|
74
78
|
b.optional :readonly
|
75
79
|
b.use :label, class: 'col-sm-3 control-label'
|
76
80
|
|
@@ -112,6 +116,7 @@ SimpleForm.setup do |config|
|
|
112
116
|
b.use :html5
|
113
117
|
b.use :placeholder
|
114
118
|
b.optional :maxlength
|
119
|
+
b.optional :minlength
|
115
120
|
b.optional :pattern
|
116
121
|
b.optional :min_max
|
117
122
|
b.optional :readonly
|
@@ -11,6 +11,7 @@ SimpleForm.setup do |config|
|
|
11
11
|
b.use :html5
|
12
12
|
b.use :placeholder
|
13
13
|
b.optional :maxlength
|
14
|
+
b.optional :minlength
|
14
15
|
b.optional :pattern
|
15
16
|
b.optional :min_max
|
16
17
|
b.optional :readonly
|
@@ -24,6 +25,7 @@ SimpleForm.setup do |config|
|
|
24
25
|
b.use :html5
|
25
26
|
b.use :placeholder
|
26
27
|
b.optional :maxlength
|
28
|
+
b.optional :minlength
|
27
29
|
b.optional :pattern
|
28
30
|
b.optional :min_max
|
29
31
|
b.optional :readonly
|
@@ -65,6 +67,7 @@ SimpleForm.setup do |config|
|
|
65
67
|
b.use :html5
|
66
68
|
b.use :placeholder
|
67
69
|
b.optional :maxlength
|
70
|
+
b.optional :minlength
|
68
71
|
b.optional :pattern
|
69
72
|
b.optional :min_max
|
70
73
|
b.optional :readonly
|
data/lib/simple_form.rb
CHANGED
@@ -0,0 +1,47 @@
|
|
1
|
+
module SimpleForm
|
2
|
+
module Components
|
3
|
+
# Needs to be enabled in order to do automatic lookups.
|
4
|
+
module Minlength
|
5
|
+
def minlength(wrapper_options = nil)
|
6
|
+
input_html_options[:minlength] ||= minimum_length_from_validation || limit
|
7
|
+
nil
|
8
|
+
end
|
9
|
+
|
10
|
+
private
|
11
|
+
|
12
|
+
def minimum_length_from_validation
|
13
|
+
minlength = options[:minlength]
|
14
|
+
if minlength.is_a?(String) || minlength.is_a?(Integer)
|
15
|
+
minlength
|
16
|
+
else
|
17
|
+
length_validator = find_length_validator
|
18
|
+
minimum_length_value_from(length_validator)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def find_length_validator
|
23
|
+
find_validator(:length)
|
24
|
+
end
|
25
|
+
|
26
|
+
def has_tokenizer?(length_validator)
|
27
|
+
length_validator.options[:tokenizer]
|
28
|
+
end
|
29
|
+
|
30
|
+
# Use validation with tokenizer if version of Rails is less than 5,
|
31
|
+
# if not validate without the tokenizer, if version is greater than Rails 4.
|
32
|
+
if ActionPack::VERSION::STRING < '5'
|
33
|
+
def minimum_length_value_from(length_validator)
|
34
|
+
if length_validator && !has_tokenizer?(length_validator)
|
35
|
+
length_validator.options[:is] || length_validator.options[:minimum]
|
36
|
+
end
|
37
|
+
end
|
38
|
+
elsif ActionPack::VERSION::STRING >= '5'
|
39
|
+
def minimum_length_value_from(length_validator)
|
40
|
+
if length_validator
|
41
|
+
length_validator.options[:is] || length_validator.options[:minimum]
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
@@ -12,7 +12,7 @@ module SimpleForm
|
|
12
12
|
'update' => 'edit'
|
13
13
|
}
|
14
14
|
|
15
|
-
ATTRIBUTE_COMPONENTS = [:html5, :min_max, :maxlength, :placeholder, :pattern, :readonly]
|
15
|
+
ATTRIBUTE_COMPONENTS = [:html5, :min_max, :maxlength, :minlength, :placeholder, :pattern, :readonly]
|
16
16
|
|
17
17
|
extend MapType
|
18
18
|
include SimpleForm::Inputs
|
@@ -21,6 +21,7 @@ module SimpleForm
|
|
21
21
|
include SimpleForm::Components::HTML5
|
22
22
|
include SimpleForm::Components::LabelInput
|
23
23
|
include SimpleForm::Components::Maxlength
|
24
|
+
include SimpleForm::Components::Minlength
|
24
25
|
include SimpleForm::Components::MinMax
|
25
26
|
include SimpleForm::Components::Pattern
|
26
27
|
include SimpleForm::Components::Placeholders
|
@@ -50,7 +51,7 @@ module SimpleForm
|
|
50
51
|
enable :hint
|
51
52
|
|
52
53
|
# Usually disabled, needs to be enabled explicitly passing true as option.
|
53
|
-
disable :maxlength, :placeholder, :pattern, :min_max
|
54
|
+
disable :maxlength, :minlength, :placeholder, :pattern, :min_max
|
54
55
|
|
55
56
|
def initialize(builder, attribute_name, column, input_type, options = {})
|
56
57
|
super
|
@@ -6,7 +6,7 @@ module SimpleForm
|
|
6
6
|
|
7
7
|
if nested_boolean_style?
|
8
8
|
build_hidden_field_for_checkbox +
|
9
|
-
template.label_tag(nil, class:
|
9
|
+
template.label_tag(nil, class: boolean_label_class) {
|
10
10
|
build_check_box_without_hidden_field(merged_input_options) +
|
11
11
|
inline_label
|
12
12
|
}
|
@@ -21,7 +21,7 @@ module SimpleForm
|
|
21
21
|
elsif nested_boolean_style?
|
22
22
|
html_options = label_html_options.dup
|
23
23
|
html_options[:class] ||= []
|
24
|
-
html_options[:class].push(
|
24
|
+
html_options[:class].push(boolean_label_class) if boolean_label_class
|
25
25
|
|
26
26
|
merged_input_options = merge_wrapper_options(input_html_options, wrapper_options)
|
27
27
|
|
@@ -36,6 +36,10 @@ module SimpleForm
|
|
36
36
|
|
37
37
|
private
|
38
38
|
|
39
|
+
def boolean_label_class
|
40
|
+
options[:boolean_label_class] || SimpleForm.boolean_label_class
|
41
|
+
end
|
42
|
+
|
39
43
|
# Build a checkbox tag using default unchecked value. This allows us to
|
40
44
|
# reuse the method for nested boolean style, but with no unchecked value,
|
41
45
|
# which won't generate the hidden checkbox. This is the default functionality
|
@@ -1,6 +1,9 @@
|
|
1
1
|
module SimpleForm
|
2
2
|
module Inputs
|
3
3
|
class CollectionInput < Base
|
4
|
+
BASIC_OBJECT_CLASSES = [String, Integer, Float, NilClass, Symbol, TrueClass, FalseClass]
|
5
|
+
BASIC_OBJECT_CLASSES.push(Fixnum, Bignum) unless 1.class == Integer
|
6
|
+
|
4
7
|
# Default boolean collection for use with selects/radios when no
|
5
8
|
# collection is given. Always fallback to this boolean collection.
|
6
9
|
# Texts can be translated using i18n in "simple_form.yes" and
|
@@ -90,9 +93,7 @@ module SimpleForm
|
|
90
93
|
end
|
91
94
|
|
92
95
|
def collection_includes_basic_objects?(collection_classes)
|
93
|
-
(collection_classes &
|
94
|
-
String, Integer, Fixnum, Bignum, Float, NilClass, Symbol, TrueClass, FalseClass
|
95
|
-
]).any?
|
96
|
+
(collection_classes & BASIC_OBJECT_CLASSES).any?
|
96
97
|
end
|
97
98
|
|
98
99
|
def translate_collection
|
data/lib/simple_form/version.rb
CHANGED
@@ -87,7 +87,7 @@ class InputFieldTest < ActionView::TestCase
|
|
87
87
|
assert_select 'input[pattern="\w+"]'
|
88
88
|
end
|
89
89
|
|
90
|
-
test 'builder input_field accepts custom
|
90
|
+
test 'builder input_field accepts custom pattern' do
|
91
91
|
with_input_field_for @other_validating_user, :country, as: :string, pattern: '\d+'
|
92
92
|
|
93
93
|
assert_select 'input[pattern="\d+"]'
|
@@ -105,6 +105,12 @@ class InputFieldTest < ActionView::TestCase
|
|
105
105
|
assert_select 'input.string[maxlength="25"]'
|
106
106
|
end
|
107
107
|
|
108
|
+
test 'builder input_field uses minlength component' do
|
109
|
+
with_input_field_for @validating_user, :name, as: :string
|
110
|
+
|
111
|
+
assert_select 'input.string[minlength="5"]'
|
112
|
+
end
|
113
|
+
|
108
114
|
test 'builder collection input_field generates input tag with a clean HTML' do
|
109
115
|
with_input_field_for @user, :status, collection: ['Open', 'Closed'],
|
110
116
|
class: 'status', label_method: :to_s, value_method: :to_s
|
@@ -151,6 +157,14 @@ class InputFieldTest < ActionView::TestCase
|
|
151
157
|
end
|
152
158
|
end
|
153
159
|
|
160
|
+
test 'build input_field without minlength component use the minlength string' do
|
161
|
+
swap_wrapper :default, custom_wrapper_with_html5_components do
|
162
|
+
with_input_field_for @user, :name, minlength: 5
|
163
|
+
|
164
|
+
assert_select 'input[minlength="5"]'
|
165
|
+
end
|
166
|
+
end
|
167
|
+
|
154
168
|
test 'build input_field without readonly component use the readonly string' do
|
155
169
|
swap_wrapper :default, custom_wrapper_with_html5_components do
|
156
170
|
with_input_field_for @user, :name, readonly: true
|
@@ -164,6 +164,16 @@ class BooleanInputTest < ActionView::TestCase
|
|
164
164
|
end
|
165
165
|
end
|
166
166
|
|
167
|
+
test 'input boolean allows specifying boolean_label_class on a per-input basis' do
|
168
|
+
swap_wrapper do
|
169
|
+
swap SimpleForm, boolean_style: :nested, boolean_label_class: 'foo' do
|
170
|
+
with_input_for @user, :active, :boolean, boolean_label_class: 'baz'
|
171
|
+
|
172
|
+
assert_select 'label.boolean + input[type=hidden] + label.baz > input.boolean'
|
173
|
+
end
|
174
|
+
end
|
175
|
+
end
|
176
|
+
|
167
177
|
test 'input boolean with nested style works using :input only in wrapper config (no label_input), adding the extra label wrapper with custom class' do
|
168
178
|
swap_wrapper do
|
169
179
|
swap SimpleForm, boolean_style: :nested, boolean_label_class: 'foo' do
|
@@ -32,11 +32,21 @@ class StringInputTest < ActionView::TestCase
|
|
32
32
|
assert_select 'input.string[maxlength="25"]'
|
33
33
|
end
|
34
34
|
|
35
|
+
test 'input infers minlength column definition from validation when present' do
|
36
|
+
with_input_for @validating_user, :name, :string
|
37
|
+
assert_select 'input.string[minlength="5"]'
|
38
|
+
end
|
39
|
+
|
35
40
|
if ActionPack::VERSION::STRING < '5'
|
36
41
|
test 'input does not get maxlength from validation when tokenizer present' do
|
37
42
|
with_input_for @validating_user, :action, :string
|
38
43
|
assert_no_select 'input.string[maxlength]'
|
39
44
|
end
|
45
|
+
|
46
|
+
test 'input does not get minlength from validation when tokenizer present' do
|
47
|
+
with_input_for @validating_user, :action, :string
|
48
|
+
assert_no_select 'input.string[minlength]'
|
49
|
+
end
|
40
50
|
end
|
41
51
|
|
42
52
|
test 'input gets maxlength from validation when :is option present' do
|
@@ -44,6 +54,11 @@ class StringInputTest < ActionView::TestCase
|
|
44
54
|
assert_select 'input.string[maxlength="12"]'
|
45
55
|
end
|
46
56
|
|
57
|
+
test 'input gets minlength from validation when :is option present' do
|
58
|
+
with_input_for @validating_user, :home_picture, :string
|
59
|
+
assert_select 'input.string[minlength="12"]'
|
60
|
+
end
|
61
|
+
|
47
62
|
test 'input maxlength is the column limit plus one to make room for decimal point' do
|
48
63
|
with_input_for @user, :credit_limit, :string
|
49
64
|
|
@@ -28,4 +28,9 @@ class TextInputTest < ActionView::TestCase
|
|
28
28
|
with_input_for @validating_user, :description, :text
|
29
29
|
assert_select 'textarea.text[maxlength="50"]'
|
30
30
|
end
|
31
|
+
|
32
|
+
test 'input infers minlength column definition from validation when present for text attributes' do
|
33
|
+
with_input_for @validating_user, :description, :text
|
34
|
+
assert_select 'textarea.text[minlength="15"]'
|
35
|
+
end
|
31
36
|
end
|
data/test/support/models.rb
CHANGED
@@ -236,8 +236,8 @@ class ValidatingUser < User
|
|
236
236
|
greater_than_or_equal_to: :min_attempts,
|
237
237
|
less_than_or_equal_to: :max_attempts,
|
238
238
|
only_integer: true
|
239
|
-
validates_length_of :name, maximum: 25
|
240
|
-
validates_length_of :description,
|
239
|
+
validates_length_of :name, maximum: 25, minimum: 5
|
240
|
+
validates_length_of :description, in: 15..50
|
241
241
|
if ActionPack::VERSION::STRING < '5'
|
242
242
|
validates_length_of :action, maximum: 10, tokenizer: lambda { |str| str.scan(/\w+/) }
|
243
243
|
end
|
data/test/test_helper.rb
CHANGED
@@ -55,6 +55,8 @@ class ActionView::TestCase
|
|
55
55
|
@user = User.build(extra_attributes)
|
56
56
|
|
57
57
|
@validating_user = ValidatingUser.build({
|
58
|
+
name: 'Tester McTesterson',
|
59
|
+
description: 'A test user of the most distinguised caliber',
|
58
60
|
home_picture: 'Home picture',
|
59
61
|
age: 19,
|
60
62
|
amount: 15,
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: simple_form
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.
|
4
|
+
version: 3.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- José Valim
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date:
|
13
|
+
date: 2017-01-06 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: activemodel
|
@@ -82,6 +82,7 @@ files:
|
|
82
82
|
- lib/simple_form/components/labels.rb
|
83
83
|
- lib/simple_form/components/maxlength.rb
|
84
84
|
- lib/simple_form/components/min_max.rb
|
85
|
+
- lib/simple_form/components/minlength.rb
|
85
86
|
- lib/simple_form/components/pattern.rb
|
86
87
|
- lib/simple_form/components/placeholders.rb
|
87
88
|
- lib/simple_form/components/readonly.rb
|
@@ -178,7 +179,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
178
179
|
version: '0'
|
179
180
|
requirements: []
|
180
181
|
rubyforge_project: simple_form
|
181
|
-
rubygems_version: 2.
|
182
|
+
rubygems_version: 2.6.8
|
182
183
|
signing_key:
|
183
184
|
specification_version: 4
|
184
185
|
summary: Forms made easy!
|