2010-02-06 16:21:26 -05:00
|
|
|
module SimpleForm
|
|
|
|
module Inputs
|
|
|
|
class NumericInput < Base
|
|
|
|
def input
|
|
|
|
@builder.text_field(attribute_name, input_html_options)
|
|
|
|
end
|
|
|
|
|
|
|
|
def input_html_options
|
|
|
|
input_options = super
|
2010-06-01 17:37:53 -04:00
|
|
|
input_options[:type] ||= "number"
|
2010-02-06 16:21:26 -05:00
|
|
|
input_options[:size] ||= SimpleForm.default_input_size
|
2010-09-05 11:19:45 -04:00
|
|
|
|
|
|
|
infer_attrs_from_validations(input_options)
|
|
|
|
|
2010-02-06 16:21:26 -05:00
|
|
|
input_options
|
|
|
|
end
|
2010-06-01 17:37:53 -04:00
|
|
|
|
|
|
|
def input_html_classes
|
|
|
|
super.unshift("numeric")
|
|
|
|
end
|
2010-09-05 11:19:45 -04:00
|
|
|
|
|
|
|
protected
|
|
|
|
|
|
|
|
def infer_attrs_from_validations(input_options)
|
|
|
|
obj = @builder.object
|
|
|
|
|
|
|
|
return unless obj.class.respond_to?(:validators_on)
|
|
|
|
|
|
|
|
validators = obj.class.validators_on(attribute_name)
|
|
|
|
num_validator = validators.find {|v| v.is_a?(ActiveModel::Validations::NumericalityValidator) }
|
|
|
|
|
|
|
|
return if num_validator.nil?
|
|
|
|
|
|
|
|
options = num_validator.__send__(:options)
|
|
|
|
|
|
|
|
input_options[:min] ||= options[:greater_than_or_equal_to]
|
2010-09-05 11:27:54 -04:00
|
|
|
input_options[:max] ||= options[:less_than_or_equal_to]
|
2010-09-05 11:19:45 -04:00
|
|
|
end
|
2010-02-06 16:21:26 -05:00
|
|
|
end
|
|
|
|
end
|
2010-09-05 11:19:45 -04:00
|
|
|
end
|