Added a minlength validation on first attempt? Wooo - wish I could put bangs in commit messages *bang*
This commit is contained in:
parent
5f869ecf84
commit
ae526b30c7
|
@ -2,3 +2,4 @@
|
||||||
pkg/
|
pkg/
|
||||||
rdoc/
|
rdoc/
|
||||||
gemfiles/*.lock
|
gemfiles/*.lock
|
||||||
|
/.idea/
|
||||||
|
|
|
@ -15,6 +15,7 @@ module SimpleForm
|
||||||
autoload :Labels
|
autoload :Labels
|
||||||
autoload :MinMax
|
autoload :MinMax
|
||||||
autoload :Maxlength
|
autoload :Maxlength
|
||||||
|
autoload :Minlength
|
||||||
autoload :Pattern
|
autoload :Pattern
|
||||||
autoload :Placeholders
|
autoload :Placeholders
|
||||||
autoload :Readonly
|
autoload :Readonly
|
||||||
|
|
|
@ -0,0 +1,34 @@
|
||||||
|
module SimpleForm
|
||||||
|
module Components
|
||||||
|
# Needs to be enabled in order to do automatic lookups.
|
||||||
|
module Minlength
|
||||||
|
def minlength(wrapper_options = nil)
|
||||||
|
input_html_options[:minlength] ||= minimum_length_from_validation || limit
|
||||||
|
nil
|
||||||
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
|
||||||
|
def minimum_length_from_validation
|
||||||
|
minlength = options[:minlength]
|
||||||
|
if minlength.is_a?(String) || minlength.is_a?(Integer)
|
||||||
|
minlength
|
||||||
|
else
|
||||||
|
length_validator = find_length_validator
|
||||||
|
|
||||||
|
if length_validator && !has_tokenizer?(length_validator)
|
||||||
|
length_validator.options[:is] || length_validator.options[:minimum]
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def find_length_validator
|
||||||
|
find_validator(:length)
|
||||||
|
end
|
||||||
|
|
||||||
|
def has_tokenizer?(length_validator)
|
||||||
|
length_validator.options[:tokenizer]
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
|
@ -21,6 +21,7 @@ module SimpleForm
|
||||||
include SimpleForm::Components::HTML5
|
include SimpleForm::Components::HTML5
|
||||||
include SimpleForm::Components::LabelInput
|
include SimpleForm::Components::LabelInput
|
||||||
include SimpleForm::Components::Maxlength
|
include SimpleForm::Components::Maxlength
|
||||||
|
include SimpleForm::Components::Minlength
|
||||||
include SimpleForm::Components::MinMax
|
include SimpleForm::Components::MinMax
|
||||||
include SimpleForm::Components::Pattern
|
include SimpleForm::Components::Pattern
|
||||||
include SimpleForm::Components::Placeholders
|
include SimpleForm::Components::Placeholders
|
||||||
|
@ -50,7 +51,7 @@ module SimpleForm
|
||||||
enable :hint
|
enable :hint
|
||||||
|
|
||||||
# Usually disabled, needs to be enabled explicitly passing true as option.
|
# Usually disabled, needs to be enabled explicitly passing true as option.
|
||||||
disable :maxlength, :placeholder, :pattern, :min_max
|
disable :maxlength, :minlength, :placeholder, :pattern, :min_max
|
||||||
|
|
||||||
def initialize(builder, attribute_name, column, input_type, options = {})
|
def initialize(builder, attribute_name, column, input_type, options = {})
|
||||||
super
|
super
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
module SimpleForm
|
module SimpleForm
|
||||||
module Inputs
|
module Inputs
|
||||||
class PasswordInput < Base
|
class PasswordInput < Base
|
||||||
enable :placeholder, :maxlength
|
enable :placeholder, :maxlength, :minlength
|
||||||
|
|
||||||
def input(wrapper_options = nil)
|
def input(wrapper_options = nil)
|
||||||
merged_input_options = merge_wrapper_options(input_html_options, wrapper_options)
|
merged_input_options = merge_wrapper_options(input_html_options, wrapper_options)
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
module SimpleForm
|
module SimpleForm
|
||||||
module Inputs
|
module Inputs
|
||||||
class StringInput < Base
|
class StringInput < Base
|
||||||
enable :placeholder, :maxlength, :pattern
|
enable :placeholder, :maxlength, :minlength, :pattern
|
||||||
|
|
||||||
def input(wrapper_options = nil)
|
def input(wrapper_options = nil)
|
||||||
unless string?
|
unless string?
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
module SimpleForm
|
module SimpleForm
|
||||||
module Inputs
|
module Inputs
|
||||||
class TextInput < Base
|
class TextInput < Base
|
||||||
enable :placeholder, :maxlength
|
enable :placeholder, :maxlength, :minlength
|
||||||
|
|
||||||
def input(wrapper_options = nil)
|
def input(wrapper_options = nil)
|
||||||
merged_input_options = merge_wrapper_options(input_html_options, wrapper_options)
|
merged_input_options = merge_wrapper_options(input_html_options, wrapper_options)
|
||||||
|
|
|
@ -151,6 +151,14 @@ class InputFieldTest < ActionView::TestCase
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
test 'build input_field without minlength component use the minlength string' do
|
||||||
|
swap_wrapper :default, custom_wrapper_with_html5_components do
|
||||||
|
with_input_field_for @user, :name, minlength: 5
|
||||||
|
|
||||||
|
assert_select 'input[minlength="5"]'
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
test 'build input_field without readonly component use the readonly string' do
|
test 'build input_field without readonly component use the readonly string' do
|
||||||
swap_wrapper :default, custom_wrapper_with_html5_components do
|
swap_wrapper :default, custom_wrapper_with_html5_components do
|
||||||
with_input_field_for @user, :name, readonly: true
|
with_input_field_for @user, :name, readonly: true
|
||||||
|
|
Loading…
Reference in New Issue