Class: HakumiComponents::Rails::ValidationIntrospection
- Inherits:
-
Object
- Object
- HakumiComponents::Rails::ValidationIntrospection
- Extended by:
- T::Sig
- Defined in:
- lib/hakumi_components/rails/validation_introspection.rb
Class Method Summary collapse
- .email_field?(object, attribute) ⇒ Boolean
- .maxlength(object, attribute) ⇒ Object
- .minlength(object, attribute) ⇒ Object
- .numericality_constraints(object, attribute) ⇒ Object
- .pattern(object, attribute) ⇒ Object
- .required?(object, attribute) ⇒ Boolean
- .url_field?(object, attribute) ⇒ Boolean
Class Method Details
.email_field?(object, attribute) ⇒ Boolean
95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 |
# File 'lib/hakumi_components/rails/validation_introspection.rb', line 95 def email_field?(object, attribute) return false unless has_validators?(object) return true if attribute.to_s.match?(/email/i) format_validator = validators_for(object, attribute).find do |validator| validator.is_a?(ActiveModel::Validations::FormatValidator) end return false unless format_validator opts = format_validator. regex = opts[:with] return false unless regex.is_a?(Regexp) regex.source.match?(/email|@.*\./i) end |
.maxlength(object, attribute) ⇒ Object
21 22 23 24 25 26 27 28 29 30 31 32 33 |
# File 'lib/hakumi_components/rails/validation_introspection.rb', line 21 def maxlength(object, attribute) return nil unless has_validators?(object) length_validator = validators_for(object, attribute).find do |validator| validator.is_a?(ActiveModel::Validations::LengthValidator) end return nil unless length_validator opts = length_validator. value = opts[:maximum] || opts[:is] value.is_a?(Integer) ? value : nil end |
.minlength(object, attribute) ⇒ Object
36 37 38 39 40 41 42 43 44 45 46 47 48 |
# File 'lib/hakumi_components/rails/validation_introspection.rb', line 36 def minlength(object, attribute) return nil unless has_validators?(object) length_validator = validators_for(object, attribute).find do |validator| validator.is_a?(ActiveModel::Validations::LengthValidator) end return nil unless length_validator opts = length_validator. value = opts[:minimum] value.is_a?(Integer) ? value : nil end |
.numericality_constraints(object, attribute) ⇒ Object
68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 |
# File 'lib/hakumi_components/rails/validation_introspection.rb', line 68 def numericality_constraints(object, attribute) return {} unless has_validators?(object) numericality_validator = validators_for(object, attribute).find do |validator| validator.is_a?(ActiveModel::Validations::NumericalityValidator) end return {} unless numericality_validator constraints = T.let({}, T::Hash[Symbol, T.any(Integer, String)]) opts = numericality_validator. min_inclusive = opts[:greater_than_or_equal_to] min_exclusive = opts[:greater_than] max_inclusive = opts[:less_than_or_equal_to] max_exclusive = opts[:less_than] constraints[:min] = min_inclusive.to_i if min_inclusive.is_a?(Numeric) constraints[:min] = min_exclusive.to_i + 1 if min_exclusive.is_a?(Numeric) constraints[:max] = max_inclusive.to_i if max_inclusive.is_a?(Numeric) constraints[:max] = max_exclusive.to_i - 1 if max_exclusive.is_a?(Numeric) constraints[:step] = opts[:only_integer] ? 1 : "any" constraints end |
.pattern(object, attribute) ⇒ Object
51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 |
# File 'lib/hakumi_components/rails/validation_introspection.rb', line 51 def pattern(object, attribute) return nil unless has_validators?(object) format_validator = validators_for(object, attribute).find do |validator| validator.is_a?(ActiveModel::Validations::FormatValidator) end return nil unless format_validator opts = format_validator. regex = opts[:with] return nil unless regex.is_a?(Regexp) regex.source.gsub(/\A(\\A|\^)|(\$|\\z)\z/, "") end |
.required?(object, attribute) ⇒ Boolean
11 12 13 14 15 16 17 18 |
# File 'lib/hakumi_components/rails/validation_introspection.rb', line 11 def required?(object, attribute) return false unless has_validators?(object) validators_for(object, attribute).any? do |validator| validator.is_a?(ActiveModel::Validations::PresenceValidator) || (validator.is_a?(ActiveRecord::Validations::PresenceValidator) if defined?(ActiveRecord)) end end |
.url_field?(object, attribute) ⇒ Boolean
113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 |
# File 'lib/hakumi_components/rails/validation_introspection.rb', line 113 def url_field?(object, attribute) return false unless has_validators?(object) return true if attribute.to_s.match?(/url|website|link/i) format_validator = validators_for(object, attribute).find do |validator| validator.is_a?(ActiveModel::Validations::FormatValidator) end return false unless format_validator opts = format_validator. regex = opts[:with] return false unless regex.is_a?(Regexp) regex.source.match?(/http|https|:\/\//i) end |