public override bool Perform(object instance, object fieldValue)
        {
            ActiveRecordValidationBase arInstance = (ActiveRecordValidationBase)instance;
            ActiveRecordModel          model      = ActiveRecordBase.GetModel(arInstance.GetType());

            while (model != null)
            {
                if (model.Ids.Count != 0)
                {
                    _pkModel = model.Ids[0] as PrimaryKeyModel;
                }

                model = model.Parent;
            }

            if (_pkModel == null)
            {
                throw new ValidationFailure("We couldn't find the primary key for " + arInstance.GetType().FullName +
                                            " so we can't ensure the uniqueness of any field. Validatior failed");
            }

            _fieldValue = fieldValue;

            return((bool)arInstance.Execute(new NHibernateDelegate(CheckUniqueness)));
        }
Exemple #2
0
        private void ValidateInstances(object instances, ParameterInfo param)
        {
            Type instanceType = instances.GetType();

            ActiveRecordValidationBase[] records = null;

            if (instanceType.IsArray)
            {
                records = instances as ActiveRecordValidationBase[];
            }
            else if (typeof(ActiveRecordValidationBase).IsAssignableFrom(instanceType))
            {
                records = new ActiveRecordValidationBase[] { (ActiveRecordValidationBase)instances };
            }

            if (records != null)
            {
                foreach (ActiveRecordValidationBase record in records)
                {
                    if (!record.IsValid())
                    {
                        throw new RailsException("ARSmartDispatchController: Error validating {0} {1}\n{2}",
                                                 param.ParameterType.FullName, param.Name, string.Join("\n", record.ValidationErrorMessages));
                    }
                }
            }
        }
        internal static void SaveInstance(object instance,
                                          Controller controller, ArrayList errors, IDictionary prop2Validation)
        {
            if (instance is ActiveRecordValidationBase)
            {
                ActiveRecordValidationBase instanceBase = instance as ActiveRecordValidationBase;

                if (!instanceBase.IsValid())
                {
                    errors.AddRange(instanceBase.ValidationErrorMessages);
                    prop2Validation = instanceBase.PropertiesValidationErrorMessage;
                }
                else
                {
                    instanceBase.Save();
                }
            }
            else
            {
                ActiveRecordBase instanceBase = instance as ActiveRecordBase;

                instanceBase.Save();
            }
        }