Project

General

Profile

« Previous | Next » 

Revision bd72aadb

Added by Marc Dequènes over 14 years ago

  • ID bd72aadbfe61c004e7bddae7bb98950d5b669610

[evol] improve config #11 (improved object definition check #2)

View differences:

data/ldap_shadows/schema/object.yaml
"mapping":
type: map
required: true
name: Mapping
mapping:
=:
type: any
lib/ldap_shadows/controller.rb
class ObjectValidator < Kwalify::Validator
## hook method called by Validator#validate()
def validate_hook(value, rule, path, errors)
msg_list = []
case rule.name
when 'Mapping'
ne_params = value.keys.collect{|k| k.to_sym } - ActiveLdap::Base::VALID_LDAP_MAPPING_OPTIONS
unless ne_params.empty?
msg_list << _("nonexisting mapping parameters (%s)") % ne_params.join(", ")
end
when 'RelationMapping'
extra_params = [:type, :object]
if value['type'] == 'belongs_to'
ne_params = value.keys.collect{|k| k.to_sym } - ActiveLdap::Associations::ClassMethods::VALID_BELONGS_TO_OPTIONS - extra_params
unless ne_params.empty?
msg_list << _("nonexisting relation mapping parameters (%s)") % ne_params.join(", ")
end
unless value.has_key? 'many'
msg = "a 'belongs_to' relation needs a 'many' parameter"
errors << Kwalify::ValidationError.new(msg, path)
msg_list << _("a 'belongs_to' relation needs a 'many' parameter")
end
else
ne_params = value.keys.collect{|k| k.to_sym } - ActiveLdap::Associations::ClassMethods::VALID_HAS_MANY_OPTIONS - extra_params
unless ne_params.empty?
msg_list << _("nonexisting relation mapping parameters (%s)") % ne_params.join(", ")
end
unless value.has_key? 'primary_key'
msg = "a 'has_many' relation needs a 'primary_key' parameter"
errors << Kwalify::ValidationError.new(msg, path)
msg_list << _("a 'has_many' relation needs a 'primary_key' parameter")
end
end
end
msg_list.each do |msg|
errors << Kwalify::ValidationError.new(msg, path)
end
end
end
......
obj_name = obj_name.to_sym
obj_def.recursive_symbolize_keys!
obj_mapping = obj_def[:mapping]
klass_name = self.class.object_name_to_klass_name(obj_name)
# create class
......
klass.handle = obj_name
klass.presentation = obj_def[:presentation]
klass.mapper = self
klass.ldap_mapping obj_mapping.reject {|key, val| not ActiveLdap::Base::VALID_LDAP_MAPPING_OPTIONS.include?(key) }
klass.ldap_mapping obj_def[:mapping]
# store definition for later relations processing
@object_definitions[obj_name] = obj_def

Also available in: Unified diff