Module: Padrino::Validation::HTML5
- Defined in:
- lib/padrino/validation/html5.rb,
lib/padrino/validation/html5/version.rb
Defined Under Namespace
Modules: ExtendedHelpers
Constant Summary collapse
- VERSION =
"0.1"
Class Method Summary collapse
Instance Method Summary collapse
Class Method Details
.included(subj) ⇒ Object
31 32 33 34 35 |
# File 'lib/padrino/validation/html5.rb', line 31 def included(subj) subj.field_types.each {|field| define_method(field) {|field, ={}| = inject_validations(field, ); super(field, ) } } end |
.registered(app) ⇒ Object
20 21 22 23 24 25 26 27 28 29 |
# File 'lib/padrino/validation/html5.rb', line 20 def registered(app) builder = Padrino::Helpers::FormBuilder.const_get(app.settings.default_builder) builder.send :include, self Padrino::Helpers::TagHelpers.instance_eval do alias_method :__identity_tag_attributes, :identity_tag_attributes def identity_tag_attributes __identity_tag_attributes + [:readonly, :required, :autofocus, :novalidate, :formnovalidate, :multiple] end end end |
Instance Method Details
#inject_validations(field, options = {}) ⇒ Object
38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 |
# File 'lib/padrino/validation/html5.rb', line 38 def inject_validations(field, ={}) validators = object.class.validators_on(field). group_by(&:kind). map {|kind, validators| [kind, validators.map(&:options).inject(&:merge)] } validators.each do |kind, opts| case kind when :presence .reverse_merge!(required: true) when :length attrs = {} if opts[:is] attrs[:minlength] = attrs[:maxlength] = opts[:is] else attrs[:minlength] = [opts[:minimum], opts[:within].try(:first)].compact.max attrs[:maxlength] = [opts[:maximum], opts[:within].try(:last)].compact.min end .reverse_merge!(attrs.reject {|_, v| v.blank? }) when :inclusion if opts[:in].respond_to?(:first) && opts[:in].respond_to?(:last) attrs = { min: opts[:in].first, max: opts[:in].last } .reverse_merge!(attrs.reject {|_, v| v.blank? }) end end end end |