<?php namespace System\Validation\Rules;

use System\Validation\Rule;

class Presence_Of extends Rule {

	/**
	 * Indicates an empty string should be considered present.
	 *
	 * @var bool
	 */
	public $allow_empty = false;

	/**
	 * Indicates a null should be considered present.
	 *
	 * @var bool
	 */
	public $allow_null = false;

	/**
	 * Evaluate the validity of an attribute.
	 *
	 * @param  string  $attribute
	 * @param  array   $attributes
	 * @return void
	 */
	public function check($attribute, $attributes)
	{
		if ( ! array_key_exists($attribute, $attributes))
		{
			return false;
		}

		if (is_null($attributes[$attribute]) and ! $this->allow_null)
		{
			return false;
		}

		if (trim((string) $attributes[$attribute]) === '' and ! $this->allow_empty)
		{
			return false;
		}

		return true;
	}

	/**
	 * Allow an empty string to be considered present.
	 *
	 * @return Presence_Of
	 */
	public function allow_empty()
	{
		$this->allow_empty = true;
		return $this;
	}

	/**
	 * Allow a null to be considered present.
	 *
	 * @return Presence_Of
	 */
	public function allow_null()
	{
		$this->allow_null = true;
		return $this;
	}

}