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

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

Returns:

  • (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

Returns:

  • (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, message)
  @errors[property_name] << message
end

#multiple?(property_name) ⇒ Boolean

Determine whether this property can be set more than once. Defaults to true.

Returns:

  • (Boolean)


36
37
38
# File 'lib/selene/component_validator.rb', line 36

def multiple?(property_name)
  self.class.properties[property_name].fetch(:multiple, true)
end

#propertiesObject



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.

Returns:

  • (Boolean)


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

Returns:

  • (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