Module: Selene::ComponentValidator
- Included in:
- ComponentBuilder
- Defined in:
- lib/selene/component_validator.rb
Defined Under Namespace
Modules: ClassMethods
Class Method Summary collapse
Instance Method Summary collapse
- #can_add?(property) ⇒ Boolean
- #can_contain?(property) ⇒ Boolean
- #error(property_name, message) ⇒ Object
-
#multiple?(property_name) ⇒ Boolean
Determine whether this property can be set more than once.
- #properties ⇒ Object
-
#required?(property_name) ⇒ Boolean
Determine whether this property is required.
- #valid? ⇒ Boolean
Class Method Details
.included(base) ⇒ Object
17 18 19 |
# File 'lib/selene/component_validator.rb', line 17 def self.included(base) base.extend(ClassMethods) end |
.inherited(subclass) ⇒ Object
21 22 23 |
# File 'lib/selene/component_validator.rb', line 21 def self.inherited(subclass) subclass.properties = properties end |
Instance Method Details
#can_add?(property) ⇒ Boolean
44 45 46 47 48 49 |
# File 'lib/selene/component_validator.rb', line 44 def can_add?(property) if contains?(property.name) && !multiple?(property.name) error(property.name, "property '%s' must not occur more than once" % property.name) end @errors.empty? end |
#can_contain?(property) ⇒ Boolean
40 41 42 |
# File 'lib/selene/component_validator.rb', line 40 def can_contain?(property) true end |
#error(property_name, message) ⇒ Object
51 52 53 |
# File 'lib/selene/component_validator.rb', line 51 def error(property_name, ) @errors[property_name] << end |
#multiple?(property_name) ⇒ Boolean
Determine whether this property can be set more than once. Defaults to true.
36 37 38 |
# File 'lib/selene/component_validator.rb', line 36 def multiple?(property_name) self.class.properties[property_name].fetch(:multiple, true) end |
#properties ⇒ Object
25 26 27 |
# File 'lib/selene/component_validator.rb', line 25 def properties self.class.properties.keys end |
#required?(property_name) ⇒ Boolean
Determine whether this property is required. Defauls to false.
30 31 32 |
# File 'lib/selene/component_validator.rb', line 30 def required?(property_name) self.class.properties[property_name].fetch(:required, false) end |
#valid? ⇒ Boolean
55 56 57 58 59 60 61 62 |
# File 'lib/selene/component_validator.rb', line 55 def valid? properties.select { |property_name| required?(property_name) }.each do |property_name| if !contains?(property_name) error(property_name, "missing required property '%s'" % property_name) end end @errors.empty? end |