simple_form 2.0.0 → 3.5.1
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 +7 -0
- data/CHANGELOG.md +97 -198
- data/MIT-LICENSE +1 -1
- data/README.md +572 -296
- data/lib/generators/simple_form/install_generator.rb +17 -7
- data/lib/generators/simple_form/templates/README +3 -4
- data/lib/generators/simple_form/templates/_form.html.erb +1 -0
- data/lib/generators/simple_form/templates/_form.html.haml +1 -0
- data/lib/generators/simple_form/templates/config/initializers/{simple_form.rb.tt → simple_form.rb} +57 -63
- data/lib/generators/simple_form/templates/config/initializers/simple_form_bootstrap.rb +155 -0
- data/lib/generators/simple_form/templates/config/initializers/simple_form_foundation.rb +111 -0
- data/lib/generators/simple_form/templates/config/locales/simple_form.en.yml +14 -7
- data/lib/simple_form/action_view_extensions/builder.rb +5 -305
- data/lib/simple_form/action_view_extensions/form_helper.rb +18 -20
- data/lib/simple_form/components/errors.rb +30 -3
- data/lib/simple_form/components/hints.rb +10 -3
- data/lib/simple_form/components/html5.rb +17 -3
- data/lib/simple_form/components/label_input.rb +21 -2
- data/lib/simple_form/components/labels.rb +16 -11
- data/lib/simple_form/components/maxlength.rb +19 -12
- data/lib/simple_form/components/min_max.rb +4 -2
- data/lib/simple_form/components/minlength.rb +48 -0
- data/lib/simple_form/components/pattern.rb +5 -4
- data/lib/simple_form/components/placeholders.rb +3 -2
- data/lib/simple_form/components/readonly.rb +3 -2
- data/lib/simple_form/components.rb +15 -11
- data/lib/simple_form/error_notification.rb +4 -3
- data/lib/simple_form/form_builder.rb +283 -105
- data/lib/simple_form/helpers/autofocus.rb +1 -0
- data/lib/simple_form/helpers/disabled.rb +1 -0
- data/lib/simple_form/helpers/readonly.rb +1 -0
- data/lib/simple_form/helpers/required.rb +1 -0
- data/lib/simple_form/helpers/validators.rb +4 -3
- data/lib/simple_form/helpers.rb +7 -6
- data/lib/simple_form/i18n_cache.rb +1 -0
- data/lib/simple_form/inputs/base.rb +76 -23
- data/lib/simple_form/inputs/block_input.rb +3 -2
- data/lib/simple_form/inputs/boolean_input.rb +55 -16
- data/lib/simple_form/inputs/collection_check_boxes_input.rb +2 -1
- data/lib/simple_form/inputs/collection_input.rb +41 -18
- data/lib/simple_form/inputs/collection_radio_buttons_input.rb +11 -19
- data/lib/simple_form/inputs/collection_select_input.rb +5 -2
- data/lib/simple_form/inputs/date_time_input.rb +23 -12
- data/lib/simple_form/inputs/file_input.rb +5 -2
- data/lib/simple_form/inputs/grouped_collection_select_input.rb +16 -3
- data/lib/simple_form/inputs/hidden_input.rb +5 -2
- data/lib/simple_form/inputs/numeric_input.rb +4 -8
- data/lib/simple_form/inputs/password_input.rb +6 -4
- data/lib/simple_form/inputs/priority_input.rb +5 -2
- data/lib/simple_form/inputs/range_input.rb +2 -1
- data/lib/simple_form/inputs/string_input.rb +6 -4
- data/lib/simple_form/inputs/text_input.rb +6 -3
- data/lib/simple_form/inputs.rb +20 -17
- data/lib/simple_form/map_type.rb +1 -0
- data/lib/simple_form/railtie.rb +15 -0
- data/lib/simple_form/tags.rb +69 -0
- data/lib/simple_form/version.rb +2 -1
- data/lib/simple_form/wrappers/builder.rb +12 -35
- data/lib/simple_form/wrappers/leaf.rb +29 -0
- data/lib/simple_form/wrappers/many.rb +12 -7
- data/lib/simple_form/wrappers/root.rb +7 -4
- data/lib/simple_form/wrappers/single.rb +12 -3
- data/lib/simple_form/wrappers.rb +3 -1
- data/lib/simple_form.rb +118 -63
- data/test/action_view_extensions/builder_test.rb +230 -164
- data/test/action_view_extensions/form_helper_test.rb +107 -39
- data/test/components/label_test.rb +105 -87
- data/test/form_builder/association_test.rb +131 -62
- data/test/form_builder/button_test.rb +15 -14
- data/test/form_builder/error_notification_test.rb +11 -10
- data/test/form_builder/error_test.rb +188 -34
- data/test/form_builder/general_test.rb +247 -102
- data/test/form_builder/hint_test.rb +59 -32
- data/test/form_builder/input_field_test.rb +138 -25
- data/test/form_builder/label_test.rb +84 -13
- data/test/form_builder/wrapper_test.rb +236 -33
- data/test/generators/simple_form_generator_test.rb +15 -4
- data/test/inputs/boolean_input_test.rb +147 -13
- data/test/inputs/collection_check_boxes_input_test.rb +166 -71
- data/test/inputs/collection_radio_buttons_input_test.rb +229 -113
- data/test/inputs/collection_select_input_test.rb +222 -85
- data/test/inputs/datetime_input_test.rb +134 -47
- data/test/inputs/disabled_test.rb +62 -21
- data/test/inputs/discovery_test.rb +70 -10
- data/test/inputs/file_input_test.rb +4 -3
- data/test/inputs/general_test.rb +90 -26
- data/test/inputs/grouped_collection_select_input_test.rb +88 -23
- data/test/inputs/hidden_input_test.rb +7 -5
- data/test/inputs/numeric_input_test.rb +56 -46
- data/test/inputs/priority_input_test.rb +31 -16
- data/test/inputs/readonly_test.rb +68 -27
- data/test/inputs/required_test.rb +63 -18
- data/test/inputs/string_input_test.rb +76 -51
- data/test/inputs/text_input_test.rb +21 -8
- data/test/simple_form_test.rb +9 -0
- data/test/support/discovery_inputs.rb +39 -2
- data/test/support/misc_helpers.rb +176 -20
- data/test/support/mock_controller.rb +13 -7
- data/test/support/models.rb +187 -71
- data/test/test_helper.rb +38 -39
- metadata +53 -39
- data/lib/simple_form/core_ext/hash.rb +0 -16
- data/test/support/mock_response.rb +0 -14
|
@@ -1,8 +1,9 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
1
2
|
module SimpleForm
|
|
2
3
|
module Components
|
|
3
4
|
# Needs to be enabled in order to do automatic lookups.
|
|
4
5
|
module Maxlength
|
|
5
|
-
def maxlength
|
|
6
|
+
def maxlength(wrapper_options = nil)
|
|
6
7
|
input_html_options[:maxlength] ||= maximum_length_from_validation || limit
|
|
7
8
|
nil
|
|
8
9
|
end
|
|
@@ -15,25 +16,31 @@ module SimpleForm
|
|
|
15
16
|
maxlength
|
|
16
17
|
else
|
|
17
18
|
length_validator = find_length_validator
|
|
18
|
-
|
|
19
|
-
if length_validator && !has_tokenizer?(length_validator)
|
|
20
|
-
length_validator.options[:is] || length_validator.options[:maximum]
|
|
21
|
-
end
|
|
19
|
+
maximum_length_value_from(length_validator)
|
|
22
20
|
end
|
|
23
21
|
end
|
|
24
22
|
|
|
25
23
|
def find_length_validator
|
|
26
|
-
find_validator(
|
|
24
|
+
find_validator(:length)
|
|
27
25
|
end
|
|
28
26
|
|
|
29
27
|
def has_tokenizer?(length_validator)
|
|
30
|
-
|
|
28
|
+
length_validator.options[:tokenizer]
|
|
29
|
+
end
|
|
31
30
|
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
31
|
+
# Use validation with tokenizer if version of Rails is less than 5,
|
|
32
|
+
# if not validate without the tokenizer, if version is greater than Rails 4.
|
|
33
|
+
if ActionPack::VERSION::STRING < '5'
|
|
34
|
+
def maximum_length_value_from(length_validator)
|
|
35
|
+
if length_validator && !has_tokenizer?(length_validator)
|
|
36
|
+
length_validator.options[:is] || length_validator.options[:maximum]
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
elsif ActionPack::VERSION::STRING >= '5'
|
|
40
|
+
def maximum_length_value_from(length_validator)
|
|
41
|
+
if length_validator
|
|
42
|
+
length_validator.options[:is] || length_validator.options[:maximum]
|
|
43
|
+
end
|
|
37
44
|
end
|
|
38
45
|
end
|
|
39
46
|
end
|
|
@@ -1,12 +1,14 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
1
2
|
module SimpleForm
|
|
2
3
|
module Components
|
|
3
4
|
module MinMax
|
|
4
|
-
def min_max
|
|
5
|
+
def min_max(wrapper_options = nil)
|
|
5
6
|
if numeric_validator = find_numericality_validator
|
|
6
7
|
validator_options = numeric_validator.options
|
|
7
8
|
input_html_options[:min] ||= minimum_value(validator_options)
|
|
8
9
|
input_html_options[:max] ||= maximum_value(validator_options)
|
|
9
10
|
end
|
|
11
|
+
nil
|
|
10
12
|
end
|
|
11
13
|
|
|
12
14
|
private
|
|
@@ -32,7 +34,7 @@ module SimpleForm
|
|
|
32
34
|
end
|
|
33
35
|
|
|
34
36
|
def find_numericality_validator
|
|
35
|
-
find_validator(
|
|
37
|
+
find_validator(:numericality)
|
|
36
38
|
end
|
|
37
39
|
|
|
38
40
|
def evaluate_numericality_validator_option(option)
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
module SimpleForm
|
|
3
|
+
module Components
|
|
4
|
+
# Needs to be enabled in order to do automatic lookups.
|
|
5
|
+
module Minlength
|
|
6
|
+
def minlength(wrapper_options = nil)
|
|
7
|
+
input_html_options[:minlength] ||= minimum_length_from_validation
|
|
8
|
+
nil
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
private
|
|
12
|
+
|
|
13
|
+
def minimum_length_from_validation
|
|
14
|
+
minlength = options[:minlength]
|
|
15
|
+
if minlength.is_a?(String) || minlength.is_a?(Integer)
|
|
16
|
+
minlength
|
|
17
|
+
else
|
|
18
|
+
length_validator = find_length_validator
|
|
19
|
+
minimum_length_value_from(length_validator)
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def find_length_validator
|
|
24
|
+
find_validator(:length)
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def has_tokenizer?(length_validator)
|
|
28
|
+
length_validator.options[:tokenizer]
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
# Use validation with tokenizer if version of Rails is less than 5,
|
|
32
|
+
# if not validate without the tokenizer, if version is greater than Rails 4.
|
|
33
|
+
if ActionPack::VERSION::STRING < '5'
|
|
34
|
+
def minimum_length_value_from(length_validator)
|
|
35
|
+
if length_validator && !has_tokenizer?(length_validator)
|
|
36
|
+
length_validator.options[:is] || length_validator.options[:minimum]
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
elsif ActionPack::VERSION::STRING >= '5'
|
|
40
|
+
def minimum_length_value_from(length_validator)
|
|
41
|
+
if length_validator
|
|
42
|
+
length_validator.options[:is] || length_validator.options[:minimum]
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
end
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
1
2
|
module SimpleForm
|
|
2
3
|
module Components
|
|
3
4
|
# Needs to be enabled in order to do automatic lookups.
|
|
4
5
|
module Pattern
|
|
5
|
-
def pattern
|
|
6
|
+
def pattern(wrapper_options = nil)
|
|
6
7
|
input_html_options[:pattern] ||= pattern_source
|
|
7
8
|
nil
|
|
8
9
|
end
|
|
@@ -13,13 +14,13 @@ module SimpleForm
|
|
|
13
14
|
pattern = options[:pattern]
|
|
14
15
|
if pattern.is_a?(String)
|
|
15
16
|
pattern
|
|
16
|
-
elsif pattern_validator = find_pattern_validator
|
|
17
|
-
evaluate_format_validator_option(
|
|
17
|
+
elsif (pattern_validator = find_pattern_validator) && (with = pattern_validator.options[:with])
|
|
18
|
+
evaluate_format_validator_option(with).source
|
|
18
19
|
end
|
|
19
20
|
end
|
|
20
21
|
|
|
21
22
|
def find_pattern_validator
|
|
22
|
-
find_validator(
|
|
23
|
+
find_validator(:format)
|
|
23
24
|
end
|
|
24
25
|
|
|
25
26
|
def evaluate_format_validator_option(option)
|
|
@@ -1,15 +1,16 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
1
2
|
module SimpleForm
|
|
2
3
|
module Components
|
|
3
4
|
# Needs to be enabled in order to do automatic lookups.
|
|
4
5
|
module Placeholders
|
|
5
|
-
def placeholder
|
|
6
|
+
def placeholder(wrapper_options = nil)
|
|
6
7
|
input_html_options[:placeholder] ||= placeholder_text
|
|
7
8
|
nil
|
|
8
9
|
end
|
|
9
10
|
|
|
10
11
|
def placeholder_text
|
|
11
12
|
placeholder = options[:placeholder]
|
|
12
|
-
placeholder.is_a?(String) ? placeholder :
|
|
13
|
+
placeholder.is_a?(String) ? placeholder : translate_from_namespace(:placeholders)
|
|
13
14
|
end
|
|
14
15
|
end
|
|
15
16
|
end
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
1
2
|
module SimpleForm
|
|
2
3
|
module Components
|
|
3
4
|
# Needs to be enabled in order to do automatic lookups.
|
|
4
5
|
module Readonly
|
|
5
|
-
def readonly
|
|
6
|
+
def readonly(wrapper_options = nil)
|
|
6
7
|
if readonly_attribute? && !has_readonly?
|
|
7
8
|
input_html_options[:readonly] ||= true
|
|
8
9
|
input_html_classes << :readonly
|
|
@@ -15,7 +16,7 @@ module SimpleForm
|
|
|
15
16
|
def readonly_attribute?
|
|
16
17
|
object.class.respond_to?(:readonly_attributes) &&
|
|
17
18
|
object.persisted? &&
|
|
18
|
-
object.class.readonly_attributes.include?(attribute_name)
|
|
19
|
+
object.class.readonly_attributes.include?(attribute_name.to_s)
|
|
19
20
|
end
|
|
20
21
|
end
|
|
21
22
|
end
|
|
@@ -1,20 +1,24 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
1
2
|
module SimpleForm
|
|
2
3
|
# Components are a special type of helpers that can work on their own.
|
|
3
4
|
# For example, by using a component, it will automatically change the
|
|
4
5
|
# output under given circumstances without user input. For example,
|
|
5
|
-
# the disabled helper always need a :
|
|
6
|
+
# the disabled helper always need a disabled: true option given
|
|
6
7
|
# to the input in order to be enabled. On the other hand, things like
|
|
7
8
|
# hints can generate output automatically by doing I18n lookups.
|
|
8
9
|
module Components
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
autoload :
|
|
12
|
-
autoload :
|
|
13
|
-
autoload :
|
|
14
|
-
autoload :
|
|
15
|
-
autoload :
|
|
16
|
-
autoload :
|
|
17
|
-
autoload :
|
|
18
|
-
autoload :
|
|
10
|
+
extend ActiveSupport::Autoload
|
|
11
|
+
|
|
12
|
+
autoload :Errors
|
|
13
|
+
autoload :Hints
|
|
14
|
+
autoload :HTML5
|
|
15
|
+
autoload :LabelInput
|
|
16
|
+
autoload :Labels
|
|
17
|
+
autoload :MinMax
|
|
18
|
+
autoload :Maxlength
|
|
19
|
+
autoload :Minlength
|
|
20
|
+
autoload :Pattern
|
|
21
|
+
autoload :Placeholders
|
|
22
|
+
autoload :Readonly
|
|
19
23
|
end
|
|
20
24
|
end
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
1
2
|
module SimpleForm
|
|
2
3
|
class ErrorNotification
|
|
3
|
-
delegate :object, :object_name, :template, :
|
|
4
|
+
delegate :object, :object_name, :template, to: :@builder
|
|
4
5
|
|
|
5
6
|
def initialize(builder, options)
|
|
6
7
|
@builder = builder
|
|
@@ -41,8 +42,8 @@ module SimpleForm
|
|
|
41
42
|
lookups = []
|
|
42
43
|
lookups << :"#{object_name}"
|
|
43
44
|
lookups << :default_message
|
|
44
|
-
lookups << "
|
|
45
|
-
I18n.t(lookups.shift, :
|
|
45
|
+
lookups << "Please review the problems below:"
|
|
46
|
+
I18n.t(lookups.shift, scope: :"simple_form.error_notification", default: lookups)
|
|
46
47
|
end
|
|
47
48
|
end
|
|
48
49
|
end
|