/**
  * Validate the model instance
  *
  * @param array   $rules          Validation rules
  * @param array   $customMessages Custom error messages
  * @return bool
  */
 public function validate(array $rules = array(), array $customMessages = array())
 {
     // check for overrides, then remove any empty rules
     $rules = empty($rules) ? static::$rules : $rules;
     foreach ($rules as $field => $rls) {
         if ($rls == '') {
             unset($rules[$field]);
         }
     }
     if (empty($rules)) {
         return true;
     }
     $customMessages = empty($customMessages) ? static::$customMessages : $customMessages;
     if ($this->forceEntityHydrationFromInput || empty($this->attributes) && $this->autoHydrateEntityFromInput) {
         // pluck only the fields which are defined in the validation rule-set
         $attributes = array_intersect_key(Input::all(), $rules);
         //Set each given attribute on the model
         foreach ($attributes as $key => $value) {
             $this->setAttribute($key, $value);
         }
     }
     $data = $this->attributes;
     // the data under validation
     // perform validation
     $validator = Validator::make($data, $rules, $customMessages);
     $success = $validator->passes();
     if ($success) {
         // if the model is valid, unset old errors
         if ($this->validationErrors->count() > 0) {
             $this->validationErrors = new MessageBag();
         }
     } else {
         // otherwise set the new ones
         $this->validationErrors = $validator->messages();
         // stash the input to the current session
         if (Input::hasSessionStore()) {
             Input::flash();
         }
     }
     return $success;
 }