Module: Rxhp::AttributeValidator
- Included in:
- CustomElement, HtmlElement
- Defined in:
- lib/rxhp/attribute_validator.rb
Overview
Provide support for limiting or requiring attributes.
Attributes can be:
-
whitelisted (see ClassMethods#accept_attributes)
-
required (see ClassMethods#require_attributes)
Requiring an attribute automaticaly whitelists it.
To use:
-
include
this module -
whitelist/require attributes as appropriate
-
call #validate_attributes! from wherever seems appropriate - such Element#validate!
Subclasses will automatically have validated attributes, and will copy the rules from their parent class. Additional attributes can be accepted or required in subclasses without affecting the parent class.
Defined Under Namespace
Modules: ClassMethods Classes: MissingRequiredAttributeError, UnacceptableAttributeError
Class Method Summary collapse
Instance Method Summary collapse
-
#valid_attributes? ⇒ Boolean
Whether or not the attributes are acceptable.
-
#validate_attributes! ⇒ true
Check if attributes are valid, and raise an exception if they’re not.
Class Method Details
.match?(matcher, name, value) ⇒ Boolean
91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 |
# File 'lib/rxhp/attribute_validator.rb', line 91 def self.match? matcher, name, value case matcher when Array matcher.any? { |x| match? x, name, value } when Hash matcher.any? do |name_matcher, value_matcher| name_match = match_value?(name_matcher, name_from_symbol(name)) if name_match match_value?(value_matcher, value) else false end end else match_value? matcher, name end end |
Instance Method Details
#valid_attributes? ⇒ Boolean
Whether or not the attributes are acceptable.
If you need more details than just “it’s invalid”, call #validate_attributes! instead and examine the exceptions it raises.
47 48 49 50 51 52 53 54 |
# File 'lib/rxhp/attribute_validator.rb', line 47 def valid_attributes? begin self.validate_attributes! true rescue ValidationError false end end |
#validate_attributes! ⇒ true
Check if attributes are valid, and raise an exception if they’re not.
64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 |
# File 'lib/rxhp/attribute_validator.rb', line 64 def validate_attributes! # Check for required attributes self.class.required_attributes.each do |matcher| matched = self.attributes.any? do |key, value| key = key.to_s Rxhp::AttributeValidator.match? matcher, key, value end if !matched raise MissingRequiredAttributeError.new(self, matcher) end end # Check other attributes are acceptable return true if self.attributes.empty? self.attributes.each do |key, value| key = key.to_s matched = self.class.acceptable_attributes.any? do |matcher| Rxhp::AttributeValidator.match? matcher, key, value end if !matched raise UnacceptableAttributeError.new(self, key, value) end end true end |